ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于VOC格式垃圾数据集训练YOLO模型的完整指南

基于VOC格式垃圾数据集训练YOLO模型的完整指南 简介目标检测是计算机视觉的核心任务之一其原理是通过算法在图像中定位并识别出感兴趣的目标物体。这项技术的价值在于能将视觉信息转化为结构化数据广泛应用于自动驾驶、安防监控、工业质检和智能机器人等领域。在工程实践中高质量的数据集和高效的训练流程是模型成功落地的关键。本文聚焦于一个包含近1.5万张标注图片的垃圾检测数据集其采用经典的VOC格式为研究者提供了“开箱即用”的便利。我们将详细解析如何将VOC格式转换为YOLO训练所需的格式并系统介绍使用YOLOv5框架进行模型训练、验证和性能优化的全流程涵盖数据清洗、类别平衡处理以及模型部署等工程实践要点帮助开发者快速构建高性能的垃圾识别模型。1. 项目概述一份“即开即用”的垃圾检测数据集在计算机视觉特别是目标检测领域数据是模型性能的基石。我们经常遇到一个尴尬的局面有了一个绝佳的想法比如想训练一个智能垃圾桶的识别模型或者开发一个社区垃圾分类监控系统却卡在了第一步——找不到一个足够大、标注规范、可以直接投入训练的数据集。自己从零开始采集、标注耗时耗力门槛极高。今天要聊的这个“垃圾数据集VOC-14963张”就是针对这个痛点的一剂“解药”。它提供了近一万五千张已标注的图片格式直接兼容主流的VOC格式意味着你可以无缝对接YOLOv3、v4、v5乃至Darknet框架几乎做到了“下载即训练”。对于研究者、算法工程师甚至是学生党来说这无疑是一个宝贵的资源能让你跳过最繁琐的数据准备阶段直接切入模型调优和算法验证的核心环节。这个数据集的价值远不止于“数量大”。其VOC格式的标注是目标检测领域事实上的“通用语言”之一。PASCAL VOC数据集树立的标杆使得后续无数数据集和框架都以其为参考。当你拿到一个VOC格式的数据集你得到的不仅仅是一堆图片和框更是一套结构清晰、信息完整的标注体系包括物体的类别、边界框位置甚至可能还有分割掩码取决于具体版本。这为后续的模型训练、评估和迁移学习提供了极大的便利。接下来我们就深入拆解这个数据集看看如何最大化地利用它以及在训练YOLO系列模型时有哪些必须注意的“坑”和可以提升效果的“技巧”。2. 数据集深度解析从VOC格式到YOLO训练2.1 VOC格式经典背后的逻辑与结构拿到这个数据集第一件事就是理解它的目录结构。一个标准的VOC格式数据集通常包含以下核心目录VOCdevkit/ └── VOC2023/ (年份可能不同如VOC2012这里以自定义年份为例) ├── Annotations/ # 存放XML标注文件每个图片对应一个 ├── ImageSets/ │ └── Main/ # 存放划分好的训练集、验证集、测试集列表文件如train.txt, val.txt ├── JPEGImages/ # 存放所有的原始图片文件.jpg └── SegmentationClass/ # (可选) 语义分割标注Annotations/文件夹里的XML文件是核心。我们打开一个典型的000001.xml看看annotation folderVOC2023/folder filename000001.jpg/filename size width1920/width height1080/height depth3/depth /size object nameplastic_bottle/name !-- 物体类别 -- bndbox !-- 边界框 -- xmin100/xmin ymin200/ymin xmax300/xmax ymax400/ymax /bndbox difficult0/difficult !-- 是否难以识别 -- truncated0/truncated !-- 是否被截断 -- /object !-- 可能有多个object标签 -- /annotation关键点解析坐标系统(xmin, ymin)是边界框左上角坐标(xmax, ymax)是右下角坐标坐标系原点(0,0)在图片左上角。这是绝对的像素坐标。difficult和truncated这两个标签非常重要。difficult1的样本通常表示目标非常模糊、遮挡严重在官方VOC评估中有时会被忽略。truncated1表示目标只有一部分在图片内。在训练时你可以选择是否包含它们。对于追求高召回率的场景如安防建议包含对于追求高精度的场景可以酌情剔除difficult1的样本。类别名称 (name)这是数据集的“灵魂”。你需要仔细检查label_map类别名称到ID的映射。一个高质量的垃圾数据集应该包含常见且区分明确的类别如plastic,paper,metal_can,glass_bottle,cardboard,food_waste等。模糊的类别如other或过于细分的类别如red_plastic_bottle,blue_plastic_bottle都可能影响模型性能。注意对于14963张这个量级务必检查数据集的类别平衡性。如果plastic有8000张而glass只有500张模型会严重偏向于预测塑料。处理类别不平衡是训练前的重要步骤可以采用过采样少数类、数据增强或使用带权重的损失函数如Focal Loss等方法。2.2 从VOC到YOLO格式的转换核心步骤与脚本实现YOLO系列模型v3, v4, v5, v7, v8等训练需要特定的标注格式每个图片对应一个.txt文件文件内容为class_id x_center y_center width height这里的坐标是归一化的即相对于图片宽度和高度的比例值范围在[0, 1]之间。转换公式假设图片宽高为img_w,img_hVOC框坐标为xmin, ymin, xmax, ymaxx_center (xmin xmax) / 2.0 / img_w y_center (ymin ymax) / 2.0 / img_w width (xmax - xmin) / img_w height (ymax - ymin) / img_h实操步骤与Python脚本 手动转换近1.5万个文件是不现实的。下面提供一个健壮的Python转换脚本并附上详细注释import xml.etree.ElementTree as ET import os from pathlib import Path def convert_annotation(voc_annotation_path, output_txt_path, class_dict): 将单个VOC XML文件转换为YOLO格式的TXT文件。 Args: voc_annotation_path: VOC XML文件路径 output_txt_path: 输出的YOLO TXT文件路径 class_dict: 类别名称到ID的字典如 {plastic_bottle: 0, paper: 1} tree ET.parse(voc_annotation_path) root tree.getroot() size root.find(size) img_w int(size.find(width).text) img_h int(size.find(height).text) lines [] for obj in root.iter(object): # 可选跳过难以识别的目标 difficult obj.find(difficult) if difficult is not None and int(difficult.text) 1: # 根据你的需求决定是否跳过 # continue pass cls_name obj.find(name).text if cls_name not in class_dict: print(f警告在 {voc_annotation_path} 中发现未知类别 {cls_name}已跳过。) continue cls_id class_dict[cls_name] xmlbox obj.find(bndbox) b (float(xmlbox.find(xmin).text), float(xmlbox.find(ymin).text), float(xmlbox.find(xmax).text), float(xmlbox.find(ymax).text)) # 边界框检查确保坐标在图片范围内且有效 b (max(0, b[0]), max(0, b[1]), min(img_w, b[2]), min(img_h, b[3])) if b[2] b[0] or b[3] b[1]: print(f警告在 {voc_annotation_path} 中发现无效边界框 {b}已跳过。) continue # 转换为YOLO格式归一化 x_center (b[0] b[2]) / 2.0 / img_w y_center (b[1] b[3]) / 2.0 / img_h w (b[2] - b[0]) / img_w h (b[3] - b[1]) / img_h # 再次检查归一化后的值是否在[0,1]合理范围内 if not (0 x_center 1 and 0 y_center 1 and 0 w 1 and 0 h 1): print(f警告在 {voc_annotation_path} 中转换出异常归一化值已跳过。) continue lines.append(f{cls_id} {x_center:.6f} {y_center:.6f} {w:.6f} {h:.6f}) # 写入TXT文件 if lines: with open(output_txt_path, w) as f: f.write(\n.join(lines)) else: # 如果没有目标创建一个空文件对于背景图片 open(output_txt_path, w).close() def main(): # 1. 定义路径 voc_root Path(./VOCdevkit/VOC2023) # 根据你的实际路径修改 annotations_dir voc_root / Annotations images_dir voc_root / JPEGImages output_labels_dir Path(./labels) # 存放转换后的YOLO标签 output_labels_dir.mkdir(parentsTrue, exist_okTrue) # 2. 定义类别映射这是关键必须与数据集实际类别一致 # 你需要根据数据集的 label_map.pbtxt 或所有XML文件统计出的类别来填写 classes [plastic, paper, metal, glass, cardboard, food_waste] # 示例 class_dict {name: idx for idx, name in enumerate(classes)} # 3. 获取所有XML文件并转换 xml_files list(annotations_dir.glob(*.xml)) print(f找到 {len(xml_files)} 个XML文件。) for xml_file in xml_files: # 生成对应的输出TXT文件路径 txt_file output_labels_dir / f{xml_file.stem}.txt convert_annotation(xml_file, txt_file, class_dict) print(转换完成) print(f类别映射关系{class_dict}) # 建议将类别映射保存下来后续训练配置需要 with open(./classes.txt, w) as f: for cls in classes: f.write(f{cls}\n) if __name__ __main__: main()脚本使用要点路径修改务必根据你的实际数据集存放路径修改voc_root。类别字典 (class_dict)这是最容易出错的地方。你必须准确知道数据集中包含哪些类别以及它们的名称大小写敏感。一个可靠的方法是写一个小脚本遍历所有XML文件统计所有不重复的name标签。边界框检查脚本中加入了边界框有效性检查这能避免因标注错误如坐标越界、宽高为负导致的训练崩溃或模型异常。空标签处理有些图片可能没有目标背景图。脚本会为其生成一个空的.txt文件。在YOLO训练中这些图片通常用于降低背景误报False Positive但并非必须。你可以选择是否在训练集中包含它们。2.3 数据集划分构建可靠的训练-验证-测试集VOC格式的ImageSets/Main/目录下通常已经有划分好的train.txt,val.txt,test.txt等文件里面是图片的文件名不含扩展名。如果这个垃圾数据集没有提供或者你想重新划分可以按以下步骤操作import os from pathlib import Path import random def split_dataset(images_dir, train_ratio0.7, val_ratio0.2, test_ratio0.1): 随机划分数据集。 Args: images_dir: 图片文件夹路径 train_ratio, val_ratio, test_ratio: 划分比例总和应为1 all_images [f.stem for f in Path(images_dir).glob(*.jpg)] random.shuffle(all_images) # 随机打乱 total len(all_images) train_end int(total * train_ratio) val_end train_end int(total * val_ratio) train_set all_images[:train_end] val_set all_images[train_end:val_end] test_set all_images[val_end:] # 写入文件 def write_to_file(filepath, data_list): with open(filepath, w) as f: f.write(\n.join(data_list)) write_to_file(train.txt, train_set) write_to_file(val.txt, val_set) write_to_file(test.txt, test_set) print(f划分完成训练集 {len(train_set)}验证集 {len(val_set)}测试集 {len(test_set)}) # 使用 split_dataset(./VOCdevkit/VOC2023/JPEGImages)重要心得不要用测试集参与任何形式的调参验证集 (val) 用于训练过程中的模型评估和早停Early Stopping测试集 (test) 只在所有训练、调参完成后用于最终的性能报告以反映模型的真实泛化能力。混用会导致对模型性能的乐观估计。3. YOLO模型训练全流程实操3.1 环境搭建与框架选择YOLOv5 vs Darknet对于这个数据集标题提到了YOLOv3, v4, v5和Darknet。目前主流且易用的选择是Ultralytics YOLOv5/v8或AlexeyAB Darknet。YOLOv5 (PyTorch) 优势生态友好基于PyTorch易于安装 (pip install ultralytics)调试和自定义模型结构方便。工具链完善提供了从数据准备、训练、验证到导出一整套命令行工具和Python API。社区活跃问题容易找到解决方案预训练模型丰富。性能优异在速度和精度上通常有不错的表现。Darknet (原版YOLOv3/v4) 优势经典原味YOLOv3/v4的原生实现很多论文和比较基准以其为准。C语言编写在特定边缘设备上部署可能更高效。学习价值代码相对简洁适合深入理解YOLO算法原理。我的建议对于绝大多数应用和研究者优先选择YOLOv5或更新的YOLOv8。它的易用性和效率是Darknet难以比拟的。下面以YOLOv5为例进行详细说明。环境准备# 创建虚拟环境推荐 conda create -n yolo-garbage python3.8 conda activate yolo-garbage # 安装PyTorch (请根据你的CUDA版本到PyTorch官网选择命令) # 例如对于CUDA 11.3 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu113 # 安装YOLOv5 git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt3.2 数据配置文件准备YAML是关键YOLOv5通过一个YAML文件来定义数据路径和类别。在你项目的根目录例如yolov5目录下创建一个data/garbage.yaml文件# 垃圾数据集配置文件 garbage.yaml path: /path/to/your/dataset_root # 数据集的根目录 train: images/train # 训练集图片路径相对于 path val: images/val # 验证集图片路径相对于 path test: images/test # 测试集图片路径可选 # 类别数量 nc: 6 # 根据你的实际类别数修改例如 plastic, paper, metal, glass, cardboard, food_waste # 类别名称列表 (必须与转换脚本中的 classes.txt 顺序一致) names: [plastic, paper, metal, glass, cardboard, food_waste]目录结构建议 为了清晰我建议将转换后的数据和图片组织成如下结构而不是直接使用VOC的原始结构/path/to/your/dataset_root/ ├── images/ │ ├── train/ # 存放训练集图片 (如 000001.jpg, 000002.jpg ...) │ ├── val/ # 存放验证集图片 │ └── test/ # 存放测试集图片 └── labels/ ├── train/ # 存放训练集标签 (000001.txt, 000002.txt ...) ├── val/ # 存放验证集标签 └── test/ # 存放测试集标签你需要根据之前生成的train.txt,val.txt,test.txt列表文件将对应的图片和标签文件复制到上述目录中。这可以通过一个简单的Python脚本完成。3.3 模型选择与训练启动命令YOLOv5提供了多种预定义模型从轻量到重型yolov5n.pt(Nano): 最小最快适合移动端或嵌入式。yolov5s.pt(Small): 速度与精度平衡最常用。yolov5m.pt(Medium)yolov5l.pt(Large)yolov5x.pt(XLarge): 最大最准适合对精度要求极高的场景。对于14963张图片的数据集如果图片分辨率适中如640x640yolov5s或yolov5m是一个不错的起点。基础训练命令cd yolov5 python train.py --img 640 --batch 16 --epochs 100 --data data/garbage.yaml --weights yolov5s.pt --project runs/train --name garbage_det_v1参数详解--img 640: 输入图片尺寸。YOLOv5会自动将图片缩放到此尺寸进行训练。更大的尺寸如1280可能提升精度但会显著增加显存消耗和训练时间。640是一个通用且高效的选择。--batch 16: 批次大小。取决于你的GPU显存。RTX 3080 (10GB) 可以尝试--batch 32。如果出现CUDA out of memory错误减小此值或使用--batch-size。--epochs 100: 训练轮数。对于1.5万张图100轮通常足够。可以使用--patience参数开启早停如果验证集指标在若干轮内不再提升则自动停止训练。--data data/garbage.yaml: 指定我们刚才创建的数据配置文件。--weights yolov5s.pt: 加载预训练权重。强烈建议使用预训练权重这能利用在COCO等大型数据集上学到的通用特征极大加速收敛并提升最终性能。--project和--name: 指定训练日志和模型保存的目录。高级训练技巧与参数多GPU训练如果你有多张GPU添加--device 0,1使用GPU 0和1。恢复训练如果训练中断可以使用--resume参数从上次保存的检查点继续训练。数据增强YOLOv5默认开启了丰富的数据增强Mosaic, MixUp, 色彩空间变换等。你可以在data/hyps/hyp.scratch-low.yaml等配置文件中调整增强强度。对于垃圾检测如果场景比较固定如固定的垃圾桶监控视角可以适当降低几何变换的强度如旋转、缩放避免生成不现实的样本。超参数调优YOLOv5提供了超参数进化Hyperparameter Evolution功能可以自动寻找一组更优的超参数。但对于初次训练使用默认值即可。3.4 训练过程监控与结果分析训练开始后YOLOv5会在runs/train/garbage_det_v1目录下生成一系列重要文件weights/best.pt: 在验证集上表现最好的模型权重。weights/last.pt: 最后一个epoch的模型权重。results.png/results.csv: 训练过程的指标曲线图和数据包括损失box_loss, obj_loss, cls_loss、精度Precision、召回率Recall、mAP0.5等。如何解读训练曲线损失曲线train/box_loss,train/obj_loss,train/cls_loss应该稳步下降并最终趋于平缓。val/开头的验证损失也应呈下降趋势。如果验证损失在训练后期开始上升说明模型可能过拟合了需要增加数据增强、使用早停或减少模型复杂度。精度/召回率曲线metrics/precision和metrics/recall应该随着训练逐渐上升。理想情况下两者都高。如果精度高但召回率低模型可能太“保守”漏检多如果召回率高但精度低模型可能太“激进”误检多。可以通过调整预测时的置信度阈值 (--conf-thres) 来平衡。mAP曲线metrics/mAP_0.5是核心评估指标表示在IoU阈值为0.5时的平均精度。metrics/mAP_0.5:0.95是更严格的指标在多个IoU阈值0.5到0.95步长0.05下的平均mAP。这是衡量模型综合性能的关键。4. 模型验证、测试与部署前优化4.1 模型验证与性能评估训练完成后使用最佳模型 (best.pt) 在验证集上进行全面评估python val.py --weights runs/train/garbage_det_v1/weights/best.pt --data data/garbage.yaml --img 640 --task val --save-txt --save-conf--save-txt: 将预测结果保存为YOLO格式的TXT文件便于后续分析。--save-conf: 在保存的TXT文件中包含置信度分数。--task val: 在验证集上运行。运行后终端会输出详细的评估表格包括每个类别的精确率P、召回率R、mAP0.5和mAP0.5:0.95。同时会在runs/val/目录下生成混淆矩阵、PR曲线、F1曲线等可视化图表帮助你分析模型在哪些类别上表现好哪些类别容易混淆。4.2 可视化分析与错误排查1. 查看预测结果 使用YOLOv5提供的检测脚本在部分图片上直观查看模型效果python detect.py --weights runs/train/garbage_det_v1/weights/best.pt --source path/to/test/images --conf 0.25 --save-txt将--source设置为你的测试图片文件夹路径。调整--conf置信度阈值可以控制检测的严格程度。低阈值召回率高但可能有更多误检高阈值精度高但可能漏检。2. 分析混淆矩阵 打开runs/val/.../confusion_matrix.png。对角线越亮说明分类越准确。如果发现paper和cardboard之间混淆严重说明这两个类别在视觉上可能非常相似需要考虑数据层面检查这两个类别的标注是否准确、一致是否需要更多差异化样本模型层面是否可以通过改进数据增强如更强调纹理变化或使用更强大的模型如yolov5m来提升区分能力3. 分析PR曲线和F1曲线 PR曲线显示了在不同置信度阈值下精度和召回率的权衡关系。曲线下的面积越大越好。F1曲线则给出了精度和召回率的调和平均数。你可以根据应用场景选择一个合适的置信度阈值。例如在自动分拣系统中高精度减少错误分拣可能比高召回率漏掉一些垃圾更重要。4.3 模型优化与迭代如果模型性能未达预期可以从以下几个方向进行优化1. 数据层面最重要数据清洗回顾第2.1节利用difficult和truncated标签或者通过可视化检测结果找出标注质量差的样本框不准、类别标错并进行修正或剔除。解决类别不平衡如果某些类别样本过少可以采用过采样重复使用少数类样本、数据增强侧重对少数类应用更强的增强、或在损失函数中为少数类设置更高的权重--cls_pw参数。自定义数据增强YOLOv5支持丰富的数据增强。你可以在train.py中通过--hyp参数指定自定义的超参数文件。对于垃圾检测可以考虑增加针对性的增强如模拟不同光照条件亮度、对比度变化、模拟污渍遮挡等。2. 模型层面更换模型尺度从yolov5s升级到yolov5m或yolov5l通常能带来明显的精度提升但会牺牲速度。修改模型结构进阶针对小目标垃圾如烟头、瓶盖可以尝试修改特征金字塔网络FPN或路径聚合网络PAN的结构增强浅层特征的利用。但这需要较深的模型知识。3. 训练技巧更长的训练时间增加--epochs并配合早停 (--patience 50)。学习率调整使用余弦退火等更复杂的学习率调度器可以通过--cos-lr参数启用。标签平滑使用--label-smoothing 0.1可以防止模型对预测结果过于自信有时能提升泛化能力。4.4 模型导出与部署当模型达到满意性能后需要将其导出为部署所需的格式。YOLOv5支持多种导出格式python export.py --weights runs/train/garbage_det_v1/weights/best.pt --include onnx engine coreml tflite--include onnx: 导出为ONNX格式这是许多推理引擎如OpenVINO, TensorRT的中间格式通用性最强。--include engine: 需要配合--device 0指定GPU导出为TensorRT引擎文件在NVIDIA GPU上能获得极致推理速度。--include tflite: 导出为TFLite格式用于移动端Android, iOS或边缘设备如树莓派配合Coral TPU。部署注意事项预处理对齐确保部署时的图像预处理缩放、归一化、通道顺序BGR/RGB与训练时完全一致。YOLOv5的导出脚本通常会处理这些但如果你自己写推理代码务必核对。后处理对齐部署代码中的非极大值抑制NMS参数如IoU阈值iou_thres、置信度阈值conf_thres应与验证时保持一致。性能测试在目标部署硬件上测试推理速度FPS和精度确保满足实际应用要求。5. 避坑指南与进阶建议5.1 训练过程中的常见问题与解决方案问题现象可能原因排查与解决思路Loss为NaN或突然爆炸学习率过高数据中存在异常标注如坐标超出图像范围梯度爆炸。1. 大幅降低学习率 (--lr0)。2. 运行第2.2节的转换脚本确保其边界框检查逻辑已启用过滤无效标注。3. 使用梯度裁剪 (--gradient-clipping)。mAP一直很低0.3数据标注质量差类别定义模糊或错误预训练权重不匹配如用COCO预训练但类别数nc设错。1.可视化检查用detect.py在训练集图片上跑一下看模型是否能学到东西。如果训练集上都表现很差肯定是数据或配置问题。2.检查data.yaml确认nc和names与实际完全一致。3.检查标注随机抽取一些样本用工具如LabelImg打开图片和XML看标注框是否准确。验证集损失早于训练集上升明显的过拟合。1.增强数据增强默认增强可能不够尝试修改超参数文件中的增强强度。2.使用早停添加--patience 30参数。3.增加正则化尝试增大权重衰减 (--weight-decay)。4.简化模型换用更小的模型如yolov5n。某个特定类别召回率极低该类别样本数量严重不足样本质量差遮挡、模糊特征与其他类别混淆。1.过采样复制该类别样本。2.针对性增强对该类别样本应用更丰富的增强。3.调整损失权重在分类损失中给该类别更高权重需要修改代码。4.重新审视类别定义是否该类别与其他类别难以区分考虑合并。训练速度非常慢批次大小 (--batch) 太小图片尺寸 (--img) 太大硬件性能不足。1. 在显存允许范围内尽可能增大--batch。2. 尝试减小--img到 416 或 320。3. 使用--workers参数增加数据加载进程数通常设为CPU核心数。4. 检查是否在CPU上训练--device cpu确保使用了GPU。5.2 从“能用”到“好用”的进阶建议主动学习Active Learning初始模型训练好后将其部署到一个模拟或真实环境中去检测新的、未标注的图片。筛选出那些模型不确定如预测置信度不高或预测错误的样本交给人工进行标注。然后将这些新标注的样本加入训练集重新训练模型。如此循环可以用最少的标注成本最大程度地提升模型在特定场景下的性能。模型集成训练多个不同初始化或不同数据子集的YOLO模型在推理时综合它们的预测结果。这通常能稳定地提升几个点的mAP但会成倍增加计算开销。领域自适应如果你的训练数据如实验室环境下的垃圾图片和实际应用场景如社区垃圾桶存在差异光照、背景、拍摄角度等可以考虑使用领域自适应技术或者直接在目标场景中采集少量数据进行微调Fine-tuning。量化与蒸馏对于部署到资源受限的设备如手机、嵌入式开发板可以考虑对模型进行量化将FP32权重转换为INT8大幅减少模型体积和加速推理。或者使用知识蒸馏用一个大模型教师模型指导一个小模型学生模型训练让小模型在保持较小体积的同时获得接近大模型的性能。处理一个近1.5万张图片的数据集从格式转换、训练调优到错误排查整个过程是对工程能力和耐心的考验。最深的体会是数据质量决定模型上限而训练技巧只是逼近这个上限的方法。花在数据清洗和分析上的时间往往比盲目调整模型超参数回报更高。另外建立一个清晰的实验记录习惯记录每次训练的参数、结果和观察是迭代优化过程中不可或缺的一环。这个垃圾数据集是一个很好的起点但要让模型在你的具体场景中真正“聪明”起来持续的迭代和针对性的优化才是关键。本文还有配套的精品资源点击获取
返回列表