cv2.imread()
If you use the cv2.imread() interface to read the image, the read is directly in BGR format and 0~255
So no need to rescale to [0,255] and channel transformation [2,1,0], no need for transformer.set_raw_scale('data',255) and transformer.set_channel_swap('data',(2,1,0)
caffe.io.load_image()
If caffe.io.load_image() reads in RGB format and 0~1 (float)
So before feature extraction, set transformer.set_raw_scale('data', 255) in the transformer (scale to 0~255)
and transformer.set_channel_swap('data',(2,1,0)(convert RGB to BGR)
complete!
Call the caffe model for feature extraction and classification. Pay attention to distinguish which method the image is read in.
Demo
#new model
self.model_def = self.QSPath + '/SRC/model/NewModel/deploy.prototxt'
self.model_weights = self.QSPath + '/SRC/model/NewModel/_iter_115000.caffemodel'
self.mean_file= self.QSPath + '/SRC/model/NewModel/mean.npy'
# net
net = caffe.Net(self.model_def,self.model_weights,caffe.TEST)
#transformer
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1))
transformer.set_mean('data', np.load(self.mean_file).mean(1).mean(1)) # mean ixel
# transformer.set_raw_scale('data', 255)# from [0,1] to [0,255]
# transformer.set_channel_swap('data', (2,1,0))
net.blobs['data'].reshape(1,3,size,size)
return net, transformer
#new model
self.model_def = self.QSPath + '/SRC/model/NewModel/deploy.prototxt'
self.model_weights = self.QSPath + '/SRC/model/NewModel/_iter_115000.caffemodel'
self.mean_file= self.QSPath + '/SRC/model/NewModel/mean.npy'
# net
net = caffe.Net(self.model_def,self.model_weights,caffe.TEST)
#transformer
transformer = caffe.io.Transformer({'data': net.blobs['data'].data.shape})
transformer.set_transpose('data', (2,0,1))
transformer.set_mean('data', np.load(self.mean_file).mean(1).mean(1)) # mean ixel
# transformer.set_raw_scale('data', 255)# from [0,1] to [0,255]
# transformer.set_channel_swap('data', (2,1,0))
net.blobs['data'].reshape(1,3,size,size)
return net, transformer