Opencv имеет интерфейс DNN для загрузки предварительно обученных моделей (глубоких) нейронных сетей, изученных с помощью caffe, tenorflow, pytorch и darknet. Чтобы применить изображение к сети, оно преобразуется в BLOB-объект через blobFromImage
. Например, в C ++:
cv::Mat img = cv::imread('lena.png')
cv::Scalar mean(104,117,123,0);
cv::Mat blob = cv::dnn::blobFromImage (img, 1.0, cv::Size(), mean, false, false)
Параметр mean
позволяет вычесть среднее значение каналов BGR, рассчитанное на обучающем наборе. Однако в исходной структуре caffe
было также разрешено вычитать полное среднее изображение, а не только одно среднее значение для цветового канала. Файл конфигурации слоя данных был таким:
layer {
name: "data"
#... give "type" and "top"
transform_param {
mean_file: "/path/to/imagenet_mean.binaryproto"
# an alternative was to set the average values:
#mean_value: 104
#mean_value: 117
#mean_value: 123
}
# ... other params of input layer...
}
Есть ли способ вычесть такое "среднее значение полного изображения" на вход с помощью opencv dnn::blobFromImage
вместо отдельных значений для цветового канала?