Faster-RCNN+ZF安装及训练自己的数据集(视频演示)

Faster-RCNN+ZF安装及训练自己的数据集

主要参考小咸鱼Github:py-faster-rcnn

视频演示链接

1 环境准备

安装 Caffe 和 pycaffe,出门左转可看博主的安装记录,主要是针对 Makefile.config 的修改
在本博主安装时并未开启 USE_CUDNN

2 py-faster-rcnn下载与安装

下载

git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git

编译 Cython 模块

cd py-faster-rcnn/lib
make

编译 Caffe-fast-rcnn and pycaffe

cd $FRCN_ROOT/caffe-fast-rcnn
make -j8 && make pycaffe

下载模型运行 demo.py

./data/scripts/fetch_faster_rcnn_models.sh # Ubuntu下载很慢
./tools/demo.py

下载 VOC 数据集并运行默认训练程序

# 切换路径
cd data/

# 下载数据集
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar

# 解压数据集
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar

# 将 VOCdevkit 文件夹名称 修改为 VOCdevkit2007

# 下载预训练模型并解压到 data 文件夹下
./data/scripts/fetch_imagenet_models.sh

# 运行训练脚本
cd $FRCN_ROOT
./experiments/scripts/faster_rcnn_alt_opt.sh 0 ZF pascal_voc
# 若能完美运行,说明安装成功,即可进行下一步了
3 训练自己的数据集

数据集替换

将自己制作的VOC数据集替换掉 VOCdevkit2007 文件夹内的 Annotations、ImageSets、JPEGImages

网络配置文件修改

# 切换到该路径下
cd py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt/

(1)修改 stage1_fast_rcnn_train.pt(共3处)

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
  }
}

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
    }
  }
}

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
    }
  }
}

(2)修改 stage1_rpn_train.pt(共1处)

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
  }
}

(3)修改 stage2_fast_rcnn_train.pt(共3处),与(1)相同
(4)修改 stage2_rpn_train.pt(共1处),与(2)相同
(5)修改 faster_rcnn_test.pt(共2处),无“data”层

layer {
  name: "cls_score"
  type: "InnerProduct"
  bottom: "fc7"
  top: "cls_score"
  inner_product_param {
    num_output: 2 #按训练集类别改,该值为类别数+1
  }
}

layer {
  name: "bbox_pred"
  type: "InnerProduct"
  bottom: "fc7"
  top: "bbox_pred"
  inner_product_param {
    num_output: 8 #按训练集类别改,该值为(类别数+1)*4
  }
}

标签文件修改

# 切换到以下路径
cd py-faster-rcnn/lib/datasets/

(6)修改 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'
                      )

(7)修改py-faster-rcnn/lib/datasets/imdb.py(可选)
本博主并未修改,并未报错

训练前的准备

  • 防止与之前的模型搞混,训练前把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]

训练模型

cd $FRCN_ROOT
./experiments/scripts/faster_rcnn_alt_opt.sh 0 ZF pascal_voc
4 模型评估与检测
4.1 视频流检测

在 data/ 目录下新建 faster_rcnn_models 文件夹,将训练好的 ZF 模型 ZF_faster_rcnn_final.caffemodel 放在文件夹内;

下载 demo_video.py 文件,放在 tools 目录下,直接运行即可。

# 可根据自己情况修改以下两处
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 [zf]',
                        choices=NETS.keys(), default='zf')  # vgg16 或 zf

videoCapture = cv2.VideoCapture('/home/hitwh/workspace/py-faster-rcnn/data/test.mp4')  # 视频路径
4.2 绘制P-R曲线

方法1:

Faster R-CNN 训练网络在输出网络模型的同级文件夹里有每一类检测目标每类图片的准确率和召回率, 可以绘制准确率召回率 (Precision-recall, PR) 曲线, PR 曲线的面积即准确率的值. 该文件存储在output/faster_rcnn_alt_opt/voc_2007_test/ZF_faster_rcnn_final/.pkl**下
运行 pr-curve.py 即可输出
在这里插入图片描述

方法二:修改pascal_voc.py
参考Faster R-CNN 绘制 precision-recall曲线
下载 pascal_voc.py 文件,运行命令

./tools/test_net.py --gpu 0 --def models/pascal_voc/ZF/faster_rcnn_alt_opt/faster_rcnn_test.pt --net output/faster_rcnn_alt_opt/voc_2007_trainval/zf_faster_rcnn_stage2_iter_40000.caffemodel --cfg experiments/cfgs/faster_rcnn_alt_opt.yml```
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

la_fe_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值