日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

py-faster-rcnn用自己的数据训练模型

發布時間:2024/9/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 py-faster-rcnn用自己的数据训练模型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

環境:

  • ubuntu14.04
  • CUDA7.5
  • python2.7
  • opencv2.0以上

caffe及py-faster-rcnn的配置安裝過程可以參考我的另一篇博客:深度學習框架caffe及py-faster-rcnn詳細配置安裝過程

做訓練數據集的過程可以參考這篇博客:將數據集做成VOC2007格式用于Faster-RCNN訓練

1、下載VOC2007數據集

百度云地址:http://pan.baidu.com/s/1gfdSFRX
解壓,然后,將該數據集放在py-faster-rcnn\data目錄下,用你的訓練數據集替換VOC2007數據集。(替換Annotations,ImageSets和JPEGImages)
(用你的Annotations,ImagesSets和JPEGImages替換py-faster-rcnn\data\VOCdevkit2007\VOC2007中對應文件夾)
文件結構如下所示:

wlw@wlw:~/language/caffe/py-faster-rcnn/data/VOCdevkit2007$ ls results VOC2007 wlw@wlw:~/language/caffe/py-faster-rcnn/data/VOCdevkit2007/results/VOC2007$ ls Layout Main Segmentation
wlw@wlw:~/language/caffe/py-faster-rcnn/data/VOCdevkit2007/VOC2007$ ls Annotations ImageSets JPEGImages
  • 1
  • 2
  • 1
  • 2

Annotations中是所有的xml文件
JPEGImages中是所有的訓練圖片
Main中是4個txt文件,其中test.txt是測試集,train.txt是訓練集,val.txt是驗證集,trainval.txt是訓練和驗證集

2、訓練前的一些修改

(1)py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt/stage1_fast_rcnn_train.pt修改

layer { name: 'data' type: 'Python' top: 'data' top: 'rois' top: 'labels' top: 'bbox_targets' top: 'bbox_inside_weights' top: 'bbox_outside_weights' python_param { module: 'roi_data_layer.layer' layer: 'RoIDataLayer' param_str: "'num_classes': 2" #按訓練集類別改,該值為類別數+1 } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
layer { name: "cls_score" type: "InnerProduct" bottom: "fc7" top: "cls_score" param { lr_mult: 1.0 } param { lr_mult: 2.0 } inner_product_param { num_output: 2 #按訓練集類別改,該值為類別數+1 weight_filler { type: "gaussian" std: 0.01 } bias_filler { type: "constant" value: 0 } } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
layer { name: "bbox_pred" type: "InnerProduct" bottom: "fc7" top: "bbox_pred" param { lr_mult: 1.0 } param { lr_mult: 2.0 } inner_product_param { num_output: 8 #按訓練集類別改,該值為(類別數+1)*4 weight_filler { type: "gaussian" std: 0.001 } bias_filler { type: "constant" value: 0 } } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

(2)py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt/stage1_rpn_train.pt修改

layer { name: 'input-data' type: 'Python' top: 'data' top: 'im_info' top: 'gt_boxes' python_param { module: 'roi_data_layer.layer' layer: 'RoIDataLayer' param_str: "'num_classes': 2" #按訓練集類別改,該值為類別數+1 } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

(3)py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt/stage2_fast_rcnn_train.pt修改

layer { name: 'data' type: 'Python' top: 'data' top: 'rois' top: 'labels' top: 'bbox_targets' top: 'bbox_inside_weights' top: 'bbox_outside_weights' python_param { module: 'roi_data_layer.layer' layer: 'RoIDataLayer' param_str: "'num_classes': 2" #按訓練集類別改,該值為類別數+1 } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
layer { name: "cls_score" type: "InnerProduct" bottom: "fc7" top: "cls_score" param { lr_mult: 1.0 } param { lr_mult: 2.0 } inner_product_param { num_output: 2 #按訓練集類別改,該值為類別數+1 weight_filler { type: "gaussian" std: 0.01 } bias_filler { type: "constant" value: 0 } } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
layer { name: "bbox_pred" type: "InnerProduct" bottom: "fc7" top: "bbox_pred" param { lr_mult: 1.0 } param { lr_mult: 2.0 } inner_product_param { num_output: 8 #按訓練集類別改,該值為(類別數+1)*4 weight_filler { type: "gaussian" std: 0.001 } bias_filler { type: "constant" value: 0 } } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

(4)py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt/stage2_rpn_train.pt修改

layer { name: 'input-data' type: 'Python' top: 'data' top: 'im_info' top: 'gt_boxes' python_param { module: 'roi_data_layer.layer' layer: 'RoIDataLayer' param_str: "'num_classes': 2" #按訓練集類別改,該值為類別數+1 } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

(5)py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt/faster_rcnn_test.pt修改

layer { name: "cls_score" type: "InnerProduct" bottom: "fc7" top: "cls_score" inner_product_param { num_output: 2 #按訓練集類別改,該值為類別數+1 } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
layer { name: "bbox_pred" type: "InnerProduct" bottom: "fc7" top: "bbox_pred" inner_product_param { num_output: 8 #按訓練集類別改,該值為(類別數+1)*4 } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

(6)py-faster-rcnn/lib/datasets/pascal_voc.py修改

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) self._classes = ('__background__', # always index 0 '你的標簽1','你的標簽2','你的標簽3','你的標簽4' )
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

將其中

self._classes = ('__background__', # always index 0 '你的標簽1','你的標簽2','你的標簽3','你的標簽4' )
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

中的標簽修改成你的數據集的標簽。

(7)py-faster-rcnn/lib/datasets/imdb.py修改

該文件的append_flipped_images(self)函數修改為:

def append_flipped_images(self): num_images = self.num_images widths = [PIL.Image.open(self.image_path_at(i)).size[0] for i in xrange(num_images)] for i in xrange(num_images): boxes = self.roidb[i]['boxes'].copy() oldx1 = boxes[:, 0].copy() oldx2 = boxes[:, 2].copy() boxes[:, 0] = widths[i] - oldx2 - 1 print boxes[:, 0] boxes[:, 2] = widths[i] - oldx1 - 1 print boxes[:, 0] assert (boxes[:, 2] >= boxes[:, 0]).all() entry = {'boxes' : boxes, 'gt_overlaps' : self.roidb[i]['gt_overlaps'], 'gt_classes' : self.roidb[i]['gt_classes'], 'flipped' : True} self.roidb.append(entry) self._image_index = self._image_index * 2
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

(8)其他
為防止與之前的模型搞混,訓練前把output文件夾刪除(或改個其他名),還要把py-faster-rcnn/data/cache中的文件和
py-faster-rcnn/data/VOCdevkit2007/annotations_cache中的文件刪除(如果有的話)。
至于學習率等之類的設置,可在py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt中的solve文件設置,迭代次數可在py-faster-rcnn/tools的train_faster_rcnn_alt_opt.py中修改:

max_iters = [80000, 40000, 80000, 40000]
  • 1
  • 1

分別為4個階段(rpn第1階段,fast rcnn第1階段,rpn第2階段,fast rcnn第2階段)的迭代次數。可改成你希望的迭代次數。
如果改了這些數值,最好把py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt里對應的solver文件(有4個)也修改,stepsize小于上面修改的數值。

3、訓練

在py-faster-rcnn根目錄下執行:

./experiments/scripts/faster_rcnn_alt_opt.sh 0 ZF pascal_voc
  • 1
  • 1

訓練結束如下圖所示:

在py-faster-rcnn/output/faster_rcnn_alt_opt/voc_2007_trainval/下會有ZF_faster_rcnn_final.caffemodel ,這就是我們用自己的數據集訓練得到的最終模型。

wlw@wlw:~/language/caffe/py-faster-rcnn/output/faster_rcnn_alt_opt/voc_2007_trainval$ ls ZF_faster_rcnn_final.caffemodel zf_rpn_stage1_iter_80000.caffemodel zf_rpn_stage2_iter_80000_proposals.pkl zf_fast_rcnn_stage1_iter_40000.caffemodel zf_rpn_stage1_iter_80000_proposals.pkl zf_fast_rcnn_stage2_iter_40000.caffemodel zf_rpn_stage2_iter_80000.caffemodel
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

4、測試

將上述的ZF_faster_rcnn_final.caffemodel復制到py-faster-rcnn\data\faster_rcnn_models,修改修改:
py-faster-rcnn\tools\demo.py:

CLASSES = ('__background__', '你的標簽1', '你的標簽2', '你的標簽3', '你的標簽4')
  • 1
  • 2
  • 1
  • 2

改為之前的訓練數據集的標簽。
在修改def parse_args()函數:

parser.add_argument('--net', dest='demo_net', help='Network to use [vgg16]',choices=NETS.keys(), default='zf')
  • 1
  • 2
  • 1
  • 2

選擇模型ZF:default=’zf’

注:
若修改了模型的名稱,如將ZF_faster_rcnn_final.caffemodel重命名為CAR_faster_rcnn_final.caffemodel,并將需要檢測的圖片放在/data/car/
目錄下,則還需要修改py-faster-rcnn\tools\demo.py:

NETS = {'vgg16': ('VGG16','VGG16_faster_rcnn_final.caffemodel'),'ldlidar': ('LDLIDAR','LDLIDAR_faster_rcnn_final.caffemodel')}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 1
  • 2
  • 3
  • 4
  • 5
# Load the demo image im_file = os.path.join(cfg.DATA_DIR, 'ldlidar', image_name) im = cv2.imread(im_file)
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3
def parse_args():"""Parse input arguments."""parser = argparse.ArgumentParser(description='Faster R-CNN demo')parser.add_argument('--gpu', dest='gpu_id', help='GPU device id to use [0]',default=0, type=int)parser.add_argument('--cpu', dest='cpu_mode',help='Use CPU mode (overrides --gpu)',action='store_true')parser.add_argument('--net', dest='demo_net', help='Network to use [vgg16]',choices=NETS.keys(), default='ldlidar')args = parser.parse_args()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
path = '/home/wlw/language/caffe/py-faster-rcnn/data/ldlidar'for filename in os.listdir(path):im_name = filenameprint '~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'print 'Demo for data/ldlidar/{}'.format(im_name)demo(net, im_name)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

運行demo.py

cd ./tools python demo.py
  • 1
  • 2
  • 1
  • 2

5、可能遇到的問題

(1)

Traceback (most recent call last):File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrapself.run()File "/usr/lib/python2.7/multiprocessing/process.py", line 114, in runself._target(*self._args, **self._kwargs)File "./tools/train_faster_rcnn_alt_opt.py", line 189, in train_fast_rcnnroidb, imdb = get_roidb(imdb_name, rpn_file=rpn_file)File "./tools/train_faster_rcnn_alt_opt.py", line 67, in get_roidbroidb = get_training_roidb(imdb)File "/home/wlw/language/caffe/py-faster-rcnn/tools/../lib/fast_rcnn/train.py", line 118, in get_training_roidbimdb.append_flipped_images()File "/home/wlw/language/caffe/py-faster-rcnn/tools/../lib/datasets/imdb.py", line 114, in append_flipped_imagesassert (boxes[:, 2] >= boxes[:, 0]).all()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

這是因為用于訓練的圖片中的標記的左上角坐標(x,y)可能為0,或標記的區域溢出圖片。而faster rcnn會對Xmin,Ymin,Xmax,Ymax進行減一操作,如果Xmin為0,減一后變為65535。
解決方法:
修改lib/datasets/imdb.py中的append_flipped_images()函數:
在代碼

boxes[:, 2] = widths[i] - oldx1 - 1
  • 1
  • 1

下,添加代碼:

for b in range(len(boxes)):if boxes[b][2] < boxes[b][0]:boxes[b][0] = 0
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

若仍不能解決,修改lib/datasets/pascal_voc.py中的_load_pascal_annotation()函數,將其中將對Xmin,Ymin,Xmax,Ymax減一去掉,改為:

for ix, obj in enumerate(objs):bbox = obj.find('bndbox')# Make pixel indexes 0-basedx1 = float(bbox.find('xmin').text)y1 = float(bbox.find('ymin').text)x2 = float(bbox.find('xmax').text)y2 = float(bbox.find('ymax').text)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

(2)

Traceback (most recent call last):File "./tools/test_net.py", line 90, in <module>test_net(net, imdb, max_per_image=args.max_per_image, vis=args.vis)File "/home/wlw/language/caffe/py-faster-rcnn/tools/../lib/fast_rcnn/test.py", line 295, in test_netimdb.evaluate_detections(all_boxes, output_dir)File "/home/wlw/language/caffe/py-faster-rcnn/tools/../lib/datasets/pascal_voc.py", line 317, in evaluate_detectionsself._write_voc_results_file(all_boxes)File "/home/wlw/language/caffe/py-faster-rcnn/tools/../lib/datasets/pascal_voc.py", line 244, in _write_voc_results_filewith open(filename, 'wt') as f: IOError: [Errno 2] No such file or directory: '/home/wlw/language/caffe/py-faster-rcnn/data/VOCdevkit2007/results/VOC2007/Main/comp4_507d2b05-379f-4cf1-a1d4-5bd729d32fb0_det_test_building.txt'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

解決方法:檢查./data/VOCdevkit2007文件夾是否復制完整,./data/VOCdevkit2007/results/VOC2007目錄下是否有Layout Main Segmentation三個文件夾。

參考資料:

Faster-RCNN+ZF用自己的數據集訓練模型(Python版本)
解決faster-rcnn中訓練時assert(boxes[:,2]>=boxes[:,0]).all()的問題
Faster RCNN 訓練自己的檢測模型

總結

以上是生活随笔為你收集整理的py-faster-rcnn用自己的数据训练模型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产在线高潮 | 色香色香欲天天天影视综合网 | 五月天婷婷激情网 | 丁香七月婷婷 | 国精品一区 | 国产美女精品人人做人人爽 | 国产精品久久久久久久久久久久久 | 欧美一区二区三区久久妖精 | 女性向av免费网站 | 精品视频一二区 | 黄网站免费大全入口 | 国产做受入口竹菊 | 国产精品综合久久久久久 | 国产黄色一级片视频 | 亚洲激情社区 | 日韩一区二区免费视频 | 丁香美女社区 | 狠狠干2021 | 99久| 性av网站| 国产精品免费无码 | 一本色道久久综合亚洲精品小说 | 久草五月天 | 男人肌肌桶女人肌肌 | 闷骚老干部cao个爽 av九九九 | 中文字幕av片 | 久热免费视频 | 欧美一级不卡 | 精品一区二区三区免费视频 | 日本丰满少妇裸体自慰 | 黄色大片在线免费观看 | 99亚洲天堂| 18成人免费观看视频 | 国产日本亚洲 | 亚洲黄色片免费看 | 日韩网站免费 | 日韩精品导航 | 天天干天天看 | 午夜伦理av | 色综合免费视频 | 免费人成网站 | 久久久不卡国产精品一区二区 | 亚洲精品伊人 | 欧美性猛交xxxx | 亚洲视频欧美 | 奇米第四色影视 | 色涩综合 | 日本v视频| 亚洲国产黄色av | 97在线观看免费视频 | 国产一av | 久久精品伊人 | 久操不卡 | 久久久久久久中文字幕 | 亚洲视频在线播放 | 中文毛片无遮挡高潮免费 | 狂野少女电影在线观看国语版免费 | 朝桐光av一区二区三区 | 成人免费无码大片a毛片 | 中文精品视频 | 日韩精品在线视频观看 | 成人h动漫精品一区二区器材 | 深爱婷婷 | 99热18| 久久精品亚洲a | 欧美成人一区二免费视频软件 | 老司机激情影院 | 韩日一区二区三区 | 91精品视频免费观看 | 欧美国产一二三区 | 国产视频不卡 | 国产精品丝袜黑色高跟鞋 | 久草热播 | 日韩中文字幕视频在线 | 国产福利小视频 | 97精品一区二区视频在线观看 | 俄罗斯精品一区二区三区 | 国产91在线播放 | 国产精品亚洲综合 | 伊人网站在线观看 | 国语对白久久 | se婷婷| 伊人久久爱 | 亚洲精品国产99 | 亚洲av成人无码一二三在线观看 | 天天干夜夜骑 | 91午夜剧场 | 亚洲一区电影 | 亚洲永久精品一区 | 精品少妇 | 成人免费视频国产在线观看 | 免费三片在线播放 | 亚洲专区在线视频 | 国产又粗又猛又爽69xx | 黄视频免费观看 | 一边吃奶一边摸做爽视频 | 性高跟丝袜xxxxhd | 极品销魂美女一区二区 | 激情国产 |