news 2026/9/2 8:41:41

河道垃圾检测数据集解析与YOLOv8实战:从数据标注到模型部署

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
河道垃圾检测数据集解析与YOLOv8实战:从数据标注到模型部署

简介:本资源是面向计算机视觉初学者与环保智能监测项目开发者的河道垃圾检测专用数据集,聚焦水体环境下的常见废弃物识别任务,适用于目标检测模型训练、算法验证及智慧水务应用原型开发。压缩包共2000个文件,含1999个Pascal VOC格式XML标注文件与1个说明文本,总大小113.54MB;所有2274张JPG图像均同步提供VOC与YOLO双格式标注(不含分割路径的TXT),类别涵盖ball、bottle、branch、grass、leaf、milk-box、plastic-bag、plastic-garbage共8类典型河道垃圾。已有767人学习下载,数据采集难度高、场景真实性强,虽部分标注(如水草区域)为满足检测可用性而适度简化,但整体具备较高工程参考价值,可直接用于YOLOv5/v8、Faster R-CNN等主流框架训练,并支持快速开展数据清洗、类别平衡与跨域泛化实验。

1. 项目背景与数据集价值

最近在整理一个关于河道垃圾检测的数据集,名字叫“河道垃圾检测数据集VOC+YOLO格式2274张8类别.7z”。这个数据集在目标检测领域,特别是环境监测和智慧水务方向,其实挺有代表性的。我之所以花时间研究它,是因为在实际项目中,无论是做城市内涝预警、河道巡检,还是水域生态评估,对水面漂浮物的自动识别都是一个刚需。很多团队想用YOLO这类算法快速上手,但往往卡在第一步——找不到一个标注质量高、类别定义清晰、且场景贴近真实应用的数据集。

这个数据集提供了2274张图片,标注了8类常见的河道垃圾。它同时提供了VOC和YOLO两种格式,这大大降低了使用门槛。VOC格式是很多老牌框架和标注工具(如LabelImg)的通用标准,方便进行数据检查和格式转换;而YOLO格式则是直接面向YOLOv5、YOLOv8等当下流行算法的,开箱即用,省去了繁琐的转换步骤。对于初学者和希望快速验证模型效果的工程师来说,这种“双格式”支持非常友好。这2274张图,虽然总量不算海量,但对于一个定义明确的细分场景(河道垃圾)来说,已经足够用来训练一个效果不错的基线模型,或者进行数据增强、模型微调等实验。

2. 数据集内容深度解析:8类别定义与场景特点

解压数据集后,我们首先需要搞清楚它到底包含了什么。这8个类别是整套数据的核心,它们的定义是否合理、样本是否均衡,直接决定了后续模型训练的效果。

2.1 八类垃圾的详细定义与视觉特征

根据常见的河道治理需求,这8个类别通常包括:

  1. 塑料瓶:通常是完整的、未变形的PET瓶,颜色多样,在水面或岸边反光明显,形状特征(圆柱体加锥形瓶口)相对稳定。
  2. 塑料袋:识别难度较高的一类。入水后形态多变(可能完全展开、半沉浮或缠绕成团),颜色以白色、透明、黑色为主,边缘模糊,与水面波纹容易混淆。
  3. 泡沫:主要指聚苯乙烯泡沫(如快餐盒、包装填充物)。视觉上呈白色块状,质地轻盈,常漂浮于水面,边缘不规则,在图像中可能呈现高亮区域。
  4. 纸箱:被水浸泡后的瓦楞纸箱。颜色变为深褐色,形状可能塌陷,但依然保留明显的棱角结构和纸板纹理。
  5. 枯枝落叶:自然类垃圾。形态极其不规则,颜色以褐色、黄色为主,常成片出现,与岸边植被背景区分有一定挑战。
  6. 废旧轮胎:目标通常较大,黑色圆环状,特征显著。可能半沉于水中或搁浅在岸边。
  7. 废弃渔网/绳索:线性或网状物体。颜色可能为白色、绿色或深色,在水中可能部分沉没,形成复杂的曲线和交织结构,对小目标检测算法是考验。
  8. 其他垃圾:一个“兜底”类别,用于覆盖无法归入上述7类的杂物,如破旧衣物、鞋子、金属罐等。这个类别的存在很有必要,但标注一致性需要特别注意,避免成为“杂物筐”导致模型学习混乱。

2.2 数据集的场景与挑战分析

这个数据集的价值在于其场景的真实性。图片应该涵盖了不同光照(顺光、逆光、阴天)、不同拍摄角度(岸边俯拍、无人机航拍、固定摄像头监控)、不同水体状态(平静水面、流动水流、浑浊水质)以及不同垃圾密集程度。这些变化正是实际部署中会遇到的,因此在此数据集上训练出的模型,其泛化能力会经过初步验证。

主要的视觉挑战包括:

  • 尺度变化大:近处的轮胎可能占据图像很大区域,而远处的塑料袋或泡沫块可能只有几十个像素。
  • 遮挡与重叠:垃圾常常堆积在一起,相互遮挡,需要模型具备较强的局部特征感知能力。
  • 复杂背景干扰:水面的波纹、倒影、漂浮的水藻、岸边的石头植被等,都与目标物体在颜色和纹理上存在相似性,容易导致误检。
  • 目标形态多变:尤其是塑料袋和渔网,其形态不固定,对模型的形状泛化能力要求高。

3. VOC与YOLO格式详解及互转换实践

数据集提供了两种标注格式,理解它们的差异和联系是正确使用数据的第一步。

3.1 VOC格式:结构化的XML描述

VOC(Visual Object Classes)格式是经典的目标检测数据集标准。每个图像对应一个.xml文件,存放在Annotations文件夹中。其结构是自描述的,包含了图像的尺寸、通道数,以及每个目标物体的类别名称和边界框坐标。

一个典型的VOC标注片段如下:

<annotation> <folder>JPEGImages</folder> <filename>river_001.jpg</filename> <size> <width>1920</width> <height>1080</height> <depth>3</depth> </size> <object> <name>plastic_bottle</name> <bndbox> <xmin>450</xmin> <ymin>320</ymin> <xmax>520</xmax> <ymax>600</ymax> </bndbox> </object> <!-- 更多object标签 --> </annotation>

关键点解析

  • xmin, ymin, xmax, ymax表示边界框左上角和右下角的绝对像素坐标。
  • 这种格式人类可读性强,便于检查和调试。你可以用Python的xml.etree.ElementTree库轻松解析它,查看某个图片里所有垃圾的位置和类别。

3.2 YOLO格式:归一化的文本文件

YOLO格式则简洁很多。每个图像对应一个同名的.txt文件,通常放在labels文件夹。文件里每一行代表一个目标物体。

一行标注包含5个数值:class_id x_center y_center width height例如:

0 0.4125 0.6019 0.0729 0.2593

计算过程与含义

  1. class_id: 类别索引,从0开始。需要有一个classes.txt文件来映射索引和类别名(如0 plastic_bottle)。
  2. x_center, y_center: 边界框中心点的x坐标和y坐标,除以图片宽度和高度后的归一化值。例如,中心点像素坐标是(500, 400),图片尺寸为1920x1080,则x_center = 500/1920 ≈ 0.2604,y_center = 400/1080 ≈ 0.3704
  3. width, height: 边界框的宽度和高度,同样是除以图片宽度和高度后的归一化值

注意:YOLO格式的坐标是归一化到[0,1]区间的浮点数,这与VOC的绝对像素坐标有本质区别。在训练时,YOLO模型内部会读取这些归一化坐标,因此数据加载速度更快,且不受原始图像尺寸影响。

3.3 格式转换的核心逻辑与代码示例

虽然数据集已提供两种格式,但理解转换原理至关重要,因为未来你很可能需要处理其他来源的数据。从VOC转YOLO是常见需求。

转换的核心步骤是坐标归一化:

import xml.etree.ElementTree as ET import os def voc_to_yolo(voc_xml_path, output_txt_path, class_map): """ 将VOC格式XML文件转换为YOLO格式TXT文件。 class_map: 字典,如 {'plastic_bottle': 0, 'plastic_bag': 1, ...} """ tree = ET.parse(voc_xml_path) root = tree.getroot() size = root.find('size') img_w = int(size.find('width').text) img_h = int(size.find('height').text) with open(output_txt_path, 'w') as f: for obj in root.iter('object'): cls_name = obj.find('name').text if cls_name not in class_map: continue # 跳过不在类别映射中的对象 cls_id = class_map[cls_name] xmlbox = obj.find('bndbox') xmin = float(xmlbox.find('xmin').text) ymin = float(xmlbox.find('ymin').text) xmax = float(xmlbox.find('xmax').text) ymax = float(xmlbox.find('ymax').text) # 计算中心点和宽高(像素) box_w = xmax - xmin box_h = ymax - ymin x_center = xmin + box_w / 2 y_center = ymin + box_h / 2 # 归一化 x_center_norm = x_center / img_w y_center_norm = y_center / img_h box_w_norm = box_w / img_w box_h_norm = box_h / img_h # 写入YOLO格式行 f.write(f"{cls_id} {x_center_norm:.6f} {y_center_norm:.6f} {box_w_norm:.6f} {box_h_norm:.6f}\n") # 使用示例 class_map = {'plastic_bottle':0, 'plastic_bag':1, 'foam':2, 'carton':3, 'branch_leaf':4, 'tire':5, 'fishing_net':6, 'other':7} voc_to_yolo('Annotations/river_001.xml', 'labels/river_001.txt', class_map)

实操心得:在转换时,务必先检查VOC标注的xmax是否大于xminymax是否大于ymin,以及坐标是否在图像范围内。偶尔会遇到标注错误,提前清洗能避免训练时出现Loss为NaN的情况。

4. 基于YOLOv8的模型训练全流程实战

有了格式正确的数据集,下一步就是训练模型。这里以当前非常流行且易用的YOLOv8为例,展示从环境配置到模型评估的完整流程。

4.1 环境准备与数据集组织

首先,创建一个标准的YOLO数据集目录结构。这是YOLOv8能够正确识别数据的前提。

river_garbage_dataset/ ├── images/ │ ├── train/ # 存放训练集图片,例如 1800张 │ └── val/ # 存放验证集图片,例如 474张 └── labels/ ├── train/ # 存放训练集标签txt文件,与images/train/一一对应 └── val/ # 存放验证集标签txt文件,与images/val/一一对应

你需要将2274张图片和对应的标签文件,按照一定比例(如8:2)分割到trainval文件夹。务必确保图片和标签的文件名(不含后缀)严格一致,例如river_001.jpg对应river_001.txt

然后,创建一个数据集配置文件river_garbage.yaml,放在项目根目录:

# river_garbage.yaml path: /path/to/your/river_garbage_dataset # 数据集的根目录绝对路径 train: images/train # 训练集图片相对路径 val: images/val # 验证集图片相对路径 # 类别数量与名称 nc: 8 # number of classes names: ['plastic_bottle', 'plastic_bag', 'foam', 'carton', 'branch_leaf', 'tire', 'fishing_net', 'other']

这个YAML文件是连接你的数据和训练代码的桥梁。

4.2 模型训练与关键参数调优

安装Ultralytics包后,训练只需几行代码:

from ultralytics import YOLO # 加载一个预训练模型(推荐从COCO数据集预训练的模型开始) model = YOLO('yolov8n.pt') # 可以选择n, s, m, l, x不同尺寸的模型 # 开始训练 results = model.train( data='river_garbage.yaml', epochs=100, # 训练轮数,根据数据集大小调整 imgsz=640, # 输入图像尺寸,GPU内存小可设为416或320 batch=16, # 批次大小,取决于GPU内存 workers=4, # 数据加载线程数 device='0', # 使用GPU 0,如果是CPU则设为'cpu' project='runs/detect', # 结果保存目录 name='river_garbage_v1', # 实验名称 pretrained=True, # 使用预训练权重 optimizer='AdamW', # 优化器,SGD或AdamW lr0=0.01, # 初始学习率 cos_lr=True, # 使用余弦退火学习率调度 label_smoothing=0.1, # 标签平滑,防止过拟合 augment=True, # 启用Mosaic等数据增强 )

关键参数解析与调优经验

  • 模型尺寸选择yolov8n(纳米)模型小、速度快,适合移动端或快速原型验证。yolov8s/m/l/x模型更大、精度更高,但更慢。对于河道垃圾检测,yolov8syolov8m通常是精度和速度的较好平衡点。
  • imgsz(图像尺寸):YOLO会将所有图像缩放到此尺寸进行训练。增大imgsz(如从640到1280)通常会提升检测小物体的能力,因为更大的输入分辨率保留了更多细节。但代价是训练速度变慢、GPU内存消耗剧增。对于河道场景中远处的小塑料袋,尝试增大imgsz可能带来显著提升。
  • 数据增强:YOLOv8默认开启了Mosaic、MixUp等强增强。对于河道数据,这些增强非常有效,能模拟不同天气、光照和垃圾堆积情况。但如果你的数据集本身质量不高(如标注框不准),过强的增强反而有害,可以尝试augment=False先跑一个基线。
  • 学习率与优化器lr0是最大的超参数之一。如果训练初期loss下降很慢甚至不降,可以适当调大(如0.01->0.02)。如果loss震荡剧烈或很快变成NaN,则需要调小(如0.01->0.001)。AdamW通常比传统的SGD收敛更快,更稳定。

4.3 训练过程监控与模型评估

训练开始后,Ultralytics会实时在终端输出日志,并在runs/detect/river_garbage_v1目录下生成一系列结果文件。最重要的两个工具是TensorBoard日志和结果图表。

你可以启动TensorBoard来可视化训练过程:

tensorboard --logdir runs/detect/river_garbage_v1

在浏览器打开localhost:6006,你可以看到:

  • 损失曲线:关注train/box_loss,train/cls_loss,val/box_loss,val/cls_loss。理想情况是训练损失平稳下降,验证损失也同步下降。如果验证损失很早就开始上升,而训练损失持续下降,这是典型的过拟合信号。
  • 评估指标metrics/mAP50-95是最核心的指标,它表示在IoU阈值从0.5到0.95(步长0.05)下的平均精度均值,综合反映了模型在不同严格程度下的性能。metrics/precisionmetrics/recall分别反映了查准率和查全率。

训练结束后,模型会自动在验证集上评估,并生成一系列可视化结果:

  • confusion_matrix.png:混淆矩阵,直观显示各类别之间的误检情况。比如,你可能发现“塑料袋”很多被误检为“泡沫”,这说明这两类在视觉特征上需要模型更好地学习区分。
  • results.png:汇总了所有损失和指标随epoch变化的曲线。
  • val_batchX_pred.jpg:随机挑选的验证集批次预测结果,可以直观看到模型在哪些图片上表现好,哪些图片上漏检或误检。

模型选择:训练完成后,在runs/detect/river_garbage_v1/weights目录下会有两个模型文件:best.pt(验证集上mAP最高的模型)和last.pt(最后一个epoch的模型)。部署时务必使用best.pt

5. 模型部署与性能优化实战指南

训练出一个指标不错的模型只是第一步,让模型在实际场景中稳定、高效地运行,才是最终目标。

5.1 模型导出与格式转换

YOLOv8训练出的.pt文件是PyTorch模型。为了在不同平台部署,需要导出为其他格式。最常用的导出命令:

from ultralytics import YOLO model = YOLO('runs/detect/river_garbage_v1/weights/best.pt') model.export(format='onnx', imgsz=640, simplify=True, opset=12)

这将生成best.onnx文件。ONNX是一种开放的模型交换格式,可以被OpenCV DNN、TensorRT、ONNX Runtime等多种推理引擎支持。

为什么选择ONNX?

  • 跨平台:几乎支持所有主流深度学习框架和硬件。
  • 性能优化:可以通过ONNX Runtime进行图优化,加速推理。
  • 简化部署:避免了复杂的PyTorch环境依赖。

注意:导出时imgsz参数需要与训练时一致,或者与你部署时预期的输入尺寸一致。simplify=True会尝试简化ONNX模型结构,有时能减少推理时间。

5.2 使用ONNX Runtime进行高性能推理

下面是一个使用ONNX Runtime进行静态图像推理的完整示例:

import cv2 import numpy as np import onnxruntime as ort class RiverGarbageDetector: def __init__(self, onnx_path, conf_thresh=0.25, iou_thresh=0.45): self.conf_threshold = conf_thresh self.iou_threshold = iou_thresh # 初始化ONNX Runtime会话 self.session = ort.InferenceSession(onnx_path, providers=['CUDAExecutionProvider', 'CPUExecutionProvider']) self.input_name = self.session.get_inputs()[0].name # 获取输入尺寸 self.input_shape = self.session.get_inputs()[0].shape # 通常是[1, 3, 640, 640] self.input_height, self.input_width = self.input_shape[2], self.input_shape[3] # 类别名称 self.class_names = ['plastic_bottle', 'plastic_bag', 'foam', 'carton', 'branch_leaf', 'tire', 'fishing_net', 'other'] def preprocess(self, image): """将输入图像预处理为模型需要的格式""" # 调整大小并保持长宽比填充 h, w = image.shape[:2] scale = min(self.input_height / h, self.input_width / w) new_h, new_w = int(h * scale), int(w * scale) resized_img = cv2.resize(image, (new_w, new_h), interpolation=cv2.INTER_LINEAR) # 创建画布并填充 padded_img = np.full((self.input_height, self.input_width, 3), 114, dtype=np.uint8) padded_img[:new_h, :new_w, :] = resized_img # 转换通道和维度: HWC -> CHW, BGR -> RGB, 归一化 padded_img = padded_img.transpose(2, 0, 1) # HWC to CHW padded_img = padded_img[::-1, :, :] # BGR to RGB padded_img = padded_img.astype(np.float32) / 255.0 # 归一化到[0,1] # 添加批次维度: CHW -> NCHW blob = np.expand_dims(padded_img, axis=0) return blob, scale, (w, h) def postprocess(self, outputs, scale, orig_shape): """将模型输出解析为边界框、置信度和类别""" predictions = outputs[0] # 形状为 [1, 8400, 8+nc]? 实际需要根据模型输出调整 # YOLOv8输出需要根据具体版本解析,这里是一个通用处理逻辑示例 # 实际中,你需要打印 outputs 的形状来确定解析方式 boxes = [] confidences = [] class_ids = [] # 假设 outputs[0] 形状是 [1, 8400, 8+nc] # 这里简化处理,实际应用需参考YOLOv8官方导出后的输出格式 # 通常需要过滤低置信度框,并进行NMS # ... # 伪代码:遍历预测,应用置信度阈值,还原到原始图像坐标 return boxes, confidences, class_ids def detect(self, image_path): """主检测函数""" image = cv2.imread(image_path) if image is None: return None blob, scale, (orig_w, orig_h) = self.preprocess(image) # 推理 outputs = self.session.run(None, {self.input_name: blob}) # 后处理 boxes, scores, class_ids = self.postprocess(outputs, scale, (orig_w, orig_h)) # 可视化结果 for box, score, cls_id in zip(boxes, scores, class_ids): x1, y1, x2, y2 = map(int, box) label = f"{self.class_names[cls_id]}: {score:.2f}" cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.putText(image, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) return image # 使用 detector = RiverGarbageDetector('best.onnx') result_img = detector.detect('test_image.jpg') cv2.imwrite('result.jpg', result_img)

性能优化技巧

  1. 批处理:如果处理视频流或批量图片,尽量将多帧图像组成一个批次(batch)输入模型,这能极大提升GPU利用率。在preprocess阶段将多张图片处理成[N, 3, H, W]的张量。
  2. 半精度推理:如果硬件支持(如NVIDIA Tensor Core),在导出ONNX或使用TensorRT时启用FP16(半精度)推理,速度可提升近一倍,精度损失通常很小。
  3. 使用TensorRT:对于NVIDIA GPU,将ONNX模型进一步转换为TensorRT引擎(.engine文件)能获得极致的推理速度。可以使用trtexec工具或TensorRT Python API进行转换。

5.3 实际部署中的挑战与应对策略

将模型部署到真实的河道监控场景,会面临训练时不曾遇到的挑战:

  • 光照剧烈变化:白天逆光、夜晚红外或补光不足。解决方案:在数据集中尽可能包含不同时段、不同天气的数据;部署时可以采用自适应直方图均衡化(CLAHE)对输入图像进行预处理,增强对比度;或者训练一个专门针对低光照条件的模型版本。
  • 摄像头抖动与水面波动:导致目标模糊。解决方案:在视频流检测中,可以加入帧间稳定性处理,如利用卡尔曼滤波跟踪目标轨迹,对连续帧的检测结果进行平滑,避免框体剧烈跳动。
  • 小目标漏检:这是河道垃圾检测的痛点。解决方案:
    • 数据层面:对训练集中所有小目标(如像素面积小于32x32)进行统计,如果数量不足,可以专门复制这些小目标图片并进行增强,增加其权重。
    • 模型层面:使用更高分辨率的输入(如1280x1280);修改模型结构,关注更浅层的特征图(如YOLO的P3层),它们包含更多小目标细节;或使用专门针对小目标改进的YOLO变体。
    • 后处理层面:适当降低小目标的置信度阈值,并配合更严格的NMS,避免误删真正的小目标。
  • 类别混淆:“塑料袋”和“泡沫”、“枯枝”和“其他垃圾”容易混淆。解决方案:分析混淆矩阵,找到高频混淆的类别对。然后,针对性收集和标注更多这些易混淆场景的困难样本,加入训练集重新训练。也可以尝试在模型头部增加注意力机制,让模型更关注物体的细节纹理而非整体颜色。

6. 数据集的扩展、清洗与迭代策略

一个高质量的模型背后,必然有一个持续迭代优化的数据集。拿到初始的2274张数据集,只是工作的开始。

6.1 数据清洗:发现并修正标注错误

使用训练好的模型在训练集和验证集上跑一遍推理,生成预测结果。然后,将预测结果与真实标注进行对比分析,这是一种高效的主动清洗方法。

具体操作

  1. best.pt模型对所有训练图片进行推理,并保存结果。
  2. 使用可视化工具(如LabelImg的“自动预标注”功能,或自己写脚本),将模型高置信度(如>0.8)的预测框与原始标注框叠加显示。
  3. 重点检查以下几种情况:
    • 漏标(False Negative):模型自信地检出了某个物体,但原始标注里没有。这很可能是标注时遗漏了,需要补标。
    • 错标(Misclassification):模型检出的类别与标注类别不一致,但框的位置高度重合。需要人工判断哪个类别是正确的。
    • 标注框不准:标注框与物体边界偏差较大,而模型的预测框更贴合。应以更准确的框为准进行修正。
    • 模糊或争议目标:一些物体本身难以界定(如一半浸在水里的破布)。需要制定统一的标注规则,决定是标为“其他”还是忽略。

这个过程虽然耗时,但能显著提升数据集质量,往往比盲目增加数据量更有效。

6.2 数据增强:低成本扩充数据集

对于河道垃圾场景,可以应用一些有针对性的数据增强技术,模拟更多样的真实环境:

  • 几何变换:旋转(小角度,因为监控视角通常固定)、平移、缩放。对于航拍图片,可以模拟无人机轻微的位置变化。
  • 颜色空间变换:调整亮度、对比度、饱和度、色调,模拟不同天气和光照(如雾天、黄昏)。
  • 模拟天气效果:添加雨滴、雾霾、水面反光等噪声。可以使用Albumentations这样的专业增强库。
  • CutMix/Mosaic:YOLO自带的Mosaic增强非常强大,它将四张图片拼成一张,让模型学习在复杂背景下定位目标。可以适当调整Mosaic使用的概率。
  • 生成对抗网络(GAN):对于极端稀缺的类别(如“废弃渔网”),可以考虑使用GAN生成一些逼真的样本。但这需要较高的技术门槛,且生成的数据需谨慎评估。

一个使用Albumentations的增强示例:

import albumentations as A transform = A.Compose([ A.RandomBrightnessContrast(p=0.5), # 随机亮度对比度 A.HueSaturationValue(p=0.5), # 随机色调饱和度 A.RandomRain(p=0.1), # 随机添加雨滴(模拟雨天) A.Blur(blur_limit=3, p=0.1), # 轻微模糊(模拟运动模糊) ], bbox_params=A.BboxParams(format='yolo', label_fields=['class_labels']))

6.3 困难样本挖掘与主动学习

当模型在验证集上表现趋于平缓时,下一步的提升点往往在于“困难样本”。

  1. 收集新数据:去不同的河道、在不同的时间、用不同的设备拍摄新的图片。重点拍摄模型在原验证集上表现不佳的场景(如强光水面、密集遮挡)。
  2. 推理筛选:用当前模型对新数据做推理,筛选出那些模型置信度不高(如0.3~0.6)的预测框,或者模型完全漏检但肉眼可见有垃圾的图片。这些就是“困难样本”。
  3. 人工标注:只对这些筛选出的困难样本进行精细标注。这比随机标注新图片的效率高得多。
  4. 加入训练:将新标注的困难样本加入训练集,重新训练模型。

这个“训练->评估->找困难样本->标注->再训练”的循环,是提升模型在实际场景中鲁棒性的核心方法。经过2-3轮迭代,你会发现模型在之前犯错的场景下表现明显改善。

本文还有配套的精品资源,点击获取

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 8:41:30

Python LSTM实战:量化投资中的时间序列预测与模型调优

简介&#xff1a;本资源是一份面向计算机及相关专业本科生的毕业设计实战项目&#xff0c;聚焦使用Python与LSTM&#xff08;长短期记忆网络&#xff09;构建股票及基金价格预测模型&#xff0c;解决金融时间序列建模与预测这一典型机器学习应用场景。资源包共11个文件&#xf…

作者头像 李华
网站建设 2026/9/2 8:40:11

2026年AI影视制作平台推荐排行,谁在构建系统化壁垒

2026年以来&#xff0c;AI影视制作行业迎来一个明显的分水岭——底层模型能力差距正在收窄&#xff0c;纯“生成效果”已不再是评判平台的唯一标准。创作者和团队真正需要的&#xff0c;是一套能从剧本走到成片、从创作走到变现的完整系统。蛙蛙写作是轻量化短剧工具的代表&…

作者头像 李华
网站建设 2026/9/2 8:40:09

自动化测试学习笔记

元素的定位cssSelector查找一个元素查找多个相同的元素By.by 通过_选择器Xpath 定位格式&#xff1a;//*[ ]获取HTML界面所有的节点获取HTML页面指定的节点——//_获取一个节点中的子节点——//span/input获取一个节点中的父节点——//intput/..实现节点属性的匹配——[...]//b…

作者头像 李华
网站建设 2026/9/2 8:39:53

微信聊天记录本地解析与导出:从备份文件到HTML/Word/CSV及年度报告生成

简介&#xff1a;这是一套面向计算机专业学生与数据分析初学者的微信聊天记录处理工具&#xff0c;专为课程作业、个人数据管理及轻量级社交行为分析场景设计&#xff0c;解决原始聊天数据难以归档、检索与可视化的问题。资源包共309个文件&#xff0c;包含103个Python脚本&…

作者头像 李华
网站建设 2026/9/2 8:38:24

YOLOv5落地非机动车违停识别:从8张图到城管执法系统

简介&#xff1a;本资源是面向智能交通与城市管理场景的YOLOv5目标检测训练数据集&#xff0c;专为非机动车违规停放识别任务设计&#xff0c;适用于计算机视觉初学者及算法工程师开展模型训练与部署实践。压缩包内含735张高质量自行车图像&#xff08;jpg&#xff09;及配套PA…

作者头像 李华