Paddle 请教im2sequence中out_stride参数的语义是什么?

c90pui9n  于 2022-11-13  发布在  其他
关注(0)|答案(4)|浏览(132)

问题描述 Please describe your issue

您好!我在使用Paddle im2sequence过程中,发现多batch输入尺寸不一致的场景下会有这个out_stride参数。这个参数是用来对原图片进行截取操作吗?这样不是会丢掉很多的图片信息吗?能否帮忙解答一下?万分感谢。

来源:paddle/fluid/operators/im2sequence_op.h
for (int i = 0; i < batch_size; i++) {
int tmp_real_h = static_cast((cpu_shape_tensor.data())[2 * i]);
int tmp_real_w =
static_cast((cpu_shape_tensor.data())[2 * i + 1]);
if (tmp_real_h % out_stride[0] == 0) {
tmp_real_h = tmp_real_h / out_stride[0];
} else {
tmp_real_h = tmp_real_h / out_stride[0] + 1;
}
if (tmp_real_w % out_stride[1] == 0) {
tmp_real_w = tmp_real_w / out_stride[1];
} else {
tmp_real_w = tmp_real_w / out_stride[1] + 1;
}
imgreal_h.push_back(tmp_real_h);
imgreal_w.push_back(tmp_real_w);
output_height.push_back(Im2SeqOutputSize(
imgreal_h[i], kernels[0], paddings[0], paddings[2], strides[0]));
output_width.push_back(Im2SeqOutputSize(
imgreal_w[i], kernels[1], paddings[1], paddings[3], strides[1]));
result += output_height[i] * output_width[i];
}

f45qwnt8

f45qwnt81#

你好,out_stride表示输入图片的缩放尺寸,且只有输入input_image_size存在时有效。out_stride只影响input_image_size,kernel里input_image_size = input_image_size / out_stride。

if (tmp_real_h % out_stride[0] == 0) {
tmp_real_h = tmp_real_h / out_stride[0];
} else {
tmp_real_h = tmp_real_h / out_stride[0] + 1;
}
if (tmp_real_w % out_stride[1] == 0) {
tmp_real_w = tmp_real_w / out_stride[1];
} else {
tmp_real_w = tmp_real_w / out_stride[1] + 1;
}

input_image_size用于推理时表示图片的真实尺寸。
可以参考这个文档,https://www.paddlepaddle.org.cn/documentation/docs/zh/1.8/api_cn/layers_cn/im2sequence_cn.html#im2sequence

izkcnapc

izkcnapc2#

@ronny1996 多谢答复。还有一个疑惑的地方是关于Tensor x与input_image_size之间的关系?具体为这里的input Tensor X中的img_height, img_width描述的是多batch 图片真实尺寸缩放之后的大小,还是缩放之前的大小呢?

xa9qqrwz

xa9qqrwz3#

多batch 图片真实尺寸可能不一样,描述的是多batch 图片真实尺寸缩放之后的最大尺寸

vdgimpew

vdgimpew4#

好的明白了,多谢飞浆的老师回复

相关问题