## Yolo v1 1. 沒有使用anchor. 2. 每個cell負責預測2個bbox. 3. 輸出:==(7 x 7 x (B x 5 + C))== ![](https://hackmd.io/_uploads/S1hUaY-An.png) 5. 損失函數: ![](https://hackmd.io/_uploads/r149wKb0n.png) 4. 網路架構: ![](https://hackmd.io/_uploads/ByB3DtbAn.png) ## Yolo v2 1. 有使用anchor. (mAP降低,但是recall提高). 2. 網路都為捲積網路. 3. 輸出:==(13, 13, K, 5 + C)==. 4. 改進: * ==**Batch Normalization**==: 可增加2%mAP. * ==**High Resolution Classifie**==: 多尺度訓練網路,每10個epoch後隨機將圖片.resize到320x320、352x352、...608x608,最後下採樣32倍,強制網路去學習多種尺度的圖片. 可增加4%mAP. * ==**Anchor**==: 使用k-means預先找出適當的bbox. 下降了0.3mAP,但是recall提高7%. 5. 損失函數: ![](https://hackmd.io/_uploads/HkrS0Fb0h.png) 6. 網路架構: ![](https://hackmd.io/_uploads/B1zv0KbCn.png) ## Yolo v3 1. 改進: * ==從3個不同大小的feature map去預測物體,在較前面的feature map用較小的anchor box,在最後面的feature map用較大的anchor box==. * ==骨幹網路加入殘差==. 2. 網路架構: ![](https://hackmd.io/_uploads/HJDy3iWR3.png) ## Yolo v4 1. 改進: * ==CSP網路:== 融合高低尺度特徵 ![](https://hackmd.io/_uploads/BkfyN9W02.png) * ==Weighted-Residual-Connections (WRC):== 一般殘差網路:![](https://hackmd.io/_uploads/H1-jw9b03.png) 加權殘差網路:![](https://hackmd.io/_uploads/rJ12vcbCh.png) * ==Mish-activation:== 函數較平滑,梯度不會劇烈變化 ![](https://hackmd.io/_uploads/SkzlYqZR3.png) * ==Cross mini-Batch Normalization (CmBN):== 一般的Batch Normalization適合用在batch size較大時,一旦batch size太小反而會造成訓練不穩定,通過跌代紀錄前幾個batch的均值和方差,來推估更正確的的均值和方差. * ==使用CIou來計算位置損失:== 原本計算損失方式是直接利用預測的x、y、w、h來去計算l2 loss,這樣變成將每個變數都是獨立的,並沒有考量到物體的完整性. 而純粹利用Iou的話,在沒有與真實框重疊的情況下沒辦法提供損失. + GIou: ![](https://hackmd.io/_uploads/rJ12A9-R3.png) ![](https://hackmd.io/_uploads/r1Qp0c-C3.png) + 傾向於先增大預測框的大小,造成訓練緩慢 ![](https://hackmd.io/_uploads/SkQY1jWRn.png) + 若預測框剛好在目標框內部,此時 GIOU loss 與 IOU loss 的值一樣,無法區分相對位置。 ![](https://hackmd.io/_uploads/HJpVeob02.png) + DIou:加入距離懲罰,可以加速收斂 ![](https://hackmd.io/_uploads/Hk7DljW0n.png) ![](https://hackmd.io/_uploads/SJONijWA2.png) * ==DropBlock:== 以區塊的方式進行dropout,強制網路學習特定部分的特徵 ![](https://hackmd.io/_uploads/SyKaliWA3.png) * ==Mosaic:== 一次讀取4張照片各自進行裁切和resize後拼接在一起 ![](https://hackmd.io/_uploads/rkN8fjZC2.png) * ==Self-adversarial-training (SAT):== 分為兩次反向傳播,第一次反向傳播時不更改任和網路權重,**只更改圖像**,之後再將改變後的圖像輸入給網路進行訓練,這樣的效果類似於把原本網路注重的地方進行更改,強制網路關注其他的細節 ![](https://hackmd.io/_uploads/H1IiIibAn.png) * ==網路架構:== ![](https://hackmd.io/_uploads/Hk_72iWC3.jpg) ## Yolo v5 1. ==Focus layer:== ![](https://hackmd.io/_uploads/r1tL6jbAn.png) 2. ==改成GIou loss== 3. ==Backbone的激活函數又改回relu== 4. ==使用PyTorch:== 支持半精度運算,加快推論速度 5. ==自適應圖片縮放:== 在訓練時一樣按照長寬比縮放圖片後,再對圖片進行padding. ![](https://hackmd.io/_uploads/HkFXW6MCn.png) 在推論時padding scale最小的邊. ![](https://hackmd.io/_uploads/Bkk3-aGCh.png) ![](https://hackmd.io/_uploads/BkAaWafA2.png) 6. ==網路架構:== ![](https://hackmd.io/_uploads/BJ9Pu0GR2.jpg) ## Yolo v6 1. ==引入RepVGG結構==(https://arxiv.org/abs/2101.03697) ![](https://hackmd.io/_uploads/S1Zxlu4C2.png) ![](https://hackmd.io/_uploads/ryNA1O40n.png) 3. ==使用Anchor-free== 5. ==Decoupled head== ![](https://hackmd.io/_uploads/rygb7_NAn.png) 7. ==使用TAL代替SimOTA== 9. ==SIoU 损失== 10. ==分類Loss使用VFL== 11. ==概率Loss使用DFL== 12. ==self-distillation==