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

资讯详情

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

YOLOv8安全出口堵塞检测:从训练到部署全流程解析

YOLOv8安全出口堵塞检测:从训练到部署全流程解析 简介本资源是一套面向高校计算机、人工智能及相关专业学生的毕业设计级项目聚焦工厂安全出口堵塞智能识别这一典型工业安全场景基于YOLOv8目标检测框架实现端到端的实时分析与可视化预警。资源适用于毕设、课程设计、大作业及初学者进阶学习无需深厚深度学习基础即可快速上手部署与验证。压缩包共8个文件3个核心Python脚本含训练、检测与可视化界面3个模型权重文件.pt2个说明文档总大小15.91MB结构精炼、模块职责清晰train_mode.py支持模型微调Detection_video.py实现视频流检测Visual_interface.py提供图形化操作界面并自动生成混淆矩阵、F1曲线、PR曲线、标签分布图等关键评估图表。目前已有41人下载学习所有代码均经实测运行成功配套README.txt详述环境配置与运行流程开箱即用答辩演示效果扎实可靠。 去年我接了一个毕业设计课题导师给的参考方向里有工业安全相关的目标检测当时第一反应是做安全帽佩戴检测后来发现这个题目已经被做烂了答辩的时候评委审美疲劳很难讲出新东西。纠结挺久之后我换了个思路与其检测人有没有戴安全帽不如检测安全出口有没有被堵住——事故发生时安全出口一旦被货物、推车、随意堆放的材料堵死后果非常严重。最后定的课题就是《基于YOLOv8的工厂安全出口堵塞检测》。这个项目完整做了源码、可视化界面、数据集和部署教程从训练到演示全链路打通代码量不大但技术栈覆盖目标检测、图像处理、GUI开发、模型部署非常适合用来做毕设或课程设计。本文就把我做这个项目时踩过的坑、优化思路、关键代码逻辑和部署经验完整写出来希望能帮到正在考虑同类题目的朋友。这个项目的核心价值在于它不是只做一个能跑通的YOLOv8 demo而是把检测和业务判断结合起来——单纯检测到画面里的箱子和人是没意义的要判断这些目标是否堵住了安全出口区域才是有实际价值的安防功能。所以整体系统包含两个关键层次第一层是YOLOv8目标检测负责识别画面中的常见堵塞物第二层是区域判定逻辑负责根据目标位置和安全出口区域的相对关系输出正常/预警/堵塞三种状态。两层叠加之后既能满足算法创新要求又有很强的工程落地感答辩时讲起来非常占优势。1. 安全出口堵塞检测的痛点与YOLOv8选型理由1.1 为什么不能只靠人工监控工厂车间里的安全出口往往会粘贴禁止堆放物品的标识但在实际生产中货物周转频繁、搬运工走捷径、临时堆放物料的现象经常发生。传统做法是保安巡查和人工盯监控问题是监控画面动辄几十上百路人不可能24小时紧盯一个出口等到发现堵塞的时候往往已经堆积了一段时间甚至已经造成了安全隐患。用视觉AI做自动检测本质就是把这个巡查过程从人看屏变成算法看屏一旦出口区域出现堵塞物就立刻报警让安全管理人员第一时间处理。另外还有一个容易被忽视的点安全出口堵塞检测不仅要发现已经堵死更要在开始堆积的早期阶段就发预警。比如一个箱子放在出口旁还没完全挡住通道这属于风险苗头。如果检测系统能区分出出口区域内有物体和出口区域被大面积覆盖两种状态并且前者的报警级别低一些、后者的报警级别高一些这样就比单纯输出一个堵塞结果实用得多。1.2 YOLOv8在同类算法里的优势选YOLOv8而不是Faster R-CNN、SSD或YOLOv5主要有几点原因。第一是速度和精度的平衡。YOLOv8在COCO数据集上mAP表现不错而且推理速度非常快在普通显卡上都能跑到几十FPS。对于工厂监控这种实时性要求高的场景这个优势很关键。如果用Faster R-CNN精度确实高但推理帧率上不去做视频流检测时延迟明显一旦卡顿就失去了实时预警的意义。第二是训练生态成熟。YOLOv8基于ultralytics框架训练命令封装得非常好提供大量现成回调函数损失曲线可视化也内置。即使没有太多算法基础只要会基本PyTorch操作就能把自定义数据集训练跑起来。这对做毕设的学生来说特别友好因为毕设的重点往往是完整项目能力而不是让你从零手写一个检测头。第三是轻量化部署方便。YOLOv8提供多种规格模型从n、s、m到l、x可以根据设备性能选择。我最终选择的是yolov8s在精度和速度之间取得了一个比较稳妥的平衡。毕设答辩现场用的可能就是一台普通笔记本如果选yolov8x部署到CPU上跑视频可能会卡而yolov8s在CPU上也能勉强跑实时交差更稳。1.3 项目整体的技术路线整个项目是目标检测 区域判定 可视化报警三部分组成的目标检测YOLOv8负责识别图像中的堵塞物类别本项目将堵塞物统一归为一个类别blockage包含纸箱、货物托盘、推车、堆积材料等多种可能堵住出口的物体。区域判定在画面中预设安全出口的检测区域可以手工标定矩形或多边形通过后处理逻辑判断目标是否落入该区域以及目标在区域中的占比是否达到阈值。可视化界面用PyQt5编写桌面端GUI支持图片、本地视频、摄像头实时流三种输入方式界面实时显示检测框、报警状态和置信度信息还能触发声音报警。这么设计的好处是逻辑清晰每一块都可以单独讲清楚。毕设论文可以按这个架构分章节代码模块也能对应上答辩评委问起来非常容易答。2. 系统功能架构与核心模块拆解2.1 整体模块划分项目源码里我按功能拆成几个模块方便后续扩展models/存放训练好的YOLOv8权重文件。config/存放配置文件包括安全出口区域坐标、报警阈值、检测置信度阈值等。utils/封装检测器、区域判定、报警逻辑等工具函数。ui/PyQt5界面文件及主程序逻辑。data/数据集目录包括训练集、验证集、测试集和标签文件。train.py模型训练脚本。predict.py命令行推理脚本。main.py可视化界面入口。模块化虽然听起来基础但对毕设项目非常重要。千万不要把一堆代码堆在一个文件里那样调试起来非常痛苦。我一开始也图省事把检测和界面写在一起后来发现需要在线程里做视频流推理时界面直接卡死被迫重构。早一点做模块拆分后面省很多事。2.2 检测流程的状态机设计判断安全出口是否堵塞不能简单用有没有检测到blockage来决定因为如果出口旁边有物体但没进入出口区域这本身不算堵塞。我设计了一个三状态判定逻辑NORMAL出口区域内没有检测到任何目标或者目标与出口区域面积交叠比低于20%。WARNING检测到目标进入出口区域但目标面积占出口区域比例在20%~50%之间属于有堵塞风险。BLOCKED目标面积占出口区域比例超过50%说明安全出口已经被堵住需要立即处理。这里面积占比的计算方式是用目标检测框与预置安全出口区域的交并比IoU或者交叠面积占出口区域面积的比例。我实际用的是检测框与出口区域交集面积 / 出口区域总面积这个指标比单纯IoU更直观因为检测框可能比出口区域大很多直接用IoU会出现分母过大的偏差。计算方式如下把预置的出口区域用OpenCV的轮廓表示生成一个掩膜mask。YOLOv8检测得到目标的边界框边界框转成矩形轮廓。计算矩形与出口区域掩膜的交集面积。用交集面积除以出口区域掩膜总面积得到堵塞占用比。阈值可以调整。我实际测试中20%和50%这两个值在大多数场景下比较合理。如果你希望系统更敏感可以把预警阈值调到10%如果希望减少误报就调高。2.3 可视化界面的功能细节GUI界面使用PyQt5开发整体布局分为四块左侧是主视频显示区实时显示摄像头画面或视频帧上面绘制检测框、安全出口区域、状态标签。右侧是控制面板区包含打开图片打开视频打开摄像头停止报警开关等按钮还有摄像头编号选择、置信度阈值滑条、出口区域标定入口。右下方是状态信息栏显示当前检测状态、检测到的堵塞物数量、占用比例、FPS等信息。报警区域用大面积色块显示正常显示绿色预警显示黄色堵塞显示红色同时支持报警音提示。界面设计虽然不要求很精美但逻辑要合理。这个项目答辩时评委大概率会现场操作如果界面太乱或者按钮功能不明确会比较吃亏。所以我特意把状态颜色、按钮文字都做得很直白。3. 完整数据集的采集、标注与划分3.1 数据采集的思路做目标检测项目最怕的就是没有数据。我一开始想从公开数据集中挑选但公开数据集中关于安全出口堵塞的专门数据集几乎没有。最接近的是COCO里的person、truck、bicycle等类别但这些并不能很好的覆盖工厂货物堆放的场景。我的处理方式是公开数据 自采数据结合。公开数据部分从COCO数据集中筛选出包含纸箱cardboard、货物、人、推车等类别的图像但需要重新标注为blockage。自采数据部分我在学校实验室和楼道安全出口附近用手机和摄像头拍摄了大量模拟堵塞场景的图像。实验中可以摆放纸箱、行李箱、椅子、货物推车等在安全出口附近拍摄不同角度、不同光照、不同距离的照片。最终我整理出的完整数据集包含约4200张图像其中训练集3500张验证集400张测试集300张。不过坦白讲自采部分我拍的时候很费劲因为要模拟真实工厂场景还得保证遮挡关系多样性仅靠几个箱子来回摆容易过拟合。后面我通过数据增强缓解了一部分。如果你也做这个题目不要想着一次性采集几千张。先采集300~500张标注好加上公开数据扩充再通过翻转、旋转、亮度调整、模糊等增强方式扩大到数千张这是最省力的做法。完整版资源包里的数据集就包含了原始图像、标注文件和划分好的目录结构。3.2 标注工具与格式我使用LabelImg做标注这个工具完全是图形界面操作框出目标后输入类别名即可。注意标注时类别统一为blockage。为什么只标一个类别因为系统最终只需要知道有没有障碍物堵住出口不需要细分障碍物是箱子还是车。类别精简之后模型训练难度会降低检测准确率也会提高。如果想做一个更有区分度的版本可以把类别拆成cart、box、person三种这样对人群堵住出口的特殊场景能识别得更好但训练数据量需要相应增加。标注时有一个非常重要的原则只标会对安全出口造成影响的目标。比如画面里远处的一个路人明明不在出口附近就没必要标注否则模型会学到只要见了人就算blockage导致误报。我最初就犯了这个错误训练出的模型对画面中央的路人敏感而对出口附近的货物箱反而不敏感。后来重新梳理了标注规范只标注那些可能堵住安全出口的物体且目标尺寸至少占画面一定比例模型表现明显改善。YOLO格式的标注文件是一个txt文件每行内容为class_id x_center y_center width height其中坐标均为归一化后的值。LabelImg保存PascalVOC格式后再转成YOLO格式也可以但我直接用LabelImg的YOLO模式省一步转换。3.3 数据增强的合理使用我使用ultralytics内置的数据增强策略同时额外做了一些自定义增强随机水平翻转、随机缩放0.5~1.5倍、亮度/对比度扰动、高斯模糊、仿射变换。这里注意一点增强不是越多越好。如果增强程度过大会让模型学到变形严重的目标影响真实场景泛化。还有对于小车、箱子这类形状比较规则的目标不推荐做90度旋转等强几何变换因为真实监控画面中的物体基本都是正立的过强的旋转会让模型产生混淆。增强后的数据集我做了单独备份训练时会随机挑选增强。为了验证增强效果我跑了对照组不增强时验证集mAP50约0.86增强后提升到0.92。这个提升很大一部分来自小目标场景因为随机缩放能模拟监控摄像头远距离拍摄的效果。3.4 数据划分的细节划分训练集、验证集、测试集时要特别小心同一场景的不同帧不要同时出现在训练集和验证集中。我有一个场景连续拍了60帧如果直接按文件顺序切分会让模型记住场景而不是学到真实目标特征导致验证集分数虚高。正确做法是按场景来源分组确保同一场景的图像只出现在一个集合中。我写了一个脚本按文件名前缀分组后随机划分这样更可信。4. YOLOv8训练环境搭建与模型调参实录4.1 训练环境配置先说我用的环境参考操作系统Windows 11建议用Linux服务器训练这里为了毕设演示方便还是WindowsPython3.9PyTorch2.1.0 CUDA 11.8ultralytics8.0.221显卡RTX 3060 6GB显存很紧但够用安装命令不复杂但版本对应关系很重要。建议按官方文档来pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install ultralytics如果你是小白强烈建议直接创建虚拟环境不要污染系统Python。我见过很多同学在base环境里装了一堆包最后版本冲突重装三次系统才解决。用conda创建环境会省心很多conda create -n yolo8 python3.9 conda activate yolo8 pip install ultralyticsultralytics会顺带安装opencv-python、numpy、matplotlib、pandas等依赖日常开发够了。如果训练阶段不需要GPU也可以直接用CPU但速度会慢不少一张图可能要一两秒。如果有NVIDIA显卡记得先确认显卡驱动和CUDA版本再安装对应PyTorch版本。4.2 数据集配置文件编写YOLOv8训练需要用到data.yaml文件内容如下train: D:/graduation/dataset/train val: D:/graduation/dataset/val test: D:/graduation/dataset/test nc: 1 names: [blockage]注意train和val路径建议写成绝对路径避免训练时路径解析出错。网上很多教程让你写相对路径换台电脑就跑不通。推荐直接在配置里写绝对路径等部署阶段再换成相对路径。4.3 训练命令与超参数调整训练命令很简洁yolo detect train dataconfig/blockage.yaml modelyolov8s.pt epochs100 batch8 imgsz640 device0我把device0指定为GPU。如果只有CPU改成devicecpu但训练时间会很长建议用Google Colab免费GPU。几个关键超参数我的调整心得epochs100在这个数据集规模下足够收敛。我观察到第60轮左右mAP50已经接近0.9再往后涨得很慢说明没必要硬拉到300轮。batch8是因为6GB显存限制imgsz640时再大就会爆显存。如果你也用6GB显存别硬调16可以尝试batch4配imgsz768有时候提升更明显。patience20早停策略验证集指标连续20轮不涨就停止节省时间。imgsz640是YOLOv8默认输入尺寸对于出口检测场景够用。如果你希望提升小目标检测能力可以适当提高到768甚至1024但推理速度会下降。optimizerauto让ultralytics自己选优化器省心。训练结束后会在runs/detect/train目录下生成权重文件best.pt和last.pt。测试加载时优先用best.pt因为它是验证集上表现最好的权重。4.4 训练过程观察与常见误区训练过程中可以通过tensorboard或者ultralytics自带的损失曲线图观察收敛情况。我通常会关注三个指标train/box_loss、train/cls_loss、metrics/mAP50(B)。如果box_loss持续下降而mAP不涨大概率是数据标注有噪声需要检查标注框是否贴合如果训练loss还在降但验证loss升高说明过拟合了应该加增强或减小模型容量。有一个容易忽略的细节yolov8s.pt是预训练权重它会导入COCO上的通用特征对箱子、人等目标已经有基础识别能力。所以即使你只提供了500张自定义数据训练效果也不会太差。这是YOLOv8做迁移学习的天然优势。但如果你的数据非常特殊比如想要检测消防器材、灭火器而预训练权重里这类物体样本很少那就需要更多数据让它稳住迁移学习的效果会打折扣。我这里还遇到过一个问题训练时Windows防火墙弹窗拦截了python运行连接导致ultralytics下载预训练权重失败。解决办法是提前手动下载yolov8s.pt放到项目根目录或者在命令行里先设置代理。这点在部署到别人电脑时也可能遇到最好的做法是直接把权重文件放进项目包里省得在线下载。4.5 模型评估与导出训练完成后可以用一行命令输出模型在测试集上的详细指标yolo detect val dataconfig/blockage.yaml modelruns/detect/train/weights/best.pt输出结果包括mAP50、mAP50-95、各类别的precision和recall。我的模型最终在测试集上mAP50为0.93mAP50-95为0.78对单类别检测来说已经算不错的成绩。如果后续要部署到边缘设备比如嵌入式板子可以再导出为ONNX格式或TensorRT格式yolo export modelruns/detect/train/weights/best.pt formatonnx dynamicTrue导出的ONNX模型可以脱离PyTorch环境部署也能大幅提升CPU推理速度。后面做界面推理时我直接用PyTorch加载best.pt因为演示更简单但如果要真正工程化ONNX是更好的选择。5. 可视化检测界面的交互设计实现5.1 选型为什么用PyQt5而不是Tkinter做可视化界面可选方案不少PyQt5、Tkinter、OpenCV自带的高Gui甚至用Web前端。我选用PyQt5因为它在桌面端交互能力上更成熟支持自定义布局、按钮、滑块、状态栏、信号槽机制而且遇到问题网上资料非常多。Tkinter虽然轻量但做复杂布局比较难受尤其是嵌入摄像头画面、绘制检测框时性能不够理想。OpenCV的cv2.imshow就更不用说了完全不适合做成熟的报警界面。当然PyQt5也有一点坑安装包大约50MB打包成exe时体积更大。不过考虑到毕设展示场景基本是在电脑上运行这个体积完全可以接受。5.2 界面线程模型实时摄像头检测最容易踩的坑就是界面卡死。原因很简单视频流解码和模型推理都是耗时操作如果放在GUI主线程里运行画面更新就会被阻塞表现为窗口未响应。最常规的解决办法是多线程 信号槽。我的实现方式主线程负责GUI事件循环响应按钮点击、状态刷新。新开一个QThread子线程负责视频流读取、逐帧检测、状态判定。子线程每处理完一帧通过pyqtSignal把结果图像、状态、占用比传给主线程主线程用QLabel.setPixmap更新画面。核心代码大致如下class DetectThread(QThread): change_pixmap_signal pyqtSignal(np.ndarray, str, float) def __init__(self, model, area_polygon, conf_thres): super().__init__() self.model model self.area_polygon area_polygon self.conf_thres conf_thres self._running True def run(self): cap cv2.VideoCapture(0) while self._running: ret, frame cap.read() if not ret: continue results self.model.predict(sourceframe, confself.conf_thres, verboseFalse) status, ratio, annotated process_frame(results, frame, self.area_polygon) self.change_pixmap_signal.emit(annotated, status, ratio) cap.release()实际上为了让检测过程更顺畅我还对model.predict做了封装让它返回Detections对象。但上面这个逻辑已经足够理解线程的思路。注意线程退出时要设置self._running False否则关闭窗口后Python进程仍然存在。5.3 安全出口区域标定功能为了适配不同监控场景我做了安全出口区域标定功能而不是把区域坐标写死在代码里。点击界面上的标定出口区域按钮后程序会进入标定模式用户可以在画面上用鼠标拖拽绘制一个矩形或多边形确认后系统会把坐标保存到config/area.json中。标定界面我用的是OpenCV的窗口函数配合鼠标回调事件。因为OpenCV绘制交互比较方便可以减少PyQt5的复杂部分。标定完成后把多边形点集保存下来后续每次推理都会用这个区域计算面积占比。在标定环节我建议把安全出口区域画得比实际出口范围略小一点因为摄像头通常有视角畸变最边缘的位置可能不是安全出口的实际通行区域。留一点余量可以减少误报。区域坐标示例{ polygon: [[185, 120], [410, 118], [395, 330], [205, 328]], alarm_threshold: 0.2, block_threshold: 0.5, conf_threshold: 0.4 }5.4 报警联动设计报警不能只在界面上闪个颜色最好有声音和弹窗提醒同时把报警记录保存下来方便事后追溯。我的实现是使用QSound播放系统提示音在状态切换为WARNING或BLOCKED时触发。同时在界面顶部用大号红色字体显示出口堵塞请立即处理并闪烁提示。每次报警时把当前帧、时间戳、占用比追加写入logs/alarm_history.csv这样能形成简单的事件记录。有同学可能会问要不要做短信通知或微信推送可以加但毕设阶段意义不大。因为短信推送需要服务器或第三方接口且容易涉及安全合规问题。在本地记录报警事件已经足够展示系统完整性。5.5 界面实际运行效果我用线程模型重构之后界面帧率基本稳定在25FPS左右RTX 3060640输入尺寸摄像头画面。CPU上测试大概只有5-8FPS会有点卡但图像界面不会无响应。如果你的毕设演示机没有独立显卡建议用视频文件演示而不是实时摄像头或者把imgsz降到416推理速度会提升不少。界面中检测框的颜色根据状态区分正常状态下的目标框为蓝色预警状态下为黄色堵塞状态下为红色。安全出口区域始终用绿色半透明多边形绘制。这样一眼就能看出当前系统判定的状态答辩时很有说服力。6. 部署过程中的路径、依赖与兼容性排坑6.1 权重文件路径问题很多同学在部署阶段遇到的第一个坑是训练时一切正常换一台电脑运行界面程序就报错模型文件不存在或路径找不到。原因多半是代码里用了绝对路径比如D:/graduation/runs/...换到别的机器自然失效。解决方式是在主程序入口动态获取项目根目录import os BASE_DIR os.path.dirname(os.path.abspath(__file__)) MODEL_PATH os.path.join(BASE_DIR, models, best.pt)这样无论项目被放到哪个目录都能正确加载权重文件。同理数据集的路径、日志文件路径也尽量都基于BASE_DIR拼接。6.2 依赖版本冲突PyQt5和OpenCV的依赖在某些版本下会打架典型表现是ImportError: DLL load failed。我在Windows上遇到一次原因是环境中同时安装了多个OpenCV版本其中一个与PyQt5不兼容。解决方式是统一使用opencv-python-headless替代opencv-python后者不依赖桌面GUI和PyQt5共存更稳定。不过要注意headless版本可能不包含某些GUI功能但你如果在程序里只用cv2.VideoCapture和cv2.imread完全没问题。另外ultralytics要求OpenCV4.6如果你系统里有一个4.5的旧版OpenCV建议先卸载再安装新版pip uninstall opencv-python opencv-contrib-python pip install opencv-python4.8.0.766.3 摄像头不支持或索引冲突调用摄像头时cv2.VideoCapture(0)默认使用第一个摄像头。如果笔记本自带摄像头外接USB摄像头可能需要指定索引1或2。我封装了一个摄像头检测逻辑遍历0~4号索引找到能打开的摄像头并自动选择def find_camera(max_index4): for idx in range(max_index): cap cv2.VideoCapture(idx) if cap.isOpened(): cap.release() return idx return 0有时摄像头画面预览正常但PyQt5画面上是黑屏大概率是摄像头被其他软件占用关闭占用软件即可。6.4 打包成exe便于演示毕设答辩时用别人电脑临时装Python环境太麻烦。我建议把所有代码、权重、依赖打包成一个exe。打包工具我用的是PyInstaller命令如下pip install pyinstaller pyinstaller --noconfirm --onefile --windowed --add-data models;models --add-data config;config main.py注意--add-data参数在Windows下用分号分隔Linux和macOS用冒号。因为PyInstaller默认不会把非.py文件放进exe所以models和config目录要显式打包。运行时sys._MEIPASS会指向临时解压目录所以上面的BASE_DIR要兼容这种情况if getattr(sys, frozen, False): BASE_DIR sys._MEIPASS else: BASE_DIR os.path.dirname(os.path.abspath(__file__))这样打包后在别人电脑上直接双击exe就能跑起来。6.5 演示时如何避免翻车最后一个排坑经验是答辩现场的网络环境不可控如果程序启动时还要联网下载模型权重或检查更新一旦断网就会卡住。解决办法是提前把best.pt、data.yaml等所有资源都放在项目包里并在代码里禁用ultralytics的联网检查。ultralytics会在首次导入时下载某些配置文件有时候也会尝试访问GitHub更新。我最省心的做法是离线安装所有依赖后在虚拟环境里运行一次等缓存生成完毕再把整个虚拟环境目录备份或打包。这样换电脑时只要把虚拟环境拷贝过去并设置正确的Python解释器路径就能直接运行。另外演示前一定要把摄像头、灯光、画面背景提前确认好。别想着现场再调。很多同学答辩时翻车不是算法不行而是现场环境光线太暗导致检测率骤降。我在实验室测试时发现光线不足的情况下小纸箱的检测置信度会从0.85掉到0.5直接判定为正常漏报。后来我在界面里加了一个低光补偿开关通过直方图均衡化提升暗部细节才明显改善。如果你也遇到类似情况可以在做界面时预埋一个亮度增强函数必要时一键增强。7. 一点经验总结从项目管理角度看毕设完成过程如果只讲技术细节容易忽略一个问题毕设项目通常有两三个月的完成周期良好的进度规划比单纯堆代码有用得多。我把自己的时间安排供参考第一周做需求分析和数据准备第二到第三周做标注和数据增强第四周搭训练环境并跑通基线第五到第六周调参和优化模型第七周做可视化界面和报警逻辑第八周打包部署和文档整理最后留一周做整体联调和答辩PPT。前期数据准备虽然枯燥但一定要留足时间因为标注质量决定了模型上限。如果标注得很差后面调参无论如何都救不回来。在写作项目报告时建议把区域占用比判断堵塞状态作为创新点重点描述因为很多毕设只做到识别到目标没有进一步做业务逻辑判断。这一层逻辑展示了算法到应用的转化能力评委通常很吃这一套。最后再分享一个小技巧演示时视频文件用的是我自己录的一段素材包含正常、预警、堵塞三个状态段切换自然且检测稳定比现场连摄像头更稳妥。当然现场摄像头演示也要准备万一投影环境光线太暗视频文件保底。把视频演示和摄像头实拍两个模式都做好答辩效果会完全不一样。本文还有配套的精品资源点击获取
返回列表