PaddleSeg转换为ONNX后精度丢失改进方法

先前博主将PaddleSeg的语义分割模型转换为ONNX后,其结果发生了明显下降,经过分析,发现可能是其预处理过程中的meanstd值不太合理:

python 复制代码
def preprocess(image, size):
    h, w = image.shape[:2]
    resized = cv2.resize(image, size, interpolation=cv2.INTER_LINEAR)
    # 确保用 float32 计算
    resized = resized.astype(np.float32)
    mean = np.array([0.485, 0.456, 0.406], dtype=np.float32)
    std = np.array([0.229, 0.224, 0.225], dtype=np.float32)
    normalized = (resized / 255.0 - mean) / std
    input_tensor = normalized.transpose(2, 0, 1)[np.newaxis, ...].astype(np.float32)  
    return input_tensor, (h, w)

其中:

python 复制代码
mean = np.array([0.485, 0.456, 0.406], dtype=np.float32)
std = np.array([0.229, 0.224, 0.225], dtype=np.float32) 

是取自ImageNet数据集的值,相较于遥感数据集,其存在差异:

这里博主将其改为

python 复制代码
mean = np.array([0.5, 0.5, 0.5], dtype=np.float32)
std = np.array([0.5, 0.5, 0.5], dtype=np.float32)

其结果如下图所示,其结果好了很多:

但这个方法也并不完美,最好是我们在训练时便指定好meanstd,如下:

python 复制代码
- type: Normalize
      mean: [0.5, 0.5, 0.5]   # ← 显式写明
      std: [0.5, 0.5, 0.5]    # ← 显式写明

完整配置文件如下:

python 复制代码
batch_size: 8
iters: 10000

train_dataset:
  type: Dataset
  dataset_root: D:/BaiduNetdiskDownload/yaogan/output
  train_path: D:/BaiduNetdiskDownload/yaogan/output/train.txt
  num_classes: 4
  mode: train
  transforms:
    - type: ResizeStepScaling
      min_scale_factor: 0.5
      max_scale_factor: 2.0
      scale_step_size: 0.25
    - type: RandomPaddingCrop
      crop_size: [512, 512]
    - type: RandomHorizontalFlip
    - type: RandomDistort
      brightness_range: 0.5
      contrast_range: 0.5
      saturation_range: 0.5
    - type: Normalize
      mean: [ 0.5, 0.5, 0.5 ]
      std: [ 0.5, 0.5, 0.5 ]

val_dataset:
  type: Dataset
  dataset_root: D:/BaiduNetdiskDownload/yaogan/output
  val_path: D:/BaiduNetdiskDownload/yaogan/output/val.txt
  num_classes: 4
  mode: val
  transforms:
    - type: Normalize
      mean: [ 0.5, 0.5, 0.5 ]
      std: [ 0.5, 0.5, 0.5 ]

optimizer:
  type: SGD
  momentum: 0.9
  weight_decay: 4.0e-5

lr_scheduler:
  type: PolynomialDecay
  learning_rate: 0.01
  end_lr: 0
  power: 0.9

loss:
  types:
    - type: CrossEntropyLoss
  coef: [1, 1, 1]


model:
  type: PPLiteSeg
  backbone:
    type: STDC2
    pretrained: https://bj.bcebos.com/paddleseg/dygraph/PP_STDCNet2.tar.gz

这样,我们重新训练后,其结果就好很多了。

最终效果如下:

相关推荐
电子科技圈30 分钟前
SmartDV展示完整的边缘与连接IP解决方案,以高速和低功耗特性赋能移动、物联网和媒体处理设备创新
人工智能·嵌入式硬件·mcu·物联网·智能家居·智能硬件·iot
Rubin智造社36 分钟前
04月17日AI每日参考:Claude Opus 4.7正式发布,智元机器人大会今日开幕
大数据·人工智能·机器学习·claude code·智元机器人·deepseek v4·claude opus 4.7
Raink老师8 小时前
【AI面试临阵磨枪】详细解释 Transformer 架构的核心组件与工作流程。
人工智能·深度学习·transformer·ai 面试·ai 应用开发
qcx238 小时前
【AI Agent实战】OpenClaw 安全加固完全指南:安全攻击手段与五步防护实践(2026最新)
人工智能·安全
码农小白AI8 小时前
AI报告审核进入技术驱动时代:IACheck如何从规则引擎走向深度学习,构建检测报告审核“技术矩阵”
人工智能·深度学习
song150265372988 小时前
视觉检测设备:自动识别缺陷、尺寸、瑕疵、装配错误,一键全检
人工智能·计算机视觉·视觉检测
智能化咨询9 小时前
(163页PPT)某著名企业K3生产制造售前营销指导方案P164(附下载方式)
大数据·人工智能
Zzj_tju9 小时前
大语言模型技术指南:SFT、RLHF、DPO 怎么串起来?对齐训练与关键参数详解
人工智能·深度学习·语言模型
金智维科技官方9 小时前
RPA技术赋能电信运营商话单稽核:金智维如何驱动高精度自动化转型
人工智能·自动化·数字化·rpa·智能体·电信
2501_948114249 小时前
2026模型能力分化加剧:多模型聚合架构的技术解析与工程落地思考
人工智能·ai·chatgpt·架构