caffe Python API 之图片预处理
# 设定图片的shape格式为网络data层格式 transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape}) # 改变维度的顺序,由原始图片维度(width, height, channel)变为(channel, width, height) transformer.set_transpose('data', (2,0,1)) # 减去均值,注意要先将binaryproto格式均值文件转换为npy格式[此步根据训练model时设置可选] transformer.set_mean('data', np.load(mean_file_path).mean(1).mean(1)) # 缩放到[0,255]之间 transformer.set_raw_scale('data', 255) # 交换通道,将图片由RGB变为BGR transformer.set_channel_swap('data', (2,1,0)) # 加载图片 im=caffe.io.load_image(img) # 执行上面设置的图片预处理操作,并将图片载入到blob中 net.blobs['data'].data[...] = transformer.preprocess('data',im)
这里注意的是:caffe.io.load_image()读入的像素值是[0-1]之间,且通道顺序为RGB,而caffe内部的数据格式是BGR,因此需要进行如下操作,若是使用opencv打开图片,则无需进行如下操作。
# 缩放到[0,255]之间 transformer.set_raw_scale('data', 255) # 交换通道,将图片由RGB变为BGR transformer.set_channel_swap('data', (2,1,0))
手与大脑的距离决定了理想与现实的相似度