資源
源碼
GitHub 上搜索 YOLO
可以找到很多平臺的包,如: Tensorflow
, pyTorch
等等;本文使用 darknet
原因:方便把玩。請參考如下頁面安裝測試:
- YOLO : YOLO: Real-Time Object Detection
資料
- YOLO源碼詳解(五)- YOLO中的7*7個grid和RPN中的9個anchors
- 論文提要“You Only Look Once: Unified, Real-Time Object Detection”
YOLO局限性
由于YOLO具有極強的空間限制,它限制了模型在鄰近物體上的預測,如果兩個物體出現在同一個cell中,模型只能預測一個物體,所以在小物體檢測上會出問題。另外模型對訓練數據中不包含的物體或具有異常長寬比的物體擴展不是太好。loss函數對大小bbox采取相同的error也是個問題。
實測結果圖
自帶圖
dog等
其他任選
簡單場景
西安國際汽車展charming于2017年攝于西安國際汽車展
西電花季開放日
中等復雜
盆栽(potted plant)都可以, 當然花瓶是沒有的
charms于2017年4月4日攝于青龍寺
復雜場景
注意下圖中的包和傘都能檢測出來:
人群密集的櫻花祭
還有這個圖,不是偶然
人群密集的櫻花祭
惡劣環境
下面的環境有點惡劣,不過還不錯,雖然漏了個車和路燈
xidianbeimen.png
失敗例子
哈哈,畫的畫果然還是不行,難道畫技太差,哈哈:
charming@簡書 原創畫作
訓練
預訓練
準備訓練樣
使用darknet訓練要求訓練樣本中,每個樣本的名字以類名命名,這樣darknet就知道當前圖片屬于哪一類,如對于 cifar10 數據集,含10類(labels.txt):
airplane
automobile
bird
cat
deer
dog
frog
horse
ship
truck
其訓練樣本名稱示例如下:
cifar訓練樣本示例
準備配置文件
cifar10工程目錄示意
微調
準備訓練樣本
訓練樣本標簽文件信息如下:
<object-class> <x> <y> <width> <height>
<object-class> <x> <y> <width> <height>
...
對應于:
<類別標簽數字> <物體中心水平方向坐標/寬度> <物體中心垂直方向坐標/高度> <物體區域寬度> <物體區域高度>
如對于 VOC2012
中的一幅飛機的圖像,對應的訓練樣本標簽信息如下:
0 0.578 0.474474474474 0.744 0.588588588589
其中,0
表示類別,0.578 0.474474474474
為中心坐標,0.744 0.588588588589
分別為寬度和高度,如下圖所示:
訓練樣本標簽圖解
訓練配置
learning_rate=0.0001
max_batches = 3 # 訓練代數 epoches
policy=steps
steps=1,2,3 # 每訓練step,保存一次
scales=10,.1,.1
*final.weights