0

用 MatConvNet 构建的网络接受不同尺度的图像并对其进行评估。例如 :-

%img is an image of size 730*860*3
%net is loaded DagNN obj
scales = [-2 -1 0 0.5 1]
for s = 2.^scales
    img = imresize(raw_img, s, 'bilinear');
    img = bsxfun(@minus, img, averageImage);
    inputs = {'data', img};
    net.eval(inputs);
end

在调试时,我发现img调整大小并评估循环的每次迭代。但是 network( net) 应该接受固定图像。作为 -

K>> net

net = 

  DagNN with properties:

                 layers: [1x319 struct]
                   vars: [1x323 struct]
                 params: [1x381 struct]
                   meta: [1x1 struct]
                      m: []
                      v: []
                   mode: 'test'
                 holdOn: 0
    accumulateParamDers: 0
         conserveMemory: 1
        parameterServer: []
                 device: 'cpu'

加载训练有素的网络后:-

K>> net.vars(1, 1).value

ans =

     []

for循环内部:-(iter 1)

K>> net.vars(1, 1).value

ans =

     [64 64 3]

(迭代 2)

K>> net.vars(1, 1).value

ans =

     [160 160 3]

等等.... 那么 DagNN 如何处理此类输入并评估自身?(我是 MatConvNet 的新手,在文档中找不到任何帮助。所以请回答这个问题并建议如何在 keras 中构建这些东西)

4

1 回答 1

0

一般来说,ConvNet 不关心图像的输入大小。所有的层都在执行类似卷积的操作(例如,即使池在空间上表现得像卷积)。如果您提供大量输入,您将获得大量输出。唯一关心输入大小的是损失层。如果您没有损失层,则代码根本不会中断。MatConvNet 中没有全连接层,一切都是卷积的。

BTW,这就是为什么早期工作ConvNet的一些人认为FCN是一个有趣的名字,因为全连接层和卷积层之间真的没有区别。

于 2017-06-11T21:34:21.217 回答