算力限制場景下的目標檢測實戰(zhàn)淺談

這里是2019年1月18日我在極市直播分享的PPT和文稿。第一次做在線的talk痊远,因為不能像現(xiàn)場一樣和同學們有眼神上的交流肩榕,有點慌刚陡,提前把文案寫了下來。后邊簡單整理如下株汉,口語化偏多筐乳。
直播視頻鏈接:
騰訊視頻:https://v.qq.com/x/page/k08295j2htp.html
B站:http://www.bilibili.com/video/av41036172
Slides 鏈接:百度網(wǎng)盤 提取碼: pk0e
關(guān)鍵詞:調(diào)參經(jīng)驗,邊際效用遞減乔妈,特征空間復雜程度蝙云,對比實驗,深度學習路召,嵌入式勃刨,目標檢測

大家晚上好波材,很榮幸在接受了極市開發(fā)者平臺的邀請,在這里和大家一起分享一些基于深度學習的目標檢測方面的實戰(zhàn)經(jīng)驗身隐,今天分享的題目是:算力限制場景下的目標檢測實戰(zhàn)淺談廷区。
算力限制場景主要是指在嵌入式設備,也就是算力相對比較弱的芯片上面做實時或者準實時的目標檢測贾铝。這個問題在學術(shù)和工業(yè)界一直都是備受關(guān)注的隙轻。并且,在深度學習越來越強調(diào)落地的大背景下垢揩,這個問題也變的越來越突出玖绿。
因為今天的分享是面向極市開發(fā)者平臺的同學們,據(jù)我了解水孩,大家還是比較偏重于實踐镰矿,所以分享中也會相對偏向于實戰(zhàn),更像是一個如何調(diào)參的經(jīng)驗方法論方面的分享俘种。
需要強調(diào)的是秤标,因為不少內(nèi)容缺少系統(tǒng)的數(shù)學和理論基礎,所以必須稱之為淺談宙刘,比如邊際效用遞減曲線苍姜、特征空間復雜程度自提概念都還需要進一步提煉和完善,還希望借此機會可以和大家展開深入討論悬包。

分享之前衙猪,先提出幾個問題,我們帶著這幾個問題來貫穿整個分享布近。
第一組問題垫释,在實踐中,當我們遇到一個具體的任務的時候撑瞧,比如熱門的車輛檢測問題棵譬,它屬于剛體檢測(被檢測物體內(nèi)部不會有形變的情況)。那么预伺,一般需要多大的神經(jīng)網(wǎng)絡計算量订咸,可以滿足一般場景下檢出絕大多數(shù)目標,同時保證出現(xiàn)盡量少的誤報酬诀?當我們需要在嵌入式的低計算能力的硬件平臺上完成這個任務的時候脏嚷,我們應該怎么去完成這個任務?
第二組問題瞒御,如果現(xiàn)在我們面臨的新任務是手勢檢測父叙,也就是柔體檢測(被檢測物體內(nèi)部會發(fā)生形變的情況),剛體檢測任務中面臨的問題顯然是同樣存在的。那么高每,因為我們做過了剛體檢測問題屿岂,經(jīng)驗直接借鑒過來,適用嗎鲸匿?
第三組觸及靈魂的問題來了,既然剛體柔體都搞過一遍了阻肩,那么能不能再隨便來一個新的任務带欢,都可以套用一套相同的方法來完成?也就是大家最關(guān)心的放之四海而皆準的標準“煉丹”方法烤惊。更進一步乔煞,學術(shù)上非常熱門的AutoML 與網(wǎng)絡結(jié)構(gòu)搜索Network Architecture Search,與這個所謂的同一套方法又有什么關(guān)系呢柒室?

我們先看一下目標檢測這個方法在算力限制場景下的基本特點渡贾。谷歌在2016年11月Speed/accuracy trade-offs for modern convolutional object detectors 論文中,有這樣一張coco 檢測問題時所能達到的mAP結(jié)果圖雄右。圖上有當時最熱門的神經(jīng)網(wǎng)絡骨干網(wǎng)和檢測方法空骚,他們在不同的網(wǎng)絡大小下,有的方法能力強擂仍,有的方法耗時短囤屹。可以發(fā)現(xiàn)逢渔,所有方法都沒有超出作者在圖上沿左下右上的一條凸起的虛線肋坚,也就是說,在這里速度和精度是“魚和熊掌不可兼得”的肃廓。同樣智厌,在谷歌2018年7月發(fā)表的MNasNet 論文中,對于MNasNet 和MobileNet-V2的對比盲赊,同樣也展示出來神似的一條曲線铣鹏,不同的是橫軸從GPU時間換成了手機上的預測時間。
在這里角钩,我們借用一個經(jīng)濟學中非常常用的概念吝沫,就是邊際效用遞減曲線來描述這條論文中常出現(xiàn)的曲線。舉一個大家都熟悉的陳佩斯被朱時茂忽悠吃面的例子递礼,當陳佩斯吃掉第一碗面的時候惨险,他的幸福感可以從無到有提升到了七八成,吃完第二碗之后脊髓,可能幸福感就爆棚了辫愉,但是吃完第三碗和第四碗的時候,估計快要吐了将硝,還談何幸福感恭朗。也就是說屏镊,每增加相同的一碗面,陳佩斯獲得的實際收益則越來越小痰腮,甚至變成負的了而芥。
回到我們問題上面,算力就是陳佩斯的面膀值,我們每給目標檢測方法多增加相同量的算力的時候棍丐,所能帶來的精度提升會越來越少,最后微乎其微沧踏,更有甚者歌逢,如果發(fā)生了過擬合,曲線還可能往下跌翘狱,也就是陳佩斯被撐吐了一樣秘案。

這里就可以隨手畫出一條曲線進行簡單的展示了。需要說明的是潦匈,實際的數(shù)據(jù)和曲線只會遵循大體的趨勢阱高,一定不會嚴格擬合。同時历等,這條曲線既不是倒數(shù)讨惩,也不是多項式或是對數(shù)曲線,它究竟是什么數(shù)學公式寒屯,以當前深度學習的研究現(xiàn)狀來說并不可以推導和求解的荐捻。
簡單說,它只是一條輔助線寡夹,那它有什么用呢处面?
首先,他可以幫助我們大體上去了解我們所探索的問題邊界所在菩掏。
其次魂角,當我們設計調(diào)參實驗的時候,可以通過繪制或者在腦子里假裝繪制不同變量條件下的曲線智绸,這條輔助線可以幫助我們來對比變量優(yōu)劣野揪。例如,我們可以在某個變量固定時調(diào)整它的算力瞧栗,當進行少量的實驗之后斯稳,就可以畫出這樣一條趨勢曲線出來了,同理迹恐,調(diào)整該變量的之后就可以再畫一條挣惰,兩條曲線的對比就可以幫助我們判斷該變量的優(yōu)劣。
最重要的,它可以幫助我們明確我們的任務在這個曲線上所處的區(qū)間憎茂,首先珍语,不同的區(qū)間內(nèi)解決問題的方法也不盡相同,不同變量在指定區(qū)間內(nèi)的對比關(guān)系也不盡相同竖幔;同時板乙,當你發(fā)現(xiàn)當前問題所處區(qū)間位于某個變量的曲線上升區(qū),那么這個變量絕對是一個值得發(fā)力重點研究的變量赏枚。

舉一個簡單的例子亡驰,如圖所示,mobilenet-v1和mobilenet-v2饿幅,根據(jù)論文或者自己的實驗,我們只需要將寥寥幾個點繪制上去就可以繪制兩條曲線戒职。這里需要解釋一下栗恩,為了演示方便,圖上的數(shù)據(jù)關(guān)系只是展示了趨勢洪燥。
這里需要特殊說明的是磕秤,并不是所有方法對比圖都是理想的一上一下優(yōu)者恒優(yōu)的,例如捧韵,我們組18年發(fā)表的fast-downsampling mobilenet MobileNet 結(jié)構(gòu)簡單微調(diào)的一點性能提升的方法市咆,在100MFlops 以下的區(qū)間內(nèi),mAP 會高于mobilenet-v1再来,但是超過100MFlops 之后蒙兰,就要弱于mobilenet-v1了。
因此芒篷,我們必須限定任務在曲線上所處的區(qū)間搜变。

算力限制場景本身就是限定任務在曲線上所處的區(qū)間的一個最常見的因素。
眾所周知针炉,硬件本身主要就是芯片的算力是有當前芯片研發(fā)現(xiàn)狀挠他,芯片的價格等等諸多因素決定的。并且篡帕,當場景需求不同時殖侵,相同的硬件條件下的情況也不盡相同。任務如果是實時的镰烧,就必須在30ms 左右計算完畢拢军,當然如果不是實時的,慢一些就沒關(guān)系了拌滋。同時朴沿,在有些場景下還要求不能功耗滿載,那么我們就需要更快的時間算完,例如10ms 等等赌渣。
這里需要說明計算量Flops(浮點運算次數(shù))或者是MAC(加乘數(shù))與實際運行時間之間的關(guān)系:
首先魏铅,由于網(wǎng)絡結(jié)構(gòu)具有不同計算訪存比的特點,導致硬件算力和網(wǎng)絡flops之間無法形成線性對比關(guān)系坚芜,這里可參考:Momenta王晉瑋:讓深度學習更高效運行的兩個視角览芳。比如,在輕量級網(wǎng)絡中很常見的depthwise 卷積中鸿竖,單位取到的數(shù)據(jù)所支撐的計算量小于普通卷積沧竟,也就是計算訪存比小,因此對芯片的緩存訪存需求更大缚忧。
同時悟泵,在目標檢測問題中,除了骨干神經(jīng)網(wǎng)絡花費的時間闪水,檢測頭和nms 也花費了一些時間糕非。例如nms 的數(shù)量是不固定的,這部分的時間開銷和計算量更加無法準確計算球榆。
因此朽肥,如果在測試中直接使用時間對模型進行速度衡量,則必須到設備進行實測持钉,這里還涉及到設備端的如ARM/NOEN衡招、定點算浮點、量化等優(yōu)化每强,是非常復雜的始腾,所以一般情況下,我們都會使用Flops對計算能力進行估算舀射。
因此窘茁,截止目前,我們可以將問題歸約為脆烟,通過曲線的輔助山林,找到最優(yōu)模型和參數(shù),并在有效范圍內(nèi)取最大值邢羔。
最關(guān)鍵的問題來了驼抹,這條曲線該怎么找到呢?這條曲線其實是沒法求的拜鹤,我們會在后邊進行調(diào)參舉例來進行一定的說明框冀,接下來我們再花些時間在我們的邊際效用遞減曲線上面。

首先敏簿,該曲線是廣泛存在的明也。
除去算力宣虾,當橫軸是數(shù)據(jù)量的時候,往往情況下也是可以體現(xiàn)出來類似的邊際效用特點的温数,也就是說當我們在數(shù)據(jù)不足夠充分的時候绣硝,每次增加單位數(shù)量的同分布數(shù)據(jù)時,相同模型相同參數(shù)撑刺,所能提高的精度也是符合邊際效用遞減曲線的鹉胖。
所以,如果在測試中够傍,你發(fā)現(xiàn)增減數(shù)據(jù)對結(jié)果的影響非常大甫菠,那么極有可能你的問題當前處在數(shù)據(jù)量不夠的階段,需要想辦法增加數(shù)據(jù)冕屯。這也就是前面所說的這條曲線可以幫助我們明確問題所在的區(qū)間寂诱。
此外,驗證集和評價標準也不是一成不變的安聘,在其他因素不變的情況下刹衫,相同方法在簡單驗證集下,結(jié)果的數(shù)值上顯然是要優(yōu)于復雜驗證集的搞挣。
關(guān)于訓練集和驗證集的問題我們后邊會再展開講解,我們這里看一下不同任務的情況下音羞,邊際效用遞減曲線之間的對比關(guān)系是怎樣的囱桨?

通過實踐,我們了解到嗅绰,相同算法下舍肠,任務的難度決定了曲線的走向。
那么窘面,在前文提到的車輛和手勢兩個任務翠语,我們能否把任務和曲線進行如圖的對比關(guān)系呢?

先把車輛和手勢放一邊财边,先看:是什么決定了不同任務的區(qū)別呢肌括?直接拋出一個小的直觀的感覺:即特征空間的復雜程度,決定了任務的區(qū)別酣难。暫時我還只能稱之為感覺谍夭,而不是結(jié)論,這里還真不敢下結(jié)論憨募。雖然是感覺紧索,但是建立這樣一種感覺,可能對我們后續(xù)調(diào)參會有一些幫助菜谣。
那么什么是特征空間的復雜程度呢珠漂?這暫時還是一個無法定量描述晚缩,甚至無法準確定義的概念。我們就只看一下什么樣的空間復雜媳危,什么樣的空間簡單吧:
我們都知道深度學習最核心的能力就是對數(shù)據(jù)特征的描述以及泛化荞彼,那么我們再加深一些剛剛這個感覺,看一下數(shù)據(jù)特征具體長什么樣子济舆,在Stanford cs231n課程中曾經(jīng)提到cifar10 的數(shù)據(jù)集中卿泽,如果對每一類圖的采樣并進行平均化的話,可以得到如圖的平均圖,我們直觀的去觀察這個平均圖嘱巾,會發(fā)現(xiàn)湿镀,最容易辨認的是第二類,car第租。
那么車輛檢測就是簡單空間嗎?我們繼續(xù)看下一個例子我纪。

這里是在100張城市數(shù)據(jù)集車輛尾部數(shù)據(jù)中采樣并得到一張平均圖慎宾。可以發(fā)現(xiàn)一整輛車的輪廓已經(jīng)出來了浅悉。再繼續(xù)深入去定性分析的話趟据,因為車輛首先是剛體數(shù)據(jù),其次線條簡單清晰术健,不同車型的部件基本相同汹碱,如后窗、尾燈荞估、牌照咳促、車輪還有車輪下方的陰影區(qū)域。這里面圖是隨機挑選的勘伺,感覺白車有點多哈跪腹,可能是因為白車不容易臟,買的人本來就多吧飞醉?
這里需要注意的是任務需求冲茸,這個需求到底是檢出來車屁股即可,還是說必須分辨出來是顏色車型等具體信息冒掌,甚至需要車輛牌照信息噪裕。因為當任務需求發(fā)生變化時,神經(jīng)網(wǎng)絡需要去描述的特征的量也會隨之發(fā)生變化股毫。

再看一下貨車的膳音。和轎車的大體相同。

好铃诬,我們再看一下人臉數(shù)據(jù)集的平均圖祭陷,和車輛差不多苍凛,人臉的平均圖也差不多出來了一個人,有鼻有嘴兵志,就是看不清醇蝴。但因為數(shù)據(jù)中西方人男性居多,所以我們還能大概看出來是個西方男人的感覺想罕。同理悠栓,如果任務需要區(qū)分人臉的情緒,也就是眼角按价、嘴型的細微變化惭适,這個新的需求對神經(jīng)網(wǎng)絡所需要描述的特征量的要求也就變得非常大了,也就不簡單了楼镐。

繼續(xù)看例子癞志,手勢,貌似隱隱約約能看出來一個勝利V的手勢框产,但是凄杯,這個數(shù)據(jù)集顯然是需要能夠識別出這些手勢的基本含義。直觀看起來秉宿,需要的基礎特征的形狀也是很多的戒突。

現(xiàn)在又要祭出這張經(jīng)典的特征可視化圖了,圖比較小描睦,簡單的說一下妖谴,就是淺層特征基本就是直線和點,之后的每一層都是再對上一層特征進行概率意義上的組合酌摇。
回到特征空間復雜程度的問題上面來,我們再舉一個極端的例子嗡载,mnist 手寫數(shù)據(jù)集中所需要的特征窑多,直觀感覺上就是些直線折線和圈圈,而imagenet 是幾乎要應對整個自然圖像中所能涉及到的方方面面的情況洼滚,需要的特征和特征的組合關(guān)系幾乎是無法想象的埂息。而在實踐中,大家都知道可以讓兩者跑的好的神經(jīng)網(wǎng)絡遥巴,容量相差甚遠千康。
好,我們直觀上現(xiàn)在知道了铲掐,對于一個特定問題拾弃,其實一定程度上可以說它所需要的特征量一般是確定的,當然我們沒法準確的得到具體的值摆霉,神經(jīng)網(wǎng)絡要基本上能匹配上這個量豪椿,才能盡可能的做到精準奔坟。當你減少網(wǎng)絡參數(shù)時,勢必會削減網(wǎng)絡對某些情況的判斷能力搭盾,進而減少精度咳秉。
這里不得不提一下二八定律,即在正常概率的世界中鸯隅,我們一般可能需要20%的精力去處理80%的情況澜建,反之需要80%的精力去處理剩下20%的疑難雜癥。通過經(jīng)驗我們認為蝌以,神經(jīng)網(wǎng)絡大概也是用80%的特征組合關(guān)系去處理了那20%的疑難雜癥情況炕舵,所以如果拋棄部分甚至全部疑難雜癥,可能20%的特征組合關(guān)系就夠用了饼灿。也是為什么邊際效用遞減曲線畫出來是一條向左上方凸出的曲線的原因吧幕侠。

好了,虛的講完了碍彭。結(jié)果遺憾的是晤硕,前面所講的虛的東西,全部都是不能通過數(shù)學公式進行推導的庇忌。
這咋整舞箍?
秀了半天虛的,其實也沒什么特別高明的方法皆疹,就是疏橄。但是怎么設計實驗,也就是說怎么試略就,每次試什么捎迫,試完之后改什么,還是很有文章可以做的表牢。也就是這里所說的通過實驗設計逐步獲得最優(yōu)值窄绒。這也是本次報告要分享的核心點。
其實崔兴,最近研究界大熱的automl 或者是network architecture search 的方法彰导,就是以替代掉人類的這部分調(diào)參過程為目標的。
但是本次報告我還是寄希望于完全通過手工方法來還原調(diào)優(yōu)過程敲茄,通過還原這個調(diào)優(yōu)過程位谋,給大家展示調(diào)優(yōu)過程中的一些小的trick 和機理。這件事雖說未來有可能要失業(yè)堰燎,但是在automl和nas仍存在學術(shù)研究階段的情況下還是很重要的掏父,也可能會幫助我們?nèi)フJ識和研究automl吧。

先再放個虛的框架秆剪,然后一一展開說一下损同。

先說數(shù)據(jù)集翩腐,數(shù)據(jù)集有可能是一個被忽略的因素。為什么這么說呢膏燃,因為我們對學術(shù)界論文的依賴度還是非常高的茂卦,而做論文的思路呢,一般都會使用公開數(shù)據(jù)集和通用評價標準组哩,因為不使用這些你怎么跟同行進行比較呢等龙?同理做比賽也有這樣的問題,雖然比賽已經(jīng)比較貼近實際任務了伶贰,但是也必須有一個公平的評價標準蛛砰,不然排名靠前靠后憑什么呢?
但是在做實際任務的時候黍衙,數(shù)據(jù)集就必須需要適應問題本身的需求泥畅,首先是驗證集。大家都知道琅翻,其實機器學習就好比訓練小學生去應付期末考試位仁。驗證集就是期末考試,日常小朋友練習的題目不管怎樣也得和期末考試差不多方椎,不然一定懵逼聂抢。驗證集做簡單了,數(shù)據(jù)分布上可能沒有覆蓋到實際情況中的大部分情況棠众,也有可能做難了琳疏,對于一些不會出現(xiàn)的情況上花費了太多精力。還有一種情況就是驗證集和訓練集的重復關(guān)系闸拿,小心驗證集達標的時候其實有可能只是過擬合了訓練集空盼。所以這時候沒人給做驗證集,只能靠自己新荤。
訓練集數(shù)據(jù)我注,根據(jù)前文所講的數(shù)據(jù)與mAP的邊際效用關(guān)系,這里肯定是能盡量搞定足夠多的數(shù)據(jù)才是王道迟隅。數(shù)據(jù)量不夠的情況下可能還需要使用一些遷移學習的方法來彌補,這里因為時間關(guān)系就不展開了励七。本文的最后還會對imagenet 等數(shù)據(jù)集對輕量級模型下的遷移學習進行一些補充智袭。
評價標準的重要性在這里也就顯現(xiàn)出來了,一般情況下我們會用通用的目標檢測評價標準(mAP)來描述我們的目標檢測方法掠抬。必須承認吼野,mAP 確實是綜合的描述了一個模型的基本和平均能力,但是它不能同時兼顧漏檢率和誤撿率两波。由于mAP 是一個隨著confidence 下降來同時加入tp和fp繪制曲線并計算總面積的瞳步,因此fp 也就是誤撿的sample 并不會很明顯的體現(xiàn)出來闷哆,針對比較關(guān)注誤撿率的問題,最好還是不要用mAP单起。

好抱怔,我們開始跑了。
一般的嘀倒,我會花一些時間來建立baseline屈留,這個下一頁詳解。
然后開始迭代测蘑,核心思路是使用對照實驗(control experiment)灌危,只改變一個變量,固定其他所有變量碳胳。
既然每次都只能調(diào)整一個參數(shù)與變量勇蝙,那就最好沿著最有可能提高性能的方向調(diào)整,那么哪個是最大的變量呢挨约?這需要熟悉神經(jīng)網(wǎng)絡的原理和研究現(xiàn)狀味混,等等我們具體舉例來說明一下。
這時我們前面講的輔助線可能就能用上了烫罩,幾次實驗之后惜傲,你心目中大概可以形成一個或者多個邊際效用遞減曲線了,就可以估算一下某個變量在上面所處的位置贝攒。嗯盗誊,上升趨勢比較明顯的變量值得著重考慮
所有維度都嘗試之后再重頭逐一嘗試隘弊,因為畢竟每次只調(diào)整一個參數(shù)沒有考慮到參數(shù)和參數(shù)之間的相互作用關(guān)系哈踱。
什么時候停止呢?調(diào)參小能手一般是沒有止境的梨熙,yeah开镣。不過一般也就是驗證集達標,但是前面也提到了咽扇,手頭這個驗證集符合實際情況嗎邪财?要去實際情況跑一跑你的模型了。

剛剛是原則性的套路质欲,現(xiàn)在我們來舉一個例子树埠。
要求如圖所示,根據(jù)我們前面對任務特征空間的描述嘶伟,這個問題應該有可能能在這個量級下完成吧怎憋,我們來試試。

首先我需要一個baseline,雖然我現(xiàn)在要用的是10M 的網(wǎng)絡绊袋,10M 的論文可能不多毕匀,但是我這時還是會先去復現(xiàn)mobilenet-v1,mobilenet-v2癌别,shufflenet-v1/v2皂岔,以及各種坊間反饋還比較優(yōu)秀的所有輕量級網(wǎng)絡結(jié)構(gòu)。
為什么要先做這件事呢规个,除了作為參考系方便進行比較之外凤薛,最大的目的是可以最大限度的保證方法本身、你用的框架等等沒有問題诞仓,如果這時不搞清楚缤苫,未來長期在坑里待著,顯然完成不了任務了墅拭。同時這樣會很容易幫你發(fā)現(xiàn)論文中的細節(jié)部分活玲,論文搞得多的同學都知道,論文不可以沒有創(chuàng)新性谍婉,所以很有可能一篇論文中號稱的自己最核心的算法點在實測中不是對性能提升最優(yōu)的點舒憾,相反,可能論文中會有些很實用但是看起來不是很有創(chuàng)新性的東西穗熬,而你不真的去跑一下镀迂,是不知道的。
另外唤蔗,如果一篇論文已經(jīng)是一兩年前的探遵,這一兩年之中有些其他論文會提出一些有趣的小trick 和小參數(shù)或者小調(diào)整,這些東西有的時候也可以在復現(xiàn)經(jīng)典論文和方法的時候一起揉進去妓柜,例如何凱明提出的fan-in箱季,fan-out參數(shù)初始化方法,就可以應用到其前面就發(fā)表的論文或者項目中去棍掐。
總之藏雏,這是一個磨刀不誤砍柴工的工作,也是一個積累基礎經(jīng)驗的過程作煌。

由于不少論文是分類網(wǎng)的論文掘殴,或者是不同檢測頭做的檢測模型,比如faster-rcnn 兩階段方法粟誓,我們需要換成自己使用的檢測頭奏寨,比如Yolo。這時我就需要再做一個baseline努酸,并獲得自有訓練數(shù)據(jù)集下的檢測結(jié)果。
首先杜恰,我會先固定骨干網(wǎng)參數(shù)获诈,直接檢測部分的參數(shù)進行調(diào)優(yōu)仍源。例如Yolo 和SSD 中如圖所示的這些參數(shù),簡單說原則還是迭代嘗試舔涎,每次只調(diào)整其中一個笼踩。
這里多說一嘴,不管是yolo 還是ssd 亡嫌,他們的anchor 或者priority box 機制嚎于,其數(shù)量也是符合邊際效用遞減曲線的,如yolo v2 論文中的這幅圖挟冠。大家看于购,這曲線無處不在是吧。所以當其數(shù)量適當增加的時候?qū)忍嵘呛苡杏玫闹荆窃谒懔τ邢迗鼍跋乱膊荒芗犹嗬呱驗榭偟膒roposal 會太多,nms 也會變的很多控淡。
另外嫌吠,這里anchor聚類出來的具體長寬,只要大體符合數(shù)據(jù)分布掺炭,就可以了辫诅,不用很精確,每次增加了同分布數(shù)據(jù)的時候也不用重復做聚類涧狮,因為回歸器會自動完成回歸過程的炕矮,不要離的太遠就好。這里不展開了勋篓。
調(diào)整完檢測參數(shù)之后吧享,還要再集中調(diào)整一次數(shù)據(jù)增量參數(shù)。數(shù)據(jù)增量也是非常重要的譬嚣,其實同理钢颂,數(shù)據(jù)增量也是符合邊際效用遞減曲線的,做太多了也就沒啥用了拜银,該增加數(shù)據(jù)還是增加數(shù)據(jù)吧殊鞭。
里其實是可以提出這樣一個問題的,就是這部分參數(shù)為什么在這個階段做尼桶?為什么不在先裁剪出來一個10M 的骨干網(wǎng)再加檢測頭操灿。這里我個人更加傾向于在后續(xù)調(diào)優(yōu)過程中的測試過程更加end2end,因為你的目的就是目標檢測嘛泵督。
同時趾盐,需要注意的是這時的參數(shù)并不是最優(yōu)參數(shù),只是一個起始baseline,未來骨干網(wǎng)確定之后還會再來迭代救鲤。

現(xiàn)在我們要開始裁剪網(wǎng)絡結(jié)構(gòu)了久窟,雖然這部分最前沿的研究工作表示完全可以有NAS來完成。比如Google 2017年的NasNet 和2018年的MNasNet本缠,不過我倒是覺得一般情況下一般人可能也部署不起能快速進行網(wǎng)絡結(jié)構(gòu)搜索的分布式搜索框架斥扛。右圖即為NasNet 搜索出來的網(wǎng)絡結(jié)構(gòu),確實看起來也不像是設計出來的丹锹。
我們還是在baseline 的基礎上逐步手工調(diào)整吧稀颁,可能確實相比搜索達不到最優(yōu),但是因為有跡可循楣黍,有經(jīng)驗的時候還是有可能會比nas 上使用強化學習學出來的過程快一點匾灶。不過這塊不敢說大話,說不好未來有可能就不行了锡凝。
根據(jù)mobilenet-v1 論文粘昨,有幾個方向可以調(diào)整:寬度、深度窜锯、分辨率张肾。
先說寬度,寬度這里是指每一層的輸入輸出的通道數(shù)锚扎。這塊有兩篇比較相關(guān)的論文吞瞪,主要是ADC和AMC,是同一個組做的驾孔。這兩篇論文可以做到逐層選擇最優(yōu)的層寬度芍秆,效果還不錯。這里我們還是跟mobilenet-v1一樣進行等比例的寬度壓縮翠勉,不過有的時候也可能會進行一些相應層的區(qū)別性調(diào)整妖啥。
深度,就是加減層对碌。這里的問題是荆虱,既然是壓縮為什么還要加層,因為可能寬度下來了朽们,計算量已經(jīng)大幅下來了怀读,增加深度還可以在計算量和運行時間上達標。
深度這里還有一個很重要的就是選擇幾個stage 的問題骑脱,一般的分類網(wǎng)都是32x downsampling 菜枷,5個stage,曠視在2018年提出DetNet 中使用了16x downsampling 叁丧,4個標準stage啤誊。這樣的好處是岳瞭,224x224 輸入下檢測頭的featuremap 是14x14 的,可以兼顧細節(jié)和語義蚊锹,同時速度也不慢寝优。
對于語義信息和細節(jié)信息保持更好的檢測方法,F(xiàn)PN 是個不錯的選擇枫耳,但是FPN 在算力限制的條件下略顯笨重,實時運行壓力有點大孟抗。
對于分辨率迁杨,我們則大膽的假設這是一個可以暫時忽略的維度,原因是高分辨率可能帶來的只是小目標和邊框精度的提升凄硼。一般的铅协,可以在一個可行的分辨率下面專注于其他超參數(shù)的調(diào)整。
這里還會涉及一些其他微調(diào)摊沉,例如使用其他形狀或者大小的卷積核狐史,提升感受野等。例如有孔卷積和5x5 卷積说墨。不過有孔卷積在移動設備的性能一般般骏全。

接下來就是在各種調(diào)整中找一個最優(yōu)的tradeoff 點了,如圖是我在mobilenet-v2 這個網(wǎng)絡結(jié)構(gòu)上嘗試的結(jié)果尼斧,嘗試了一些不同寬度姜贡、深度和微調(diào)結(jié)構(gòu)等調(diào)整。左半側(cè)的點基本是3/8這個寬度的棺棵,右半側(cè)的點是3/4這個寬度的楼咳。
箭頭指向的是簡單按stage裁剪完深度之后的baseline。
舉個小例子烛恤,這里針對mobilenet-v2 有一個小的點是我著重去調(diào)整的母怜,就是1/4 這個尺寸下,第一個bottleneck極小只有4缚柏,是否這個值太小會導致對特征的描述太弱苹熏,而調(diào)大它對網(wǎng)絡整體計算量影響并不大,則可以嘗試船惨。
這里總結(jié)一下柜裸,簡單說就是在當前狀態(tài)找一個最需要調(diào)整的維度,有哪些維度就靠經(jīng)驗和他山之石了粱锐。另外疙挺,一般情況下,如果某個變量會明顯提高怜浅,那么就著重優(yōu)化一下它唄铐然。
而哪一個是最需要調(diào)整的呢蔬崩,就是在邊際效用遞減曲線上上升趨勢比較明顯的變量就是最需要調(diào)整的變量。
如果靠經(jīng)驗都想不出的時候搀暑,那就隨便挑一個沥阳,因為真的可能有奇效哦。
其實我的感覺是自点,這個人肉搜索過程其實完全可以看做是一個隨機梯度下降的過程桐罕,每次自己都是用自己的評價函數(shù)找到了一個最佳維度然后往最優(yōu)迭代。
并且有的時候嘗試的調(diào)整可以超出預期的值一定范圍桂敛,例如裁窄網(wǎng)絡之后加深的時候可以超量多加一些層功炮,看看趨勢。這個就可以好比是使用大的學習率或者時模擬退火算法了术唬。
而人肉調(diào)整的好處是薪伏,我不需要每次都按相同的學習率調(diào)整,有的時候可以走一大步粗仓,節(jié)省不少迭代次數(shù)嫁怀。

好,好不容易找?guī)讉€模型借浊,但是事情還沒完塘淑,現(xiàn)在需要翻回頭去在現(xiàn)在的結(jié)構(gòu)上,再次調(diào)整之前的參數(shù)了蚂斤。而在這些參數(shù)確定之后朴爬,還要再次回頭把挑出來的網(wǎng)絡結(jié)構(gòu)再驗證一次。因為這里存在多變量聯(lián)合作用影響結(jié)果的情況橡淆,以及評價標準缺陷或者訓練過程隨機因素導致的偶然因素召噩。不過這里的工作量相比之前已經(jīng)不大了,因為前面已經(jīng)排除掉了一些明顯不行的選項嘛逸爵。
最后還要通過任務本身的實際測試去根據(jù)實測問題調(diào)整驗證集具滴。如果有問題還要再回去前面某個點上再調(diào)一遍。

剛剛的例子暫時告一段落吧师倔,現(xiàn)在拋出第二個問題构韵,畢竟預告里面提了要說一說,其實答案相比大家心中已經(jīng)有了答案趋艘。
根據(jù)之前的背景疲恢,這兩個問題中數(shù)據(jù)特征空間差異是巨大的,所以瓷胧,其實兩個問題不可能直接進行遷移學習显拳,但是,這里方法論是適用的搓萧,這里偷個懶杂数,就不再展開介紹如何重新適配了一遍了宛畦,相信有了第一個任務的經(jīng)驗,這個任務做起來并不難揍移,迭代次數(shù)也會大幅下降次和。
而通過講解,相信開篇的問題也可以得到一定的解答那伐。

總結(jié)一下踏施。
首先,基礎知識很重要罕邀,需要掌握大量的基礎性調(diào)參經(jīng)驗读规,這里強烈推薦大家去查閱學習曠視大神魏秀申的博客
其次燃少,需要嚴格做到對比實驗方法,幫助自己準確獲得這一次調(diào)整帶來的性能提升铃在,并就此思考這次調(diào)整所帶來改變的原因阵具。因為一旦有多維參數(shù)發(fā)生變化,就很難確定到底是哪一維的問題定铜,不能準確的確定原因阳液。另外,這里雖然排除了多維參數(shù)交叉作用的成分揣炕,但是可以通過螺旋迭代方法進行彌補帘皿。
特別需要提醒大家的是,精細的實驗設計會導致嘗試路徑和次數(shù)很長畸陡,非常需要耐心鹰溜。這時是很有必要先大膽降維,避免多個因素不知從何下手丁恭;而遇到瓶頸時則可以大膽猜測并假設問題曹动,小心設計實驗進行驗證,很大概率會有驚喜牲览;同時可以期待一下可以帶來驚喜的bug墓陈,就是寫錯了但是帶來了好結(jié)果的bug。
最后第献,輔助性的工作/工具至關(guān)重要贡必,是保證快速迭代的基礎。所以選擇一個方便上手的框架至關(guān)重要庸毫,維護框架的細節(jié)也非常重要仔拟。這里值得建議的是,能用多卡加速就用多卡加速飒赃,然后有必要關(guān)注一下硬盤讀寫瓶頸蜗帜,建議換SSD固態(tài)硬盤捻激。不過有一點值得慶幸批钠,小模型的單模型訓練速度很快,多因素嘗試的時候兑徘,迭代速度還可以接受。
最后羡洛,一個良好的筆記軟件以及使用習慣可以幫你梳理嘗試過程中的邏輯和細節(jié)挂脑。不然,間隔幾個小時的訓練工作完成之后欲侮,只怕你已經(jīng)忘記上次調(diào)整的是什么了崭闲。

歡迎大家來信交流,zzningxp@gmail.com威蕉,^v^ ^v^


后邊回答環(huán)節(jié)問題較多刁俭,回答的時間比較倉促,這邊挑三個出來簡單再說一下韧涨。

第一是關(guān)于超參數(shù)方面的牍戚,也就是學習率batch size,iteration等等超參數(shù)的配置虑粥。這里也是需要嚴格的對比實驗設計來嘗試的如孝。同時,超參數(shù)是一般情況下變化不大娩贷,總的嘗試次數(shù)(batchsize * iteration)基本是隨著數(shù)據(jù)集總量來的第晰。所以一般確定了的超參數(shù),在數(shù)據(jù)量變化不大的時候可以保持不動彬祖。

第二是關(guān)于檢出率和召回率如何兼顧茁瘦?這個問題現(xiàn)場時候我理解錯了,講的更多的是如何挑選一個好的評價標準储笑。事實上腹躁,如果回到本文所最常提到的邊際效用遞減曲線來說,兼顧檢出率和召回率南蓬,就是找到一個曲線最靠上的模型纺非。具體怎么找到這個模型,就是文中所講的方法論來做了赘方。

第三是輕量級模型下烧颖,用imagenet預訓練有沒有意義?回到特征空間的背景窄陡,因為輕量級模型的網(wǎng)絡結(jié)構(gòu)容量本身較小炕淮,所能容納的特征量不大。但是imagenet的數(shù)據(jù)集特征空間非常大跳夭,遠超了輕量級模型的能力涂圆。會導致預訓練模型中對特征的描述和目標問題領(lǐng)域相距過大们镜,預訓練學出來的特征后邊都會被新問題訓練過程中覆蓋掉。所以润歉,數(shù)據(jù)不夠時合理的解決方法是模狭,可以使用特征相比比較相似的數(shù)據(jù)集進行預訓練,例如車輛檢測問題中踩衩,數(shù)據(jù)量不夠嚼鹉,可以使用kitti、bdd100k等數(shù)據(jù)集進行一定的遷移工作驱富。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末锚赤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子褐鸥,更是在濱河造成了極大的恐慌线脚,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叫榕,死亡現(xiàn)場離奇詭異浑侥,居然都是意外死亡,警方通過查閱死者的電腦和手機翠霍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蠢莺,“玉大人寒匙,你說我怎么就攤上這事□锝” “怎么了锄弱?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長祸憋。 經(jīng)常有香客問我会宪,道長,這世上最難降的妖魔是什么蚯窥? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任掸鹅,我火速辦了婚禮,結(jié)果婚禮上拦赠,老公的妹妹穿的比我還像新娘巍沙。我一直安慰自己,他們只是感情好荷鼠,可當我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布句携。 她就那樣靜靜地躺著,像睡著了一般允乐。 火紅的嫁衣襯著肌膚如雪矮嫉。 梳的紋絲不亂的頭發(fā)上削咆,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天,我揣著相機與錄音蠢笋,去河邊找鬼拨齐。 笑死,一個胖子當著我的面吹牛挺尿,可吹牛的內(nèi)容都是我干的奏黑。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼编矾,長吁一口氣:“原來是場噩夢啊……” “哼熟史!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起窄俏,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤蹂匹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后凹蜈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體限寞,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年仰坦,在試婚紗的時候發(fā)現(xiàn)自己被綠了履植。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡悄晃,死狀恐怖玫霎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情妈橄,我是刑警寧澤庶近,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站眷蚓,受9級特大地震影響鼻种,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沙热,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一叉钥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧篙贸,春花似錦沼侣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春轧膘,著一層夾襖步出監(jiān)牢的瞬間钞螟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工谎碍, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鳞滨,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓蟆淀,卻偏偏與公主長得像拯啦,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子熔任,可洞房花燭夜當晚...
    茶點故事閱讀 44,614評論 2 353

推薦閱讀更多精彩內(nèi)容