前言
在YOLOv4剛出1個月多的時間後,YOLOv5也非常快推出,但是其爭議滿滿.原因是沒有並沒有發布論文,且和YOLOv4來比,創新性不足.
網路架構
YOLOv5架構圖如下.
可以看到官方原始碼給出的網絡文件是Yaml格式,和原本Yolov3、Yolov4中的cfg不同,分別為l、m、s、x,最主要的差別就是第4行和第5行的Depth_Multiple和Width_Multiple,分別代表控制網路的深度和寬度的因子,前者深度主要是控制瓶子领子CSP的數量,後者寬度則是控制卷積核數量。
焦点
從上面架構圖看到,640x640x3輸入進來後會先經過一個Focus模塊,這是YOLOv5新的操作,Focus模塊在YOLOv5中是圖片進入Backbone前,對圖片進行切片操作,具體操作是將圖像相鄰的四個位置進行堆疊,類似於鄰近下採樣,這樣就拿到了四張圖片,四張圖片互補,長的差不多,但是沒有信息丟失,將W和H信息就集中到了通道空間,輸入通變成了原本的4倍,即拼接起來的圖片相對於原先的rgb三通道模式變成了12個通道,最後將得到的新圖片再經過卷積操作,最終得到了沒有信息丟失情況下的二倍下採樣特徵圖,如下圖所示。
以Yolov5s的結構為例,原始608x608x3的圖像輸入Focus結構,採用切片操作,先變成304x304x2的特徵圖,再經過一次32個卷積核的捲積操作,最終變成304x304x32的特徵圖。
CSP
YOLOv5中設計了兩種CSP結構,一種是帶了救援单元(2個Conv模塊+殘差),也就是瓶颈的快捷方式為真实時,另外一種就是將救援单元換成2個Conv模塊,如下圖紅色框框所示有转发器的部分主要是用在主干裡,因為主干為較深的網絡,增加转发器可以增強層與層之間反向傳播的梯度值,避免因為加深而帶來的梯度消失,從而提取到更細粒度的特徵而不必擔心網絡退化。
FPN+PAN
YOLOv5的Neck和YOLOv4中一樣,都採用FPN+PAN的結構,不過在YOLOv5的架構中是參考CSPnet設計的,可以加強網路特徵融合能力,如下圖所示.
镶嵌數據增強
YOLOv5的輸入端採用了和YOLOv4一樣的Mosaic數據增強的方式,之前在我YOLOv4中有詳細介紹,連結在這,這邊就不再介紹了.連結在這
自適應圖片縮放
在常用的目標檢測演演算法中,不同的圖片長寬都不相同,因此常用的方式是將原始圖片統一縮放到一個標準尺寸,再送入檢測網路中.像是下圖對面800×600的影象進行變換。
但如果填充的比較多,則存在信息冗餘,影響推理速度.所以YOLOv5在推理階段,採用縮減黑邊的方式,來提高推理的速度.在原碼Dataets.py的信箱函數中進行了修改,對原始圖像自適應的添加最少的黑邊。如下圖所示,影象上下的黑邊變少了,在推理時,計算量也會減少,也就是目標檢測速度會得到提升.
詳細的步驟如下.
第一步,計算縮放比例,然後選擇最小的那個,選擇为0.52.
第二步,計算縮放後的尺寸,將原始圖片的長寬都乘以剛剛得出的最小的縮放係數为0.52.寬變成了为416.而高變成了为312.
第三步,計算黑邊填充數值,將416-32 1=10 4,得到原本需要填充的高度.再採用Numpy中np.mod取餘數的方式,得到8個畫素,再除以2,即得到圖片上下兩端需要填充的數值.
最後這邊要注意的是,只有在測試,使用模型推理時,才採用縮減黑邊的方式,提高目標檢測,推理的速度,訓練時並沒有使用,還是採用傳統填充的方式.
模块32的原因是YOLOv5經過5次的下採樣總步數為32,所以要計算最小填充黑邊要先計算除以32的餘數。
Yolov5中填充的是灰色,即(114,114,114)。
自適應錨框計算
在Yolo算法中,針對不同的數據集,都會有初始設定長寬的錨框.在網絡訓練中,網絡在初始錨框的基礎上輸出預測框,進而和真實框Ground Truth進行比對,計算兩者差距,再反向更新,迭代網絡參數.
在YOLOv3、YOLOv4中,訓練不同的數據集時,計算初始錨框的值是通過單獨的程序運行的.而YOLOv5中將此功能遷入到代碼中,每次訓練時,自適應的計算不同訓練集中最佳錨框找值.
而YOLOv5配置文件已經有給出原本在Coco數據集上的初始錨框,如下圖所示.
GIOU
YOLOv4是使用Ciou Lost作為目標Bound Box的損失函數,而YOLOv5中則是採用其中的GIOU Lost做Bound Box的損失函數.這邊在我YOLOv4有做詳細的介紹,這邊也不再重複介紹了,連結.連結
网管系统
YOLOv4在DIOU Loss的基礎上採用DIOU Nms的方式,而YOLOv5中仍然採用加權Nms的方式.這邊我之前的文章也有介紹過,就不重複了.
跨網格預測
YOLOv3的正樣本Anchor匹配策略非常粗暴,每個Ground Truth只能有一個Anchor對應,且一個Ground Truth不可能在三個預測層同時進行匹配,這邊可以看我之前YOLOv3的文章,連結.而YOLOv5採用不一樣的匹配策略且同時增加了正樣本锚數目的做法來加速收斂。連結
YOLOv5匹配锚不使用最大值IOS去判斷,而是使用Shape去匹配,也就是該地面真相箱和當前層的锚計算寬高比,如果寬高比例大於設定閾值,則說明該地面真相箱和锚匹配度不夠,將該地面真相箱過濾暫時丟掉,代表在該層預測中認為是背景。
而對於剩下沒有被過濾掉的地面真相框,計算其落在哪個網格內,同時利用四捨五入規則,找出最近的兩個網格,將這三個網格都認為是負責預測該地面真相框的正例,可以發現粗略估計正樣本數相比前YOLO系列,至少增加了三倍。如下圖所示.
總結
YOLOv5在YOLOv4的基礎上添加了一些新的改進思路,使得其速度與精度都得到了極大的性能提升,並且使用起來更方便靈活,透過不同參數設定可以得到不同複雜度的模型.
原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/09/27/yolov5%e8%a9%b3%e7%b4%b0%e8%a7%a3%e8%ae%80/