Opencv DNN 网络 1x1 的大小

Posted

技术标签:

【中文标题】Opencv DNN 网络 1x1 的大小【英文标题】:Size of Opencv DNN Net 1x1 【发布时间】:2020-11-02 09:07:25 【问题描述】:

我在 Tensorflow 中实现了一个神经网络来分割图像。该网络非常简单,仅使用 Cov2D、MaxPooling 和 UpSampling2D。

规格如下:

张量流:1.14.0 Keras:2.2.4-tf Ubuntu:18.04.4 LTS

网络经过训练后,我将其转换为 .pb,以便能够在 Windows PC 上从 OpenCV 和 C++ 读取它。

Windows 10 Opencv:4.2.0

我使用的 C++ 代码是:

cv::Mat imgOriginal = cv::imread(pathOriginal, 1);//1280x1024 image to segment.

#include <opencv2/dnn/dnn.hpp>
cv::dnn::Net MODEL = cv::dnn::readNetFromTensorflow("model.pb");//Load model.
MODEL.setInput(cv::dnn::blobFromImage(imgOriginal, 1/255., cv::Size(64, 64)));//Pass image to Net.
cv::Mat m = MODEL.forward();
cout << m.size();

Print Output: [1x1]

我不明白为什么输出是这个大小 [1x1]。我做错了什么?

【问题讨论】:

【参考方案1】:

.forward() 之后需要一个中间步骤。一些风格会保留:

m = MODEL.forward();
cv::Mat detectionMat(m.size[2], m.size[3], CV_32FC1, m.ptr());

现在 detectionMat 具有正确的输出尺寸。

【讨论】:

以上是关于Opencv DNN 网络 1x1 的大小的主要内容,如果未能解决你的问题,请参考以下文章

OpenCV DNN之YOLO实时对象检测

OpenCV3.3深度学习模块(DNN)应用-图像分类

教程 | OpenCV深度神经网络实现人体姿态评估

手把手教你使用LabVIEW OpenCV DNN实现手写数字识别(含源码)

opencv进阶-DNN相关API解读

NVIDIA GPU / CUDA 中使用 OpenCV 深度神经网络模块