YOLO 訓練和 檢測技巧

2021-09-19 05:54:06 字數 2135 閱讀 1014

注意根據特定任務對 anchor 進行修改,方法參考

./darknet detector calc_anchors data/hand.data -num_of_clusters 9 -width 704 -height 576 -show

這個文件給出了 一些提高精度 的方法

提高物體檢測效能的方法:

訓練前1 cfg 檔案中 設定 random = 1

2 提高 cfg中指定的解析度, 比如 height = 608, width = 608 或者更高的32的倍數

3 確保 每個樣本都有標註並且正確標註

4 對於待檢測的物體, 訓練集中 要有 相似物體, 形狀、大小、旋轉角度、傾斜、明亮度 方面相似

包含 物體 在不同尺度、旋轉、**、側面、和背景 下的影象 有利於訓練, 每個類別至少2000張不同的影象

至少訓練 2000*類別數 次

5 提高 不包含待檢測物體的 影象 也很重要, 就是 負樣本,這些樣本對應的txt為空檔案,

負樣本的數量 最好和 正樣本數量 一致。 這條容易被 忽略

6 如果單張影象裡面需要檢測出的物體比較多,那麼設定yolo層和region層中 max=200 或者更大值

7 如果是檢測小物體(影象resize為416*416 後,小於 16*16 畫素), 那麼在 yolov3.cfg中720 行設定 layers = -1, 11

並且, 717行 設定 stride 為4

8 如果訓練 既有大物體又有小物體的模型, 那麼 使用 yolov3_5l.cfg, 這個有 5 yolo層

如果用 tiny模型,那麼使用 yolov3-tiny_3l.cfg,

如果用 spatial-full-model, 那麼用 yolov3-spp.cfg

9 如果是訓練需要區分左右的物體, 那麼 禁用 flip , yolov3cfg 第17行 設定 flip = 0

10 一般來說, 訓練集中物體大小和待檢測影象中物體大小 有一定約束,大致關係為

train_network_width * train_obj_width / train_image_width ~= detection_network_width * detection_obj_width / detection_image_width

train_network_height * train_obj_height / train_image_height ~= detection_network_height * detection_obj_height / detection_image_height

也就是說, 如果訓練集中物體寬度佔影象的比例 要約等於 測試集中物體寬度佔影象的比例

11 如果要加速訓練(可能會降低精度), 使用 fine-tuning,而不是遷移學習, 設定 548 行 stopbackward=1

執行命令: ./darknet partial cfg/yolov3.cfg yolov3.weights yolov3.conv.81 81 will be created file yolov3.conv.81, then train by using weights file yolov3.conv.81 instead of darknet53.conv.74

12 ?? 檢測的物體越不同, 使用的網路模型就應該 越複雜

13 針對cfg 檔案中的 高寬 重新計算 anchor:darknet.exe detector calc_anchors data/obj.data -num_of_clusters 9 -width 416 -height 416

然後設定 yolo層 中的 anchor . 需要修改 masks , 是的第乙個 yolo層的anchor 大於60*60, 第二個 大於 30*30,第三個保持不變

同時 要修改 yolo層前面 filters 的個數,公式為

filters=(classes + 5)*
訓練好之後, 對於檢測:

增加 cfg 解析度(依然設為 32的倍數 ), 這能提高準確率和檢測到小物體的概率

這並不需要重新訓練網路, 指定高寬為416時 訓練處的權重檔案 即可

如果想要更高準確率,那麼還是 在高解析度時 進行訓練, 如果 顯示 out of memory ,那麼 就 把cfg中 subdivisions 改大,比如 32, 64 等等

Yolo訓練自定義目標檢測

參考darknet darknet detect cfg yolov3.cfg yolov3.weights data dog.jpg 能執行說明檢測沒有問題通過labelimg工具標註。選用window conda安裝,步驟如下 git clonecd 到目錄 conda install pyqt...

yolo訓練資料

第一點資料集的標註 使用linux下資料標註工具 bbox生成的檔案格式 lines x1 y1 x2 y1 x3 y3 x4 y4 第一行的資料是總共引數的行數,第二行x,y為所框物件的頂點座標。如果使用python指令碼進行資料的轉換完全不用理會。重點在於下面幾行座標的轉換。在yolo中需要的座...

yolo生成和訓練資料集

裡面共有兩個資料夾,現在我們使用的是xml2txt xml2txt.py檔案來對我們資料進行處理,首先你需要把你所有標註的xml檔案和所有的檔案放在一起,就像這樣 這是手機拍的 所有檔名很麻煩。明白博主為什麼要重新命名所有的了吧 接著切到剛才的xml2txt.py資料夾內,使用命令 python x...