我希望加载一个使用caffe训练的神经网络,用于图像分类。
这个神经网络包含一个文件mean.binaryproto
,其中包含了在输入要被分类的图像之前需要减去的均值。
我正在尝试理解这个文件中包含的内容,因此我使用Google Colab来查看它的内部结构。
加载它的代码如下:
# Load the Drive helper and mount
from google.colab import drive
# This will prompt for authorization.
drive.mount('/content/drive')
!ls "/content/drive/My Drive"
#install packages
!apt install -y caffe-cuda
!apt update
!apt upgrade
!apt dist-upgrade
!ls "/content/drive/My Drive/NeuralNetwork/CNRPark-Trained-Models/mAlexNet-on-CNRPark/"
import caffe
import numpy as np
with open('/content/drive/My Drive/NeuralNetwork/CNRPark-Trained-Models/mAlexNet-on-CNRPark/mean.binaryproto', 'rb') as f:
blob = caffe.proto.caffe_pb2.BlobProto()
blob.ParseFromString(f.read())
arr = np.array( caffe.io.blobproto_to_array(blob) )
print(arr.shape)
out = arr[0]
data = np.array(blob.data).reshape([blob.channels, blob.height, blob.width])
print (data.shape)
print(data[0])
#display the mean image
from PIL import Image
from IPython.display import Image as Im, display
display(Image.fromarray(data[0], 'RGB'))
输出结果为:
(1, 3, 256, 256)
(3, 256, 256)
我了解的是该文件包含所讨论的手段和图像,这些图像是3通道的,因此每个通道都有一个平均值。
然而,我希望每个通道只有一个单独的值,但我发现了一个256x256的数组:这是否意味着对每个通道的每个像素都取了平均值?
另一个问题是:我想使用OpenCV中使用BGR而不是RGB的NN。如何知道3x256x256均值使用RGB还是BGR?
模型链接在这里。我正在查看的模型包含在zip文件
CNRPark-Trained-Models.zip
中的文件夹mAlexNet-on-CNRPark
中。