machineCYC / CompareYOLOv3M2Det

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Compare YOLOv3 M2Det

Environment

os nvidia-driver cuda cudnn GPU
ubuntu 18.04 (64) 390.48 9.0 7.0 GeForce 1060(6G)

M2Det

YOLO

  • 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 的部分全改成捲基層

Summary

下列比較是基於 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

Reference

About