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

MediaPipe目标检测模型无法纳入负样本/背景图训练的问题

MediaPipe目标检测负样本无法纳入训练的解决方案

问题核心

你的500张带目标标注图+200张负样本图未被完整识别,训练日志仅显示train_data size: 500,原因是MediaPipe默认数据加载逻辑会过滤无有效标注的图像,你尝试的两种XML标注方式均不符合其识别要求:

  • 无<object>标签的XML会被判定为无标注图像,默认被过滤
  • 含0尺寸<bndbox>的<object>会被判定为无效标注,同样被过滤

解决步骤

1. 修改训练配置文件,允许加载无标注图像

在你的训练Pipeline配置文件(如ssd_mobilenet_v2_fpnlite.config)中,找到train_input_reader模块,添加load_all_images: true参数,强制加载所有图像:

train_input_reader: {
  label_map_path: "path/to/your_label_map.pbtxt"
  tf_record_input_reader {
    input_path: "path/to/train.tfrecord"
  }
  load_all_images: true  // 关键:开启后会加载所有图像,包括负样本
}

2. 调整TFRecord转换脚本,保留负样本

若你使用MediaPipe官方的VOC转TFRecord脚本(如create_pascal_tf_record.py),默认会跳过无<object>的标注文件。需要修改脚本逻辑:
找到类似以下的过滤代码:

if len(annotations) == 0:
  logging.info(f"Skipping {image_path} - no annotations.")
  continue

将其注释或删除,确保无标注的负样本图像被写入TFRecord。

3. 负样本标注保持最简格式

无需添加无效<object>标签,负样本XML保留基础结构即可(即你尝试的第一种格式):

<annotation verified="yes">
   <folder>images</folder>
   <filename>10.jpeg</filename>
   <path>/content/jpeg_images/train/images/10.jpeg</path>
   <source>
    <database>Unknown</database>
   </source>
   <size>
    <width>640</width>
    <height>480</height>
    <depth>3</depth>
   </size>
   <segmented>0</segmented>
</annotation>

验证

重新生成TFRecord后,检查样本总数应为700。启动训练后,查看日志中的train_data size是否更新为700,确认负样本已被纳入训练。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:20:16