caffe input_shape实际上是如何工作的?

问题描述 投票:1回答:1

我对在text.prototxt开头用Faster-RCNN进行obj检测的caffe实现的prj中的以下块感到困惑:

input: "data"
input_shape {
  dim: 1
  dim: 3
  dim: 224
  dim: 224
}

input: "im_info"
input_shape {
  dim: 1
  dim: 3
}

但实际上输入不是224 * 224的指定大小,并且不需要是224 * 224,我在测试代码中看到,图像只是在没有调整大小的情况下读取然后通过网络,非常困惑,并且做了没有找到caffe如何定义这些块的参考,有人可以帮忙吗?

caffe
1个回答
1
投票

原来输入的形状不是由这里的术语决定的:

input: "data"
input_shape {
  dim: 1
  dim: 3
  dim: 224
  dim: 224
}

input: "im_info"
input_shape {
  dim: 1
  dim: 3
}

将输入dim更改为任意大小后,如424:

input: "data"
input_shape {
  dim: 1
  dim: 3
  dim: 424
  dim: 424
}

input: "im_info"
input_shape {
  dim: 1
  dim: 3
}

测试AP没有改变一点,表示有一些修改,所以input_shapetest.prototxt没有确定图像大小,然后我深入到代码中,找到了这里的行:

net.blobs['data'].reshape(*(blobs['data'].shape))

之前 :

forward_kwargs = {'data': blobs['data'].astype(np.float32, copy=False)}
if cfg.TEST.HAS_RPN:
    forward_kwargs['im_info'] = blobs['im_info'].astype(np.float32, copy=False)
else:
    forward_kwargs['rois'] = blobs['rois'].astype(np.float32, copy=False)
blobs_out = net.forward(**forward_kwargs)

和blobs ['data']。形状是输入图像的大小,调整大小进程,宽度为600 :(我不在这里发布所有行)

im_scale = float(cfg.TEST.MAX_SIZE) / float(im_size_max)
im = cv2.resize(im_orig, None, None, fx=im_scale, fy=im_scale,
                        interpolation=cv2.INTER_LINEAR)
© www.soinside.com 2019 - 2024. All rights reserved.