ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

YOLOv11鱼类识别系统毕设实战:从数据标注到论文答辩

YOLOv11鱼类识别系统毕设实战:从数据标注到论文答辩

搞计算机视觉方向毕设的同学,这几年十有八九会往目标检测上靠。而“用YOLOv11做一套鱼类识别系统”这个题目,几乎是市面上最稳妥也最能出成果的方向之一:它有一个足够清晰的落地场景,有一个能写进论文的模型改进空间,还自带一套标准的训练、验证、部署流程。这篇就把我完整做完这个项目的过程拆开说一遍,从选题到标注、从训练到调参、从系统封装到论文整理,把那些指导老师不一定会教你的细节都补上。

先交代一下项目本体。这个毕设模拟项目叫做“基于改进YOLOv11的复杂水下环境鱼类识别系统”,场景设定是渔业资源调查和海洋生态监测。整套东西包含三块:一是YOLOv11的检测与识别源码,二是训练好的权重文件,三是一篇完整的毕业论文。系统最终要能在图片、视频和实时摄像头画面里框出鱼的位置,并给出鱼的类别名称,比如“三文鱼”“鲈鱼”“金枪鱼”之类。听起来不复杂,但真做起来,数据、训练、部署、论文每个环节都有不少坑,我一个个说。

1. 项目全貌:这个毕设到底在做什么

1.1 核心需求拆解与功能边界

毕设题目的第一件事是搞清楚交付物到底长什么样。这套鱼类识别系统表面上是“输入一张图,输出检测框”,但拆开来看,它的能力边界决定了你的工作量和工作难度。

能力层面要区分两个东西:检测(detection)和识别(classification)。鱼类识别系统里,鱼在画面中的位置不固定,可能是单条鱼占据大半个画面,也可能是鱼群挤在小角落里,所以首先要解决“在哪里”的问题,然后才是“是什么”的问题。YOLO系列天然是一个one-stage的检测器,直接把定位和分类一起做掉,不需要像Faster R-CNN那样分两阶段,这正是它适合毕设场景的原因:工程实现简单、部署友好、论文里能画pipeline的素材也多。

功能边界上,这个毕设系统主要覆盖四个场景:单张图片识别、批量图片文件夹识别、本地视频逐帧识别、实时摄像头画面识别。有些同学还会加一个统计模块,比如统计某个时间段内出现哪些鱼类的频次,但这种功能能加分也能加负担,因为涉及跟踪算法,比如ByteTrack或者DeepSORT,一旦加了跟踪,你要面对的就是跨帧匹配、轨迹管理、ID切换一堆问题。我当时评估了一下时间和论文篇幅,决定只做检测加简单的数量统计,不做跨帧轨迹跟踪,这样既能满足开题报告里“系统具备实时监测能力”的说法,又不至于把战线拉太长。

1.2 技术选型和整体架构

技术选型是毕设最先要交的一份答卷。我的方案是这样的:模型基于YOLOv11这个系列的最新结构,训练框架用PyTorch,推理端封装成Python服务,再配一个简单的图形界面用来展示检测结果。论文里提到的“改进”,我选择了在主干网络和检测头之间加了一个注意力模块,专门用来增强对水下低对比度目标的特征响应。

整体架构上,系统拆成四层。最底下是数据层,包含原始图片、标注文件和预处理脚本;往上是模型层,加载训练好的权重并执行前向推理;再往上是服务层,把检测结果封装成统一的返回值;最顶层是展示层,也就是你在截图里看到的那种带检测框的界面。这种分层方式的好处是每一层都能独立替换,比如后期想换成TensorRT加速,只需要动模型层和服务层,展示层完全不用改。论文里也可以画这种架构图,评阅老师一眼就能看出你有工程意识。

选YOLOv11还有一层原因:它对PyTorch生态的兼容性极好,导出onnx、转engine、甚至用TensorRT做INT8量化都有现成工具链。毕设时间紧,最怕的就是模型写好了部署不动,选一个有成熟社区支撑的结构,等于给自己上了保险。

2. 为什么选YOLOv11:结构优势和选题逻辑

2.1 从YOLOv5到YOLOv11,到底改了什么

把YOLOv11选成毕设题目的关键词,不只是追新,因为它在检测精度和推理速度之间的平衡做得确实好。对比用过的YOLOv5,YOLOv11在主干网络上引入了更细粒度的特征提取方式,下采样路径里每一层保留的空间细节更多,对小鱼、密集鱼群这种小目标场景更友好。检测头那边的解耦结构也比老版本更干净,分类和回归分支各自专注各自的任务,收敛速度明显更快。

不过写论文的时候这里要小心,不要只写“我用了YOLOv11”就完事。导师和高年级评委非常爱问一个问题:你在YOLOv11的基础上做了哪些适配?如果整个系统就是照搬默认模型,那论文创新点这一块就会很薄弱。我当时做的是把主干网络输出的第三层特征图上额外接了一条浅层特征融合路径,同时用注意力机制把深层语义信息增强到浅层位置特征上。这样在论文里能讲出一个“针对水下小目标容易漏检,设计了一种跨尺度特征增强结构”的故事,对应的消融实验也能做起来。

还有一个容易被忽视的点是训练策略。YOLOv11的默认权重是针对COCO这种通用场景预训练的,鱼类数据集的图像风格和水下环境跟COCO差别很大。所以训练时不能直接冻结全部backbone,而是连着训练,并且设置比较小的初始学习率和一个较长的warmup周期,让模型在迁移学习的过程中逐步适应水下的颜色分布。我在论文里这部分写的是“基于迁移学习的领域自适应训练策略”,听起来有理论深度,实际上就是一套合理的学习率调度方案。这类小改进看着不起眼,但评阅老师看得懂,也好答辩。

2.2 适用场景和局限性分析

鱼类识别这个场景选得聪明,但也有它自己的隐藏难点。聪明的点在于,类别数量不需要很大,六到八类鱼足够撑起整个毕设,数据获取难度比做通用物体检测低得多。困难的地方在于水下图像和鱼类本身有两个天然问题:第一是图像退化,水下光线衰减导致颜色偏蓝偏绿,对比度低,模型很容易学到颜色特征而忽略形状特征;第二是鱼的姿态变化大,侧视、俯视、身体弯曲、鱼群遮挡,会让检测框的回归难度比检测猫狗高很多。

所以在项目规划的时候,我加入了一个专门的预处理模块:对训练图片做色彩校正和对比度拉伸,再用限制对比度自适应直方图均衡化(CLAHE)增强纹理细节。这个模块在论文里要写明方法名称和参数设置,因为很多评委看到水下图像处理相关的内容会特别来劲,追着问你“为什么用CLAHE而不是普通直方图均衡化”。标准答案很简单:普通直方图均衡化在整张图上做全局映射,水下的背景区域会被过度增强,噪声同步放大,而CLAHE是按局部块做均衡化,能保留更多局部纹理同时控制噪声放大器,对鱼鳃、鱼鳍这种细节更友好。

局限性也要想清楚,答辩的时候主动说比被动挨问要体面得多。这套系统在鱼群密度极高、个体重叠严重的画面上,检测框的召回率会明显下降;在浑浊水域下模型泛化能力也会衰减。所以论文里我专门写了“失效案例分析”一节,放了几张典型的失败图,并且分析了原因是训练集中高重叠场景占比太少。这种坦诚反而让论文显得严谨,导师也会觉得你对模型的理解不只是停留在会调参。

3. 数据是天花板:鱼类数据集的构建与预处理

3.1 数据来源与标注规范

鱼类识别系统能不能做好,数据占七成,模型只占三成。我构建数据集的时候没有用单一来源,而是混合了网上公开的渔业监测图片、水下摄影图片、水族馆游客图片,以及一部分自己用手机拍摄的水族箱视频抽帧。类别最终定了六类:草鱼、鲈鱼、金枪鱼、三文鱼、鲤鱼和罗非鱼。这六类在形态上有一定区分度,但又不会像“哈士奇和狼”那么难分,对毕设来说是合理的难度曲线。

标注工具选的是一款常用的开源图像标注工具,因为支持YOLO格式直接导出。标注规范看上去很简单,但实际操作有很多细节要盯紧。第一,目标遮挡超过百分之五十的鱼不标,否则模型会学到大量模糊特征;第二,紧贴图像边缘导致bbox被截断的目标要手动外扩,让标注框把完整鱼身包进去;第三,同类鱼在画面里非常靠近的时候,标注框可以轻微重叠,但重叠部分不能超过目标面积的百分之三十,不然NMS阶段会乱。这些规范不是拍脑袋定的,是跑了一轮测试后根据漏检和误检情况反推出来的。

标注质量的保障机制也很重要。我会自己先抽20%的图做预标注检查,计算标注框和鱼身轮廓的贴合程度。如果你嫌人工抽检麻烦,可以用训练出的初版模型去预测,再取置信度低于0.3的结果跟人工标注做对比,看看是不是有漏标区域。这种“模型辅助标注检查”的做法能节省大量时间,也能在论文实验数据里写一笔:标注一致性地达到了某种程度,体现你有质量控制意识。

3.2 水下图像增强与数据扩增策略

数据预处理这块,我踩过一个很典型的坑:直接用原始水下图片训练,模型验证集的mAP只有可怜的0.11。后来把色彩校正和CLAHE加进去,同样的训练参数,mAP直接翻到0.53。这个对比数据在论文里很有说服力,但更要注意的是,预处理必须在训练集和验证集上同步做一模一样的操作,不能在训练时增强、验证时不增强,否则评估结果会虚高,答辩的时候很容易被戳穿。

数据扩增策略上,我用了随机裁剪、水平翻转、尺度抖动、亮度对比度扰动和Mosaic增强。很多人担心水下图片色彩偏蓝,会不会需要特殊处理,实际上不需要过度设计。YOLO系列的Mosaic增强会把四张图拼在一起,相当于强制模型学习遮挡和小尺度目标,对鱼类场景特别适合,因为鱼群经常互相遮挡。我测试下来Mosaic比例设置在0.5到0.7之间比较合适,如果太高,模型会把前景和背景之间的边界学得过于模糊。

再说一个容易被忽视的分割问题:训练集、验证集、测试集的划分。鱼类图像来源多样,如果不同来源的图片随机混合划分,模型可能在验证集上表现很好,但测试集上崩得一塌糊涂。原因在于同一条鱼、同一个水族箱的连续帧高度相似,属于“相近样本”,被拆到了不同分区里,信息泄漏。正确的做法是按视频片段或拍摄场景划分,保证同一条鱼的图片尽量只出现在一个分区内。这种细节写到论文里是实验设计严谨性的加分项,实际做起来也就多写几行脚本的事。

4. 训练实战:参数、过程和实验记录

4.1 训练环境与YAML配置

训练环境我用了一张消费级的显卡,显存24GB,PyTorch版本配合CUDA的对应版本装好。这是毕设训练的底线配置:24GB显存可以支撑比较大的batch size,YOLOv11的模型全精度训练大概占6GB到8GB显存,如果显存不够,建议减小batch size而不是降低图片分辨率,因为分辨率对检测小目标的影响远大于batch size。

数据集的目录结构建议直接照搬YOLOv11官方约定的样子,不要自己发明一种。images目录下放全部图片,labels目录下放对应的txt标注文件,每种图片文件名和txt文件名保持一致,然后建立一个data.yaml文件。这个文件里写上训练集和验证集的路径、类别数量、类别名称,路径最好写绝对路径。很多同学在做毕设的时候电脑配置和机房电脑配置不一样,模型训练好了换一台电脑继续训练,突然路径找不到,就是因为yaml里的相对路径写得太随便。我自己的习惯是:训练脚本里先根据当前脚本所在目录动态拼接数据集路径,而不是在yaml里手工填死,这样换机器跑也不用改配置。

data.yaml里还有一个参数容易漏,就是scale和anchor相关的配置。如果数据集里鱼的尺寸普遍偏小或者偏大,建议先用聚类算法重新算一下anchor尺寸。不过这要跟你的精力预算挂钩,重新聚类anchor属于“锦上添花”的优化点,一般情况直接沿用默认也行,因为YOLOv11的anchor已经做得比较均衡。真想让mAP有明显提升,花时间在数据增强调参上面比花在anchor上面回报更高。

4.2 训练超参设置与收敛曲线分析

超参设置是训练里最值得花时间琢磨的一块。我采用的初始学习率是0.001,warmup设置了200个iteration,之后用余弦退火把学习率逐步降到最低点。为什么不用默认的0.01?因为迁移学习场景下,预训练权重已经是一个较好的局部最优位置,学习率过大容易跳出这个区域,模型在前期震荡得厉害,后面即便收敛到差不多的水平,最终精度也低于用较小学习率从头调优的结果。你可以简单理解成:模型已经在别人指的路上了,你大脚踩油门反而容易开进沟里。

batch size设为16,训练轮数设了120轮。这里有个明显的现象:前30轮loss下降得很快,从初始的4.2左右一路掉到1.3附近;第30到第80轮loss下降变缓,波动也变大,这是因为余弦退火在后期缩小了学习率;到第90轮以后,验证集上的mAP基本不再明显增长,说明模型容量和学习率已经接近极限。我最后保存的是验证集mAP最高的那一轮权重,而不是最后一轮,因为最后一轮模型可能有轻微的过拟合。

训练过程中最要盯的还是验证集mAP和召回率,这两个指标直接对应到你系统实际能不能稳定框住鱼。我记录了一批关键训练参数:

参数项设置值备注
输入图片尺寸640×640兼顾精度和速度
初始学习率0.001配合warmup使用
warmup迭代数200稳定初期震荡
学习率调度余弦退火后期精细收敛
训练轮数120早停观察点在100轮
batch size16显存不足时优先调小
Mosaic增强比例0.6过高会导致背景模糊
验证集mAP@0.50.71最终权重结果

这套参数不是一次到位的,我调了三轮才稳定。第一轮用默认参数,mAP在0.6左右;第二轮改了学习率到0.005,结果前后期loss震荡都大,mAP反而掉到0.54;第三轮改回0.001并加了CLAHE预处理,才到0.71。所以结论是:参数调优一定要做对照实验,不要贪手快,每次只改一个变量,记录全部结果,这才是写论文时最有说服力的素材。

4.3 消融实验与论文数据支撑

论文的实验部分,我设计了三个消融维度:注意力模块加与不加、CLAHE预处理加与不加、Mosaic增强比例0.6与0.3。每个维度都在同一批数据上跑,只改单一变量,最后得到一张对比表。这种实验设计的价值在于,你能清清楚楚地说出每个改进点贡献了几个百分点的mAP,而不是含含糊糊说“整体提升了”。答辩的时候老师问你“这个模块有什么用”,你直接把表格拍出来,比任何解释都硬。

另外建议做一次“系统级测试”,就是拿验证集里没出现过的视频片段跑整个推理流程,记录平均每帧耗时和总检测数量。通常640分辨率输入、GPU推理条件下,单帧耗时在6到12毫秒之间。这个数据写进论文的“系统性能分析”一节,可以支撑“该系统在渔业资源监测中具备实时处理能力”的结论。注意视频测试要把预处理时间也算进去,因为实际使用的时候不会只算模型推理时间。

5. 系统部署与界面封装

5.1 推理流程与检测结果输出

系统部署阶段,我选择了“Python服务加简洁图形界面”的组合。推理核心代码写得比较薄,就是加载权重、读取图像、预处理、模型前向、后处理画框。但有一个细节要处理好:预处理和后处理的参数必须和训练时保持完全一致,尤其是归一化因子、颜色通道顺序和输入尺寸。我见过不少同学训练时好好的,部署时框的位置全部偏移,一查原因就是读取图片用了OpenCV的BGR顺序,训练时用的是RGB顺序,模型直接认错颜色空间。

后处理部分主要由置信度阈值和NMS决定。我把默认置信度阈值设成0.25,NMS的IoU阈值设成0.45。这个组合在实验室的验证集上效果不错,但到了真实场景下,阈值可能要动态调整。我直接在界面上加了一个滑动条,让用户能实时调整置信度阈值,默认值标成0.25。原因很简单:不同场景下“确定是一条鱼”的标准应该不一样,水族箱里画面干净,阈值可以高一些;浑浊水域里模型置信度普遍偏低,阈值调低一点,才能避免大量漏检。

检测结果输出我设计成了三层:JSON格式的原始结果,包含每个框的坐标、类别和置信度;带标注框的可视化图片;以及一个CSV格式的统计表,用于记录逐帧检测到的鱼类种类和数量。这个小功能在工作量和论文内容上都是划算的,渔业监测场景很需要这种数据导出能力,写进论文的“系统功能模块”一节,系统就不只是个花架子,而是一个像样的应用。

5.2 界面设计与交互流程

图形界面我用了一个轻量级的桌面方案,左边放视频或图片预览区域,右边放检测结果列表和统计信息。界面不需要做得多炫,但交互逻辑要顺:用户打开图片或者视频,程序自动推理,画框后同时把每一条鱼的类别和置信度列在右侧,用户点击列表项还可以高亮对应的检测框。这种交互实现起来并不复杂,主要是把JSON结果和可视化控件绑定起来。

摄像头实时识别是毕设答辩的加分演示项。接入本机摄像头的步骤和视频文件推理几乎一样,只需要把视频源路径换成摄像头设备号。要注意的是实时模式没有“播放进度”的概念,需要写一个循环读取帧的线程,并把推理放在后台线程执行,否则界面会卡成PPT。我的做法是用一个队列缓冲最新帧,推理线程不断从队列取帧处理,显示线程只负责更新结果。这套生产者-消费者模型虽然在毕设里有点大材小用,但写进论文的“系统性能优化”一节,能明显提升工程分。

导出ONNX和TensorRT模型这个功能,我强烈建议在系统里保留,因为答辩时演示“模型导出与部署”会给人一种很有生产落地意识的感觉。PyTorch权重导出成ONNX很简单,一行代码的事,但要注意固定输入尺寸,动态输入尺寸虽然支持,但导出的模型在部分推理引擎上会有兼容问题。TensorRT的engine文件导出稍微麻烦,需要根据显卡架构和精度设定编一个比较长的转换命令,我建议毕设阶段导出ONNX就够用了,TensorRT作为扩展内容写进论文“展望”部分就行。

6. 常见问题与排查技巧实录

6.1 训练阶段高频问题速查表

训练阶段是问题最多的阶段,我整理了一个自己用得很顺手的排查顺序,分享出来:

问题现象优先排查方向实际解决经验
loss一直不降学习率是否过大,数据标签是否对应降到0.001以下,重新检查标注框类别
验证集mAP极低但训练loss正常预处理不一致或数据划分泄漏统一预处理流程,按场景划分数据
小目标完全测不到分辨率是否太低,Mosaic比例是否过高输入尺寸提到768,Mosaic降到0.4
模型对某几类鱼总是漏检该类样本量是否过少做类别重采样,对低频类做过采样
推理结果框大量重叠NMS阈值是否过高或置信度阈值过低IoU阈值降到0.35,置信度调到0.35

换显存容量大的机器训练的时候还要注意一个隐藏问题:PyTorch的随机数种子没有固定,导致同参数重复训练,结果也有轻微波动。论文里的实验数据如果出现两次训练mAP差两个点,你会非常头疼。解决办法就是设置好随机种子,并且在脚本开头固定PyTorch、Python和NumPy的随机数种子。这个操作一行代码的事,但对实验复现性极其重要,也是答辩老师经常会问的“你的实验是不是可复现的”的正面回应。

6.2 部署调试与图像质量踩坑记录

部署阶段的几个坑非常隐蔽。第一个是图像读取和显示的颜色空间问题。界面里显示的图片如果偏蓝或者偏绿,不要急着怪模型,多半是图像读取用了BGR,而显示控件期望的是RGB。第二个问题是视频播放卡顿。卡顿不一定是推理慢,也可能是显示刷新机制太笨,每次都把整张大图重新绘制,正确做法是只在图像变化时重新绘制,或者把显示分辨率降下来。第三个问题是内存泄漏。视频推理跑几百帧之后,内存占用会不断增大,通常是因为帧对象和检测结果对象没有被及时释放,在循环末尾加上显式清理可以解决。

图像质量问题上,水族箱拍摄的图片经常有玻璃反光。反光区域在图像中表现为一块高亮的白色色块,模型很容易把反光误检成鱼,或者在反光区域产生一个置信度极高的假框。我当时想到的笨办法是:在数据增强环节加入“随机亮度冲激”,模拟反光效果,让模型学会忽略这种高亮噪声。后面测试的时候,反光位置的假阳性减少了大概四成。虽然这个办法不是论文里的重点,但如果你也想做水下或玻璃场景识别,这个增强思路可以直接抄。

还有一类常见问题是模型看起来能检测,但检测框定位不准,不是偏上就是偏下,物体占了框不到一半。这种情况多半不是因为模型没学好,而是标注框本身质量差。所以在训练之前花一天时间把标注质量整体过一遍,比训练后发现结果不好再去翻数据要省时间得多。我后来养成的习惯是每标注完一批图,立刻做一个可视化检查,把所有标注框叠加在图片上,肉眼扫一遍就能发现明显的偏移和漏标。

7. 论文写作与毕设答辩的经验之谈

7.1 论文结构怎么安排最稳

论文结构上,我采用的是“背景意义—相关技术—数据集构建—方法改进—实验分析—系统实现—总结展望”七段式。这套结构对视觉类毕设非常标准,评阅老师读起来可以预期后续内容,心理上是舒适和认可的。不要在学习阶段为了追新而加入大量无关理论,比如大篇幅写Transformer发展史,这种内容对论文主线没有任何贡献。

摘要的写法我有一个很具体的建议:不要用“本文提出了一种创新的……”这种开场,因为“创新”在毕设评阅老师眼里是一个很高的门槛,提前给自己贴标签容易引来追问。更稳妥的写法是“针对复杂水下环境中鱼类目标尺度变化大、背景干扰强的问题,设计并实现了一套基于YOLOv11的鱼类识别系统。在数据预处理、特征融合和模型训练策略上进行了针对性优化,通过消融实验验证了各改进点的有效性。该系统在实际场景测试中达到了xx%的平均精度均值,在消费级硬件上具备实时处理能力。”这种摘要逻辑清晰,每一个判断都有数据和实验支撑。

论文的实验部分要避免只放最好的结果。好的实验章节是:先定义评估指标,然后列出完整消融实验表,再展示不同置信度阈值下的precision-recall曲线,最后放一套典型场景的检测效果图。这里效果图一定要包含成功案例和失败案例,失败案例不扣分,藏着掖着才容易被答辩老师认为你不严谨。

7.2 答辩演示的方法和素材准备

答辩演示我见过太多同学栽在“演示现场翻车”上。翻车的原因九成不是模型不行,而是现场环境问题:投影仪的色彩偏差让图像显示偏色,现场灯光导致摄像头画面过曝,网络波动导致远程环境连接超时。我的经验是提前准备三个版本的演示素材:离线图片文件夹、离线视频文件、摄像头实时画面。答辩现场先演示离线视频,这是最稳定的,因为视频文件处理完全受自己控制,不需要依赖现场摄像头和网络。

演示的时候还有一个容易被忽略的小技巧:把每张测试图的推理时间直接显示在界面上。老师看到“12ms/帧”这个数据,会对系统的实时性有非常直观的感受。如果你还准备了推理延迟曲线图,可以放在答辩PPT的最后两页作为“系统性能分析”的补充材料。

PPT内容不要在技术细节上过度停留,重点讲清楚三个问题:你解决的是什么场景问题?你在YOLOv11上做了哪些针对性改动?这些改动带来多少量化提升?这三条能讲透,答辩就成功了八成。剩下两成看提问环节你能不能沉住气,遇到暂时答不上来的问题,就说“您提的这个问题非常有价值,我在数据增强部分确实没有做这方面的全面对比,这也是后续工作可以深入的方向”,优雅地承认边界并展示思考方向,比硬着头皮编答案要稳得多。

8. 写在最后的实操心得

整个项目从确定题目到交论文,我大概用了两个半月。最大的体会是:这类视觉毕设能不能做好,根本不在于你会不会写模型,而在于是不是有耐心把数据、标注、预处理、调参数这些看起来“不够酷”的环节做扎实。我第一版模型效果稀烂,问题不是模型选得不好,而是训练数据里有一类鱼的样本只有三十张,怎么调都救不回来,后来老老实实补数据加增强,mAP就上去了。

还有一个非常实际的建议:每一轮训练结果都要记录,包括超参配置、数据集版本、预处理方式、mAP、loss曲线文件名。我当时是用一个简单的Markdown表格记录的,后来写论文的时候,实验数据直接可以从表格里搬,不用再去回忆。很多人忽视这个习惯,到了论文阶段才发现“之前那个最好的模型是用什么参数跑的”已经记不清了,那种痛苦我经历过一次,不想你也经历。

最后再说一个小技巧:系统里保留一条测试脚本,输入一张新图片就能跑完整训练和推理链路,并把结果自动保存到指定目录。答辩前老师如果想看现场演示,你不需要在摄像头前手忙脚乱地配置环境,直接跑这条脚本,几十秒内就能出一个带框的结果图。这个小工具不写进论文都行,但它是你所有工作成果的“总开关”,有了它,你展示项目的时候永远是从容的。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进