文章是去年的督怜,但是感覺思路很清晰,被說服了潮模,覺得超牛逼亮蛔。之前沒有好好看,真的是打臉max擎厢。還是要好好看論文啊,不要就聽名字辣吃。
這篇文章主要是對v1的改進动遭。
思考向,flops是衡量一個model速度的唯一考量么神得? 當然不是啦厘惦,還有計算平臺以及內(nèi)存訪問代價(memory access cost, MAC)等等等。所以呢哩簿,就有了v2,并且提出了一些設(shè)計模型的通用準則宵蕉。
現(xiàn)有的度量計算復(fù)雜度的指標是flops,也就是multiply_adds的數(shù)量节榜,其實是一個間接的指標羡玛,可以近似的去估計實際速度但不是直接指標。比如說宗苍,mv2和nasnet_a的flops是同一個量級的稼稿,但是mv2的速度卻更快。所以說讳窟,不能將flops作為唯一模型設(shè)計的度量指標让歼,這樣往往會導(dǎo)致次優(yōu)解。
速度和flops之前的差異可以總結(jié)為如下兩個原因丽啡。1.flops并沒有考慮到一些對模型速度影響很大的因素谋右。比如內(nèi)存訪問開銷,在有牛逼GPU的時候很可能成為瓶頸补箍,還有模型的并行程度改执,2.和平臺的關(guān)系 浦徊,不能理所當然的認為33是11的九倍,因為cudnn有優(yōu)化天梧。
因此盔性,在設(shè)計一個輕量級網(wǎng)絡(luò)的時候,不能只看理論計算量呢岗,要看實際速度冕香,并且要根據(jù)特定的計算平臺來設(shè)計。
不同平臺上后豫,耗時操作占比是不一樣的悉尾,所以一定要考慮平臺。
下面插入的是張祥雨博士講座的PPT挫酿,思路真的是超級清晰构眯,就是圖不清晰,畢竟是視頻截出來的早龟。
影響模型執(zhí)行速度的因素:
1.理論計算量最重要 也就是控制flops
2.計算訪存比 訪存比是線性增長 要專門考慮訪存比
3.模型的并行度 碎片化多了之后各個操作會有依賴惫霸,會有很多內(nèi)存讀寫操作
4.設(shè)備特性 比如ARM
高性能網(wǎng)絡(luò)設(shè)計的指導(dǎo)準則
1.輸入輸出通道數(shù)接近 訪存比最大
MAC的計算
其實特征占用的空間 以11卷積為例,輸入輸出的特征圖大小為w,h 則占用的內(nèi)存為 wh(c1+c2)+c1c211 flops B = hwc1c21*1葱弟,所以MAC與B可以表示為如下關(guān)系壹店,怎么推的我就不清楚了
2.分組卷積要慎用 實現(xiàn)起來稍微困難,而且訪存比很尷尬芝加,因為不符合第一條的原則硅卢,輸入輸出通道在算的時候?qū)嶋H是有一個G的倍數(shù)關(guān)系的。
3.減少網(wǎng)絡(luò)碎片
4.逐元素運算的開銷不可忽視 雖然是搬運的操作
提出v2 v2就符合以上原則
還有特征重用
檢測好藏杖,但是分割不行将塑,主要是upsample的策略。