最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

Yolo改進算法:Poly-Yolo

2021-07-26 17:07 作者:python風控模型  | 我要投稿

論文名稱:Poly-YOLO: higher speed, more precise detection and instance segmentation for YOLOv3

論文地址:https://arxiv.org/abs/2005.13243v2
github:https://gitlab.com/irafm-ai/poly-yolo

????本文很有意思,實用性很強,是本人比較推薦的論文。因為各大算法評價性能都是在比賽數據上測試的,但是在實際項目數據上可能就不太好用了,主要原因是實際項目數據有自己的特點,如果完全照搬,效果可能不那么好。本文所提出的改進版本yolo就是在特定場景下所提出的改進算法,分析問題的思路非常好,值得學習。


01


?yolov3存在的問題

(1) 標簽被重寫問題

圖片

????標簽重寫是指由于yolo特有的網格負責預測bbox的特點,可能會出現兩個物體分配給了同一個anchor,導致僅僅有一個物體被保留負責預測,另一個物體被當做背景忽略了。當輸入分辨率越小,物體越密集,物體的wh大小非常接近時候,標簽重寫現象比較嚴重。如上圖所示,紅色表示被重寫的bbox,可以看出27個物體有10個被重寫了。

????具體來說,以416*416大小的圖像為例,在圖像分辨率隨著卷積下降到13*13的特征圖大小時,這時候特征圖一個像素點的對應是32*32大小的圖像patch。而YOLOV3在訓練時候,如果出現相同兩個目標的中心位于同一個cell,且分配給同一個anchor,那么前面一個目標就會被后面目標重寫,也就是說兩個目標由于中心距離太近以至于在特征圖上將采樣成為同一個像素點的時候,這時候其中有個目標會被重寫而無法進行到訓練當中。

????這種現象在coco數據上不明顯的原因是bbox分布比較均勻,不同大小物體會分配到不同預測層,標簽重寫概率比較低。但是在很多實際應用中,比如工業(yè)界的特定元件檢測時候,物體排布非常緊密,且大小幾乎一致,此時就可能會出現標簽重寫問題了,作者論文指出在Cityscapes數據上該現象也比較明顯。

(2) kmean計算anchor存在的問題

??? yolo系列采用kmean算法聚類得到特定要求的9個anchor,并且以每三個為一組,用于大輸出圖(檢測小物體),中等輸出圖和小輸出圖層(檢測大物體)的默認anchor。可以看出不同大小的物體會被這三組anchor分配到不同預測層進行預測。

????但是這種kmean算法得出的結果是有問題的,在實際項目中也發(fā)現了。前面說過大部分特定場景的目標檢測數據集,并不是和coco自然場景一樣,啥尺度都有,實際項目中大部分物體都是差不多大的,或者說僅僅有特定的幾種尺度,此時采用kmean這一套流程就會出現:幾乎一樣大的物體被強制分到不同層去預測,這個訓練方式對網絡來說非常奇怪,因為物體和物體之間wh可能就差了一點點,居然強制分層預測,這明顯不合理。本文作者生成的仿真數據其實也是這個特點。

????作者論文指出,kmean這種設置,僅僅在:

圖片

情況下采用合理的。其中r是輸入圖片分辨率,例如416。該式子的意思是物體的大小分布是滿足邊界為0到r的均勻分布,也就是說在416x416圖片上,各種大小尺度的bbox都會存在的情況下,kmean做法是合理的。但是可能大部分場景都是:

圖片

即均值為0.5r,標準差為r的物體分布,如果按照默認的kmean算法對anchor的計算策略,那么由于大部分物體都是中等尺寸物體,會出現其余兩個分支沒有得到很好訓練,或者說根本就沒有訓練,浪費網絡。

(3) 仿真分析
????為了說明上面問題,作者假設兩個box:m1和m2;前者與放置在高速公路上的攝像頭的車牌檢測任務相連接,模擬全部是小物體檢測任務,后者與放置在車門前的攝像頭的人檢測任務相連接,模擬全部是大物體檢測任務。對于這樣的任務,我們可以獲得大約

圖片

,因為這些牌將會覆蓋小的區(qū)域,而

圖片

因為人類將會覆蓋大的區(qū)域。

????對于M1場景,基本都是小物體,采用kmean會強制區(qū)分不同大小物體分配到三個層預測,那么就會出現小物體被分配到小輸出特征圖上面訓練,那么首先標簽重寫問題會出現;并且小輸出特征圖檢測小物體是比較困難的,可能會丟失。
????對于M2場景,基本都是大物體,會出現大物體被分配到大輸出特征圖上面訓練,那么會出現由于物體過大在淺層特征圖上檢測效果比較差,也就是常說的語義信息不夠。

????不僅僅有上面存在的問題,我們通常知道物體在哪個尺度檢測,應該要和網絡的輸出感受野相匹配才是最佳的,無數論文已經驗證了這個道理,例如s3fd等等。前面說的大輸出特征圖檢測小物體,小輸出特征圖檢測大物體,也是基于感受野的原則來定義的。作者分析了yolov3三個輸出層的感受野大概是(85 × 85, 181 × 181, 365 × 365)。在物體大小都差不多情況下,強行采用kmean策略分配anchor,明顯就已經不符合感受野的設定了,效果肯定不是最好的。

????作者支持yolov3中反應的high APsmall,但是中等尺度和大輸出物體檢測性能不佳,可能就是由于上面出現的問題導致的。



02

解決辦法

????對于標簽重新問題,沒有啥特別好的辦法,只能通過要么增加輸入圖片分辨率大??;要么增加輸出特征圖大小實現。本文的做法是增加輸出特征圖大小。


圖片


????原始的yolov3,輸入大小是輸出特征圖的8/16和32倍,通過上述數據可以發(fā)現標簽重寫比例蠻高的。而通過增加輸出特征圖大小后可以顯著降低重寫比例。

????而對于kmean聚類帶來的問題,有兩種解決辦法:

  1. kmean聚類流程不變,但是要避免出現小物體被分配到小輸出特征圖上面訓練和大物體被分配到大輸出特征圖上面訓練問題,具體就是首先基于網絡輸出層感受野,定義三個大概范圍尺度,然后設置兩道閾值,強行將三個尺度離散化分開;然后對bbox進行單獨三次聚類,每次聚類都是在前面指定的范圍內選擇特定的bbox進行,而不是作用于整個數據集。主要是保證kmean僅僅作用于特定bbox大小訪問內即可,就可以避免上面問題了。但是缺點也非常明顯,如果物體大小都差不多,那么幾乎僅僅有一個輸出層有物體分配預測,其余兩個尺度在那里空跑,浪費資源。

  2. 就只有一個輸出層,所有物體都是在這個層預測即可??梢员苊鈑mean聚類問題,但是為了防止標簽重寫,故把輸出分辨率調高,此時就完美了。作者實際上采用的是1/4尺度輸出,屬于高分辨率輸出,重寫概率很低。



03

poly-yolo

????基于前面的思想,作者設計的網絡如下:


圖片


  1. ????一些細微的網絡改動就不說了,作者開源了代碼,可以直接看出來。
    網絡方面,為了減少參數量,首先減少了通道數目,同時為了提高性能,引入了SE單元來加強特征

  2. 和yolov3的最大區(qū)別是輸出層是一個,但是也采用了多尺度融合方式。

  3. neck部分提出了hypercolumn+stairstep上采樣操作。其示意圖如下所示:

圖片

????左邊是標準的hypercolumn操作,右邊是作者提出的。實驗表明右邊的方式更好,因為loss更低。

圖片


????通過上述參數設置,作者設計的neck和head較輕,共有37.1M的參數,顯著低于YOLOv3的61.5M,Poly-YOLO比YOLOv3的精度更高,在可訓練參數減少40%的情況下,mAP精度大概也提高了40%。。同時為了進一步提速,作者還設計了lite版本,參數僅僅16.5M,精度和yolov3差不多,

????作者還強調了,本文設計的僅僅是一種思想,如果采用最新的骨架網絡替換,應該可以得到一個更加高效,精度更高的poly yolov3版本。

????對于采用poly yolov3進行實例分割,本文不打算分析,因為我關心的是論文所提出的兩個問題以及解決辦法而已。性能如下:


圖片


????總結下:yolov3由于特殊的網格預測模式,當物體比較密集且大小差不多時候,會存在大量的標簽重寫現象;并且在該場景下基于kmean計算得到的anchor會出現物體預測尺度和感受野不符的問題,導致整個優(yōu)化過程不是最優(yōu)的。針對上述問題,作者提出采用單尺度預測,且維持高輸出分辨率特征圖的策略來解決上述問題。為了加速和進一步提高性能,采用了se單元、hypercolumn+stairstep上采樣特征聚合方式來加強特征提取能力。從而實現了在參數大幅減少情況下,mAP提升解決40%。可以說本文是為了特定場景應用所提出的改進,不一定適合coco這種自然場景物體分別均勻的場景。

轉載:https://mp.weixin.qq.com/s/On-pHCdGg3piTQtDV88kQA


Yolo改進算法:Poly-Yolo的評論 (共 條)

分享到微博請遵守國家法律
威远县| 高雄县| 通榆县| 乌兰察布市| 本溪市| 镇沅| 汝州市| 崇义县| 博野县| 龙州县| 视频| 汝阳县| 马鞍山市| 嘉黎县| 新宁县| 永康市| 五峰| 隆回县| 通渭县| 凤凰县| 滁州市| 馆陶县| 富顺县| 四平市| 大理市| 五河县| 南投市| 上饶市| 奇台县| 巢湖市| 武宁县| 台江县| 繁峙县| 什邡市| 玉田县| 平邑县| 渭南市| 文安县| 新余市| 电白县| 工布江达县|