熟悉了github項目提供的訓練測試後,能夠來訓練本身的數據了。本文只介紹改動最少的方法,只訓練2個類,html
即本身添加的類(如person)和 background,使用的數據格式爲pascal_voc。git
1.訓練數據的準備
先來看看data下的目錄:github
(1)Annotations 存放全部訓練數據的xml文件,是圖片的標註數據,緩存
能夠使用labelImg工具生成。github地址:https://github.com/tzutalin/labelImg.git
(2)ImageSets 底下有個main文件夾,裏面放的是4個txt文件,ide
分別爲 test.txt,train.txt,trainval.txt,val.txt。工具
每一個文件存放的都是相應的圖片數據名稱,不含後綴。
trainval是train和val的合集,二者的比例能夠爲1:1。測試
生成txt文件的方法能夠參考本人的另外一篇blog:http://www.cnblogs.com/danpe/p/7859635.html
(3)JPEGImages 是存放全部訓練圖片的目錄。spa
注:修改成訓練數據後,須要刪除data/cache 下的pkl文件,否則不會去獲取修改的數據,而是使用該緩存。
2.修改項目部分代碼文件
因爲咱們只訓練了2個類,因此須要對代碼中有關類的數目的地方進行修改。
(1)lib/datasets/pascal_voc.py .net
class pascal_voc(imdb): def __init__(self, image_set, year, devkit_path=None): imdb.__init__(self, 'voc_' + year + '_' + image_set) self._year = year self._image_set = image_set self._devkit_path = self._get_default_path() if devkit_path is None \ else devkit_path self._data_path = os.path.join(self._devkit_path, 'VOC' + self._year)
# modified # 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')
self._classes = ('__background__', # always index 0 'person')
(2)lib/datasets/pascal_voc2.py,與pascal_voc.py文件相似。
(3)lib/networks/VGGnet_train.py code
import tensorflow as tf from networks.network import Network #define
# modified #n_classes = 21 n_classes = 2 _feat_stride = [16,] anchor_scales = [8, 16, 32]
(4)lib/networks/VGGnet_test.py,與VGGnet_train.py文件相似。
(5)tools/demo.py
import os, sys, cv2 import argparse from networks.factory import get_network
# modified #CLASSES = ('__background__', # 'aeroplane', 'bicycle', 'bird', 'boat', # 'bottle', 'bus', 'car', 'cat', 'chair', # 'cow', 'diningtable', 'dog', 'horse', # 'motorbike', 'person', 'pottedplant', # 'sheep', 'sofa', 'train', 'tvmonitor') CLASSES = ('__background__', 'person')
注:若是修改的.py文件有對應的.pyc文件,須要對pyc文件從新編譯,方法爲
import py_compile py_compile.compile(dir/filename)
3.執行訓練的腳本 ./experiments/scripts/faster_rcnn_end2end.sh $DEVICE $DEVICE_ID VGG16 pascal_voc