
简介基于YOLOv8的商场扶梯逆行行为预警系统是一套面向计算机视觉方向毕业设计、课程设计及初期项目演示的完整方案资源以目标检测为核心覆盖数据准备、模型训练、可视化界面与部署文档适合具备一定Python基础的高校学生或相关从业者直接使用。压缩包内共8个文件包含3个Python脚本分别负责模型训练、视频检测与可视化界面、3个模型权重文件含YOLOv8n、训练完成的best.pt及YOLO11n、2个txt说明文档整体大小15.91MB按README指引即可快速完成环境配置与运行。系统提供可视化交互界面支持视频检测与模型训练模式可产生核心指标曲线、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果及标签分布图便于论文展示和答辩佐证。目前已有37人学习适合作为毕设保底方案或提升综合能力的实践项目。1. 商场扶梯逆行预警YOLOv8 目标检测的完整毕设交付在商场这种人员密集场景里扶梯逆行是最难靠安保肉眼盯住的问题之一。这个项目把「人有没有逆行」拆成两件事来做先用 YOLOv8 目标检测模型把扶梯区域的行人框出来再通过连续帧的位置变化判断移动方向一旦与扶梯运行方向相反就触发报警。整套资源包含训练源码、可视化界面、完整数据集和部署教程解压后按 README.txt 的顺序走一遍就能跑。适合计科、人工智能、自动化等专业的毕业设计和课程设计答辩时直接拿出指标曲线和界面演示项目里预置的混淆矩阵、F1 曲线、PR 曲线都是现成素材。下面按「原理 → 部署 → 训练 → 避坑 → 验收」的顺序把每个环节拆开讲。2. 检测原理与选型逆行判断不是“人往哪走”这么简单这套系统能跑通关键不在模型多新而在把「检测」和「方向判断」两层逻辑拆得干净。先讲原理再讲三份权重怎么配合最后落到答辩要用的图表。2.1 单帧检测解决不了方向问题扶梯逆行系统要同时回答两个维度的问题空间维度是「人在扶梯哪个位置」时间维度是「人朝哪个方向移动」。YOLOv8 这类单帧检测器只回答前者它输出的每个框是一组坐标、类别和置信度没有速度也没有方向。要判断逆行必须把连续若干帧的检测结果串起来看同一行人出现在哪几帧、中心点怎么移动、移动方向与扶梯运行方向夹角多大。常见做法是两段式设计。第一段跑 YOLO 检测出行人框第二段做轻量目标匹配——把当前帧的框和上一帧的框按 IoU 或中心点距离对上号匹配成功后用相邻帧的中心点位移算方向。方向与扶梯运行方向相反且持续超过设定帧数才触发报警。以扶梯向上运行为例核心判断逻辑大致长这样# 以扶梯向上运行为例屏幕上 y 坐标减小表示向上 def judge_direction(prev_box, curr_box, reverse_th10): prev_y (prev_box[1] prev_box[3]) / 2 # 上一帧中心点 y curr_y (curr_box[1] curr_box[3]) / 2 # 当前帧中心点 y if curr_y - prev_y reverse_th: return down # 实际在往下走与扶梯方向相反 return up这里的关键是「持续超过设定帧数」这个条件它能把偶发的单帧抖动直接过滤掉比在单帧图像上直接喊逆行可靠得多。为什么不直接用背景差分或光流法扶梯梯级本身在运动背景差分会把梯级当成前景光流法在低纹理区域和密集人流里噪声巨大。YOLO 先检测、再算方向等于把「找目标」和「算运动」两个难题分开每个环节都能独立调参。2.2 yolov8n / yolo11n / best.pt三份权重各干什么压缩包里同时给了 yolov8n.pt、yolo11n.pt 和 best.pt 三份权重第一次拿到容易懵。其实分工很明确。yolov8n.pt 是 COCO 预训练权重n 代表 nano是 YOLOv8 里体量最小的一档参数量小、推理快、显存占用低train_mode.py 拿它当训练起点收敛速度比从零训练快很多。yolo11n.pt 是 ultralytics 后续 YOLO11 系列的轻量权重放在工程里主要用来做 backbone 对比实验——毕设里加一组「yolov8n 与 yolo11n 精度与速度对比」是很自然的加分项。best.pt 则是作者用自己的扶梯数据集训练完成后保存的最优权重Detection_video.py 和可视化界面默认加载的都是它。权重文件来源使用场景yolov8n.ptCOCO 预训练train_mode.py 的初始权重yolo11n.ptCOCO 预训练YOLO11backbone 对比实验best.pt扶梯数据集训练产出视频推理 / 界面演示推理阶段只认 best.pt。如果你后来重新训练生成了自己的权重记得先复制到工程根目录再跑检测脚本否则脚本加载的还是压缩包里那份旧的指标对比会得出错误结论。2.3 答辩要的核心曲线图是哪一张摘要里反复提到的指标曲线图、混淆矩阵、F1 分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图并不是手工绘制的而是 ultralytics 训练流程的自动产物。训练一结束runs/detect 下的实验目录会自动生成一整套图表。图表文件内容答辩怎么讲results.pngloss 曲线 mAP50 / mAP50-95 曲线讲模型收敛过程confusion_matrix.png真实类别与预测类别的关系讲漏检、误检来源PR_curve.png精确率-召回率权衡曲线讲阈值选择依据F1_curve.pngF1 随置信度阈值的变化讲最优置信度区间labels.jpg训练集标签的位置与数量分布讲数据质量与标注一致性val_batch_pred.jpg验证集预测框可视化讲模型直观效果我的建议是答辩时按「数据 → 训练 → 效果」三段来讲先用 labels.jpg 证明数据集干净、类别分布合理再用 results.png 证明训练收敛、没有明显过拟合最后用 val_batch_pred.jpg 证明模型真的把行人框住了。这三张图串起来逻辑闭合比堆十张曲线更有说服力。提示F1_curve.png 的横轴是置信度阈值曲线峰值对应的阈值可以直接作为部署时的初始 conf 值之后再拿真实视频微调。3. 目录结构与环境部署先读 README再装依赖作者在上传说明里强调代码都测试通过但测试通过不等于换机零配置环境还是得自己过一遍。拿到压缩包后目录看一眼、README 读一遍、data.yaml 核对一次这三件事做完再谈训练。3.1 压缩包里的文件各自干什么展开压缩包后是一份「麻雀虽小五脏俱全」的目录训练、推理、界面、数据四块齐全。刚解压时最忌讳的是直接双击 train_mode.py 开跑大概率会因为路径没配对报错。先花两分钟把文件职责认一遍。文件 / 目录职责什么时候用README.txt部署说明、版本信息、运行顺序第一步必读train_mode.py训练入口产出权重与全套图表复现训练时Detection_video.py用 best.pt 对视频做检测与报警核心演示Visual_interface.py可视化操作界面答辩展示yolov8n.pt / yolo11n.pt / best.pt三份权重文件训练与推理dataset/图像与 YOLO 格式标签训练输入README.txt 是整个项目里最重要的文件作者把环境版本、运行顺序和注意事项都写在里面也是出问题时的第一求助对象。这类资源项目我吃过一次亏把 ultralytics 升到大版本后训练参数行为全变了跑出来的结果和作者描述的完全对不上。所以下载后第一件事就是打开 README严格按里面写的版本装。3.2 环境安装与硬件参考yolov8 环境配置是这套流程里小白最容易卡住的一步。常见做法是先建独立 conda 环境避免污染系统 Pythonconda create -n yolo python3.9 -y conda activate yolo pip install ultralytics opencv-python pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118第一行创建 Python 3.9 环境3.83.10 之间都行不建议追新版本 Python部分老依赖兼容性容易出问题。第三行安装检测框架本体和 OpenCV前者负责模型加载与训练后者负责视频读取和画面显示。第四行单独装 CUDA 版 PyTorchcu118 表示 CUDA 11.8 工具链如果显卡驱动旧可以换成 cu117没有 NVIDIA 独显的话直接pip install torch torchvision装 CPU 版。硬件方面 yolov8n 对配置相当友好。6G 显存的 GTX 1660 Ti 这类卡训练时 batch 设 48 没问题推理阶段 CPU 也能扛住只是帧率低一些。真正吃资源的是把 batch 和 imgsz 同时调大之后跟模型本身关系不大。3.3 第一次运行前要改的路径配置数据路径是这套资源里最容易翻车的一个点。训练前先确认 dataset 目录下有没有 data.yaml再核对里面的 path 字段path: D:/myproject/escalator/dataset # 改成你解压后的实际路径 train: images/train val: images/val nc: 1 names: [person]path 字段强烈建议写成绝对路径。用相对路径时如果 train_mode.py 不是从 dataset 的同级目录启动训练会直接报数据集不存在。names 里的类别名要和标签文件里实际的类别序号对上序号从 0 开始如果 labels 里的 class 编号是 0 而 data.yaml 里声明成了 1训练出的模型类别映射整体错位指标看起来正常推理时框全对不上。换电脑之后第一件事就是改这个文件里的 path这是本资源最常见的必修动作。这套流程对小白最友好的点在于只要 README 和 data.yaml 两个文件先搞清楚剩下的脚本基本不用动。它把「环境、数据、训练、推理」四个环节都给全了缺的只是按顺序走一遍。4. 模型训练实操train_mode.py 的参数与指标产出训练是整个项目里参数最多、最容易被乱调的一环。train_mode.py 已经把流程封装好了剩下的是理解每个参数在干什么以及训练完去哪找产物。4.1 训练入口和核心参数train_mode.py 的职责链路是加载预训练权重 → 读取 data.yaml → 在自己的数据集上微调 → 输出 best.pt / last.pt 和全套指标图表。代码主体的常见写法from ultralytics import YOLO if __name__ __main__: model YOLO(yolov8n.pt) # 从 COCO 预训练权重起步收敛更快 model.train( datadataset/data.yaml, # 数据集配置路径 epochs100, # 训练轮数 imgsz640, # 输入分辨率 batch8, # 批大小6G 显存建议改 4 patience20, # 连续 20 轮不涨则早停 device0, # 使用 GPU 0无独显改 cpu projectruns/detect, # 输出根目录 nameescalator, # 实验名产物都会带上这个前缀 plotsTrue, # 自动生成曲线图与混淆矩阵 )几个关键参数要讲清楚。YOLO(yolov8n.pt) 会在本地找不到权重时自动从官方源下载第一次跑如果网络不好会卡在下载阶段提前把压缩包里的 yolov8n.pt 放回工程根目录就能跳过。epochs 是总轮数几百张图的数据集 100 轮基本收敛。patience 是早停策略连续 20 轮验证集指标不提升就自动终止省电省时间。plotsTrue 必须保持开启否则答辩要用的混淆矩阵、PR 曲线、F1 曲线不会生成。参数参考值什么时候改epochs100数据量小改 6080imgsz640显存不足改 480batch86G 显存改 4仍爆改 2patience20快速验证改 10想充分训练改 30device0无独显改 cpu4.2 训练后的指标图表目录训练结束后所有产物集中在 project/name 指定的目录下也就是 runs/detect/escalator。里面既有 best.pt、last.pt也有 plotsTrue 带来的全套图表。要在答辩 PPT 里讲「模型效果」优先抽三张results.png 证明收敛PR_curve.png 证明精度val_batch_pred.jpg 证明直观效果。导师追问错分情况时再上 confusion_matrix.png。如果想给论文插图准备一张更干净的损失曲线可以用 results.csv 重绘import pandas as pd import matplotlib.pyplot as plt df pd.read_csv(runs/detect/escalator/results.csv) plt.figure(figsize(8, 5)) plt.plot(df[train/box_loss], labeltrain box_loss) plt.plot(df[val/box_loss], labelval box_loss) plt.xlabel(epoch) plt.ylabel(box_loss) plt.title(YOLOv8 box loss curve) plt.legend() plt.grid(True) plt.savefig(loss_curve.png, dpi300)pandas 读到的 results.csv 每个 epoch 一行train 和 val 的 loss 分列存放。画成两条曲线能直接看出有没有过拟合train loss 持续下降但 val loss 掉头向上就是典型的过拟合信号这时应该减小 epochs 或增强数据扩增两条线同步下降并趋于平缓说明训练健康。dpi300 是为论文插图准备的投屏演示用 150 就够。4.3 best.pt 和 last.pt 怎么选训练目录里同时存在 best.pt 和 last.pt别搞混。last.pt 是最后一轮的权重如果早停触发得早它未必停在最优位置best.pt 是训练全程验证集综合指标最高的一份推理部署一律用 best.pt。还有一个容易被忽略的细节ultralytics 选 best 用的是验证集综合分数并不一定对着你最关心的指标。扶梯逆行场景里漏检比误检更致命如果验证结果里召回率偏低可以把 results.csv 里每个 epoch 的 Recall 列拉出来选 Recall 最高的那一轮权重做部署。答辩时能说出「我的权重不是只看 mAP还按场景需求优先保了召回率」这句话比放十张图都管用。5. 避坑与排查训练到部署最容易翻车的五个地方这一章集中写我从这个项目里踩过的五个高频坑按训练、换机、推理、界面的顺序排读到哪条正好对应你卡住的环节。5.1 显存爆掉导致训练中断现象训练跑到十几个 epoch终端直接抛 CUDA out of memory进程终止已跑的中间结果只有图表没有权重。原因batch8、imgsz640 在 6G 显存的 GTX 1660 Ti 这类卡上已经接近上限DataLoader 预读取图片时还会额外占用显存峰值比稳态高不少。解决batch 降到 4imgsz 降到 480必要时在 train 参数里加 workers2 限制数据加载线程。启动前先确认显存占用nvidia-smi --query-gpumemory.used,memory.free --formatcsv如果已有其他进程占了大半显存先关闭再训练。快速验证流程时可以先跑 5 个 epoch 看显存占用确认安全再放全量。5.2 损失曲线不下降现象loss 前几轮下降后一直平走mAP50 停在很低的水平甚至验证集 loss 比训练集还高。原因最常见的是标签类别序号和 data.yaml 对不上模型在学一个错误的映射其次是初始学习率对小数据集偏大参数来回震荡loss 曲线像锯齿。解决先打开 dataset 目录下的 labels.jpg确认标注框的位置、类别分布正常再在 train 参数里加 lr00.005 把初始学习率调低一档epochs 拉长到 120。我的习惯是先跑 20 轮看趋势——loss 在降、mAP 在涨就放全量前 20 轮都不动的话直接停下来查数据而不是继续干等。5.3 换电脑就报 CUDA 错误现象自己电脑跑得好好的拿到答辩用的笔记本上 import torch 直接报错或者推理速度骤降。原因torch 的 CUDA 版本跟笔记本显卡驱动不匹配或者笔记本压根没有独立显卡而代码默认走了 device0。解决换机后按 README 里的版本说明重装一次环境别图省事直接拷贝 conda 目录路径对不上反而更折腾。先跑一段诊断代码确认环境可用import torch print(torch.__version__, torch.cuda.is_available())输出 False 就说明没识别到 GPU把 device 改成 cpu。yolov8n 在 CPU 上跑扶梯视频的帧率够演示用conf 适当调高还能减少无效计算。5.4 扶梯场景误报多现象没逆行的人也被报警站在扶梯上不动的人偶尔也触发报警日志刷屏演示现场很尴尬。原因单帧检测的中心点抖动被直接当成位移conf 设太低把远处行人误判进扶梯区域扶梯梯级本身的纹理会干扰边缘定位。解决推理置信度 conf 提到 0.35 以上方向判断加「连续 N 帧同方向」的确认逻辑比如连续 5 帧位移方向一致才报警单帧抖动直接被滤掉。这个 N 值建议做成配置项写在脚本头部答辩时现场调大调小对比误报率是很直观的演示环节。5.5 可视化界面打开后黑屏现象Visual_interface.py 正常启动按钮可点但画面区域一直是黑色终端也没有明显报错。原因界面脚本里模型权重用的是相对路径脚本从别的目录启动后 best.pt 加载失败程序又没有抛异常或者视频源路径本身失效。解决把界面脚本里的模型路径和视频源路径全部改成绝对路径启动界面之前先单独跑一遍 Detection_video.py命令行能正常出框再进界面这样能把问题快速定位在界面层还是模型层。以上五条按出现频率排训练期集中在 5.1 和 5.2换机后集中在 5.3推理和演示阶段则是 5.4、5.5。如果只留一个心眼记住这条任何一步出问题先回 README 核对版本和路径再上手段调参。注意如果你打算把训练好的模型往 rk3588 这类边缘设备上搬YOLO 导出 ONNX 再做 NPU 转换是另一套流程。毕设阶段尽量不要同时铺开先把 PC 端这条链路跑完边缘部署可以作为论文的展望部分。6. 部署验证的正反例习惯先让正常画面闭嘴再让逆行画面报警6.1 用正反例视频做系统验收如果你正在找能直接跑起来的 YOLOv8 毕设资源这套压缩包解压之后直接进下面的验收流程就行。拿到 best.pt 后先别急着开界面准备两段视频一段是扶梯正常上行、行人站立或随梯上行另一段是有人从扶梯上往回走。先跑 Detection_video.py把 conf 从 0.25 往上调到 0.35 再到 0.5观察同一画面里误报框和漏检框的变化。验收标准只有一条正常段全程零报警逆行段在行人越过扶梯中线后很快触发报警。6.2 界面联调时先锁参数Visual_interface.py 本质上是把 Detection_video.py 的推理封装成按钮、文件选择和显示区域。联调时最容易出事的是界面线程和推理线程互相排队画面卡住不动。我一般会在命令行先把 conf、模型路径、视频路径确认好再进界面只动参数不动逻辑避免一边调界面一边排查模型问题。这套流程走完后我对 YOLOv8 这类项目形成了一个固定习惯模型表现「好」和「能验收」是两回事。每个新数据集、每次调参我都强制走一遍「正常视频零报警、逆行视频必报警」的正反例验证并把 conf 和报警延迟记到 README 末尾。以后换任何检测项目我都先按这个步子来希望帮到你。本文还有配套的精品资源点击获取