使用COCO2014训练SSD网络。
参照https://github.com/weiliu89/coco.git的方法处理数据集。
生成lmdb格式数据。
开始训练之后报这种错误。
OpenCV Error: Assertion failed ((scn == 3 || scn == 4) && (depth == CV_8U || depth == CV_32F)) in cvtColor。
各种搜索之后发发现是因为SSD只支持3通道的RGB图像。(也有人说是因为训练图像可能最小边<300,这样resize到固定300x300的时候就会有问题)
解决方案有两个(反正这两个方案对我的问题都有效,不过我选择了第二个):
1. 修改resize_mode为FIT_SMALL_SIZE,batch_size=1.
虽然能解决问题,但是batch_size设为1可能会导致无法收敛等问题,而且所有图像尺寸也不是统一的300x300了,训练的结果就会和原作者有误差,所以我没选择次方案。
2.从训练集中选出灰度图,然后删掉,重新生成lmdb文件重新训练。筛选代码如下,我是用matlab写的:
fid=fopen('/your_root/new_train.txt','wt');%新建一个txt列表
lst = ['/your_root/train.txt']; %要读取的列表所在的路径
imgpath = '/image_root/MS-COCO2014/';
count = 0;