首页 > 解决方案 > opencv::dnn 中的神经网络输入大小

问题描述

我想(动态地)确定预期作为深度神经网络模型输入的图像大小,该模型加载了 opencv 的 dnn 模块。例如,如果我加载一个 caffe 模型,我首先有:

cv::Mat img = imread("my_image.jpg");
cv::dnn::Net m_net;
m_net = cv::dnn::readNetFromCaffe("my_prototxt","my_model");

int img_size; // TODO how to determine it ?

cv::Mat blob =  cv::dnn::blobFromImage(img, 1.0, cv::Size(img_size, img_size));
m_net.setInput(blob);
cv::Mat res = m_net.forward("layer_name");

我的问题是img_sizem_net这里确定。我想这应该是可行的,dnn::getLayersShapes但我不明白在我的情况下应该是第一个论点。

我在这里给出了一个 caffe 模型的例子,但我也对能够对 tensorflow、darknet 或 torch 模型做同样的事情感兴趣。

标签: c++opencv

解决方案


如果您打开caffe 模型附带的“.prototext”文件,它会说明所需的输入大小。(没用过caffe以外的模型)

设置正确的输入大小是用户的责任,因为某些网络架构,例如。全连接的前馈网络需要精确大小的输入,而像 CNN 这样的架构不需要并且可以处理任意大小的输入图像。

在此处输入图像描述


推荐阅读