我对在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如何定义这些块的参考,有人可以帮忙吗?
原来输入的形状不是由这里的术语决定的:
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_shape
中test.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)