一、使用VOC数据集训练
1. 克隆Github代码
git clone https://github.com/endernewton/tf-faster-rcnn.git
2. 配置修改
cd ./tf-faster-rcnn/lib
vim setup.py
服务器为GTX 1060,第135行左右,-arch 改为 sm_61
3. 编译
lib文件夹下:
make clean
make
4. VOC数据集下载
下载地址:
VOCtrainval_06-Nov-2007
VOCtest_06-Nov-2007
VOCdevkit_08-Jun-2007
目录位置:
data/VOCdevkit2007/VOCode
data/VOCdevkit2007/VOC2007
说明:
test与trainval合并。
其中SegmentationClass与SegmentationObject,对目标识别而言无用。
5. 预训练权重下载
下载地址:
pre-trained-models
存放位置:
data/imagenet_weights/res101.ckpt
6. 错误修改
由于Python版本原因,有一处需要修改。不然运行test_faster_rcnn.sh时,会报错。
修改内容如下,参考博客https://blog.csdn.net/hitzijiyingcai/article/details/81808091:
lib/datasets/voc_eval.py
- 第121行
with open(cachefile,'w') as f
修改为
with open(cachefile,'wb') as f
- 第105行
cachefile = os.path.join(cachedir, '%s_annots.pkl' % imagesetfile)
修改为
cachefile = os.path.join(cachedir, '%s_annots.pkl' % imagesetfile.split("/")[-1].split(".")[0])
7. 训练测试
experiments/scripts/train_faster_rcnn.sh,experiments/scripts/test_faster_rcnn.sh 中分别修改相同的迭代次数。
./experiments/scripts/train_faster_rcnn.sh 0 pascal_voc res101
二、使用自身数据集训练
1. 准备数据集
准备自己的数据集,替代data/VOCdevkit2007/VOC2007中的内容。制作步骤,可以参考博客https://blog.csdn.net/hitzijiyingcai/article/details/81636455
2. 修改部分代码,训练测试
lib/datasets/pascal_voc.py 中,修改self._classes
./experiments/scripts/train_faster_rcnn.sh 0 pascal_voc res101
3. 遇到的问题记录
- 训练过程中,出现loss = nan,且报错:_sample_rois() -> keep_inds = np.append(fg_inds, bg_inds)
这一类错误,均是由图片的标签数据有问题导致的。
我的问题出现在,标签中xmin或ymin有0值。如下图所示,使用lib/datasets/pascol_voc.py读取标签数据时,-1操作导致:原坐标为0时,值最终存储为65535。因此将此处的-1操作删除。
对应的,如果你有将翻转图像加入到训练集中,在lib/datasets/imdb.py的第117行左右,也应把两个-1操作删除。
- 修改lib/datasets/voc_eval.py
由于我的xml文件中,没有设置pose与truncated,因此在此处删除。由于xml文件中的四个坐标,均用小数表示,因此在此处应先使用“float(bbox.find(‘xmin’).text)”。
4. 运行demo
第33行。修改classes
第35行。修改ckpt的名字
第101行。设置默认的net
第103行。设置默认的数据集格式
第115行。设置ckpt存放的地址
第136行。修改类别的个数
第143行。修改demo中的图片名称
接着可以运行
python ./tools/demo.py