使用tf-faster-rcnn訓練自己的數(shù)據(jù)集【光纖分類項目】

訓練模型

下載預訓練模型和權(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ù)集進行訓練:

  1. 建立imagenet_weights文件夾(在tf-faster-rcnn根目錄下)
/tf-faster-rcnn$ mkdir -p data/imagenet_weights
/tf-faster-rcnn$ cd data/imagenet_weights
  1. 下載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
  1. 模型重命名阀溶,這是為了給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 ../..
  1. 同理,下載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 ../..
  1. 訓練(測試和評估):
    訓練的格式如下:
./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ù)集负敏。

訓練結(jié)果
訓練結(jié)果

因為只訓練了70次贡茅,準確度是比較差的。

注:運行train_faster_rcnn.sh后會自動運行test_faster_rcnn.sh其做,即訓練完會自動進行測試友扰。

  1. 用Tensorboard可視化
    訓練完成后,可以使用Tensorboard對訓練過程的log進行可視化
    logdir用來設置想要把Tensorboardevent文件存放在哪里庶柿,port用來設置置通過哪個端口顯示Tensorboard界面
/tf-faster-rcnn$ tensorboard --logdir=tensorboard/vgg16/voc_2007_trainval/ --port=7001 &

結(jié)果如下圖所示:


上述命令在Tensorboard文件夾下創(chuàng)建了如下文件:


在瀏覽器中輸入對應網(wǎng)址打開tensorboard界面如下(我只訓練了70次所以僅做參考)

tensorboard界面
  1. 測試與評估
    類似訓練的過程村怪,只不過是調(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呔佟!病涨!】

  1. 下載圖片標注工具labelImg
    可以在這里下載富玷。
    下載好后,到標注工具文件夾下輸入如下代碼完成配置:
~/labelImg$ pyrcc5 -o resources.py resources.qrc

并輸入下面代碼調(diào)用標注工具:

~/labelImg$ python labelImg.py

界面如圖所示:

標注工具labelImg界面

接下來就可以使用該標注工具對我們數(shù)據(jù)集中的圖片進行標注既穆,使用方法網(wǎng)上有很多教程赎懦,這里就不做進一步介紹了。

  1. 建立數(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下文件的名字要一一對應薄声。

  1. 替換數(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ù)
  1. 刪除以往的訓練模型:
    刪除文件夾/tf-faster-rcnn/output/vgg16/voc_2007_trainval/default下所有文件苍息;
    刪除文件夾/tf-faster-rcnn/data/cache下所有的文件缩幸。
  2. 刪除標記緩存:
    刪除data/VOCdekit2007下的annotations_cache文件夾下的所有文件。

注意:如果不進行這一步很可能會出現(xiàn)Keyerror:一類的錯誤日志

  1. 修改代碼及訓練(最后一步了>核肌1硪辍!)
  • 修改代碼
  1. 修改自己的類別
    首先衙四,在tf-faster-rcnn/lib/datasets目錄下的pascal_voc.py里第36行更改自己的類別,'background'切記不可刪掉患亿,把后面的原來的20個label換成自己的传蹈,不用更改類別數(shù)目,也沒有地方可以更改步藕。
    注意:類別的名字要與標注數(shù)據(jù)時的類別數(shù)量一致惦界,類別名一致,區(qū)分大小寫咙冗,最好都是小寫沾歪。
  2. 修改迭代次數(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é)果(一共五種類別):

TestResult.png

結(jié)束狂窑!Thanks,The management~
希望大家都可以訓練順利~

后記:
如果我們已訓練好自己的模型桑腮,如何演示自己測試圖片的可視化泉哈?
答:需要修改/tf-faster-rcnn/tools/demo.py文件。(這部分內(nèi)容我之后有時間的話再進行一下補充)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末破讨,一起剝皮案震驚了整個濱河市丛晦,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌提陶,老刑警劉巖烫沙,帶你破解...
    沈念sama閱讀 221,695評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異隙笆,居然都是意外死亡斧吐,警方通過查閱死者的電腦和手機又固,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來煤率,“玉大人仰冠,你說我怎么就攤上這事〉矗” “怎么了洋只?”我有些...
    開封第一講書人閱讀 168,130評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長昼捍。 經(jīng)常有香客問我识虚,道長,這世上最難降的妖魔是什么妒茬? 我笑而不...
    開封第一講書人閱讀 59,648評論 1 297
  • 正文 為了忘掉前任担锤,我火速辦了婚禮,結(jié)果婚禮上乍钻,老公的妹妹穿的比我還像新娘肛循。我一直安慰自己,他們只是感情好银择,可當我...
    茶點故事閱讀 68,655評論 6 397
  • 文/花漫 我一把揭開白布多糠。 她就那樣靜靜地躺著,像睡著了一般浩考。 火紅的嫁衣襯著肌膚如雪夹孔。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評論 1 309
  • 那天析孽,我揣著相機與錄音搭伤,去河邊找鬼。 笑死袜瞬,一個胖子當著我的面吹牛闷畸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播吞滞,決...
    沈念sama閱讀 40,835評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼佑菩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了裁赠?” 一聲冷哼從身側(cè)響起殿漠,我...
    開封第一講書人閱讀 39,740評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎佩捞,沒想到半個月后绞幌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡一忱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,375評論 3 340
  • 正文 我和宋清朗相戀三年莲蜘,在試婚紗的時候發(fā)現(xiàn)自己被綠了谭确。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,505評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡票渠,死狀恐怖逐哈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情问顷,我是刑警寧澤昂秃,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站杜窄,受9級特大地震影響肠骆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜塞耕,卻給世界環(huán)境...
    茶點故事閱讀 41,873評論 3 333
  • 文/蒙蒙 一蚀腿、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扫外,春花似錦莉钙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狞贱。三九已至刻获,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞎嬉,已是汗流浹背蝎毡。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留氧枣,地道東北人沐兵。 一個月前我還...
    沈念sama閱讀 48,921評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像便监,于是被迫代替她去往敵國和親扎谎。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,515評論 2 359

推薦閱讀更多精彩內(nèi)容