首页 > 解决方案 > 将输入层重塑为单个通道和多个图像

问题描述

在我收集的一些参考代码中,有:

net_->input_blobs()[0]->Reshape(1, 3, height, width);

我的prototxt有:

input_shape {
    dim: 1
    dim: 3
    dim: 260
    dim: 347
}

我已间接获悉,提供的模型已针对灰度进行了调整(我们同时具有 color 和 grayscale prototxt),并且当前使用的 Python 代码使用具有三个相同通道的灰度输入。

现在我想在一次调用中同时处理或单独处理 4 个图像,net_->Forward();并将这四个图像作为单通道灰度传递。因此,首先,选择单个频道:

net_->input_blobs()[0]->Reshape(1, 1, height, width);

改变频道数量有什么影响?我的所有图层如何反应?它会起作用吗?如果可行,单通道网络会更快吗?

二、选择四张图片:

net_->input_blobs()[0]->Reshape(4, 3, height, width);

我有一种行不通的感觉,我应该考虑增加 的数量input_blobs,但是该怎么做呢?或者什么是正确的方法?

标签: c++machine-learningneural-networkdeep-learningcaffe

解决方案


  1. 使用单个通道而不是相同的三个通道应该更快(更少的乘法加法运算)。由于这是以最佳规模完成的,因此这甚至可能对运行时间产生显着影响。

  2. 将 4 张图像作为一个批次提供通常比将每个图像作为一个批次单独处理一个图像更快(由于计算的内部优化以处理批次)。

底线:您应该在运行单批四个图像时获得更好的运行时间。如果输入是三个相同的通道 - 最好将模型修改为仅使用一个。


推荐阅读