caffe中各语言预处理对应方式

来源:互联网 发布:华为网络机顶盒 编辑:程序博客网 时间:2024/06/08 06:29

caffe有C++、matlab和python三种实现,如果搞不懂里面的细节的话很容易误入歧途,总结如下:


C++用opencv读进去是BGR格式,CV_32FC3,0-255之间,[h,w,c]排列,需要用warpInputLayer转换成[c,h,w]排列,然后再减均值即可

cv::Mat sample_normalized;
cv::subtract(sample_float, mean_, sample_normalized);


matlab读进去是RGB,[h,w,c],所谓的列主序,因此需要交换h和w,还有转换成BGR

im_data = im(:, :, [3, 2, 1]);  % permute channels from RGB to BGR
im_data = permute(im_data, [2, 1, 3]);  % flip width and height
im_data = single(im_data);  % convert from uint8 to single
im_data = imresize(im_data, [IMAGE_DIM IMAGE_DIM], 'bilinear');  % resize im_data
im_data = im_data - mean_data;  % subtract mean_data (already in W x H x C, BGR)


python里其实分两种,一种是caffe.io读,另一种是用opencv读.

caffe.io读进去来的是RGB,0-1之间的浮点数,[h,w,c],因此需要转换成BGR,0-255之间,转换到[c,h,w]

transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1))
transformer.set_mean('data', np.load(mean_file).mean(1).mean(1))
transformer.set_raw_scale('data', 255) 
transformer.set_channel_swap('data', (2,1,0))
net.blobs['data'].reshape(1,3,227,227)
im=caffe.io.load_image(imgfileapth)
net.blobs['data'].data[...] = transformer.preprocess('data',im)


opencv读进来默认就是BGR格式的,0-255之间,因此转换到[c,h,w],再减个均值即可

transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2, 0, 1))
transformer.set_mean('data', np.array([104, 117, 123])) 



原创粉丝点击