os | nvidia-driver | cuda | cudnn | GPU |
---|---|---|---|---|
ubuntu 18.04 (64) | 390.48 | 9.0 | 7.0 | GeForce 1060(6G) |
-
YOLOv1
- 將物件偵測的問題轉換成回歸問題,直接預測 bounding box 和類別的機率
- 針對整張照片所能提供的資訊進行預測,與 sliding windows 和 region proposal 不太一樣。所以將背景預測成物體的機率就將對低 (與 Fast-R-CNN 相比),但也導致 recall 下降。
- 結構上是單一結構,因此可以 end-to-end 的訓練
- loss function 則是將 localization error 和 classfication error 整合在一起,並透過不同權重來提升模型訓練時的穩定度
- 針對較小的物件表現也相對不穩定,主要是因為小的物件 localization error 相對也較小
-
YOLO2
- 主要是針對 YOLOv1 較弱的部分進行加強 (localization 和 recall 相對 region propsal 比較差)
- 新增 Batch Normailzation,取代 dropout,加速模型訓練和提升 mAP 2%
- 訓練方式的調整,YOLOv1 預訓練時用 224224,detection 使用 448448。YOLOv2 則是從頭先訓練 224224 一部分 epoch,在調整成 448448,減緩圖片因為解析度轉換的 gap,因此提升 4% mAP
- 移除最後的全連接層,新增 anchor,但也因為這樣 mAP 略為下降,但 recall 提高
- 透過 kmaen 來決定 anchor 的比例,相對於用人為經驗來的好
- 新增 passthrough layer (類似 ResNet),將 2626 的 fature map 和 1313 的 fature map 做連接,提升較小 object 的偵測能力 (因為小物件可能在 pooling 的過程中就被稀釋了)
- 在最後 fine tune detection 時,引入 Multi-Scale Training,也就是輸入圖像是動態的
-
YOLOv3
- 類別預測 softmax 更改成 sigmoid,可以面對 label 是有 overlap (person、woman)
- 在三個不同 scale size 上做偵測,可以針對小的物件提高預測的能力
- pooling 的部分全改成捲基層
下列比較是基於 YOLOv3 和 M2Det paper 所公開的 pretrained model 來比較
- 這邊所使用的 M2Det 是 vgg512 版本
- YOLOv3 則是 320、416、608 版本
- 實測上 yolov3 速度相對於 m2det 來的慢, 目前推測是 m2det 運算的方式有較多可以透過 GPU 加速 (在 run code 過程中有注意到 GPU 使用量)
- 不論是 yolov3 還是 m2det 對於間隔倒的鐵柵欄都會勿判成腳踏車 (如下列圖示), 其中 yolov3(下下圖60%左右) 的 confidence 右更勝於 m2det(下圖30%左右)
- 至於目前大家比較在意小物件的偵測狀況,個人認為由這隻影片觀察兩者是似乎差不多的
Model | fps | excute time | total frame |
---|---|---|---|
YOLOv3-320 | 3.30 | 1813.016 | 5986 |
YOLOv3-416 | 3.34 | 1790.327 | 5986 |
YOLOv3-608 | 3.3 | 1813.77 | 5986 |
M2Det | 7.38 | 810.64 | 5986 |
M2Det: python 3367, GPU 3990 MiB