Faster_Rcnn在windows下運行踩坑總結

Faster_Rcnn在windows下運行踩坑總結

 20190524  今天又是元氣滿滿的一天!html

一、代碼下載

二、編譯

三、下載數據集

四、下載pre-train Model

五、運行train

六、運行demo文件

七、準備本身的數據集

八、修改源碼

九、測試本身的數據集(未完待更)

十、推薦

 

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學了,搭建一個好看點的博客!!!本身都忍不住吐槽本身,是真的難看!!!

相關文章
相關標籤/搜索