个人使用的是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
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
1. 制作voc数据集,下载权重:下载链接:Resnet101 提取码:x73i
在tf-faster-rcnn/data
下新建imagenet_weights
文件夹,将解压后的模型放到该文件夹下,同时将vgg_16.ckpt
修改为vgg16.ckpt
,resnet_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