1. 引言
在上一篇我们详述了如何将Caltech数据集转化成VOC格式的数据集,在使用之前,我们需要编写读取数据集的接口
2. 先上结果
下图是进行了50000次训练后,在测试集上进行训练的结果。我这个结果偏低,因为有person和people的区分在内部会导致一些测试出错。
下图是从网络上随意下载的一副图像,前面的那个那么明显的人都没有检测到!!!不明白为什么,难道是穿着问题?
虽然上述两图反映出检测的准确率不是很理想,但是说明整个训练流程没有问题,我们将在后面的过程对网络的参数进行优化。
3. 训练自己的数据集
假设这里我们已经按照前一篇文章,制作了数据集。以Caltech行人数据集为例,我们需要编写数据集的读取接口,并且修改训练脚本和配置文件等。
3.1 编写数据集的读取接口
1.修改lib/datasets/pascal_voc.py文件
复制一份pascal_voc文件,重命名为caltech.py,在这份文件上进行修改。
__init__(self,image_set,year,devkit_path=None)
该函数是数据集的构造函数,主要包含了该数据集的一些属性。
修改后:
#删除掉year,因为我们的数据集也没有什么年份
def __init__(self, image_set,devkit_path=None):
imdb.__init__(self, image_set)
#image_set指的是train.txt或者是test.txt
self._image_set = image_set
#这个路径是数据集的整个大路径,比如我们的项目是/home/user2/chen_guang_hao/PeDetect/smallcorgi/Faster-RCNN_TF-master/data/VOCdevkit2007,在这个路径下我放置了Caltech数据集
self._devkit_path = devkit_path
#参考前一句话
self._data_path = os.path.join(self._devkit_path, 'Caltech')
#注意,这里是修改位置,在这个位置需要修改类别
#因为Caletch的标准中有person,people等好几种人,所以我就取了people和person两种类别,正常的话应该就是background和person
self._classes = ('__background__','person','people')
self._class_to_ind = dict(zip(self.classes, xrange(self.num_classes)))
self._image_ext = '.jpg'
self._image_index = self._load_image_set_index()
# Default to roidb handler
#self._roidb_handler = self.selective_search_roidb
self._roidb_handler = self.gt_roidb
self._salt = str(uuid.uuid4())
self._comp_id = 'comp4'
# PASCAL specific config options
self.config = {
'cleanup' : True,
'use_salt' : True,
#这里use diff的值修改成true了,忘记为什么了
'use_diff' : True,
'matlab_eval' : False,
'rpn_file' : None,
'min_size' : 2}
assert os.path.exists(self._devkit_path), \
'VOC