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