课堂行为检测数据集5622张VOC+YOLO格式训练实战指南
简介面向学生课堂行为识别与智能教学分析场景该数据集收录了5622张课堂场景实拍图像共标注7类典型行为适合作为目标检测模型训练与评估的基础数据。压缩包共2000个文件其中1999个为VOC格式的XML标注文件另有TXT使用说明整体大小约268.46MB。数据同时提供YOLO格式的TXT标注能够兼容主流检测框架免去繁琐的格式转换步骤。对从事教育信息化、课堂专注度分析或相关科研工作的开发者而言可直接利用该数据集开展模型调优、行为统计或教学反馈系统搭建有效缩短数据准备周期。资源已有1542人学习下载配套的使用说明文件有助于快速了解标注字段与目录组织方式双格式标注也让训练流程更灵活适合快速验证不同算法在课堂行为检测任务上的表现。1. 学生课堂行为检测数据集5622张图到底能帮你省多少事做课堂行为分析的同学大概率都撞过同一堵墙数据标注太贵了。课堂场景里学生密集、遮挡多、姿态散一个人头一个框地抠两千张图就得标掉一两周。哪怕只做“是否在听讲”这种粗粒度分类也躲不过逐帧去看的命。这个标题里挂的“课堂行为检测数据集VOCYOLO格式5622张7类别”本质就是把这块最烦的地基活提前干完了5622张真实课堂画面7个常见行为类别同时给出VOC和YOLO两种格式解压即可直接丢进训练管线。对正在做课堂分析、考勤统计或教学督导系统的开发者来说它意味着你从零开始跑通一个能用的行为检测模型最少只需要一个周末。我最初拿到这类数据时踩过不少坑比如VOC标注转YOLO时中心点算错、类别顺序跟配置文件没对齐导致训练时标签全乱。所以这篇不打算讲空洞的价值就按“压缩包里是什么 → 标注怎么读 → 转格式怎么做 → 训练参数怎么设 → 哪些地方容易翻车 → 训练完怎么验证”这条线把能复现的细节一次说清。适合正在选数据集的CV工程师也适合准备做课堂行为识别毕业设计但没想清楚数据从哪来的同学。后面每段都是直接能抄去用的。2. 解压先看两类文件VOC和YOLO格式的目录结构差异2.1 VOC格式的Annotations、JPEGImages和ImageSets拿到压缩包第一步不是急着开训练而是把目录结构捋一遍。标准VOC格式的骨架就三件事JPEGImages放原图Annotations放和图片同名的XML标注文件ImageSets/Main里放train.txt、val.txt这类划分清单。这套结构从当年目标检测比赛沿用至今最大的特点是“人类可读”随便打开一个XML能看到object标签下的name、bndbox坐标哪怕没有可视化工具也能确认标注是否正确。课堂行为数据用VOC格式存储对先做数据清洗再训练的工作流非常友好。XML里bndbox的xmin、ymin是左上角坐标xmax、ymax是右下角坐标单位是像素对应原图分辨率。如果你准备用老派Faster R-CNN或SSD路线VOC格式可以直接喂进去如果转YOLO只需要在脚本里把像素坐标换成归一化中心点坐标。我自己的习惯是拿到压缩包先随机抽10张图把XML里的框画回原图确认类别和框的位置跟图像内容对得上这一步能过滤掉大量脏数据。2.2 YOLO格式的labels与classes.txtYOLO格式的存放方式正好反过来典型结构是images放原图labels放同名txt每个txt一行一个目标class_id cx cy w h四个坐标全部归一化到0~1。classes.txt里则固定着类别顺序从0开始排列。这里有个容易翻车的点YOLO训练时根本不读labels里的类别名它只认class_id对应的顺序如果classes.txt的顺序和txt第一列的数字对不上训练出的模型语义就会错乱。建议拿到数据后先做一步强制校验扫描所有labels下的txt统计class_id的最大值是否等于类别数减1同时读一遍classes.txt确认7个类别名称。正常情况7个类别对应的class_id是0到6但我不止一次遇到过某个txt里混进class_id等于7的脏标注训练时直接越界报错。这类问题用脚本扫一遍5分钟就能查完别偷懒。2.3 5622张图的划分train/val/test怎么分配VOC的ImageSets/Main里通常给好了train.txt、val.txt或test.txt里面每行是“不带扩展名的图片名”YOLO格式则可能自带一个data.yaml里面直接指定了train和val的图片路径。如果压缩包里没有现成划分自己做也简单按8:1:1分三份注意按场景而不是按图片随机分比如同一个教室的不同帧尽量进同一个集合否则模型在val上的分数虚高。数量上5622张图对7个类别的检测任务属于“够用但不算宽裕”。常见做法是用预训练权重起步而不是从随机初始化开始训。COCO预训练的YOLO权重虽然类别不一样但底层特征提取器已经学会了纹理边缘等通用特征迁移到课堂场景能省掉大量训练时间。3. 自己动手转VOC到YOLO格式转换脚本与四个边界坑3.1 中心点坐标与宽高的数学关系VOC和YOLO之间的转换核心就一个公式YOLO里的cx等于VOC的xmin加xmax除以2再除以图宽cy同理除以图高w等于xmax减xmin再除以图宽h等于ymax减ymin再除以图高。光这一条公式就能把绝大多数转换工作写完。但边界坑通常藏在“图片宽高怎么拿”和“越界值怎么处理”这些细节里。分辨率问题XML里不存宽高必须用PIL或OpenCV打开同名图片取形状。坑在于JPEGImages里可能混入灰度图或异常尺寸图脚本如果假设所有图都是三通道彩色图读单通道图时容易出错我一般会用Image.open().convert(RGB)强制统一。3.2 转换脚本从XML批量生成txt下面这段脚本可以处理整个VOC目录我日常转换格式就用这个逻辑替换成自己的路径就能直接跑。import os import xml.etree.ElementTree as ET from PIL import Image voc_annotations VOC/Annotations voc_images VOC/JPEGImages yolo_labels YOLO/labels os.makedirs(yolo_labels, exist_okTrue) for xml_name in os.listdir(voc_annotations): if not xml_name.endswith(.xml): continue xml_path os.path.join(voc_annotations, xml_name) img_path os.path.join(voc_images, xml_name.replace(.xml, .jpg)) with Image.open(img_path) as img: img_width, img_height img.size tree ET.parse(xml_path) root tree.getroot() lines [] for obj in root.findall(object): name obj.find(name).text class_id class_names.index(name) # class_names 为 [听讲,举手,阅读,...] bndbox obj.find(bndbox) xmin float(bndbox.find(xmin).text) ymin float(bndbox.find(ymin).text) xmax float(bndbox.find(xmax).text) ymax float(bndbox.find(ymax).text) cx (xmin xmax) / 2.0 / img_width cy (ymin ymax) / 2.0 / img_height w (xmax - xmin) / img_width h (ymax - ymin) / img_height cx min(max(cx, 0.0), 1.0) cy min(max(cy, 0.0), 1.0) w min(max(w, 0.0), 1.0) h min(max(h, 0.0), 1.0) lines.append(f{class_id} {cx:.6f} {cy:.6f} {w:.6f} {h:.6f}) out_path os.path.join(yolo_labels, xml_name.replace(.xml, .txt)) with open(out_path, w) as f: f.write(\n.join(lines))逻辑上脚本先遍历VOC的Annotations目录找到每个XML对应的图片并读取宽高然后从XML里抽类别名和边界框套用中心点公式转成归一化坐标最后写到YOLO的labels目录下。class_id是通过class_names.index(name)动态映射的这保证了类别顺序永远跟着classes.txt走不会出现顺序错位。代码最后对四个坐标做了0到1的截断作用是把那些刚好贴边或标注越界的框拉回合法区间避免训练报错。参数上唯一需要你改的就是class_names列表务必和YOLO侧的classes.txt保持一致。我习惯在脚本顶部用同一个列表去生成classes.txt这样两边永远不会脱节。跑完检查一遍labels目录里txt的行数是否跟XML里object的数量一致不一致就说明有文件被漏掉或解析失败。3.3 四个边界坑空标注、单类失衡、重复框、图片损坏第一个坑是空标注。有些图上没有目标VOC里就没objectYOLO的txt就会是一个空文件。训练框架有的版本能容忍空txt有的直接报错建议在脚本里判断lines为空时写一个只有注释的占位文件或者干脆把这类图片从训练清单里剔除。第二个坑是类别失衡。7个类别里“听讲”“阅读”这类常见行为框可能占了八成“举手”“趴桌”这些低频行为可能只有几百个框训练时低频类容易学成背景。后面会提到如何用拷贝粘贴增强或多尺度训练缓解。第三个坑是重复框。同一张图里两个标注框的重合度过高比如IoU超过0.7会让训练标签产生歧义可以用nms思路按置信度清一下。第四个坑是图片损坏。JPEG有截断错误但是PIL能“勉强读出来”的情况也遇到过要么报错中断要么读出的尺寸和XML不匹配写脚本时加一个try-except把坏文件清单打印出来会更稳。4. 用YOLO训练课堂行为检测关键参数设置与数据增强4.1 数据入口配置与类别映射无论你用YOLOv5、v8还是其他衍生版本训练前第一件事是写好data.yaml。这个文件告诉框架数据路径和类别信息常见格式如下path: /your/dataset/root train: images/train val: images/val nc: 7 names: 0: listening 1: raising_hand 2: reading 3: writing 4: sleeping 5: using_phone 6: standing参数说明path是数据集根目录train和val是相对path的图片目录nc必须等于7names的索引顺序必须和labels里txt第一列的class_id一一对应。这里最常出问题的隐患就是路径用了绝对路径换机器就失效我一般建议数据集的目录结构保持相对稳定或者把path写成项目内固定路径别随手写死在自己电脑的某个临时目录里。如果只打算跑一个快速验证可以直接用YOLO自带的训练命令把data指向这个yaml文件。常见做法是先关闭数据增强做20轮过拟合测试确认loss能降下来再开增强做正式训练。因为课堂场景本身变化不大这个数据集训练收敛普遍比其他通用数据集快一张消费级显卡上两三个小时基本能看到效果。4.2 训练参数img、batch、epochs怎么组合yolo train datadata.yaml modelyolov8n.pt epochs100 batch16 imgsz640 device0我一般会用yolov8n或yolov8s做起步而不是直接上l或x版。课堂行为检测的框通常比较大、目标也比较整模型容量需求没有“远处小目标检测”那么夸张n或s的参数量已经足够拟合7个类别训练速度快一倍不说部署到教室里的边缘盒子也更顺。imgsz用640不要一来就上1280先保证流程能跑通后续再通过测试不同分辨率挑最优值。batch大小取决于显存。12G显存跑yolov8s加640分辨率建议batch 16显存不够就降到8不要硬扛。epochs可以先设50轮看收敛曲线如果val的mAP还在持续上涨就加到100反之早早收敛就可以停了。注意类别不均衡时低频类别需要在后50轮盯着通常mAP涨得慢但是别急只要loss曲线没抖说明在学。4.3 数据增强哪些适合课堂场景哪些会帮倒忙课堂教室是一个典型的“室内固定场景”背景相对稳定目标都是人头部和手部的姿态是判类关键。因此有些通用增强对课堂数据特别有效比如随机平移、轻微旋转、HSV色扰、随机缩放这些可以模拟不同教室的光线和视角差异。但像大幅旋转、90度翻转这类增强要慎用因为人在教室里的姿态是有方向性的——一个倒立的学生框并不能帮助你学出“举手”这类类别。还有一个值得做的增强是MosaicYOLO自带且默认开启它能把四张图拼成一张逼迫模型在小尺寸下学习更鲁棒的特征对提升“趴桌”“使用手机”这种小目标类型的召回率有明显帮助。如果你用的是老版本框架没有Mosaic就自己写一个简单的拼接把四张图缩放到同一尺寸按2x2拼起来重新标框。不过注意训练后期关掉Mosaic是常规操作否则模型在真实单图推理时可能因为分布不一致掉点。4.4 类别不平衡的调参思路前面提到的7个类别大概率“听讲”“阅读”占大头“举手”“趴桌”占小头。训练时如果低频类被高频类淹没建议给YOLO传class_weight参数或自己按框数量反比算权重。YOLOv5、v8等框架对这块支持比较方便在训练配置里打开即可。另一个思路是做类别复制粘贴增强——把低频类目标从原图上抠下来随机贴到其他图上合成新样本贴的时候注意别让两个目标重叠太多这招对“举手”“使用手机”这类边界清晰的类别尤其有用。这两招都做下来低频类mAP通常能从60%左右拉高到75%以上具体数值会因场景差异波动很大。别指望一张5622张的数据集能训出90%以上的mAP课堂场景里遮挡本来就严重能到75%~85%区间已经属于能落地使用的水平。5. 课堂行为检测避坑指南5条踩坑记录5.1 现象一训练时loss正常降但推理时框的位置全偏到图像边缘原因我在早期直接把VOC坐标转YOLO时忘了把中心点坐标除以图片宽高而是把绝对像素值直接写进了txt。训练时模型也能收敛但学到的坐标语义完全错位推理时预测框对不上真实目标位置。解决重写转换脚本严格用公式做归一化然后用上节提到的脚本复查每个txt里的坐标值是否都在0到1之间。这也是为什么建议抽查画框看效果数值检查只能发现越界画框才能发现位置语义是否错乱。5.2 现象二某个类别训练完AP几乎为0原因大概率是类别样本太少比如“站立”这类只在走廊或教室后排出现的动作几千张图里可能就一两百个框。模型完全没有见过足够的正样本学不到区分特征。解决先统计每个类别的框数量确认是不是长尾分布。如果是先做类别复制粘贴增强扩充低频类样本再在训练时开类别权重。另一个容易被忽略的点是某些类别的框本身就标得不准比如“书写”有时把整张桌子都框进去了背景干扰太大这种情况模型学出来也会很虚。5.3 现象三验证集mAP不错但换一个教室或换摄像头位置后效果崩掉原因课堂数据集的拍照角度、教室布局高度相似模型学到了特定角度和灯光下的特征也就是发生了过拟合到“这个数据集特有场景”的问题。解决训练时强开HSV色扰和随机平移推理前做图片归一化和尺寸对齐保证同训练时一致。更彻底的办法是搜集几个其他教室场景的少量图片做微调对模型做“场景泛化”训练通常每个教室补100张左右就能看到明显改善。5.4 现象四同一类别在人多时疯狂漏检人少时很正常原因密集场景下目标重叠度高NMS阈值设得不对会直接压掉重叠框的检测结果尤其后排学生互相遮挡会漏掉。解决把NMS的IoU阈值从默认的0.5适度降低到0.45如果推理时用fp16精度也先关掉试一下部分显卡上fp16会放大误差。另外可以考虑把模型从s换成m密集场景对特征分辨能力要求更高。5.5 现象五解压标注文件夹发现部分txt里只有一行“0.5 0.5 1 1”原因转换脚本出问题时把一张图整个宽高当成了目标框常见于错误解析了某个XML的根节点或读错了图片尺寸。这类脏数据混进训练集后会干扰模型对目标尺寸的先验表现为训练早期loss波动特别大。解决写一个校验脚本把坐标范围明显异常或者宽高超过图片尺寸一半的框筛出来看看原始图像里对应位置是不是真的有目标没有就直接删掉。6. 训练完之后怎么验证和进阶mAP与错例分析模型训练完先别急着上服务器做一遍系统性的验证。第一步看总mAP但更要分类看课堂场景里“听讲”这类高频类mAP虚高是常有的事“使用手机”这种低频且遮挡多的类别才是短板所在。我习惯打印出每类AP的表格直接锁定拖后腿的类别再去对应图片里看错在哪。可视化时如果某类错误框全部集中在特定位置比如只在教室后排漏检那多半是场景视角问题而非模型问题可以考虑在那块区域做二次检测或加一个局部放大分支。进阶的方向有两个一个是往上走继续找更多课堂场景数据做微调和风格迁移另一个是往外扩把检测结果接到行为序列分析里比如对“举手”这类动作加一个持续帧数统计过滤瞬时误检。这种7类别模型本身输出的是“谁在哪做了什么”下游的课堂活跃度分析、考勤行为统计都能复用同一套结果做时序平滑和后处理不必重新训练。我的习惯是每次训练完把数据划分、增强配置、权重文件、训练日志放在同一个目录下存好等过两周再回头跑一次验证那时候才会发现模型真正的泛化边界。数据集的坑往往不在训练时而在“看起来训好了”之后多留一份完整的实验记录比你多调五个参数都有用。希望这篇能帮你把课堂行为检测的流程完整跑通少走我当初踩过的那些弯路。本文还有配套的精品资源点击获取

相关新闻

构建Agent技能库:从提示词堆叠到结构化技能模块的工程实践

构建Agent技能库:从提示词堆叠到结构化技能模块的工程实践

1. 从“会说话的助手”到“会干活的助手”:技能系统出现的必然性 我自己做智能助手相关开发也有几年了,早期绝大部分时间都在跟提示词较劲。你让助手查个天气、写段文案、做个体检报告解读,这些都还好,本质上是“把用户问题转化成…

2026/10/14 9:40:21 阅读更多 →
光伏发电量预测实战:CNN-LSTM混合模型与数据预处理避坑指南

光伏发电量预测实战:CNN-LSTM混合模型与数据预处理避坑指南

简介:面向光伏发电预测的深度学习毕业设计项目,整合CNN-GRU、CNN-LSTM、GRU、LSTM-transform与LSTM等多种模型,覆盖从数据处理、模型构建到结果对比的完整流程,可作为电力预测课程设计与科研入门参考。压缩包共70个文件、约10MB&a…

2026/10/14 9:40:21 阅读更多 →
SpringBoot+Vue乡村政务系统开发与部署指南

SpringBoot+Vue乡村政务系统开发与部署指南

1. 项目背景与核心价值乡村政务办公系统是当前数字乡村建设中的重要一环。随着乡村振兴战略的推进,传统纸质化办公模式已经难以满足现代乡村治理需求。这个基于SpringBootVue的前后端分离系统,正是为解决以下痛点而生:解决乡村政务人员跨地域…

2026/10/14 9:39:20 阅读更多 →

最新新闻

C#与松下PLC通信:Mewtocol协议串口/以太网例程与避坑指南

C#与松下PLC通信:Mewtocol协议串口/以太网例程与避坑指南

简介:面向工业自动化上位机开发者的C#与松下PLC通信完整示例工程,以手机屏幕异物检测为应用场景,演示通过串口、TCP/IP等方式与PLC交互,完成数据采集与指令下发。资源包共113个文件,以C#源码(.cs)为主,另有…

2026/10/14 17:59:21 阅读更多 →
GitLab初次安装全流程指南:从裸机到首个Commit

GitLab初次安装全流程指南:从裸机到首个Commit

1. 项目概述:为什么“初次安装GitLab”这件事值得单独写一篇长文GitLab不是装完就能用的软件,它是一套需要你亲手调教、反复验证、持续维护的协作基础设施。我带过不少刚接触DevOps的开发者和运维新人,他们最常问的问题不是“GitLab能做什么”…

2026/10/14 17:59:21 阅读更多 →
Reactor zip操作符实战:从对齐语义到背压陷阱

Reactor zip操作符实战:从对齐语义到背压陷阱

1. 拆解zip:它到底在“压缩”什么1.1 先理解“一对一对齐”的语义用 Reactor 写响应式代码的人,迟早会遇到zip这个操作符。我第一次看到文档里写“数据压缩”的时候还愣了一下,因为zip并不是把字节块变小,而是把多个数据流“像拉链…

2026/10/14 17:59:21 阅读更多 →
SpringBoot+Vue+MyBatis智慧公寓管理系统完整业务闭环重构实践

SpringBoot+Vue+MyBatis智慧公寓管理系统完整业务闭环重构实践

去年帮一个园区客户收拾一套号称“完整版”的智慧公寓管理系统源码,打开工程才发现,里面只有租户登记、房间列表这种简单CRUD,合同管理、账单生成、抄表、权限、报表全都没有,连个像样的状态流转都没做。对方以为“完整版”就是功…

2026/10/14 17:59:21 阅读更多 →
CentOS 7 安装 Redis 5.x/6.x 版本兼容性指南

CentOS 7 安装 Redis 5.x/6.x 版本兼容性指南

1. 为什么在 CentOS 7 上装 Redis 还得盯紧 6.x/5.x 这个组合?Redis 不是装上就能用的“即插即用”电器,它更像一台需要调校的精密仪器——尤其当你手里的操作系统是 CentOS 7 这台“服役多年但依然可靠”的老将时。我经手过不下三十个线上 Redis 部署项…

2026/10/14 17:59:21 阅读更多 →
OJ训练第二周第七天:从刷题到算法复盘的关键节点

OJ训练第二周第七天:从刷题到算法复盘的关键节点

我带的几个同学,训练到第二周第七天的时候,几乎都会遇到同一个状态:题目刷了不少,但开始有点飘,或者开始有点慌。飘是因为很多题一看就有思路,慌是因为有些题明明能做出来,可就是一直超时、一直…

2026/10/14 17:58:20 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 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/13 22:01:27 阅读更多 →
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/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练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/14 7:53:34 阅读更多 →