Я хочу загрузить нейронную сеть, обученную caffe для классификации изображений.
NN содержит файл 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)
Я понял, что файл содержит средства, а изображения, о которых мы говорим, представляют собой трехканальные изображения, поэтому для каждого канала есть среднее значение.
Однако я ожидал одно значение для каждого канала, вместо этого я нашел массив 256x256: означает ли это, что было взято среднее значение для каждого пикселя каждого канала?
Другой вопрос заключается в следующем: я хочу использовать такой NN с OpenCV, который вместо RGB использует BGR: Как узнать, использует ли среднее 3x256x256 RGB или BGR?
Ссылка на модель: эта. Модель, на которую я смотрю, содержится в zip-файле CNRPark-Trained-Models.zip
в папке: mAlexNet-on-CNRPark
.