【问题标题】:Reshaping the input layer to a single channel and multiple images将输入层重塑为单个通道和多个图像
【发布时间】:2018-12-13 11:47:51
【问题描述】:

在我挑选的一些参考代码中,有:

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

我的prototxt 有:

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

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

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

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

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

第二,选择四张图片:

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

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

【问题讨论】:

    标签: c++ machine-learning neural-network deep-learning caffe


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

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

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

    【讨论】:

    • 我将与模型开发人员取得联系,了解一个渠道是否/如何运作。我已经阅读了更多内容,Reshape(4, 3, height, width) 似乎对于批处理是正确的,但您能确认一下吗?
    • 嗯,批处理后的输出blob是检测结果的channels(),但是我没有看到任何方法可以确定每个输入图像对应哪个通道,因为每个图像可以产生多个结果(对象检测)。哦,好吧,至少我对 Caffe 有了更多了解。
    猜你喜欢
    • 2019-02-10
    • 2019-03-03
    • 2019-09-07
    • 2021-10-29
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多