本文是簡單介紹計算能力受限場景下的目標檢測第二部分,前文請看:

飄哥:簡單介紹計算能力受限場景下的目標檢測(一)?

zhuanlan.zhihu.com
圖標

那麼硬體本身的算力限制就是線值任務所處區間的最大因素:

意思是我們只能在上圖框住的範圍內去開展探索工作,眾所周知,硬體本身的算力就是最大的瓶頸,並且在一些場景的需求下,相同硬體俄會發生硬體問題的變化,比如說任務是實時的,就必須在30ms 左右或者更短的時間內計算完畢,如果不是要求實時的,慢一些就沒關係了。同時,在有些場景下還要求功耗不能滿載,那麼我們就需要更快的時間算完,甚至需要在10ms內把單一幀計算完畢。

另外由於網路結構具有不同計算訪存比的特點,導致硬體算力和網路flops((FloatOperationsPerSecond):每秒浮點運算量,是衡量吞吐率的一個單位)之間無法形成線性對比關係,也就是說在Depthwise(DW)卷積下,因為我每次獲取的一定數據量,它所支撐的計算量比普通卷積計算小,因此對晶元本身的緩存訪存需求更大。

在目標檢測問題中,因為總體的時間消耗=骨幹網時間+檢測頭時間+nms時間,因為nms裡面要排序,不容易做並行加速,這部分的時間開銷和計算量,也就是flops的時間是沒有辦法直接做線性映射的,所以我們平時在測試中想去衡量一個方法的實際開銷的話,就必須要用到設備的實測,這裡還涉及到設備本身的像NOEN向量加速、定點算浮點、量化等優化,是非常複雜的,所以一般情況下,都會用Flops對計算能力進行估算。

截止到現在,我們可以將問題歸約為,通過曲線的輔助,找到最優模型和參數,並在有效範圍內取最大值。看起來很簡單,但是問題的關鍵是,曲線如何找到?我們會在後邊進行調參舉例來進一步說明,接下來再花些時間在邊際效用遞減曲線上面,看看其他產品是否還具備有相同的特點。

首先邊際效應遞減曲線本身是廣泛存在。除去算力,當橫軸是數據量的時候,往往情況下也是可以體現出來類似的邊際效用遞減的特點,也就是說當我們在數據不足夠充分的時候,每次增加單位數量的同分布數據時,相同模型相同參數,所能提高的精度也是符合邊際效用遞減曲線的。因為我們知道數據是有監督深度學習方法的基礎,隨著數據的增加所能到的最優解是有極限的。

此外驗證集和評價標準也不是一成不變的,我們是一個實際問題,在其他因素不變的情況下,相同方法在簡單驗證集下,結果的數值上顯然是要優於複雜驗證集的。關於訓練集和驗證集的問題我們後邊會再展開講解,

我們這裡看一下不同任務的情況下,邊際效用遞減曲線之間的對比關係是怎樣的?通過實踐我們會了解到,相同演算法下,任務的難度決定了曲線的走向。難度是怎麼定義的呢?就是一個比較難的問題。

前面提到了車輛和手勢兩個任務,我們能否把任務和曲線進行如圖的對比關係呢?所以問題就變成了是什麼決定了任務的區別?

我們先拋出一個小的直觀感受,我們認為是特徵空間的複雜程度,即特徵空間的複雜程度,決定了任務的區別。如圖所示:

簡單空間一定比複雜空間所體現出來的map要高,現在問題是什麼是特徵空間的複雜程度呢?

這顯然還是一個無法定量描述的概念,所以這隻能是一種感覺,而不是結論,我們不敢下結論,因為缺少理論的支持。但是有一種感覺可能對調參有幫助,那問題又來了:什麼是空間複雜,什麼是簡單空間。

我們都知道深度學習最核心的能力就是對數據特徵的描述以及泛化,那麼我們看一下數據特徵長什麼樣子,

上面是李飛飛教授在Stanford cs231n課程中曾經提到cifar10 的數據集中,對每一類圖的採樣並進行平均化的過程,可以得到如圖的平均圖,我們直觀的去觀察這個平均圖,會發現,有一類很容易辨認出來,沒有上圖解釋很容易辨認的是第二類,car。

那麼車輛檢測就是簡單空間嗎?我們繼續看下一個例子。

這是在100張車輛尾部數據採樣得到的一張平均圖。其實右邊平均圖裡面,基本可以發現一整輛車的輪廓了。再繼續深入去定性分析的話,因為車輛首先是剛體數據,其次線條簡單清晰,不同車型的部件基本相同,如後窗、尾燈、牌照、車輪還有車輪下方的陰影區域。這裡面圖是隨機挑選的,感覺白車有點多,會感覺是因為白車不容易臟,買的人本來就多吧?

這裡需要注意的是任務需求,這個需求到底是檢出來車屁股即可,還是說必須分辨出來是車是什麼牌子的,什麼車型,三箱還是兩廂,是長城還是賓士等具體信息,我們是不是還要甚至把車輛牌照信息提取出來,還有公交車是幾路車檢測出來。當任務需求發生變化時,神經網路需要去描述的特徵的量也會隨之發生變化。

下面我們再來看貨車的情況:

上圖展示的是各種各樣的貨車,在右邊平均圖中也是出現一輛大貨車,比剛才的兩廂車還簡單一些,比如說有很奇怪的車:拉樹的車拉車的車,情況就會很複雜。

我們再看一下人臉數據集的平均圖和車輛差不多,基本上可以看出一個人,有鼻子有嘴,但是看不清人臉平均圖,數據中西方人男性居多,所以我們還能大概看出來是個西方男人的感覺。同理,任務需要區分人臉的情緒,就需要把眼角、嘴型的細微變化提取出來,這個新的需求對神經網路所需要描述的特徵量的要求也就變得非常大了,也就不簡單了。

我們在看一下手勢平均圖,左邊是數據集的來源:

右邊隱隱約約能看出來一個勝利V的手勢,數據集的基本需求是手勢是v還是3,在這種情況下把手勢識別出來,對基礎的手的形狀的辨別能力要求非常高。

我們不得不又要祭出這張經典的特徵可視化圖了,圖比較小:

簡單的說左邊layer1這一層的簡層特徵就是就是直線和點,細微的曲線,之後的每一層都是再對上一層特徵進行概率意義上的組合。

回到特徵空間複雜程度的問題上面來,是我提出沒有太多數學理論基礎的概念。

我們在舉個例子,就是下面minst手寫數據集:

mnist 手寫數據集中所需要的特徵,直觀感覺上換成直線折線和圈圈就夠了,但是換成imagenet 是幾乎要應對整個自然圖像中所能涉及到的方方面面的情況,需要的特徵和特徵的組合關係幾乎是無法想像的。所以在minst能用,imagenet不能用,imagenet只能和 resnet才能完成。在實踐中,大家都知道讓兩者跑的好的神經網路,容量相差甚遠。我們直觀上現在知道了,對於一個特定問題,其實說它所需要的特徵量一般是確定的,只是我們沒法準確的得到一個具體的值,神經網路如果要基本上能匹配上這個量,才能儘可能的做到精準。當你減少網路參數時,勢必會削弱網路對某些情況的判斷能力,進而降低整體精度。

這地方扯遠一點,提一下二八定律,即在正常概率的世界中,我們一般可能需要20%的精力去處理80%的情況,反之需要80%的精力去處理剩下20%的疑難雜症。通過經驗我們認為,神經網路大概也是用80%的特徵組合關係去處理了那20%的疑難雜症情況,所以如果拋棄部分甚至全部疑難雜症,可能20%的特徵組合關係就夠用了。也是為什麼邊際效用遞減曲線畫出來是一條向左上方凸出的曲線的原因吧。

上面把虛的東西講完,很遺憾,前面講的所有東西都不能通過數學公式推導,但是我們相信大家有一定的實戰經驗。

這裡沒有特別高明的辦法 ,簡單說就是。就是通過實驗設計逐步獲得最優值,但是怎麼設計實驗,也就是說我們怎麼試,每次試什麼,試完之後改什麼,還是很有文章可以做的。也就是這裡所說的通過實驗設計逐步獲得最優值。這也是本文的核心點。其次,最近研究界大熱的automl 或者是network architecture search 的方法,就是以替代掉人類的這部分調參過程為目標的。但是本文我還是寄希望用完全通過手工方法來還原一次調優過程,通過還原這個調優過程,給大家展示調優過程中的一些小的trick 和機理。這件事雖說未來有可能被automl替換掉導致失業,但是在automl和mnas依舊是仍處在學術研究階段的情況下,我們來展示一次手動調優過程還是比較重要的,同時幫助我們去認識和研究改進automl。

謝謝閱讀,請看:

飄哥:簡單介紹計算能力受限場景下的目標檢測(三)?

zhuanlan.zhihu.com圖標飄哥:簡單介紹計算能力受限場景下的目標檢測(四)?

zhuanlan.zhihu.com
圖標

推薦閱讀:

相关文章