Faster_Rcnn在windows下運行踩坑總結
20190524 今天又是元氣滿滿的一天!
1、代碼下載
2、編譯
3、下載數據集
4、下載pre-train Model
5、運行train
6、運行demo文件
7、准備自己的數據集
8、修改源碼
9、測試自己的數據集(未完待更)
10、推薦
0、前言
不管怎么說,先把faster_Rcnn學了吧!后續的會加入一些具體代碼的總結。還有一些比較好的點。總之,不管有沒有用,先學了再說吧!
1、代碼下載
只有一句話,開源是一種情懷。
下載地址:https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5
在這里下載的是windows,tensorflow框架下的faster-rcnn代碼,當然在github里還有caffe版本,還有大多數是linux下的。linux一定要好好學一下!!!
我的版本python版本3.6,tensorflow-gpu。
下載之后,先不要着急用pycharm打開運行。這些代碼時在python3.5上編譯好的,所以我們在python3.6版本運行的時候需要重新編譯!!
2、編譯
1、將下載好的源碼文件夾放在自己的目錄下。然后啟動一個cmd。
D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\coco\PythonAPI 下划線就是自己將源碼放在位置,將這里改成自己的目錄進入到 .\data\coco\PythonAPI
在.data\coco\PythonAPI下運行 python setup.py build_ext --inplace
特別注意:1必須確定自己進入的目錄。D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\coco\PythonAPI
2運行 python setup.py build_ext --inplace
2、繼續在這個目錄下運行 python setup.py build_ext install
3、然后切換到另外一個目錄下。
D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\lib\utils
然后在這個目錄下運行 python setup.py build_ext --inplace
這個時候完成了編譯。就可以關掉所有的東西。開啟下一步。
3、下載數據集
1、Download the training, validation, test data and VOCdevkit
http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
直接將這三個網址復制到瀏覽器中。
2、將下載好的壓縮吧解壓之后放在指定文件夾:D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data
這樣基本就算是完成了。。
3、如果好奇會打開D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\VOCdevkit2007\VOC2007
在這個文件夾下存放着這幾個文件夾。可以用excel打開Annotations里的xml文件,里面記錄着圖片的標注信息。JPEGImages文件夾下存放着圖像樣本集。
4、下載pre-train Model
預訓練模型下載地址:
https://github.com/tensorflow/models/tree/master/research/slim#pre-trained-models
這里有很多,我選用vgg-16
將下載好的模型放在指定文件夾下D:\goodgoodstudy\FasterRCNNTensorFlowPython3.5master\data\imagenet_weights\vgg16.ckpt
特別注意:下載好的模型名稱是vgg_16.ckpt,實際程序里加載使用的是vgg16所以需要去掉下划線修改名稱。
不然會報錯:TypeError: argument of type 'NoneType' is not iterable。
5、運行Train程序
打開pycharm,找到自己的項目,運行train。
整個train過程會迭代4000次,速度還是挺慢的,GTX1070,每10步0.5s,共計大概需要30min。這個沒辦法,沒有好的GPU還玩個p。貧窮限制了我的自由!
總結:老老實實地按照github上的教程一步一步來,不要誤操作。不然全都是坑。
運行完成以后會生成checkpoint文件,存放在D:\goodgoodstudy\FasterRCNNTensorFlowPython3.5master\default\voc_2007_trainval\default
在不改變存放路徑的情況下會存在這個文件夾中。
6、運行demo程序
在運行demo程序的時候,會報錯,原因是因為我們加載的模型的路徑沒有修改,所以會因為找不到模型報錯。
有3處需要修改:
(1)默認加載的是res101,而我要用vgg16,數據集也要修改!
(2)(2)原來這里默認的是70000,我用GTX1070運行40000次,將近40min。所以如果沒有好的顯卡,那就沒辦法了。70000次時間太久了!
(3)這里的模型路徑也要修改。確保是D:\goodgoodstudy\FasterRCNNTensorFlowPython3.5master\default\voc_2007_trainval\default不然會一直報錯,找不到模型。
7、准備自己的數據集
在開始訓練自己的數據集之前,必須確保demo和train程序已經跑通!
首先,准備自己的數據集。首先需要進行重命名,按照000001,0000002......下去,
rename程序放在這里,后續更新(批量重命名)
1、通過標注軟件生成xml文件放在Annotations文件夾下,注意:注意標注的時候一定不要用大寫,不要有空格,建議全部用小寫字母和數字
D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\VOCdevkit2007\VOC2007\Annotations
2、講自己的圖片數據集放在
D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\VOCdevkit2007\VOC2007\JPEGImages, 注意:這里是.jpg格式圖片,如果是其他格式需要在程序中修改
3、在Imagesets下創建一個Main文件夾,這里存放一個txt文件,txt文件里存放的是圖片的名字,每個一行。
根據JPEGImages的圖像集生成txt程序
images_to_txt程序,后續更新
小結:
數據集存放的位置:..\data\VOCdevkit2007\VOC2007\下
Annotations .xml文件
ImageSets\Main (trainval、train、val、test).txt文件
JPEGImages .jpg文件
那么,接下來就是正式開始訓練。
訓練前,請務必刪除Faster-RCNN-TensorFlow-Python3.5-master\default\voc_2007_trainval\default\里之前的模型
以及Faster-RCNN-TensorFlow-Python3.5-master\data\cache里的文件,不然測試的時候會報錯!!特別是第二個文件!!!
因為這些文件可能是之前為了跑通程序留下來的,現在我們更新了數據集,所以,這里理所當然需要刪除之后進行操作。
8、源碼修改
1、Faster-RCNN-TensorFlow-Python3.5-master\lib\datasets\pascal_voc.py文件中class pascal_voc(imdb):類中修改類別
self._classes = ('__background__', # always index 0
'aeroplane', 'bicycle', 'bird', 'boat',
'bottle', 'bus', 'car', 'cat', 'chair',
'cow', 'diningtable', 'dog', 'horse',
'motorbike', 'person', 'pottedplant',
'sheep', 'sofa', 'train', 'tvmonitor') #在這里__background__是默認的背景,不需要修改,只需要修改后面的類別,改成自己的類別
2、訓練的參數都在lib\config文件夾中,根據自己的需要進行修改和調試。也可以先按照默認的嘗試一下~
第一次訓練的時候我對config.py里面的數據也進行了修改,小試牛刀的時候我把batch_size改成64,,max_iters改成1000,snapshot_iterations改成500,每500次輸出一次模型,后來第一次訓練成功之后,再慢慢把數據改大。
后來我把batch_size改成256,,max_iters改成40000,snapshot_iterations改成5000。
9、測試自己的數據集
首先,將自己需要測試的數據集放在demo的文件夾中,D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\demo中
需要修該的地方:
1、demo.py第一處
# 分類類型,需要的分類類別 CLASSES = ('__background__', 'coal', 'gangue', 'unknown', 'undetermined', 'else', 'w') # 模型選擇vgg16 和 resnet101,這里是自己訓練好的模型 NETS = {'vgg16': ('vgg16_faster_rcnn_iter_35000.ckpt',), 'res101': ('res101_faster_rcnn_iter_110000.ckpt',)} # 數據集 DATASETS = {'pascal_voc': ('voc_2007_trainval',)}
2、demo.py第二處
def parse_args(): """Parse input arguments.""" parser = argparse.ArgumentParser(description='Tensorflow Faster R-CNN demo') # parser.add_argument('--net', dest='demo_net', help='Network to use [vgg16 res101]', # choices=NETS.keys(), default='res101') # parser.add_argument('--dataset', dest='dataset', help='Trained dataset [pascal_voc pascal_voc_0712]', # choices=DATASETS.keys(), default='pascal_voc_0712') # 在這里使用vgg16 parser.add_argument('--net', dest='demo_net', help='Network to use [vgg16 res101]', choices=NETS.keys(), default='vgg16') parser.add_argument('--dataset', dest='dataset', help='Trained dataset [pascal_voc pascal_voc_0712]', choices=DATASETS.keys(), default='pascal_voc') args = parser.parse_args() return args #在這個函數中,默認使用的vgg16,如果用別的網絡需要在第一部中的nets中加入,另外需要將parse.add_argument()中最后的default進行修改
3、demo.py第三處
# load network if demonet == 'vgg16': net = vgg16(batch_size=1) # elif demonet == 'res101': # net = resnetv1(batch_size=1, num_layers=101) else: raise NotImplementedError # 這里注意修改數字7,有幾個類別就是幾 net.create_architecture(sess, "TEST", 7, tag='default', anchor_scales=[8, 16, 32]) #首先,第一步如果使用resnet,源碼提供了50,101,152三種殘差網絡,如果使用需要將注釋去掉,此外還可以選擇num_layers. #另外,還需要需改net.create_architecture(sess, "TEST",后面這個數就是你訓練的時候的選擇了幾個類別,這個地方就是幾,包括背景算在內。
4、demo.py第四處
im_names = ['001954.jpg', '002109.jpg', '002000.jpg', '001905.jpg', '002342.jpg'] #這里的im_names修改為demo文件夾下自己的測試圖片的名字
5、那這里就存在一個問題,如何批量測試數據集呢?
6、此外,還會發現,這個demo程序只是將同一類的圖像標在一張圖上,那么如何實現將所有類標在一張圖上。
7、標在一張圖上,我想讓不同類別顯示不同顏色進行標記呢?
8、如果訓練程序在服務器或者另外一台電腦上操作,直接將checkpoint文件粘貼過來會出現問題?怎么辦?
567這幾個問題后續慢慢更新,最近需要總結的東西太多了,還有之前很多東西需要整理修改一下!
到此,faster_rcnn算是跑通了,原理也大概了解。但是對源碼的解讀還差得遠,后續會對源碼的一些細節進行總結。
10、推薦
推薦1:一款windows下使用linux命令行 https://www.cnblogs.com/zhangkanghui/p/10897626.html
花里胡哨,沒什么卵用,但是作為0基礎學習linux入門級。不會配置linux系統或者虛擬機上,或者雙系統,可以暫時使用這個,基本功能都能實現。不過最好還是裝個linux環境最好!
推薦2:一款遠程連接計算機軟件:Teamviewer https://www.teamviewer.com/zhcn/credentials/free-for-personal-use/
這樣就可以遠程連接計算機了,比qq穩定,而且支持無人值守。推薦入手!
8、我是尾巴
寫了這么多篇博客,是真的丑。暑假一定要把djanggo學了,搭建一個好看點的博客!!!自己都忍不住吐槽自己,是真的難看!!!