You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unet++图像分割模型推理时测试图缩放及输出还原原尺寸疑问

自定义Unet++分割模型推理尺寸问题解答

1. 推理阶段是否需要做相同的416×416缩放

必须执行和训练阶段完全一致的缩放操作,原因如下:

  • 训练阶段模型权重是基于416×416尺寸的输入学习得到的,适配该尺寸下的感受野、上下采样维度匹配,非适配动态输入的Unet++直接输入其他尺寸会触发张量维度不匹配的报错
  • 若模型支持动态尺寸输入,不做相同缩放也会导致推理输入的数据分布和训练集不一致,出现协变量偏移问题,大幅降低分割精度

2. 416×416分割结果还原为原始434×636尺寸的实现方法

分割结果属于离散类别标签,还原缩放时要避免破坏标签语义,核心操作如下:

  • 预处理阶段提前记录测试图像的原始高宽参数:origin_h = 434、origin_w = 636,避免后续尺寸错配
  • 得到416×416的模型输出mask后,使用最近邻插值法做尺寸还原,禁止使用双线性、双三次等会生成新像素值的插值方法,避免出现非法类别标签
  • 若训练阶段对输入做了归一化、减均值等额外预处理,推理阶段也要做完全一致的处理,输出有对应逆操作的也要同步执行

如果使用Python+OpenCV实现,参考代码如下:

import cv2

# 原始测试图像 shape 为 (434, 636, 3)
origin_img = cv2.imread("test_img.png")
origin_h, origin_w = origin_img.shape[:2]

# 推理前缩放和训练对齐,训练用什么插值这里保持一致
input_img = cv2.resize(origin_img, (416, 416), interpolation=cv2.INTER_LINEAR)
# 此处省略模型推理过程,得到416×416的分割结果 pred_mask

# 还原到原始尺寸,注意OpenCV的resize参数顺序为(宽, 高),插值用最近邻
pred_mask_origin = cv2.resize(pred_mask, (origin_w, origin_h), interpolation=cv2.INTER_NEAREST)

3. 推理流程修正

你当前规划的流程缺少结果还原步骤,和原始图像比对必须保证尺寸一致,修正后流程如下:

测试图像→记录原始尺寸→执行和训练完全一致的预处理(含缩放为416×416、归一化等)→输入模型推理→得到416×416的输出结果→将输出还原为原始图像尺寸→和原始尺寸的标注真值做比对

内容的提问来源于stack exchange,提问作者wonki cho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 08:36:04