【问题标题】:Neural network input size in opencv::dnnopencv::dnn 中的神经网络输入大小
【发布时间】:2019-04-23 16:25:36
【问题描述】:

我想(动态地)确定预期作为深度神经网络模型输入的图像大小,该模型加载了 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");

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

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

【问题讨论】:

  • thr 第二个参数。 MatShapes 的向量应该给你尺寸。可能第一个和第二个 int 将带有高度,第三个是通道数。但是我还没有测试过,所以尝试一下
  • 感谢您的反馈。我的问题是我不知道getLayersShapes 的第一个参数应该是什么,而且我没有找到任何示例。我只想要信息,除了网络我应该提供什么?
  • 抱歉,必须自己测试一下。也许你可以看看opencv dnn源代码?
  • 其实问题是getLayersShapes似乎需要“网络输入层中的形状输入blob”......这正是我想要自动确定的!

标签: c++ opencv


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2016-10-21
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 2013-05-25
    • 2014-04-23
    • 2012-10-05
    • 2021-04-05
    相关资源
    最近更新 更多