YOLOv8火焰烟雾检测从训练到部署全流程实战指南

📅 2026/8/27 1:49:57
YOLOv8火焰烟雾检测从训练到部署全流程实战指南
简介目标检测是计算机视觉中的核心任务其目标是在图像或视频中定位并分类特定对象。与传统行人检测不同火焰烟雾因形态多变、边缘模糊、尺度差异大对算法的特征提取和鲁棒性提出了更高要求。YOLOv8作为当前主流的一阶段检测器采用Anchor-Free设计并引入DFL损失在保证实时性的同时提升了对复杂目标的检测精度非常适合火灾预警这类对响应速度与可靠性要求极高的场景。从数据集的构建与标注、环境配置的版本匹配到训练参数调整、损失曲线解读、mAP评估再到PC端及嵌入式设备部署整个工程链路环环相扣。本文围绕YOLOv8火焰烟雾检测项目系统梳理从零到一的全流程实操要点涵盖常见踩坑规避、模型改进思路与答辩准备策略为相关毕设与工程项目提供可直接落地的参考方案。 又是一个被“毕业设计”四个字催着跑的学期。我接到的咨询里像“YOLOV8火灾火焰烟雾检测源码训练好的模型”这种需求出现过太多次学生手里有源码、有权重文件、甚至跑通过demo但真到写论文、答辩、演示系统联网调试的时候问题一个接一个往外冒环境装不上训练日志里的loss看不懂mAP不知道算得对不对模型出不了检测框部署到嵌入式设备直接内存爆掉。这篇文章我会把这套东西从头到尾拆一遍。不单是告诉你哪里有源码、怎么跑而是把一条完整的链路讲清楚任务本身难在哪、为什么选YOLOv8、环境怎么搭不掉进版本坑、数据怎么做才算合格、训练参数怎么调、损失函数曲线怎么看、模型部署到PC/嵌入式这条路怎么走、以及毕设答辩时最容易被追问的“你做了什么改进”该怎么给一个能讲圆的答案。不管你是已经在跑别人的开源代码还是准备从零开始建自己的项目这篇文章都按实操路线来写完全可以按章节抄作业。1. 火焰烟雾检测为什么不能照搬行人检测的套路火灾检测在目标检测任务里算一个“看起来简单、上手全是坑”的场景。拿经典的行人检测或者车辆检测类比目标形态相对固定光照变化有边界遮挡情况可以用大量数据硬扛。但火焰和烟雾不是这样它们的特征非常不稳定。火焰没有固定轮廓它一直在动、在变颜色从亮黄到橙色再到深红纹理是碎片化的。烟雾更麻烦边缘极度模糊透明度会变化背景稍微复杂一点——比如傍晚的云、白色的墙、反光的玻璃——模型就特别容易把非目标当目标或者反过来把真的烟雾判成背景。这个任务对检测算法的要求不是“找到那个框”而是“在复杂背景里别乱框”。换句话说阈值设置、数据多样性、后处理策略比网络结构本身的贡献还要明显。另一个容易被忽略的问题是数据严重不平衡。公开的火灾数据集里单张图往往只有一小块火焰区域像素占比很低烟雾的尺度更是从几十个像素到整幅画面都有。用默认参数去训练模型很容易陷入“什么都检测不到因为背景占了99%”的假收敛状态。这就牵扯出后面要讲的损失函数调优和正负样本策略不是单纯增加迭代次数能解决的。还有一类需求是“实时预判”。火灾检测不能像做离线图片分类那样拿到一批图慢慢跑推理。实际使用场景里摄像头在转、画面在变烟雾刚出现的时候可能只有一小片模型要在有限算力下快速出框这直接压缩了可选模型的范围。所以这套毕设虽然看起来是“套一个YOLOv8就完事”但真正做得好的同学在数据清洗、消融对比、可视化分析这几个地方花的时间远超训练本身。后面所有内容都会围绕这条主线的关键环节来展开。2. 算法选型为什么是YOLOv8而不是YOLOv5、v9或者更新版这个问题几乎每个答辩老师都会问。如果你只说“因为它能做目标检测”等于把自己送进坑里。YOLOv8是Ultralytics在2023年发布的系列模型相比v5的一个明显区别是它把模型结构重新组织成了Anchor-Free设计也就是直接预测目标的中心点和尺寸不再依赖预先定义的锚框。对火焰烟雾这种“目标形状多变、宽高比不稳定”的检测对象来说Anchor-Free少了一层锚框匹配的麻烦训练和推理逻辑都更干净。另一个关键点是头部结构。YOLOv8的检测头把分类和回归分成了两个独立分支各自做自己的损失计算分类用BCE回归用DFL加CIoU。DFL是Distribution Focal Loss它把框回归预测从一个固定值变成一组离散概率分布的表达方式对边缘模糊、尺度多变的火焰目标有一定优势。虽然这个策略不是v8首提但在工程化上做得比较顺手。和v9/v10/v11这些版本相比v8最大的优势是生态成熟度。Ultralytics官方把数据集格式、训练脚本、验证脚本、导出脚本全部统一成一套命令行逻辑模型权重也好找资料更新速度快。毕设场景下稳定性和可复现性比那一点精度提升更重要。你答辩时候用v8老师顶多说一句“为什么没用最新的”但你可以这样答“v8在工程部署、资料完善度和社区案例上与项目需求匹配度最高且模型精度在火灾检测这种复杂背景下已足够支撑实时预警需求后续如果精度不足可以换成v8系列中的更大尺度版本而无需更换整体框架。” 这个回答逻辑是通的。不同尺寸版本的选择一般是看算力。大多数学生的本子是GTX 1660Ti 6GB或RTX 3060 Laptop这类显存跑yolov8s已经是一个比较舒服的起点yolov8m勉强能跑但训练速度明显变慢。毕设不追求极致精度的话v8s配一个小的batch size是性价比最高的起点。版本参数量显存占用训练适合场景yolov8n约3.2M较低嵌入式/移动端快速验证yolov8s约11.2M4-6GB消费级显卡毕设主力yolov8m约25.9M6-10GB需求高精度且有资源的场景yolov8l / x大于43M10GB以上基本不推荐学生机训练我在实际测试中发现GTX 1660Ti跑yolov8s输入640x640batch size设为8刚刚能稳定训练不爆显存一旦换成m版本batch size就得降到4训练时间拉长一倍以上。所以你需要先确认自己的显卡型号再去决定用哪个尺寸而不是直接下载“最大的模型”。3. 环境配置最容易翻车的位置版本错位很多学生收到的源码里PyTorch版本是随便装的结果一跑就报错AttributeError: module torch has no attribute compile或者导入YOLO包直接segmentation fault。这些八成是版本错位。先说结论Ultralytics YOLOv8对PyTorch版本要求不算严苛但要在2024年以后的新版本上跑推荐组合是Python 3.10或3.11、PyTorch 2.1.0到2.3.0之间、CUDA 11.8或12.1、Ultralytics官方包保持在8.1.0以上。我不建议按网上教程直接去官网安装最新的PyTorch因为最新的PyTorch版本发布后经常出现和cuDNN、显卡驱动不匹配的情况。正确做法是先确认自己的CUDA驱动版本在NVIDIA控制面板或设备管理器里看然后去PyTorch官网用pip安装匹配的版本。CUDA本身不用单独装完整工具包PyTorch的pip包自带runtime。给出一套在Windows下实测能跑通的安装命令# 创建虚拟环境Python版本建议3.10 conda create -n fire_detect python3.10 conda activate fire_detect # 安装PyTorchCUDA 11.8版本对应你的驱动 pip install torch2.1.0 torchvision0.16.0 --index-url https://download.pytorch.org/whl/cu118 # 安装ultralytics pip install ultralytics装完之后马上验证环境import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))如果第二行输出False说明PyTorch装成了CPU版或者CUDA版本不匹配。这个报错95%以上都是因为pip install torch没带--index-url默认装了CPU版本。还有一个隐蔽的问题Windows下Anaconda的Python如果是32位很多深度学习包会直接失败最好用conda新建环境时明确指定python3.10。另外我建议把依赖装在一个全新环境里不要在base环境里折腾。见过太多人因为base环境里装过各种版本的tensorflow、pytorch最后冲突到无法定位问题只能重装系统。4. 数据从哪里来标注要做到什么程度训练集是整套毕设里最容易拖垮进度的环节因为很多人压根不知道应该准备多少数据、标注格式是什么。4.1 数据集来源公开数据集与自建数据怎么搭配火焰烟雾检测的开源数据集不算少但散落在各个下载平台。常见的组合是Fire-Detection-Image-Dataset包含约2000多张火焰、烟雾标注图格式是VOC XML需要转成YOLO格式。Fire and Smoke DetectionKaggle上有多个版本图像来源复杂需要清洗。部分中文社区整理好的火焰烟雾数据集但注意看标注格式是否统一很多是拿不同来源拼起来的。我建议不要直接用下载好的数据集训完就完事至少要挑出300到500张图自己重新检查一遍标注框。公开数据集的标注质量参差不齐有些框把整棵树框进去了有些火焰区域完全漏标这直接影响评估指标的可信度。有条件的话自己拍摄一段模拟火灾的视频比如在安全条件下烧A4纸、蜡烛、还有烟饼烟雾抽帧后挑出几百张有代表性的图做标注。这段经历在答辩时很好用因为老师说“你怎么验证模型泛化能力”时你可以拿自己的测试集来回答。4.2 标注实操RectLabel/LabelImg/X-AnyLabeling的选择标注工具有很多YOLO爱好者用得比较多的是LabelImg经典但界面旧、RectLabelmacOS下好用收费、X-AnyLabeling支持自动辅助标注适合大规模数据。X-AnyLabeling有一个特别适合这个项目的功能它支持加载YOLOv8模型做半自动标注。你可以先用已有的训练好的模型跑一遍待标注图像得到一批置信度较高的预标注框然后在工具里手动修正边缘和遗漏。几百张图一天左右能搞定纯手工的话起码两三天。标注时类别设置要格外小心。建议把“火灾火焰烟雾检测”分成两个类别fire和smoke除非火焰和烟雾在展示界面里完全不需要区分。如果某一类的样本特别多、另一类特别少这种不平衡会在训练时导致那个类别的mAP很低后续再想补数据是在修根。标注规范建议火焰标注框住火焰核心发光区域不要包含过多周围黑色烟熏背景。烟雾标注框住烟雾可见的轮廓遇到大面积烟雾时宁可框大一点也不要在边缘切一半。遇到火焰和烟雾叠在一起时先标注火焰再用烟雾框覆盖烟雾部分两个类别的框可以重叠。4.3 数据集目录与YOLO格式转换YOLOv8训练需要的目录结构是这样dataset/ images/ train/ val/ labels/ train/ val/每张图片对应一个同名的txt文件每行格式是class_id x_center y_center width height其中坐标值全部归一化到0到1之间class_id从0开始。如果从VOC的XML转过来需要先解析XML里bndbox的四个坐标再除以图像宽高得到归一化值。这些处理脚本网上很多但要特别注意坐标系的起点VOC坐标是以左上角为原点宽高不归一化YOLO格式同样以左上角为原点但坐标是比例不能直接套用。用Ultralytics训练时还需要写一个数据配置文件比如fire_data.yamlpath: /path/to/dataset train: images/train val: images/val names: 0: fire 1: smoke这里有个容易踩的坑path字段写绝对路径时如果目录包含中文或者空格很多老版本会读取失败。建议路径里全部用英文。5. 训练命令、参数语义与损失曲线解读数据集准备完毕就开始训练了。这一步是很多人的“玄学”环节为什么别人训练完的模型效果很好我的loss降不下去先看看你有没有正确设置参数。5.1 训练命令与关键参数训练命令本身很简单yolo detect train datafire_data.yaml modelyolov8s.pt epochs100 batch8 imgsz640 device0但如果你只是把别人命令里的参数复制过来很容易出问题。我建议搞清楚这几个参数的真实含义epochs迭代轮数。毕设数据集规模几百到一两千张时100轮是常规设置有的人用300轮纯属浪费。判断阈值看后面要讲的mAP曲线当验证集精度连续多轮不涨就可以停了。batch批量大小。1660Ti显存跑v8sbatch8稳妥改成16会偶尔OOM而且训练速度提升并没有想象中那么大。imgsz输入图片分辨率。想提高小目标检测能力可以尝试从640增加到768但显存占用上升明显。火灾烟雾里小目标偏多这个参数值得实验一下。patience早停机制默认是100。意思是训练100轮精度不涨就自动停止。如果你只设置epochs50又想早停这个参数不影响系统会跑满50轮。网络初始权重从哪来两种方式用官方yolov8s.pt在COCO上预训练过的权重做迁移学习起点或者从零训练。迁移学习对火灾检测这种场景特别重要COCO里有蜡烛、打火机、烟雾等类别模型的底层特征提取器已经有很强的纹理与颜色识别能力迁移后只需要调整高层分类器即可。从零训练的话几百张的数据基本不可能收敛。5.2 训练过程的日志解读与loss曲线训练过程中终端会持续打印日志字段包括Epoch、GPU_mem、box_loss、cls_loss、dfl_loss、Instances、Size。我习惯把关注点放在两个地方box_loss和cls_loss整体趋势应当平稳下降或者先降后微升波动。如果训练前期box_loss从2.0降到1.0又反弹到1.5但不收敛通常是学习率太大或batch太小导致梯度不稳定。Instances代表当前batch里标注框的数量如果长时间为0说明数据加载有问题标注文件读不到模型在学空气。训练结束后Ultralytics会自动生成runs/detect/train目录里面有results.png一张图把loss曲线和精度曲线全部画好了。但这个图只适合快速判断收敛趋势不适合直接用在做报告里。我建议你写个脚本单独画更简洁的曲线把你训练的loss值每一轮存成列表然后用matplotlib画一张自定义的图标注清楚哪些阶段模型开始过拟合。一个常见的坑训练到一定轮数后loss还在降但验证集mAP已经不再上升甚至下降说明模型开始过拟合。这时候你应该早停而不是继续训练。可以用patience参数控制或者在训练脚本里自己写early stopping回调逻辑。5.3 训练集验证集划分的严谨性数据集划分的严谨性直接影响答辩时的可信度。不要只做一次随机划分要在报告里写明训练集70%、验证集20%、测试集10%并且划分时保证同一视频抽出的帧不会同时落在训练集和测试集里否则就是数据泄漏模型成绩虚高答辩时一跑现场视频就翻车。要判断数据有没有泄漏可以检查验证集和训练集里是否有来自同一段视频的连续帧。做法是把原始视频按时间维度切分比如前80%的画面帧用于训练后20%用于验证保证同一视频片段不会被拆散到两边。6. 模型评估mAP、准确率、召回率、FPS都要会看训练完不是直接拿best.pt就完事你得会读评估指标不然答辩老师和评审专家随便一问就会卡壳。6.1 评估命令与mAP理解验证命令yolo detect val modelruns/detect/train/weights/best.pt datafire_data.yaml输出里会有一堆指标关键是这几个mAP50IoU阈值为0.5时的平均精度均值。这是目标检测领域最常用的粗粒度评估指标。mAP50-95从0.5到0.95间隔0.05计算平均这个指标更严格对框位置的准确性要求更高。precision和recallprecision代表检测框有多准recall代表真目标有多少被检出来。火灾检测场景下我认为mAP50比mAP50-95更重要。原因很现实火灾预警系统宁可框出稍微大一点的范围也不希望漏掉目标所以IoU不需要特别严格50%以上的匹配率已经足够让管理人员看到报警位置。训练完的模型在自建数据上一般期望指标合格线良好线mAP500.650.8以上mAP50-950.40.55以上precision0.70.85以上recall0.70.85以上如果mAP50连0.6都不到优先检查数据标注质量而不是调网络结构。标注错位、漏标是mAP低最大的隐形杀手。6.2 单张图片与视频推理的实操直接跑一张图的推理yolo detect predict modelruns/detect/train/weights/best.pt sourcetest.jpg conf0.25跑视频yolo detect predict modelruns/detect/train/weights/best.pt sourcetest.mp4 conf0.25 showTrueconf代表置信度阈值。对火焰烟雾来说阈值设置很讲究设太高0.5以上会漏检小烟雾设太低0.1会大量误报。我的经验是0.25到0.35之间比较平衡。要量化模型是否能实时运行可以加save_txtTrue输出每帧检测结果或者单独用time命令测一下平均推理时间。如果在普通笔记本GPU上跑yolov8s640分辨率下FPS通常能达到30到50之间够用只有用CPU跑才会跌到个位数这种实用性会很差。6.3 混淆矩阵与PR曲线Ultralytics的验证过程会生成confusion_matrix.png和PR_curve.png。这两个图在毕设报告里特别加分。混淆矩阵能直接看到模型究竟把哪个类别和背景混淆。如果“背景被误检成smoke”这一格特别大说明训练集里没有足够的负样本需要补充不带任何火焰烟雾的日常图片。很多同学忽略负样本这是后期最想补救的问题。PR曲线下的面积其实就是mAP值曲线越靠近右上角越好。答辩时你可以指着PR曲线说明“当置信度阈值降低到0.2时recall能达到0.85而precision仍保持在0.75说明模型在低阈值下有较好的容错能力适合预警场景。”7. 模型部署到真实场景摄像头推流与嵌入式设备的落地方案“yolov8训练好的模型怎么部署到嵌入式设备”这个问题我每年要看学生问几十遍。训练和部署完全是两码事训练时你有GPU、有大把内存、可以慢悠悠调参部署时面对的是摄像头视频流、有限算力和RTC般的需求。这里拆开说。7.1 PC端摄像头实时检测脚本最简单可靠的方案是直接用OpenCV读取摄像头把帧交给YOLO推理import cv2 from ultralytics import YOLO model YOLO(runs/detect/train/weights/best.pt) cap cv2.VideoCapture(0) # 0代表默认摄像头 while cap.isOpened(): ret, frame cap.read() if not ret: break results model(frame, conf0.25, device0) annotated_frame results[0].plot() cv2.imshow(Fire Detection, annotated_frame) if cv2.waitKey(1) 0xFF ord(q): break cap.release() cv2.destroyAllWindows()这个脚本在本地跑起来很直观适合在现场演示时说“现在大家看到的是实时画面当火焰出现时模型能立即给出红色框同时标出置信度”。7.2 模型导出与嵌入式部署如果目标平台是Jetson Nano、树莓派或者一些边缘盒子直接跑best.pt不现实。best.pt是PyTorch格式依赖整个深度学习框架嵌入式设备上装PyTorch本身就非常吃力。标准路线是把权重导出成更轻量的格式yolo export modelbest.pt formatonnx opset12导出后得到best.onnx这个文件可以用ONNX Runtime做CPU推理也可以用OpenCV DNN模块加载。笔记本上跑CPU推理yolov8s大约能到10到20FPS基本够用。如果目标是更小的设备比如RK3588这类NPU平台需要先获取官方工具链支持清单把模型量化为INT8格式。这中间的精度损失通常不大但要用目标设备上相同分辨率的验证集重新评估一次mAP防止量化后精度崩掉。7.3 手机端的部署思路热词里提到“yolov8手机安装包”这部分我多提一句。手机端部署目标检测模型主流路线是NCNN或MNN。YOLOv8官方没有直接提供NCNN版本但社区里有现成的yolov8-ncnn集成先把best.pt导出为NCNN格式再在Android/iOS工程里调用。不过这类跨端部署工期和工作量都偏大毕设如果想演示手机端效果我有个更省事的建议做一个局域网推流方案。笔记本跑摄像头检测服务Android端用浏览器访问Web服务地址显示实时检测视频流。这个方案只用Python加Flask就能实现同时现场演示效果和“手机端检测”在视觉上差不多但难度低了一个数量级。8. 改进机制怎么写才不会变成“无效创新”这个话题我必须专门展开讲因为这是大多数“YOLOv8火灾检测毕设”最薄弱的环节。很多学生为了凑字数在YOLOv8的主干网络上加一个SE注意力模块或者换一个激活函数就在论文标题上写“基于改进YOLOv8的火灾检测”。答辩老师只要追问一句“你加了这个模块之后具体哪个指标提升了多少为什么提升”好多人就答不上来。8.1 改进不是堆模块注意力机制SE、ECA、CBAM是YOLO改进论文里用烂了的手段但大部分学生只是把网上开源代码往模型里一插训练完发现mAP涨了0.1结论是“有效”。这个流程有严重问题mAP涨0.1本身可能在随机波动范围内你没做显著性检验根本没资格说有效提升。正确做法是先做基线实验。用官方YOLOv8s在同样数据集、同样训练超参下跑一遍得到基线mAP。然后加入改进模块再跑一遍。如果改进后mAP涨了1个点以上并且两个类别fire和smoke的指标都朝着同一个方向变化这才算有说服力的改进。其次改进要针对问题而不是为了改而改。比如火焰烟雾检测经常遇到小烟雾漏检如果你加入一个针对小目标的高分辨率检测层这在逻辑上是自洽的。如果你只是看网上别人用坐标注意力提升了目标检测精度就搬到火灾场景那答辩老师很难认可。8.2 可讲的改进思路举几个例子给主干网络加一个多尺度特征融合模块比如BiFPN的思路增强小烟雾目标在不同层级的特征表达。改进损失函数把CIoU换成Wise-IoU在烟火焰这种低质量样本居多的数据集上Wise-IoU对样本平衡更友好。使用数据增强策略比如Mosaic加Copy-Paste让模型对多类别重叠目标更鲁棒。在检测头部分引入轻量化注意力比如ECA通过只加入少量参数换取明显的精度收益。答辩的时候老师想听到的不是“我用了这个新模块”而是“我遇到的问题是什么我基于什么问题引入了什么变体实验表明变体在关键指标上产生了多少收益代价是什么”。你可以准备一张表列清楚基线模型、改进模型、参数量、mAP50、mAP50-95、FPS几个指标这样的表格在答辩PPT里非常醒目比一段话有说服力得多。8.3 消融实验怎么写消融实验是证明“改进模块真的有效”的标准方法。例如你同时加了注意力和小目标检测层需要分别做基线模型。基线注意力。基线小目标检测层。基线注意力小目标检测层。这四组实验跑下来才能看出每个模块的边际贡献。很多人的毕设只做了第1组和第4组这是不严谨的。消融实验的总量不大但是在报告里非常值钱。9. 演示系统、报告与答辩的准备要点毕设不只是“模型跑通了”还要能把过程讲清楚。这里给一个可以直接落地的汇报思路同时提醒几个容易翻车的地方。9.1 演示系统的三个必备功能一个能撑住五分钟现场演示的系统至少要有三个页面不是乱来的实时检测页面打开摄像头画面里出现火焰烟雾时能实时框选置信度清晰显示。历史检测记录页面把检测到火焰的事件记录为日志包含时间、图片、置信度方便回查。参数设置页面可调节置信度阈值。为什么必须有历史记录因为现场演示如果前半段一直没检测到火焰会显得很尴尬。有历史记录的话演示时可以打开一条检测记录来展示稳定性和连续性让老师更直观地看到系统的预警能力而不是靠偶发现象。这部分我建议优先用PySide6或Flask做Web界面。Flask方案更轻和YOLOv8推理逻辑融合方便用浏览器访问既可以PC演示也顺带覆盖了前面的“手机装包”需求。9.2 答辩时老师可能问的问题为什么不用两阶段检测器比如Faster R-CNN答两阶段检测器在精度上有优势但推理速度慢火灾预警需要实时性一阶段YOLOv8更匹配。mAP50和mAP50-95有什么区别答按前面第6节的说法对齐答案重点说明选择mAP50作为核心指标的原因是预警场景对框的位置精度要求适中。你的模型在夜间场景表现如何答训练集中如果包含夜间的火焰图像可以给出实测结果如果没有可以说明这是下一步优化方向。数据量不够大怎么办答用数据增强、迁移学习的理由来解释最好再展示一下自己拍的模拟火焰数据进行补充。9.3 一个“读模型预测结果”的小技巧实际演示时摄像头的环境光照和训练集差别可能很大模型出框率会突然缩水。解决办法不是当场改模型而是在代码里加一个预处理步骤把输入帧的亮度、对比度做一次归一化或者直接采用CLAHE限制对比度自适应直方图均衡增强对烟雾这种低对比度目标有明显帮助。这个处理控制在10到20毫秒不影响实时性但能大幅降低光照变化带来的检测波动。10. 最后分享一点实操经验从环境配置到答辩我见过太多学生卡在同一个地方命令行跑通了、模型也训练了但中间过程一句都讲不深一被追问就露馅。所以这篇里我最想强调的不是参数本身而是过程的可解释性。以后你拿到任何训练好的模型第一步先跑一遍验证集把PR曲线和混淆矩阵打出来用它们去倒推训练数据哪里有问题这才是把“会用模型”变成“懂模型”的正路。如果手头资源有限、时间又紧请务必先跑通基线模型保住“能达到最佳FPS和合格mAP50”的底线再去想怎么加改进模块。改进实验宁可少做一个也不要做了之后既不能解释原因又不能展示在消融表格里。这篇文章里涉及的代码、命令、参数都是我实际跑过的组合直接抄大概率不会翻车。但每个人的显卡驱动、数据分布还是会带来一些差异遇到问题的时候不要怀疑自己不行大概率只是CUDA和PyTorch版本之间的兼容性问题。先去看版本再去看代码九成的bug都是这个根源。本文还有配套的精品资源点击获取