win10+endernewton版本faster rcnn编译训练自己的数据集

一、endernewton版本faster rcnn源码运行

个人使用的是git-bash+MinGW模拟linux命令行环境,本文中shell语句如未说明在CMD终端下均为在git-bash下执行。

1.  一定要使用这个源码

https://github.com/endernewton/tf-faster-rcnn/issues/335

 

2. 编译Cypthon模块

转自https://github.com/endernewton/tf-faster-rcnn/issues/335

如果报错:gpu_nms.cpp(2147): error C2664: 'void _nms(int *,int *,const float *,int,int,float,int)': cannot convert argument 1 from '__pyx_t_5numpy_int32_t *' to 'int *'

解决方案:

Change the generated file “gpu_nms.cpp” in line 2074:

_nms((&(*__Pyx_BufPtrStrided1d(__pyx_t_5numpy_int32_t *, __pyx_pybuffernd_keep.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_keep.diminfo[0].strides))), (&__pyx_v_num_out), (&(*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_sorted_dets.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_sorted_dets.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_sorted_dets.diminfo[1].strides))), __pyx_v_boxes_num, __pyx_v_boxes_dim, __pyx_t_14, __pyx_v_device_id);

to:

_nms((&(*__Pyx_BufPtrStrided1d(int *, __pyx_pybuffernd_keep.rcbuffer->pybuffer.buf, __pyx_t_10, __pyx_pybuffernd_keep.diminfo[0].strides))), (&__pyx_v_num_out), (&(*__Pyx_BufPtrStrided2d(__pyx_t_5numpy_float32_t *, __pyx_pybuffernd_sorted_dets.rcbuffer->pybuffer.buf, __pyx_t_12, __pyx_pybuffernd_sorted_dets.diminfo[0].strides, __pyx_t_13, __pyx_pybuffernd_sorted_dets.diminfo[1].strides))), __pyx_v_boxes_num, __pyx_v_boxes_dim, __pyx_t_14, __pyx_v_device_id);

 

3.  安装COCO API

  • 从https://github.com/philferriere/cocoapi下载源码,并解压到tf-faster-rcnn/data/文件夹下
  • 终端进入到*/cocoapi-master/PythonAPI目录下,执行shell语句:
python setup.py build_ext

 

4. 下载预训练模型

预训练模型:链接:预训练模型 提取码:4k5c

解压后将voc_2007_trainval+voc_2012_trainval文件夹放在data目录下,同时在tf-faster-rcnn根目录下新建output/res101/voc_2007_trainval+voc_2012_trainval/default,将voc_2007_trainval+voc_2012_trainval下的4个模型数据文件复制到default中。

5. 运行demo

# at repository root  要在tf-faster-rcnn根目录下
GPU_ID=0
CUDA_VISIBLE_DEVICES=${GPU_ID} ./tools/demo.py
 

二、训练自己的voc数据集

1. 制作voc数据集,下载权重:下载链接:Resnet101 提取码:x73i

    在tf-faster-rcnn/data下新建imagenet_weights文件夹,将解压后的模型放到该文件夹下,同时将vgg_16.ckpt修改为vgg16.ckptresnet_v1_101.ckpt修改为 res101.ckpt。本文中仅使用了res101。

2. 需要把之前训练产生的模型以及cache删除掉,分别在tf-faster-rcnn/output/res101/voc_2007_trainval/default路径下和tf-faster-rcnn/data/cache路径下。

 

3. 修改代码:类别,迭代次数、学习率等超参数

    首先,在tf-faster-rcnn/lib/datasets目录下的pascal_voc.py里第36行更改自己的类别,'__background__'切记不可删掉,把后面的原来的20个label换成自己的,不用更改类别数目,代码中会自己计算该元组的长度获得类别数目。

   修改lib/datasets/imdb.py
第25行_num_classes=? 换成你自己的类+1

    其他参数如迭代次数,snap,学习率等参数在tf-faster-rcnn/lib/model/config.py中修改。

4.  训练

/experiments/scripts/train_faster_rcnn.sh中的第62/73行中的time删掉

./experiments/scripts/train_faster_rcnn.sh 0 pascal_voc res101
 

 

你可能感兴趣的:(深度学习)