SSD+caffe︱Single Shot MultiBox Detector 目标检测+fine-tuning(二)
承接上一篇SSD介紹:SSD+caffe︱Single Shot MultiBox Detector 目標檢測(一)
如果自己要訓練SSD模型呢,關鍵的就是LMDB格式生成,從官方教程weiliu89/caffe來看,寥寥幾行code,但是前面的數據整理真實要了老命。
教程其實就是一種fine-tuning,在VGG基礎上進行訓練SSD框架。
一般SSD的數據來源,看到好多人都在用這款框架進行數據標注:BBox-Label-Tool 也有人在這基礎上進行簡單修改,詳見博客:SSD框架訓練自己的數據集 ,或者用OpenCV重寫:深度學習ssd配置并在VGG模型上訓練自己的數據
還有一些自己開發的小工具:圖像標注VS2013項目
.
0 官方教程訓練過程:
(1)下載VGGNet.caffemodel, fully convolutional reduced (atrous) VGGNet
(2)下載VOC2007 and VOC2012兩個數據集,放在/caffe/data目錄下
(3)創建LMDB文件:
- 1
- 2
- 1
- 2
(4)訓練
python examples/ssd/ssd_pascal.py- 1
- 1
以上是官方教程常規訓練步驟,并不難。但是自己訓練時候的數據處理,比較麻煩。
.
1 數據集準備與形成
1.1 所需準備文件介紹
其中訓練所需的文件夾包括三大類:
dataset (數據集目錄)
-
Annotations
*.xml (標注的物體信息文件)
-
Images
*.jpg (圖片集)
-
ImageSets
保存格式為文件名,不帶擴展名
訓練集: train.txt
訓練驗證集: trainval.txt
測試集: test.txt
驗證集: val.txt
1.2 訓練文件介紹
(1) create_list.sh:用于生成三類文件列表
- test_name_size:測試集圖像大小
- test:測試集圖像-標簽一一對應
- trainval:訓練集圖像-標簽一一對應
這是將數據集做成方便之后生成lmdb的路徑信息文件,注意將其中的root_dir和第二個for循環中的變量改為自己的路徑就好。
圖像-標簽一一對應:
- 1
- 2
- 1
- 2
同時注意名稱的一致。
000800 1241 376 006206 1242 375- 1
- 2
- 1
- 2
test_name_size里面,000800就是圖片名稱,1241*376就是圖片尺寸,高 長
(2)create_data.sh:
生成LMDB文件,以上的create_list準備好之后即可
(3)labelmap_voc.prototxt:
目標檢測的標簽文件
該文件主要記錄需要訓練識別的n種對象的信息,第一類是background,是不變的,對于Pascal VOC數據集來說,需要識別20種對象,所以后面還有20個label。與傳統的機器學習不太一樣的是,以前需要輸入正負樣本,在caffe種,不管是faster rcnn還是ssd,都是只用對訓練圖像將識別對象的坐標信息標注即可,除了標注信息以外的部分都會當做background去處理。
.
2 數據集生成方案
訓練的數據集三種方案:
- 第一:保持原來的文件目錄結構及文件名不變, 只替換里面的數據,通用。
- 第二:重新新建一個與之前類似的目錄結構,改成自己命名的文件夾,第二種方法,有一定的風險性,需要修改程序里涉及數據路徑的代碼。
- 第三:txt格式數據變成LMDB,參考github:https://github.com/jinfagang/kitti-ssd
- 第三種是直接用txt格式保存,就可以生成LMDB的辦法,我覺得這個比較好,但是筆者最終沒有實驗成功…譬如:
- 1
- 1
第一種方案里面的一些小技巧:
(1)還有將txt變成xml格式的小工具:見博客將數據集做成VOC2007格式用于Faster-RCNN訓練
(2)將BBox-Label-Tool下的txt格式保存的bounding box信息轉換成VOC數據格式下以xml方式表示:,見博客:SSD框架訓練自己的數據集
(3)將csv變成xml文件類型
luuuyi/umdfaces2VOC2007
2.1 訓練流程
本節參考:SSD框架訓練自己的數據集
- 第一步:create_list.sh:生成test_name_size.txt、test.txt、trainval.txt
- 第二步:修改labelmap_voc.prototxt,標簽文件,同時需要注意標簽文件必須多一個background的標簽,作為編號0
- 第三步:create_data.sh:生成LMDB
- 第四步:修改ssd_pascal.py:
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
- 第五步訓練:
python examples/ssd/ssd_pascal.py
2.2 訓練腳本內容存儲
會在相應的路徑下生成jobs文件夾,其中包含了這一次訓練的腳本文件,并且會記錄caffe執行只一次訓練的日志信息。
參考:Ubuntu上用caffe的SSD方法訓練Pascal VOC數據集
jobs文件夾下有:
.log文件:運行記錄,時間,迭代次數等信息;
.caffemodel文件,權重文件
deploy.prototxt、train_val.prototxt等
.
參考:
深度學習ssd配置并在VGG模型上訓練自己的數據
SSD 安裝、訓練
Ubuntu上用caffe的SSD方法訓練umdfaces數據集
重點參考:
使用faster rcnn訓練umdfaces數據集
將數據集做成VOC2007格式用于Faster-RCNN訓練
Caffe-SSD 訓練自己的數據集教程
SSD框架訓練自己的數據集
.
報錯一:
cudasucess(10vs0)- 1
- 1
解決:修改pythonssd_pascal.py文件gpus=’0,1,2,3’,如果有一塊GPU,則刪除123,有兩塊則刪除23
.
延伸一:大致的運算效率
K80-單GPU-一天可以迭代1w+次
6天將近7w次
每1w次迭代之后會計算一個mAP
(數據來源:Ubuntu上用caffe的SSD方法訓練umdfaces數據集)
TX.P,筆者自己訓練,大概的運算效率是5千/小時(運行官方教程時)
總結
以上是生活随笔為你收集整理的SSD+caffe︱Single Shot MultiBox Detector 目标检测+fine-tuning(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双引擎驱动Quick BI十亿数据0.3
- 下一篇: 阿里云马涛:因云进化的基础软件