SSD源码训练的是三通道彩色图像,原因是因为我们采用的特征提取网络都是ImageNet预训练模型,这需要三个通道的输入。
但这样只是掩耳盗铃,这样只会复制灰色通道三次以获得三通道图像,最终看起来与单通道灰色图像相同。具体可以在OpenCV的Gray2RGB中查看详细解释。
方法有两种,一种是修改图片和标签
1.修改图片的MATLAB代码
path = 'C:/Users/Administrator/Desktop/train300/';
save_path = 'C:/Users/Administrator/Desktop/train/';
img=dir([path,'*.jpg']);
for i=1:length(img)
I=imread([path,img(i).name]);
[rows,cols]=size(I);
r=zeros(rows,cols);
g=zeros(rows,cols);
b=zeros(rows,cols);
r=double(I);
g=double(I);
b=double(I);
rgb=cat(3,r,g,b);
imwrite(uint8(rgb),[save_path,img(i).name]);
end
然后修改标签,将标签文件...xml 的 depth 改为3。
2.将ssd_pascal.py文件或train.prototxt(test.prototxt)中的transform_param添加一行代码即可
transform_param {
mean_value: 104.0
mean_value: 117.0
mean_value: 123.0
force_color: True ###加入此行代码
resize_param {
prob: 1.0
resize_mode: WARP
height: 300
width: 300
interp_mode: LINEAR
}
}