为了确保不出问题,可以在pascal voc数据集上测试一遍。具体操作参考:https://mp.youkuaiyun.com/console/editor/html/105561069
首先,你需要制作好自己的数据集,数据集格式与pascal voc2007相同。数据集制作请参考:
https://blog.youkuaiyun.com/ly_twt/article/details/105772354
一、
在进行过pascal voc数据集的训练测试成功后。将以下文件夹删除:
(1)output文件夹
(2)py-faster-rcnn/data/cache中的文件
(3)py-faster-rcnn/data/VOCdevkit2007软链接
用你数据集中的Annotations,ImageSets,JPEGImages替换py-faster-rcnn/data/VOCdevkit/VOC2007中对应文件夹。
二、
需要修改一些文件:
(1)
py-faster-rcnn-master/lib/datasets/pascal_voc.py
第一处:在第30行,除了_background_不改,其他的改成你自己数据集的类别。
(可选)第二处:在212行。如果你的标签中含有大写字母,可能会出现KeyError的错误,就需要将该行中的lower()去掉。另外,建议标签用小写字母。
(2)
py-faster-rcnn-master/models/pascal_voc/VGG_CNN_M_1024/faster_rcnn_end2end/train.prototxt
第一处:在第11行,将21改成你自己数据集‘类别数+1’,例如你数据集中有17种类别,那这里就改成18.
第二处:在第341行,将21改成你自己数据集‘类别数+1’。
第三处:在431行,将21改成你自己数据集‘类别数+1’。
第四处:在454行,将84改成'(类别数+1)*4’,如果你的类别数是17,那么就改成72
(3)
py-faster-rcnn-master/models/pascal_voc/VGG_CNN_M_1024/faster_rcnn_end2end/test.prototxt
第一处:在409行,将21改成你自己数据集‘类别数+1’
第二处:在434行,将84改成'(类别数+1)*4’
(4)为避免标定区域溢出错误,需要进行以下修改:
一般错误如下:
File "/py-faster-rcnn/tools/../lib/datasets/imdb.py", line 108, in append_flipped_images
assert (boxes[:, 2] >= boxes[:, 0]).all()
AssertionError
第一处:
py-faster-rcnn/lib/datasets/imdb.py
在第102行这个函数中进行修改:在110和111行中间插入以下代码
for b in range(len(boxes)):
if boxes[b][2]< boxes[b][0]:
boxes[b][0] = 0
第二处:
py-faster-rcnn-master/lib/datasets/pascal_voc.py
将第208,209,210,211行中的-1去掉。
至此,你可以开始训练测试了。训练测试步骤与pascal voc相同,参考:https://mp.youkuaiyun.com/console/editor/html/105561069
遇到的问题:
1、
问题:
ValueError:operands could not be broadcast together with shapes (72, 1024)
解决:
在上面修改文件的时候没改对。
2、
问题:
TypeError: slice indices must be integers or None or have an __index__ method
解决:
第一处:
lib/rpn/proposal_target_layer.py
在第123行的for循环中,如下:(这里的ind,start,end都是 numpy.int 类型,这种类型的数据不能作为索引,所以必须对其进行强制类型转换)
改成:
第二处:
py-faster-rcnn/lib/roi_data_layer/minibatch.py
在172行的for循环中,
改为:
3、
问题:
出现u'\ufeff或者xml.etree.ElementTree.ParseError: not well-formed (invalid token): line 99, column 8
原因:xml文件中存在乱码
这里就要提醒大家,在标注过程中一定要严格:
①标注文件(图片,xml,标注工具等)存放路径一定不要出现中文。
②标签一定不要出现中文。最好用小写母。‘-’最好使用‘_’代替。
③xml文件用utf-8编码。
4、
问题:
测试出现:IndexError: too many indices for array
解决:
lib/datasets/voc_eval.py
在147和148行中间插入以下代码:
if len(BB) != 0:
BB = BB[sorted_ind, :]