20190524 今天又是元氣滿滿的一天!html
0、前言
無論怎麼說,先把faster_Rcnn學了吧!後續的會加入一些具體代碼的總結。還有一些比較好的點。總之,無論有沒有用,先學了再說吧!python
一、代碼下載
只有一句話,開源是一種情懷。linux
下載地址:https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5git
在這裏下載的是windows,tensorflow框架下的faster-rcnn代碼,固然在github裏還有caffe版本,還有大多數是linux下的。linux必定要好好學一下!!!github
個人版本python版本3.6,tensorflow-gpu。windows
下載以後,先不要着急用pycharm打開運行。這些代碼時在python3.5上編譯好的,因此咱們在python3.6版本運行的時候須要從新編譯!!瀏覽器
二、編譯
一、將下載好的源碼文件夾放在本身的目錄下。而後啓動一個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
二、繼續在這個目錄下運行 python setup.py build_ext install
三、而後切換到另一個目錄下。
D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\lib\utils
而後在這個目錄下運行 python setup.py build_ext --inplace
這個時候完成了編譯。就能夠關掉全部的東西。開啓下一步。
三、下載數據集
一、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
直接將這三個網址複製到瀏覽器中。
二、將下載好的壓縮吧解壓以後放在指定文件夾:D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data
這樣基本就算是完成了。。
三、若是好奇會打開D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\VOCdevkit2007\VOC2007
在這個文件夾下存放着這幾個文件夾。能夠用excel打開Annotations裏的xml文件,裏面記錄着圖片的標註信息。JPEGImages文件夾下存放着圖像樣本集。
四、下載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。
五、運行Train程序
打開pycharm,找到本身的項目,運行train。
整個train過程會迭代4000次,速度仍是挺慢的,GTX1070,每10步0.5s,共計大概須要30min。這個沒辦法,沒有好的GPU還玩個p。貧窮限制了個人自由!
總結:老老實實地按照github上的教程一步一步來,不要誤操做。否則全都是坑。
運行完成之後會生成checkpoint文件,存放在D:\goodgoodstudy\FasterRCNNTensorFlowPython3.5master\default\voc_2007_trainval\default
在不改變存放路徑的狀況下會存在這個文件夾中。
六、運行demo程序
在運行demo程序的時候,會報錯,緣由是由於咱們加載的模型的路徑沒有修改,因此會由於找不到模型報錯。
有3處須要修改:
(1)默認加載的是res101,而我要用vgg16,數據集也要修改!
(2)(2)原來這裏默認的是70000,我用GTX1070運行40000次,將近40min。因此若是沒有好的顯卡,那就沒辦法了。70000次時間過久了!
(3)這裏的模型路徑也要修改。確保是D:\goodgoodstudy\FasterRCNNTensorFlowPython3.5master\default\voc_2007_trainval\default否則會一直報錯,找不到模型。
七、準備本身的數據集
在開始訓練本身的數據集以前,必須確保demo和train程序已經跑通!
首先,準備本身的數據集。首先須要進行重命名,按照000001,0000002......下去,
rename程序放在這裏,後續更新(批量重命名)
一、經過標註軟件生成xml文件放在Annotations文件夾下,注意:注意標註的時候必定不要用大寫,不要有空格,建議所有用小寫字母和數字
D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\VOCdevkit2007\VOC2007\Annotations
二、講本身的圖片數據集放在
D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\VOCdevkit2007\VOC2007\JPEGImages, 注意:這裏是.jpg格式圖片,若是是其餘格式須要在程序中修改
三、在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裏的文件,否則測試的時候會報錯!!特別是第二個文件!!!
由於這些文件多是以前爲了跑通程序留下來的,如今咱們更新了數據集,因此,這裏理所固然須要刪除以後進行操做。
八、源碼修改
一、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__是默認的背景,不須要修改,只須要修改後面的類別,改爲本身的類別
二、訓練的參數都在lib\config文件夾中,根據本身的須要進行修改和調試。也能夠先按照默認的嘗試一下~
第一次訓練的時候我對config.py裏面的數據也進行了修改,小試牛刀的時候我把batch_size改爲64,,max_iters改爲1000,snapshot_iterations改爲500,每500次輸出一次模型,後來第一次訓練成功以後,再慢慢把數據改大。
後來我把batch_size改爲256,,max_iters改爲40000,snapshot_iterations改爲5000。
九、測試本身的數據集
首先,將本身須要測試的數據集放在demo的文件夾中,D:\goodgoodstudy\Faster-RCNN-TensorFlow-Python3.5-master\data\demo中
須要修該的地方:
一、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',)}
二、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進行修改
三、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",後面這個數就是你訓練的時候的選擇了幾個類別,這個地方就是幾,包括背景算在內。
四、demo.py第四處
im_names = ['001954.jpg', '002109.jpg', '002000.jpg', '001905.jpg', '002342.jpg'] #這裏的im_names修改成demo文件夾下本身的測試圖片的名字
五、那這裏就存在一個問題,如何批量測試數據集呢?
六、此外,還會發現,這個demo程序只是將同一類的圖像標在一張圖上,那麼如何實現將全部類標在一張圖上。
七、標在一張圖上,我想讓不一樣類別顯示不一樣顏色進行標記呢?
八、若是訓練程序在服務器或者另一臺電腦上操做,直接將checkpoint文件粘貼過來會出現問題?怎麼辦?
567這幾個問題後續慢慢更新,最近須要總結的東西太多了,還有以前不少東西須要整理修改一下!
到此,faster_rcnn算是跑通了,原理也大概瞭解。可是對源碼的解讀還差得遠,後續會對源碼的一些細節進行總結。
十、推薦
推薦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穩定,並且支持無人值守。推薦入手!
八、我是尾巴
寫了這麼多篇博客,是真的醜。暑假必定要把djanggo學了,搭建一個好看點的博客!!!本身都忍不住吐槽本身,是真的難看!!!