訓練模型
下載預訓練模型和權(quán)重:
該程序目前支持VGG16和ResnetV1(包括50\101\152)網(wǎng)絡結(jié)構(gòu)侣监,這4種網(wǎng)絡結(jié)構(gòu)都經(jīng)過了ImageNet數(shù)據(jù)集的預訓練怠肋,其預訓練模型由slim提供,可以在這里下載著洼。
將其下載并放在data/imagenet_weights文件夾下光督。
下面將以VGG16模型為例,講解VGG16如何利用VOC數(shù)據(jù)集進行訓練:
- 建立imagenet_weights文件夾(在tf-faster-rcnn根目錄下)
/tf-faster-rcnn$ mkdir -p data/imagenet_weights
/tf-faster-rcnn$ cd data/imagenet_weights
- 下載vgg16模型到imagenet_weights文件夾下并解壓縮,你也可以到上面的網(wǎng)址里下載
tf-faster-rcnn/data/imagenet_weights$ wget -v http://download.tensorflow.org/models/vgg_16_2016_08_28.tar.gz
tar -xzvf vgg_16_2016_08_28.tar.gz
- 模型重命名阀溶,這是為了給test_faster_rcnn.sh傳入?yún)?shù)NET時名字需要對應的上腻脏。
tf-faster-rcnn/data/imagenet_weights$ mv vgg_16.ckpt vgg16.ckpt
tf-faster-rcnn/data/imagenet_weights$ cd ../..
- 同理,下載ResNet101的方式如下:
# 建立imagenet_weights文件夾
/tf-faster-rcnn$ mkdir -p data/imagenet_weights
/tf-faster-rcnn$ cd data/imagenet_weights
# 下載ResNet101模型到imagenet_weights文件夾下并解壓縮银锻,你也可以到上面的網(wǎng)址里下載
/tf-faster-rcnn/data/imagenet_weights$ wget -v http://download.tensorflow.org/models/resnet_v1_101_2016_08_28.tar.gz
tar -xzvf resnet_v1_101_2016_08_28.tar.gz
# 模型重命名
tf-faster-rcnn/data/imagenet_weights$ resnet_v1_101.ckpt res101.ckpt
tf-faster-rcnn/data/imagenet_weights$ cd ../..
- 訓練(測試和評估):
訓練的格式如下:
./experiments/scripts/train_faster_rcnn.sh [GPU_ID] [DATASET] [NET]
# GPU_ID 是你要使用的GPU編號
# NET 是你采用的網(wǎng)絡類型永品, 可選范圍為{vgg16, res50, res101, res152}
# DATASET 是數(shù)據(jù)集,在train_faster_rcnn.sh中預先定義過{pascal_voc, pascal_voc_0712, coco} 击纬,還可以根據(jù)自己需要進行添加
# Examples:
./experiments/scripts/train_faster_rcnn.sh 0 pascal_voc vgg16
./experiments/scripts/train_faster_rcnn.sh 1 coco res101
- 上面在演示demo時鼎姐,在output中建立了一個經(jīng)過VOC0712數(shù)據(jù)集訓練好的Res101模型的軟鏈接,如果有再次使用VOC0712數(shù)據(jù)集對Res101進行訓練的需要更振,記得刪除掉該軟鏈接炕桨。
- 為了節(jié)省時間并排除錯誤,我把迭代次數(shù)只設置了70次,把./experiments/scripts/train_faster_rcnn.sh里的第22行把ITERS=70000改成ITERS=70肯腕,同時記得把./experiments/scripts/test_faster_rcnn.sh的ITERS也改成70献宫。(這里注意使用vim編輯器打開sh文件進行修改)
- 注意:因為我使用的是pascal_voc數(shù)據(jù)集,所以只需要更改對應數(shù)據(jù)集的ITERS的就行了实撒,訓練和測試的都要改姊途,因為在train_faster_rcnn.sh的末尾會執(zhí)行test_faster_rcnn.sh。
下面舉例使用VOC07數(shù)據(jù)集訓練VGG16(并測試):
/tf-faster-rcnn$ ./experiments/scripts/train_faster_rcnn.sh 0 pascal_voc vgg16
這里最后的vgg16就是對應的權(quán)重數(shù)據(jù)知态,名字要對的上捷兰,0是GPU的ID,pascal_voc是訓練使用的數(shù)據(jù)集负敏。
因為只訓練了70次贡茅,準確度是比較差的。
注:運行train_faster_rcnn.sh后會自動運行test_faster_rcnn.sh其做,即訓練完會自動進行測試友扰。
- 用Tensorboard可視化
訓練完成后,可以使用Tensorboard對訓練過程的log進行可視化
logdir用來設置想要把Tensorboard的event文件存放在哪里庶柿,port用來設置置通過哪個端口顯示Tensorboard界面
/tf-faster-rcnn$ tensorboard --logdir=tensorboard/vgg16/voc_2007_trainval/ --port=7001 &
結(jié)果如下圖所示:
上述命令在Tensorboard文件夾下創(chuàng)建了如下文件:
在瀏覽器中輸入對應網(wǎng)址打開tensorboard界面如下(我只訓練了70次所以僅做參考)
- 測試與評估
類似訓練的過程村怪,只不過是調(diào)用test_faster_rcnn.sh而不是train_faster_rcnn.sh,即只用測試集進行測試浮庐,并不進行訓練:
./experiments/scripts/test_faster_rcnn.sh [GPU_ID] [DATASET] [NET]
# GPU_ID 是你要使用的GPU編號
# NET是你采用的網(wǎng)絡類型甚负,可選范圍為{vgg16, res50, res101, res152}
# DATASET是數(shù)據(jù)集柬焕,在train_faster_rcnn.sh中預先定義過{pascal_voc, pascal_voc_0712, coco} ,還可以根據(jù)自己需要進行添加
# Examples:
./experiments/scripts/test_faster_rcnn.sh 0 pascal_voc vgg16
./experiments/scripts/test_faster_rcnn.sh 1 coco res101
再評估:
可以使用tools/reval.sh進行再評估
補充說明:
默認情況下梭域,訓練好的網(wǎng)絡存放在:
output/[NET]/[DATASET]/default/
測試的輸出結(jié)果存放在:
output/[NET]/[DATASET]/default/[SNAPSHOT]/
訓練和驗證的Tensorboard信息存放在:
tensorboard/[NET]/[DATASET]/default/
tensorboard/[NET]/[DATASET]/default_val/
訓練自己的數(shù)據(jù)【重點0呔佟!病涨!】
- 下載圖片標注工具labelImg
可以在這里下載富玷。
下載好后,到標注工具文件夾下輸入如下代碼完成配置:
~/labelImg$ pyrcc5 -o resources.py resources.qrc
并輸入下面代碼調(diào)用標注工具:
~/labelImg$ python labelImg.py
界面如圖所示:
接下來就可以使用該標注工具對我們數(shù)據(jù)集中的圖片進行標注既穆,使用方法網(wǎng)上有很多教程赎懦,這里就不做進一步介紹了。
-
建立數(shù)據(jù)集
我們在訓練自己的數(shù)據(jù)集時幻工,要仿照經(jīng)典的VOC2007數(shù)據(jù)集去做励两,如下圖所示是voc2007數(shù)據(jù)集文件夾格式,我們要仿照這個文件夾的格式做一個自己數(shù)據(jù)集的文件夾:
VOC2007數(shù)據(jù)集文件夾格式
JPEGImages——用來保存你的數(shù)據(jù)圖片囊颅,對于faster-rcnn來講当悔,所有的圖片必須是jpg/jpeg格式,其他格式的話要轉(zhuǎn)換一下踢代。另外盲憎,一定要對圖片進行編號,一般按照voc數(shù)據(jù)集格式胳挎,采用六位數(shù)字編碼焙畔,如000001.jpg、000002.jpg等串远。
Annotations——這里是存放你對所有數(shù)據(jù)圖片做的標注文件宏多,每張照片的標注信息必須是xml格式,如000001.xml.
ImageSets——在該文件夾下創(chuàng)建三個子文件夾:Layout澡罚、Main伸但、Segmentations。
xml數(shù)據(jù)準備完畢后留搔,需要劃分訓練驗證以及測試集更胖,這里我使用的別人寫好的劃分代碼Creat_FRCNN_DataSet,是matlab的隔显,下載后更改VOC2007txt.m中d 路徑就可以用了却妨。執(zhí)行結(jié)果會按比例對你的數(shù)據(jù)劃分為訓練集驗證集以及測試集,同時會生成四個txt文檔括眠,分別是test.txt彪标,train.txt,trainval.txt掷豺,val.txt捞烟。
注意:JPEGImages與Annotations下文件的名字要一一對應薄声。
- 替換數(shù)據(jù)及刪除緩存文件
- 替換數(shù)據(jù)
把你的xml文件放置在tf-faster-rcnn/data/VOCdevkit2007/VOC2007/Annotations路徑下,記得把原來的刪掉题画;同時把你的jpg文件放在tf-faster-rcnn/data/VOCdevkit2007/VOC2007/JPEGImages路徑下默辨;把之前matlab生成是四個txt文檔放在tf-faster-rcnn/data/VOCdevkit2007/VOC2007/ImageSets/Layout 和 tf-faster-rcnn/data/VOCdevkit2007/VOC2007/ImageSets/Main路徑下。 - 刪除之前的緩存數(shù)據(jù)
- 刪除以往的訓練模型:
刪除文件夾/tf-faster-rcnn/output/vgg16/voc_2007_trainval/default下所有文件苍息;
刪除文件夾/tf-faster-rcnn/data/cache下所有的文件缩幸。 - 刪除標記緩存:
刪除data/VOCdekit2007下的annotations_cache文件夾下的所有文件。
注意:如果不進行這一步很可能會出現(xiàn)Keyerror:一類的錯誤日志
- 修改代碼及訓練(最后一步了>核肌1硪辍!)
- 修改代碼
- 修改自己的類別
首先衙四,在tf-faster-rcnn/lib/datasets目錄下的pascal_voc.py里第36行更改自己的類別,'background'切記不可刪掉患亿,把后面的原來的20個label換成自己的传蹈,不用更改類別數(shù)目,也沒有地方可以更改步藕。
注意:類別的名字要與標注數(shù)據(jù)時的類別數(shù)量一致惦界,類別名一致,區(qū)分大小寫咙冗,最好都是小寫沾歪。 - 修改迭代次數(shù)
修改/tf-faster-rcnn/experiments/scripts/train_faster_rcnn.sh文件,找到類似這段代碼:
pascal_voc)
TRAIN_IMDB="voc_2007_trainval"
TEST_IMDB="voc_2007_test"
STEPSIZE="[50000]"
ITERS=10000
ANCHORS="[8,16,32]"
RATIOS="[0.5,1,2]"
ITERS后面的數(shù)值代表是迭代次數(shù)雾消,這里已經(jīng)將其改成10000灾搏,由于train_faster_rcnn.sh此文件最后一句話調(diào)用了test_faster_rcnn.sh,因此需要將test_faster_rcnn.sh中的代碼做相同處理立润,即改變迭代次數(shù)(要與train_faster_rcnn.sh文件中的迭代次數(shù)一致)
- 訓練及測試
source activate tf-faster-rcnn
cd 到tf-faster-rcnn的目錄下:
cd tf-faster-rcnn-master
進行訓練:
GPU_ID=0
./experiments/scripts/train_faster_rcnn.sh 0 pascal_voc vgg16
測試:
./experiments/scripts/test_faster_rcnn.sh 0 pascal_voc vgg16
附上我的最終測試集的測試結(jié)果(一共五種類別):
結(jié)束狂窑!Thanks,The management~
希望大家都可以訓練順利~
后記:
如果我們已訓練好自己的模型桑腮,如何演示自己測試圖片的可視化泉哈?
答:需要修改/tf-faster-rcnn/tools/demo.py文件。(這部分內(nèi)容我之后有時間的話再進行一下補充)