Faster_Rcnn在windows下運行踩坑總結


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM