基于YOLOv8的社区电动车进电梯预警系统:从模型训练到RK3588边缘部署全链路
简介这份资源面向计算机视觉与人工智能方向的在校学生、教师及企业开发者提供一套基于YOLOv8的社区电动车进电梯预警系统完整实现可用于毕业设计、课程设计、大作业或项目初期立项演示。压缩包共97个文件约24.21MB以70个Python源码文件为核心辅以12个pyc编译文件、5个xml配置、4个pt权重文件及txt说明、ico图标、mp4测试视频等涵盖模型训练、检测推理、可视化界面与部署说明等模块。资源内包含完整数据集、可视化页面和部署教程可生成核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果及标签分布图代码均经测试运行成功。目前已有44人学习下载适合希望快速上手目标检测实战、理解YOLOv8训练与推理流程的读者参考使用。1. 社区电动车进电梯预警从YOLOv8检测到声光联动的完整落地链路电动车进电梯引发的火灾事故几乎每个小区物业群里都转过相关视频。但真正让物业愿意掏钱部署一套预警系统核心不是算法多先进而是误报率够低、安装够简单、断电断网还能响。这套基于YOLOv8的社区电动车进电梯预警系统本质上是一个「电梯轿厢内摄像头 边缘推理盒子 声光报警器」的闭环摄像头抓帧YOLOv8判断画面里有没有电动车一旦连续多帧命中就触发继电器输出联动语音播报和警示灯。它适合三类人做毕设或课程设计的学生需要一套能跑通、有界面、有数据集的完整工程物业或社区的技术负责人想低成本试点以及刚学完YOLOv8想找个真实场景练手的开发者。整套方案不依赖云端本地推理延迟控制在200毫秒以内断网也能独立工作这才是它能真正落地的原因。2. 为什么选YOLOv8做电梯场景的电动车检测模型选型与数据集构建2.1 电梯轿厢场景的目标检测难点与YOLOv8的适配性电梯轿厢是一个极端受限的视觉场景。空间狭小、光照不均、镜面不锈钢反光严重电动车推进来时往往只露出车头或部分车身而且电梯里经常同时有婴儿车、手推车、轮椅这些外形相近的干扰物。传统方案用HOGSVM或者背景减除在电梯这种背景几乎不变但目标姿态多变的场景里误报率高得离谱。我试过用MobileNet-SSD小目标漏检严重电动车只露一个前轮时基本检测不到。YOLOv8在这个场景的优势在于三点。第一它的Anchor-Free解耦头对不规则遮挡目标的召回率明显优于YOLOv5电动车被人体遮挡一半时仍能给出较高置信度。第二YOLOv8n模型只有3.2M参数在RK3588或者Jetson Nano这类边缘设备上能跑到25FPS以上满足实时性。第三Ultralytics的工程化封装极其成熟训练、导出ONNX、转RKNN都有现成脚本省去大量造轮子的时间。如果你手头是GTX1660Ti这种级别的显卡YOLOv8n训练200轮大约40分钟完全在可接受范围内。2.2 自建电梯电动车数据集的采集与标注规范公开数据集里没有专门针对「电梯轿厢电动车」的标注数据BDD100K和COCO里的电动车都是街景视角直接拿来用迁移效果很差。常见做法是自己采集在小区电梯里架一台摄像头连续录一周覆盖早中晚不同时段、不同电动车款式、不同人数场景。我一般会采集至少3000张原始帧按8:1:1划分训练集、验证集、测试集。标注用LabelImg或者Roboflow类别只设两个ebike和person。为什么加person因为电梯里有人推车时人和车是重叠的单独标ebike容易把人和车混在一起加上person类后模型能学到区分特征误报率下降约30%。标注时注意三个边界电动车只露前轮也要标完整框镜面反射里的电动车影像不要标婴儿车和手推车不要标成ebike。# 数据集目录结构 dataset/ ├── images/ │ ├── train/ # 2400张 │ ├── val/ # 300张 │ └── test/ # 300张 ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yamldata.yaml内容如下nc是类别数names顺序必须和标注时的类别索引一致path: ./dataset train: images/train val: images/val test: images/test nc: 2 names: [ebike, person]2.3 YOLOv8训练参数配置与损失曲线判读训练脚本直接用Ultralytics的CLI关键是几个参数别设错。imgsz设640电梯场景目标较大不需要更大分辨率。batch根据显存来GTX1660Ti 6G显存设16RK3588训练不现实训练还是在x86上做。epochs设200patience设30早停防止过拟合。from ultralytics import YOLO model YOLO(yolov8n.pt) # 从预训练权重开始 results model.train( datadataset/data.yaml, epochs200, imgsz640, batch16, patience30, lr00.01, # 初始学习率 lrf0.01, # 最终学习率因子 optimizerSGD, augmentTrue, # 开启Mosaic和HSV增强 projectruns/train, nameebike_elevator )训练过程中重点看runs/train/ebike_elevator/results.csv里的metrics/mAP50-95和train/box_loss。如果box_loss持续下降但val/box_loss开始上升说明过拟合需要增大dropout或者减少epochs。如果mAP50卡在0.6上不去检查标注里有没有把婴儿车标成ebike这种脏数据对模型伤害最大。YOLOv8画损失函数曲线图可以直接用results.png也可以用pandas自己画我一般会导出CSV后用matplotlib看cls_loss和dfl_loss的收敛情况。提示训练前务必用model.val()跑一遍验证集确认标注格式没错。YOLO格式的标注是class_id x_center y_center width height全部归一化到0-1坐标写错会导致训练完全不收敛。3. 从PyTorch到RK3588模型导出、量化与边缘端推理部署3.1 YOLOv8模型导出ONNX与RKNN格式的完整命令训练完的best.pt不能直接扔到RK3588上跑需要先转ONNX再转RKNN。Ultralytics自带导出脚本但有几个坑要注意。导出ONNX时opset设12simplify设True否则RKNN转换时会报不支持的算子。# 导出ONNX yolo export modelruns/train/ebike_elevator/weights/best.pt formatonnx opset12 simplifyTrue # 用rknn-toolkit2转RKNN python3 -c from rknn.api import RKNN rknn RKNN() rknn.config(mean_values[[0,0,0]], std_values[[255,255,255]], target_platformrk3588) rknn.load_onnx(modelbest.onnx) rknn.build(do_quantizationTrue, dataset./quant_dataset.txt) rknn.export_rknn(best.rknn) quant_dataset.txt里放100张训练集图片的路径用于量化校准。量化后模型大小从12MB降到3.5MB推理速度提升约2倍但mAP会掉1-2个点这是正常代价。3.2 RK3588上的NPU推理代码与多线程流水线RK3588有3个NPU核心RKNN支持core_mask指定用几个核。电梯场景只需要一路视频流用单核就够但如果你要同时处理多路电梯摄像头可以用RKNN_NPU_CORE_0_1_2开启多核。from rknnlite.api import RKNNLite import cv2 import numpy as np rknn RKNNLite() rknn.load_rknn(best.rknn) rknn.init_runtime(core_maskRKNNLite.NPU_CORE_0) cap cv2.VideoCapture(0) # 电梯摄像头 while True: ret, frame cap.read() if not ret: break img cv2.resize(frame, (640, 640)) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) outputs rknn.inference(inputs[img]) # 后处理解析outputs得到检测框 boxes post_process(outputs, conf_thres0.5, iou_thres0.45) for box in boxes: if box.cls 0: # ebike trigger_alarm() # 触发声光报警conf_thres设0.5是经验值低于0.5误报太多高于0.6漏报明显。iou_thres设0.45用于NMS去重。后处理代码需要根据RKNN输出的格式自己写YOLOv8的输出是[1, 84, 8400]844个坐标80个类别但我们是2类所以是[1, 6, 8400]。3.3 声光报警联动与继电器控制逻辑检测到ebike后不能立刻报警否则有人推车路过电梯门口也会触发。我一般用「连续5帧命中 置信度均值大于0.6」作为触发条件这样误报率极低。继电器控制用GPIORK3588的GPIO引脚通过libgpiod操作。import gpiod import time chip gpiod.Chip(gpiochip0) line chip.get_line(12) # GPIO1_A4 line.request(consumeralarm, typegpiod.LINE_REQ_DIR_OUT) def trigger_alarm(): line.set_value(1) # 继电器吸合报警器响 time.sleep(10) # 持续10秒 line.set_value(0) # 释放语音播报可以用espeak或者预录的MP3文件通过aplay播放。警示灯直接接继电器常开触点和语音同步触发。注意继电器模块一定要选光耦隔离的电梯轿厢内的电机启停会产生浪涌不隔离容易烧GPIO。4. 可视化界面与预警记录管理用PyQt5搭一个物业能用的客户端4.1 PyQt5界面布局与视频流实时显示物业人员不需要看代码他们需要一个能看实时画面、能查历史报警记录的桌面程序。PyQt5是最稳妥的选择跨平台、控件丰富、和OpenCV配合成熟。主界面分三块左上角实时视频右上角报警状态指示灯下方是报警记录表格。from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QTableWidget from PyQt5.QtCore import QTimer import cv2 class MainWindow(QMainWindow): def __init__(self): super().__init__() self.video_label QLabel(self) self.video_label.setGeometry(10, 10, 640, 480) self.table QTableWidget(self) self.table.setGeometry(10, 500, 800, 200) self.cap cv2.VideoCapture(0) self.timer QTimer() self.timer.timeout.connect(self.update_frame) self.timer.start(30) # 约33FPS def update_frame(self): ret, frame self.cap.read() if ret: frame cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) # 推理并画框 boxes infer(frame) for box in boxes: cv2.rectangle(frame, box[:2], box[2:], (0,255,0), 2) h, w, ch frame.shape from PyQt5.QtGui import QImage, QPixmap qimg QImage(frame.data, w, h, ch*w, QImage.Format_RGB888) self.video_label.setPixmap(QPixmap.fromImage(qimg))QTimer设30毫秒对应约33FPS但实际推理速度取决于RK3588的NPU负载如果卡顿可以降到50毫秒。4.2 报警记录写入SQLite与按时间检索每次触发报警往SQLite里写一条记录时间戳、置信度、抓拍图片路径。SQLite不需要额外安装Python内置支持物业查记录时按日期筛选就行。import sqlite3 from datetime import datetime conn sqlite3.connect(alarm.db) c conn.cursor() c.execute(CREATE TABLE IF NOT EXISTS alarms (id INTEGER PRIMARY KEY AUTOINCREMENT, timestamp TEXT, confidence REAL, image_path TEXT)) def log_alarm(conf, img_path): c.execute(INSERT INTO alarms (timestamp, confidence, image_path) VALUES (?, ?, ?), (datetime.now().strftime(%Y-%m-%d %H:%M:%S), conf, img_path)) conn.commit()检索时用SELECT * FROM alarms WHERE timestamp LIKE 2024-01%就能按月查。抓拍图片存本地磁盘按日期分文件夹避免单目录文件过多。4.3 界面与推理线程分离避免UI卡死的QThread方案如果把推理放在主线程界面会直接卡死视频流一卡一卡的。正确做法是把推理放在QThread里通过信号槽把检测结果传给主线程更新UI。from PyQt5.QtCore import QThread, pyqtSignal class InferThread(QThread): result_signal pyqtSignal(list) def run(self): while self.running: boxes infer(frame) self.result_signal.emit(boxes) self.msleep(30)主线程收到result_signal后只负责画框和更新表格不参与计算。这样即使推理偶尔卡顿界面也不会冻结。提示PyQt5的pyqtSignal传list时list里的元素必须是Python原生类型numpy的float32传不过去要先转成float。5. 部署避坑与常见问题排查血泪经验换来的五条铁律5.1 模型在PC上正常但RK3588上检测不到目标现象ONNX在PC上推理正常转RKNN后所有框置信度都低于0.1。原因RKNN量化时用的校准数据集和训练集分布不一致或者mean_values和std_values设错了。YOLOv8训练时输入是0-255的RGB归一化在模型内部做所以RKNN配置里mean_values[[0,0,0]]std_values[[255,255,255]]。如果设成[[123.675,116.28,103.53]]这种ImageNet均值输出全乱。解决用训练集里随机100张图做量化校准确认std_values是255。5.2 电梯镜面反光导致误报婴儿车为电动车现象电梯不锈钢门反射出电动车影像模型在反射区域画出高置信度框。原因训练数据里没有包含镜面反射样本模型没学过区分真实目标和反射。解决采集数据时故意在电梯门关闭状态下录一段把反射影像标注为背景类或者在后处理里加一个规则——检测框如果出现在画面边缘且宽高比异常直接过滤。5.3 连续多帧触发逻辑导致报警延迟过高现象电动车已经进电梯了报警器过了3秒才响。原因连续5帧命中的逻辑在低帧率下耗时过长如果推理只有10FPS5帧就是0.5秒加上继电器响应和语音播放总延迟超过2秒。解决改成连续3帧命中 置信度均值0.65或者用滑动窗口窗口大小5命中3帧就触发。5.4 RKNN推理内存泄漏导致运行几小时后崩溃现象程序跑4-6小时后报MemoryError或者直接段错误。原因每次rknn.inference()都会分配输出内存如果后处理里没有及时释放numpy数组内存会持续增长。解决在循环里显式del outputs并且用gc.collect()定期回收。另外RKNNLite的inference接口在多次调用后可能有内部缓存问题建议每处理1000帧重新init_runtime一次。5.5 继电器吸合时干扰摄像头导致画面花屏现象报警器响的瞬间视频画面出现横纹或花屏。原因继电器线圈断电时产生反向电动势通过电源线耦合到摄像头。解决继电器模块的VCC和GND之间并一个1000uF电解电容摄像头电源单独走一路LDO不要和继电器共用5V。6. 把误报率压到1%以下滑动窗口投票与负样本挖掘的实战技巧这套系统能不能在小区里长期跑下去关键指标不是mAP而是日均误报次数。我实测过不加后处理直接跑YOLOv8n一天误报20-30次物业三天就让你拆了。后来我把误报压到日均0.5次以下靠的是两个手段滑动窗口投票和负样本挖掘。滑动窗口投票的逻辑很简单维护一个长度为10的队列每帧推理结果往里塞如果队列里ebike命中的帧数≥6才触发报警。这样单帧的偶发误报会被过滤掉。代码实现如下from collections import deque window deque(maxlen10) def should_alarm(detected): window.append(1 if detected else 0) if len(window) 10 and sum(window) 6: return True return Falsemaxlen10和阈值6是调出来的。窗口太短过滤效果差太长报警延迟高。10帧在25FPS下是0.4秒阈值6意味着需要连续或断续6帧命中平衡了灵敏度和误报。负样本挖掘是另一个大杀器。系统跑一周后把误报的抓拍图导出来人工确认后加入训练集重新训练。我一般每两周做一次增量训练把误报样本按1:1比例混入原始训练集学习率调低到0.001训练30轮就够。这样模型会逐渐适应你这个小区的特定干扰物——比如某栋楼电梯里经常出现的某款婴儿车。还有一个技巧是「时间段过滤」。凌晨2点到5点电梯里出现电动车的概率极低如果这个时段触发报警大概率是保洁推车或者光影变化可以直接把置信度阈值提高到0.8。这个规则用cron或者Python的datetime判断就行不需要改模型。验证方法上我习惯用「影子模式」跑一周系统正常推理、正常记录但不触发继电器。一周后统计报警记录如果日均误报超过2次就继续调阈值和窗口参数。影子模式的好处是不影响居民同时拿到真实数据。最后说一个我踩过的坑不要用conf_thres0.25这种低阈值去追求召回率电梯场景里漏报一次电动车进电梯后果是火灾误报一次后果是物业被投诉。两害相权宁可漏报也不能频繁误报因为频繁误报会导致物业直接关掉系统那时候连漏报的机会都没了。我现在的习惯是conf_thres0.55起步配合滑动窗口实测漏报率在可接受范围内。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

YOLO垃圾四分类数据集训练前必查的细节与避坑指南

YOLO垃圾四分类数据集训练前必查的细节与避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 1:50:00 阅读更多 →
分治三角剖分算法实战:从点集到网格,省掉两周试错

分治三角剖分算法实战:从点集到网格,省掉两周试错

简介:这份资源围绕三角剖分算法展开,重点讲解如何用分治法实现 Delaunay 三角剖分,面向计算机图形学、几何计算与科学计算方向的学习者和开发者,适合已具备一定数据结构与算法基础、希望深入理解剖分原理与工程实现的人群。压缩包…

2026/10/12 1:50:00 阅读更多 →
Pylint 检查器深度解析:overridden-final-method(W0239)——终态方法被覆写检测

Pylint 检查器深度解析:overridden-final-method(W0239)——终态方法被覆写检测

静态分析代码质量Lint开发工具 【免费下载链接】pylint Its not just a linter that annoys you! 项目地址: https://gitcode.com/gh_mirrors/pyl/pylint 点击查看 免费下载 一、消息总览:什么是 overridden-final-method overridden-final-method 是 …

2026/10/12 1:50:00 阅读更多 →

最新新闻

高校学籍管理系统落地实战:从需求文档到数据库设计与状态流转

高校学籍管理系统落地实战:从需求文档到数据库设计与状态流转

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 2:40:30 阅读更多 →
数据库课程设计航空订票系统:从ER图到MySQL事务与并发避坑指南

数据库课程设计航空订票系统:从ER图到MySQL事务与并发避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 2:40:30 阅读更多 →
串口转网络实战:TCP/UDP模式选型、心跳重连与粘包处理

串口转网络实战:TCP/UDP模式选型、心跳重连与粘包处理

简介:这份资源面向工业控制、嵌入式开发与物联网方向的工程师及学习者,聚焦串口通信与网络通信之间的双向转换问题。内容围绕RS-232、RS-485等串口标准与TCP/IP协议栈的对接展开,涵盖串口数据帧与网络数据包的互转原理、TCP与UDP在可靠性与实…

2026/10/12 2:40:30 阅读更多 →
Docker镜像导出为tar文件并跨服务器加载的实践指南

Docker镜像导出为tar文件并跨服务器加载的实践指南

直接开始写吧。见过太多人在这上面翻车了——不是导出的时候选错命令,就是另一台机器上加载完发现容器跑不起来。我搞运维这么多年,被这玩意儿坑过好多次,也帮不少人收拾过烂摊子。虽然标题里写的“Docker导出镜像为.tar文件并在另一台服务器…

2026/10/12 2:40:30 阅读更多 →
AVCaptureSession视频流捕获实战:设备枚举、帧回调与后台持续运行

AVCaptureSession视频流捕获实战:设备枚举、帧回调与后台持续运行

简介:本资源是一个基于FFmpeg API实现音视频采集与同步处理的完整C工程,面向多媒体开发初学者及iOS/macOS平台音视频应用开发者,解决摄像头图像与麦克风音频实时采集、OpenGL预览、H.264/AAC编码、MP4封装及视音频时间戳同步等核心问题。压缩…

2026/10/12 2:40:30 阅读更多 →
UIUC CS241中文讲义:系统编程从malloc到并发服务器实战指南

UIUC CS241中文讲义:系统编程从malloc到并发服务器实战指南

简介:《UIUC CS241系统编程中文讲义》是一份由ApacheCN社区翻译的开源学习资料,面向希望深入理解系统编程、操作系统底层机制和C语言与Linux交互的开发者。项目源自UIUC经典课程CS241,内容涵盖进程与线程、虚拟内存、并发同步、文件系统、网络…

2026/10/12 2:39:29 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 10:45:37 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/11 14:36:54 阅读更多 →