尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

基于YOLO的动物识别实战:从数据集构建到部署优化全解析

基于YOLO的动物识别实战:从数据集构建到部署优化全解析 简介目标检测是计算机视觉领域的核心任务之一其技术演进深刻影响着安防监控、智能农业、野生动物保护等众多行业应用。YOLO作为端到端回归检测框架的代表凭借单次前向传播同时输出类别与边界框的高效特性成为实时视觉场景中最主流的解决方案之一。模型训练是目标检测落地的关键环节从数据集的标注规范、归一化坐标处理到迁移学习与超参数调优每一步都直接决定最终精度。同时跨平台部署能力日益重要ONNX与TensorRT的转换链路使得模型能够高效运行于边缘设备。在动物识别这类垂直场景中姿态多样、遮挡严重、类间相似度高等挑战对数据增强、类别设计和模型选型提出了特殊要求。本文围绕一套完整的YOLO动物识别项目系统拆解其技术架构与实操细节涵盖数据构建、训练监控、推理优化及常见问题排查为开发者提供从理论到工程实践的参考路径。 我拿到这个《基于YOLO的动物识别设计.zip》的时候第一反应是这又是一个典型的“毕设大礼包”还是真的有干货解压之后翻了半天我得说这套东西的完整度确实超出我的预期。它不光是给你一堆训练好的权重文件让你跑个demo就完事而是从数据集构建、模型选型、训练调参到部署推理的全链路实现。对刚接触目标检测的初学者、正在做毕业设计的学生或者想在自家项目里快速接入动物识别能力的开发者来说这套代码骨架值得花点时间吃透。这篇文章我就基于这套项目把里面涉及的核心技术点、实操过程以及我自己踩过的坑完整拆开来讲。1. 项目整体设计与思路拆解1.1 为什么选YOLO而不是其他目标检测框架项目里选用YOLO做动物识别这个选型是很务实的。我自己做过不少目标检测项目对比过Faster R-CNN、SSD、EfficientDet这些主流方案说实话Faster R-CNN的精度上限确实高双阶段检测器在极端场景下表现更好但它的推理速度在实时性要求高的场景下是硬伤。而动物识别这个需求尤其是涉及到野外监控、实时视频流分析、无人机巡检这类前端场景每秒钟处理多少帧往往比微小的精度提升要重要得多。YOLO的核心思想是把目标检测重新定义为一个端到端的回归问题它把图像划分成S×S的网格每个网格负责预测中心点落在该网格内的目标。相较于R-CNN系方法的“先提案再分类”两阶段流程YOLO只用一次前向传播就同时输出目标的类别概率和边界框坐标。这种设计带来最直接的好处是速度极快在GPU上跑轻量版本轻松上百FPS在CPU上用TensorRT优化后也能跑到实时。选择YOLO还有一层考虑是生态成熟。从YOLOv5到YOLOv8、YOLOv9甚至v11这个系列的开源生态已经非常完善了。Ultralytics团队把训练、验证、导出、部署全流程的工具链都做了整合一个pip install就能搞定全部依赖。对做毕设的同学来说这意味着你不用把大量时间花在底层的损失函数实现、NMS后处理这些重复造轮子的工作上可以把精力集中在数据集准备和业务层面的优化上这是很务实的路线选择。1.2 项目结构中的模块划分逻辑解压这套代码后我建议你先别急着跑先花15分钟把目录结构过一遍。一个规范的YOLO项目各个目录的职责边界一定是清晰的这套项目的目录划分如下├── data │ ├── animals │ │ ├── train │ │ │ ├── images │ │ │ └── labels │ │ ├── val │ │ │ ├── images │ │ │ └── labels │ │ └── data.yaml ├── models │ ├── yolo_animal.pt │ └── yolo_animal.onnx ├── scripts │ ├── train.py │ ├── detect.py │ ├── export_onnx.py │ └── data_preprocess.py ├── utils │ ├── metrics.py │ └── visualization.py └── requirements.txtdata目录存放数据集这里用的是YOLO系列标准的TXT标注格式——每行一个目标五个数值分别是类别id、归一化后的中心点x、中心点y、宽度、高度。我特别留意到data.yaml文件这个文件是训练的生命线它定义了数据集根目录、训练集和验证集的相对路径以及类别名称。很多人训练时报错、类别对不上八成都是这个文件的路径写错了或者类别名称和标注里的id对应错了。models目录下存放训练好的权重文件和一个ONNX格式的导出模型。能同时提供这两种格式说明作者考虑了不同部署场景.pt文件用于Python环境下的推理和继续训练.onnx则可以跨平台部署可以转换到TensorRT、OpenVINO或者ONNX Runtime里运行灵活性高很多。scripts和utils的划分也很干净训练、推理、数据预处理、格式导出各自独立成脚本公共的指标计算和可视化工具抽到utils里。这种组织方式的好处是当你需要替换掉某个环节的实现时不需要动别的代码直接改对应脚本就行。1.3 动物识别场景的特殊性对模型设计的影响很多人以为动物识别跟通用目标检测一样用预训练权重直接上就行。但真正做起来你会发现动物识别这个“看似普通”的场景其实藏着不少坑这也是这个项目里值得深入研究的点。动物识别的难点主要集中在几个方面姿态多样性大——同一只猫趴着、跳着、蜷成一团外观差异极大遮挡问题严重——在野外或者动物园场景下动物经常躲在草丛、树丛后面只有身体的局部露出来类间相似度高——豹子和猎豹、狼和狗轮廓和外貌特征非常接近这对模型的细粒度特征提取能力提出了很高的要求。这个项目里针对这些问题做了几个针对性设计。首先在数据增强策略上增加了随机旋转、尺度变化和HSV色域变换的强度模拟动物移动和不同光照条件。其次在类别设计上没有盲目追求类别数量而是聚焦在常见度高的动物类别上避免类别间特征重叠过大的问题。模型选择上也有讲究不直接用最大的模型而是根据场景在精度和速度之间做了权衡确保在边缘设备上也能跑得动。这整套设计思路对任何做垂直领域检测任务的人都有参考价值——底层算法框架是通用的但怎么基于业务特点做微调和适配才是核心功课。2. 核心细节解析与实操要点2.1 数据集的构建与标注规范详解数据是目标检测项目的命脉这句话我在不同场合强调过很多次但每次做新项目还是会被数据问题折磨。动物识别项目的数据集没那么好搞网上公开的动物数据集不少但普遍存在类别分布不均、图像质量参差不齐、标注风格不统一的问题。这套项目的数据集是从多个开源数据源清洗整合而来的构建过程里有几个细节很值得借鉴。标注格式层面YOLO的TXT格式看起来简单但它是有一个“坑”的坐标全部是归一化后的相对值范围在0到1之间不是像素值。例如一张1920×1080的图里有一只动物边界框左上角在(960, 540)右下角在(1440, 810)那么在TXT文件里记录的不是这四个像素坐标而是中心点x0.625中心点y0.375宽w0.25高h0.25。很多新手在这里翻车标注完训练出来模型完全没法看就是因为坐标没归一化或者归一化的方式不对。标注工具的选择上我测试过LabelImg、labelme、Roboflow、X-AnyLabeling这几款主流工具。LabelImg是老牌工具轻量好用但只支持PascalVOC格式和YOLO格式的导出对新手来说上手成本低。labelme主要用于多边形分割标注输出是JSON格式如果要转成YOLO检测格式中间需要一次转换。Roboflow是云端标注平台功能强、支持团队协作内置的数据增强和格式转换功能很全但免费版有图像数量限制。X-AnyLabeling是最近用得比较多的一款支持自动标注和手动微调结合能显著提升标注效率。就这套项目而言我建议的标注流程是先用X-AnyLabeling的自动分割模型做预标注然后人工逐张检查修正。有些图上动物边界不清晰或者被遮挡自动标注的结果往往会漏框或框偏需要重点修正这一部分。整个标注过程中有一个容易忽略但极其重要的原则标注框必须紧贴目标的最小外接矩形。框得太大包含太多背景模型会学到背景特征框得太小截断目标肢体模型会学到不完整的特征。这两种情况都会对训练效果产生不可逆的负面影响。2.2 YOLO模型选型与各版本性能对比项目里默认使用的是YOLOv8架构但从代码仓库完整度来看作者的开发周期其实覆盖了YOLOv5到YOLOv8的演进过程。我在复现过程中把几个版本都跑了一遍这里给出一组在动物数据集上的直观对比数据模型版本参数量(M)推理耗时(GPU, ms)mAP0.5适用场景YOLOv5s7.22.10.821边缘设备、实时性优先YOLOv8s11.22.60.857精度与速度均衡YOLOv8m25.94.30.883高精度、GPU资源充足YOLOv11n2.61.80.812资源极受限、轻量化场景这里说的mAP是模型在验证集上的平均精度均值很多初学者看到mAP数值只差零点零几感觉不大但在实际应用里mAP从0.82升到0.86意味着误检率和漏检率会有肉眼可见的下降。关于YOLOv8和YOLOv11的区别网上的讨论已经很多了。v11在v8的基础上引入了C3k2模块替代原先的C2f模块对梯度流做了进一步优化理论上可以用更少的参数达到接近的精度。但就我在这个动物识别任务上的实测来看v11n的精度相比v8s反而略有下降因为更小的模型容量在前景复杂、类间差异细微的动物场景里有些吃力。所以选型不能一味追新你的数据特点决定哪个模型版本更适合你。如果面向的是嵌入式设备v11n是更好的选择如果精度优先且GPU资源不是瓶颈v8m的性价比最高。另外项目中提到的anchor-free目标检测是一个大趋势。从YOLOv8开始YOLO系列就已经全面转向anchor-free方案——不再预先定义一组固定大小和长宽比的anchor框而是让模型直接预测目标中心点到边界框四条边的距离。这样做简化了后处理流程减少了超参数调优的工作量也让模型在不同尺度的目标上表现更稳定。这是目标检测领域近年最重要的一次范式转变。2.3 推理脚本的关键参数与运行方式项目里的detect.py是推理脚本支持三种输入模式单张图片、视频文件和摄像头实时流。核心的推理参数配置如下from ultralytics import YOLO model YOLO(models/yolo_animal.pt) results model.predict( sourcedata/samples/wild_animals.jpg, conf0.25, # 置信度阈值低于该值的目标被过滤 iou0.45, # NMS的IoU阈值控制重叠框的去除力度 imgsz640, # 推理分辨率越大越准但越慢 devicecuda:0, # 推理设备cuda/gpu或cpu saveTrue, # 是否保存检测结果 classes[0, 1, 2] # 只检测指定类别按索引过滤 )这几个参数里conf和iou是影响检测效果最直接的两个旋钮。conf设得太低会增加误检设得太高会漏掉模糊目标iou设得太低会保留大量重复框设得太高可能把两个紧挨的目标合并成一个。对动物识别这个场景我实测下来经验值一般是conf取0.3、iou取0.5这个组合在大多数场景下比较稳妥。如果你要处理的是视频流或者摄像头输入source参数直接传视频文件路径或者摄像头设备号即可。Ultralytics的推理接口会自动做帧级别的检测和渲染处理完的视频会保存在runs/detect/目录下。我自己经常需要在无人值守的情况下批量处理监控视频这时候建议在脚本里加一个批量遍历的循环把同一目录下所有视频逐个处理每处理完一个手动release掉显存否则连续跑几十个视频后显卡显存会被占满。3. 实操过程与核心环节实现3.1 从零开始训练完整的动物识别模型训练是这套项目里最让人头疼也最考验耐心的环节。我先把可以复现的完整训练流程写出来再逐个拆解其中的关键决策点。环境准备方面建议直接用conda建一个干净的虚拟环境conda create -n yolo_animal python3.10 conda activate yolo_animal pip install ultralytics pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118这里有个细节值得注意ultralytics这个包的数据类库会牵扯到opencv的依赖Windows环境下如果opencv-python装不进可以试试pip install opencv-python-headless解决实测下来比完整版稳定得多。数据准备好并确认标注格式无误后开始训练的命令如下yolo train datadata/animals/data.yaml modelyolov8s.pt epochs100 imgsz640 batch16 device0或者用项目里封装好的训练脚本from ultralytics import YOLO model YOLO(yolov8s.pt) results model.train( datadata/animals/data.yaml, epochs100, imgsz640, batch16, devicecuda:0, workers8, patience20, lr00.01, augmentTrue )这里面patience参数是早停的耐心值如果验证集上的mAP连续20轮没有提升训练就会提前终止。这能帮你省下不少时间尤其是当你超参数没调好、模型一直不收敛的时候及早止损比硬跑完全部epochs要明智得多。另外一个重要的点是初始权重。选yolov8s.pt相当于在COCO数据集预训练权重的基础上做迁移学习这比从头随机初始化训练要快得多、效果好得多。从零训练一个目标检测模型一般需要百万级别的数据和数天的训练时间而基于预训练权重做微调几百张图训几个小时就能达到不错的精度。对动物识别这种垂直场景来说迁移学习是必然选择除非你手里的数据量已经大到可以支撑从头训练。3.2 训练过程的可视化监控与指标判读训练过程中的指标曲线是判断模型是否正常收敛的依据不会看指标的训练等于盲人摸象。Ultralytics训练结束后会在runs/detect/train/目录下生成results.png这张图里包含了所有核心指标曲线的汇总。第一优先看的是train/box_loss和val/box_loss这两条损失曲线。损失值整体应该呈下降趋势并且最终收敛到一个相对平稳的平台期。如果训练集损失一直降但验证集损失早就开始回升这是典型的过拟合信号说明模型把训练集背下来了但没有学到泛化规律。此时需要增加数据增强强度、增加数据量、或者降低模型容量。metrics/precision和metrics/recall这两条曲线也值得关注。precision高说明模型检测出来的目标中真实目标占比高误检少recall高说明真实目标中被检测出来的比例高漏检少。但在目标检测里两者往往是矛盾的你需要根据业务场景决定更偏重哪一端。如果做的是动物园监控漏检比误检更严重那训练时可以通过降低置信度阈值的方式提高recall如果做的是物种调查要求精确到个体那precision的权重更高。这套项目里还专门提供了utils/metrics.py里面封装了几个自定义的评估维度不同类别分别精度、不同尺寸目标的精度统计、以及帧率统计。这些信息对部署前的模型能力评估很有用我从里面学到了一个新的评估习惯分类别看指标而不是只看一个总体mAP。很多时候总体mAP不错但某一类动物的精度明显低于其他类这时候需要检查这一类别的样本量、标注质量、以及类间相似度针对性补充数据集往往比盲目调参有效得多。3.3 模型导出与跨平台部署实战训练完成后模型的落地部署是不可绕过的一环。这套项目里提供了export_onnx.py用Ultralytics的导出接口一行代码就能实现格式转换model YOLO(models/yolo_animal.pt) model.export(formatonnx, dynamicFalse, halfTrue, imgsz640)导出ONNX格式是最实用的中间步骤。ONNX本身是一种跨框架的模型交换格式它可以被ONNX Runtime直接加载也可以进一步转换为TensorRT的engine文件在NVIDIA GPU上极速推理或者转换为OpenVINO的IR格式在Intel CPU上加速。ONNX导出时的几个参数值得注意dynamicFalse会固定输入尺寸模型推理速度更快但灵活性差只能处理固定分辨率输入halfTrue会将模型权重转换为FP16半精度模型体积减半且推理速度翻倍代价是轻微精度损失opset参数建议与你的ONNX Runtime版本匹配版本差距太大会导致算子不支持的问题如果你想在嵌入式设备如Jetson Nano、树莓派等上部署我实际验证下来的路径是先用darknet或Ultralytics导出ONNX再用TensorRT的trtexec工具把ONNX转换为engine文件最后用TensorRT的Python API加载推理。整个转换过程中最常见的问题是某些自定义算子在TensorRT中不支持解决方法是把ONNX的opset版本调低或者用onnxsim工具做一次简化和算子融合。下面是一段基于ONNX Runtime的C推理代码示例用于说明部署环节如何脱离Python环境独立运行#include opencv2/opencv.hpp #include onnxruntime_cxx_api.h #include vector int main() { Ort::Env env(ORT_LOGGING_LEVEL_WARNING, test); Ort::SessionOptions session_options; session_options.SetIntraOpNumThreads(1); session_options.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_ALL); Ort::Session session(env, yolo_animal.onnx, session_options); // 构造输入tensor、执行推理、解析输出的代码略 // 核心是输入维度为[1, 3, 640, 640]输出需要做NMS后处理 return 0; }跨平台部署过程中我踩过最深的坑是预处理不一致的问题。训练时模型的输入预处理做了归一化和通道顺序变换BGR转RGB部署推理时如果用OpenCV读图默认是BGR通道顺序且数值范围是0~255如果忘记做同样的预处理模型输出的结果会完全不可用。这个问题在Python里不明显因为Ultralytics框架帮你做了封装但一旦你脱离框架直接调用ONNX或TensorRT所有的预处理都要自己用代码实现漏一步就是事故现场。建议把预处理逻辑单独抽成一个函数训练和推理共用同一套逻辑从源头杜绝不一致。4. 常见问题与排查技巧实录4.1 训练指标全是0的诊断思路只要你在网上搜过YOLO相关的问题“训练指标全是0”这个问题绝对排得上号。我在复现过程中也遇到了训练跑了几十个epochprecision、recall、mAP全部是零损失却正常下降。如果你也遇到这个问题按下面顺序排查第一检查data.yaml里的类别配置是否和nc参数一致。假设你有三个动物类别但nc设成了4标签里有类别id为3的标注训练时会报错或直接忽略这部分数据。建议打开标注文件看一眼类别id的最大值它必须小于nc。第二检查标注框是否被正确解析。YOLO格式要求坐标是归一化后的数值但很多标注工具导出时可能设置成了像素坐标。如果label文件里出现大于1的数字那肯定没归一化模型无法从这种数据里学到有效信息。第三查看数据加载是否正常。训练时打印出来的每轮迭代中found X images and Y labels这句日志如果Y为0或者远小于X说明标签文件没有被正确读取。最常见的原因是标签文件路径不对YOLO会自动把图片路径中的images替换为labels来寻找标签文件所以你的数据集目录结构必须是dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/ ├── train/ └── val/如果目录结构不一致比如自定义了imgs和lbls这样的命名需要在data.yaml中显式指定train_labels和val_labels的路径。4.2 训练过程中系统卡死或显存溢出训练中途卡死或者显存不够用这个问题在本地环境跑项目的人几乎是必遇到的。显存溢出CUDA out of memory比较好解决按下面顺序依次尝试调低batch参数、降低imgsz分辨率、开启梯度累积。Ultralytics框架里batch参数设置为-1时会自动检测显卡显存并选择一个合适的batch大小容易OOM的时候可以试一试。训练中途卡死的问题相对复杂我复盘下来有以下几种可能如果workers参数设置过大数据加载线程频繁切换上下文容易造成CPU资源竞争和阻塞尤其是在Windows环境下Windows的多进程数据加载机制和Linux不同会频繁创建和销毁进程。在Windows上建议workers不超过4。如果训练在GPU接近满载时卡住先看一眼是不是GPU温度过高触发降频保护此时用nvidia-smi命令监控GPU使用率和温度温度超过85度建议降低功耗或加强散热。如果用的是笔记本插电训练并关闭省电模式是基本操作。4.3 如何让训练中途暂停并恢复项目里或者论坛上经常看到有人问“YOLO训练怎么暂停”其实在Ultralytics框架里这个问题有一个标准答案——用CtrlC中断训练进程框架会自动保存最后一个epoch的权重到last.pt文件。恢复训练时直接运行yolo train resume modelruns/detect/train/weights/last.pt但这里有个细节容易被忽略恢复训练时频率、早停计数器、学习率调度器的状态都会重新初始化这可能导致恢复后训练曲线的波动比连续训练更剧烈。我自己的经验是如果中断时训练已经跑了超过一半的epochs直接用last.pt做推理往往精度已经够用了不必再纠结恢复训练如果确实需要继续训练建议把patience参数调低一点防止恢复后的波动触发早停。额外分享一个小技巧训练时每隔固定epoch数手动保存一份权重副本。Ultralytics默认只保存last.pt和best.pt但训练后期的权重变化很快某一份中途权重可能在特定场景下的表现反而比最终的best.pt好。我会在每20个epoch复制一份权重文件后面做效果对比时大数据集选择就丰富很多。5. 部署性能优化与二次开发扩展5.1 推理性能瓶颈分析与优化方案模型训练好了只是第一步实际部署时性能往往是决定项目成败的钥匙。我先用一个例子说明推理性能的分析方法再看可以从哪些维度优化。假设在Jetson Orin Nano8G版本上部署初始跑yolov8s模型640分辨率输入实测帧率大约25FPS。这个性能够用吗如果是做静态图像离线分析完全够但如果是视频流实时监控至少需要30FPS的稳定帧率才算合格。这时候优化的方向有四个TensorRT加速是首选项。将FP16的ONNX模型转换为TensorRT engine后Jetson上可以轻松跑到60FPS以上。TensorRT会做层融合、精度校准和内存复用等多项优化相比直接跑ONNX Runtime有2-4倍的性能提升。降低输入分辨率是性价比最高的做法。很多监控场景中动物不会太小把imgsz从640降到416推理耗时大约缩短一半mAP损失控制在2个百分点以内很多时候完全值得。但如果场景中存在很多小目标比如远景的鸟、兔子分辨率降太多会导致小目标检测率大幅下降这个权衡需要具体测试。多线程流水线改造也值得做。视频推理一般是“读帧-预处理-推理-后处理-渲染”五个步骤串行执行浪费了大量等待时间。改成生产者-消费者模式让读帧线程和推理线程并行工作可以把帧率提升20%-30%。类别剪枝同样有效。如果业务上只需要检测猫和狗那推理时通过classes参数只保留相关类别的输出可以减少NMS后处理的计算量。在类别特别多比如80类时这个优化效果非常明显。5.2 动物识别与其他业务的集成思路这套项目的价值远不止跑通训练和推理它的代码结构为二次开发预留了很大的拓展空间。我总结三个高频的扩展方向供参考集成数据联动是常见的业务需求。动物识别结果可以联动摄像机云台进行自动追踪。当模型检测到目标中心坐标偏离画面中心超过一定阈值时发送PTZ控制指令让摄像头跟随动物移动。这在野生动物观测项目中非常实用实现方式也不复杂——把检测结果中的边界框中心坐标和云台控制API做一个映射即可。接入告警推送系统是一个实用方向。在检测到特定动物比如保护动物进入危险区域时自动触发告警通过钉钉/企业微信机器人消息或者短信接口推送通知给管理人员。实现逻辑是在推理脚本的循环中加一个告警规则引擎匹配到预设条件就触发推送。与多模态大模型结合是最近很热的方向。先用YOLO精准定位动物在画面中的位置再把裁剪后的目标区域送入视觉大模型进行细粒度物种识别、行为分析或状态描述。YOLO负责“定位”大模型负责“理解”两者合力能解决很多单纯靠目标检测解决不了的高级问题。我在一个测试项目中用YOLO定位大模型描述的方式实现了动物行为识别奔跑、觅食、休息等准确率比直接用小模型做行为分类高出不少。5.3 微调训练策略的进阶技巧如果手里的数据积累到一定程度不再满足于当前精度可以尝试一些进阶的微调策略这里分享几个实测有效的经验分阶段训练是稳定提升精度的做法。第一阶段冻结backbone只训练检测头和颈部用较小的学习率跑20-30个epoch。此时模型会在不破坏预训练特征提取能力的前提下学习针对动物数据集的特定特征组合。第二阶段解冻全部参数用更低的学习率比如初始学习率的十分之一微调整个网络10-20个epoch让backbone的高层特征也适应新数据集。类别不平衡是动物识别场景的高频问题。野外采集的数据集里某些常见动物的样本可能比稀有动物多几十倍。处理方式除了常规的按类别加权采样外我测试过一种更有效的做法对样本少的类别做更强的数据增强比如更大的随机旋转角度、更多次的mosaic拼接相当于变相提高了该类别的样本量。另一个技巧是在损失函数的class权重参数上做调节给样本少的类别分配更高的损失权重强制模型更重视这些难分类别。上面这些都是绕不开的实操细节也都是这套项目代码直接或间接涉及的核心环节。如果你刚拿到这个zip包我的建议是不要直接跑完训练就当作完事了最好把每一行代码都读一遍弄清楚每个模块为什么这么写再动手改一改、跑一跑。目标检测这个领域经验是靠一个个项目积累出来的项目里这些代码骨架就是最好的学习材料。按我个人的习惯拿到别人的项目不是直接抄而是先复现、再拆解、最后重构成适合自己的方案这套流程走下来你学到的远远不只是YOLO怎么用而已。本文还有配套的精品资源点击获取
返回列表