基于166张扬尘数据集的YOLO目标检测实战:小样本训练与避坑指南
简介面向建筑工地扬尘监测场景的YOLO目标检测数据集标注类别为尘土适用于YOLOv5、YOLOv7、YOLOv8、YOLOv11等主流系列算法可直接用于训练与验证适合从事智慧工地、环境监测方向的研究者与算法工程师快速搭建扬尘识别模型。压缩包共503个文件约26.07MB包含168张jpg现场图像、166个xml与166个txt标注文件另附data.yaml数据集配置文件、md说明及pdf文档训练集与验证集已划分完毕开箱即可投入训练。目前已有17人学习下载。数据集覆盖多时段工地实拍画面标注规范统一配合内置配置文件可省去繁琐的数据整理环节帮助读者将精力集中于模型调优与扬尘检测效果验证是开展工地扬尘目标检测实验的实用基础素材。1. 166 张扬尘图能训出什么工地尘土检测的真实起点工地扬尘检测这件事难的不是模型结构是数据。你拿 COCO 或者 VOC 直接跑模型根本不知道“扬尘”长什么样——它见过汽车、行人、交通灯但没见过灰蒙蒙一片里那团边界模糊的土黄色区域。所以当我看到“166 张、标注类别为尘土”这个数据集时第一反应不是嫌它小而是想搞清楚这 166 张图到底覆盖了哪些工况标注框画的是“扬尘区域”还是“扬尘源”以及用 YOLO 系列哪一版能在这种量级上跑出可用的召回率。这个数据集适合两类人一是做智慧工地、环保监测方向需要快速验证扬尘检测可行性的工程师二是手头有少量标注数据、想跑通 YOLO 全流程但不想在数据采集上耗太久的学生或转行者。166 张确实不多但扬尘检测有个特点——场景相对固定摄像头角度变化不大背景重复度高所以小样本反而可能比通用数据集微调效果更好。前提是你得把数据增强和验证策略做对否则过拟合是分分钟的事。2. 扬尘数据集拆开看166 张图里藏着什么2.1 先搞清楚标注格式和类别定义拿到一个 zip 包别急着解压就往 YOLO 里塞。第一步是确认标注格式。常见的有三种VOC 的 XML、COCO 的 JSON、YOLO 的 txt。标题里没写但“标注类别为尘土”这个描述暗示可能是单类别。我一般会先解压看目录结构unzip 建筑工地扬尘目标检测数据集-166张-标注类别为尘土.zip -d dust_dataset find dust_dataset -type f | head -30如果看到Annotations/和JPEGImages/那就是 VOC 格式如果看到labels/和images/且 labels 里是 txt那就是 YOLO 格式。单类别的话txt 里每行应该是0 x_center y_center width height所有值归一化到 0-1。提示如果标注是 VOC XML需要转成 YOLO txt。转换脚本后面会给。确认类别数很重要。如果只有“尘土”一类那模型输出维度就是(5 1) 6即 4 个坐标 1 个置信度 1 个类别概率。别小看这个我见过有人拿 COCO 预训练权重直接训忘了改nc结果模型一直在预测 80 类loss 降不下去。2.2 166 张图的分布决定你的验证策略166 张图如果按 8:2 划分验证集只有 33 张。这 33 张里如果扬尘目标很少mAP 波动会非常大。我的做法是先统计每张图的标注框数量看看有多少张是“有尘土”的正样本多少张是负样本没有尘土。如果负样本太多模型会偏向预测背景。import os import glob label_dir dust_dataset/labels total_boxes 0 positive_images 0 negative_images 0 for txt_file in glob.glob(os.path.join(label_dir, *.txt)): with open(txt_file, r) as f: lines f.readlines() if len(lines) 0: negative_images 1 else: positive_images 1 total_boxes len(lines) print(f正样本图: {positive_images}, 负样本图: {negative_images}) print(f总标注框: {total_boxes}, 平均每张正样本 {total_boxes/positive_images:.1f} 个框)如果平均每张正样本只有 1-2 个框说明扬尘区域通常只有一个大框那 anchor 尺寸要调大。YOLOv5/v8 默认 anchor 是针对 COCO 的小目标偏多直接拿来用可能对大框不敏感。我一般会跑一遍 k-means 重新聚类 anchor或者直接用 YOLOv8 的 anchor-free 头省去这个麻烦。2.3 数据增强小样本的救命稻草还是过拟合的帮凶166 张图不做增强基本没戏。但增强不是越多越好。扬尘检测有个特殊性扬尘的颜色和纹理是重要特征如果你用 HSV 增强把色调调得太狠模型可能把黄土和灰土当成两类。我一般会限制 HSV 的 H 通道在 ±10 以内S 和 V 可以放宽到 ±40。另外Mosaic 增强对扬尘检测帮助很大因为它能把四张图拼在一起变相增加背景多样性。但 Mosaic 会引入大量边缘伪影如果扬尘区域被拼接线切断标注框会变得很奇怪。我的经验是Mosaic 概率设 0.5 左右不要开到 1.0。Copy-paste 增强也可以试但扬尘区域边界模糊复制粘贴后融合不自然反而可能引入噪声。# YOLOv8 训练时的增强参数示例 augment_config { hsv_h: 0.010, # 色调增强减半避免扬尘颜色失真 hsv_s: 0.400, # 饱和度可以大一点 hsv_v: 0.400, # 亮度也可以大一点 mosaic: 0.5, # Mosaic 概率降到 0.5 mixup: 0.0, # 小样本不建议开 mixup flipud: 0.0, # 工地摄像头一般不会上下翻转 fliplr: 0.5, # 左右翻转可以开 }注意如果你用的是 YOLOv5增强参数在data/hyp.scratch.yaml里改YOLOv8 直接在训练命令里传参。3. 用 YOLOv8 跑通 166 张扬尘数据从环境到推理3.1 环境配置别在 CUDA 版本上翻车YOLOv8 的环境配置比 YOLOv5 简单但 CUDA 版本和 PyTorch 的匹配仍然是翻车重灾区。我一般用 conda 建环境然后按 PyTorch 官网的命令装。如果你用的是 30 系或 40 系显卡建议 CUDA 11.8 以上。conda create -n dust_yolo python3.10 -y conda activate dust_yolo pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 pip install ultralytics装完之后验证一下 GPU 是否可用import torch print(torch.cuda.is_available()) print(torch.cuda.get_device_name(0))如果输出True和你的显卡型号说明环境没问题。如果输出False先检查驱动版本再检查 PyTorch 是不是装成了 CPU 版。我见过有人 pip 装的时候没指定 index-url结果装成了 CPU 版训练时 loss 降得极慢还以为是数据问题。3.2 数据组织YOLO 格式的目录结构YOLOv8 要求的数据目录结构是这样的dust_dataset/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/ └── dust.yamldust.yaml内容path: ./dust_dataset train: images/train val: images/val nc: 1 names: [dust]划分训练集和验证集时我一般用 8:2但会确保验证集里既有正样本也有负样本。如果 166 张里负样本很少我会手动挑几张没有扬尘的工地背景图放进验证集防止模型学会“看到工地就预测扬尘”。import os import random import shutil image_dir dust_dataset/images/all label_dir dust_dataset/labels/all train_img_dir dust_dataset/images/train val_img_dir dust_dataset/images/val train_lbl_dir dust_dataset/labels/train val_lbl_dir dust_dataset/labels/val os.makedirs(train_img_dir, exist_okTrue) os.makedirs(val_img_dir, exist_okTrue) os.makedirs(train_lbl_dir, exist_okTrue) os.makedirs(val_lbl_dir, exist_okTrue) images [f for f in os.listdir(image_dir) if f.endswith((.jpg, .png))] random.shuffle(images) split int(len(images) * 0.8) for i, img in enumerate(images): label img.rsplit(., 1)[0] .txt if i split: shutil.copy(os.path.join(image_dir, img), train_img_dir) shutil.copy(os.path.join(label_dir, label), train_lbl_dir) else: shutil.copy(os.path.join(image_dir, img), val_img_dir) shutil.copy(os.path.join(label_dir, label), val_lbl_dir)3.3 训练命令与关键参数YOLOv8 的训练命令很简洁但参数设不对166 张图可能训出个“只会预测背景”的模型。yolo detect train \ datadust_dataset/dust.yaml \ modelyolov8n.pt \ epochs200 \ imgsz640 \ batch16 \ lr00.001 \ lrf0.01 \ patience50 \ device0 \ projectdust_train \ nameexp1几个关键参数的解释modelyolov8n.pt用 nano 版因为数据量小大模型容易过拟合。如果你有 3090 或 4090可以试yolov8s.pt但 166 张图用 s 版可能反而更差。epochs200小样本需要多训几轮但配合patience50如果 50 轮验证集 mAP 不升就早停。lr00.001初始学习率。默认是 0.01但小样本用 0.001 更稳。如果 loss 震荡降到 0.0005。imgsz640扬尘区域通常比较大640 够用。如果显存不够降到 512但别低于 416否则大框可能被切掉。训练过程中重点看val/box_loss和metrics/mAP50。如果box_loss一直不降检查标注框是不是归一化错了。如果mAP50在 0.3 左右徘徊可能是增强太狠或者学习率太高。3.4 推理与验证别只看 mAP训完之后用验证集跑一遍推理把预测框画出来看。mAP 高不代表模型真的学到了扬尘可能只是学到了“工地背景”。yolo detect predict \ modeldust_train/exp1/weights/best.pt \ sourcedust_dataset/images/val \ conf0.25 \ saveTrueconf0.25是置信度阈值。扬尘检测建议从 0.25 开始调如果误检多就提到 0.4如果漏检多就降到 0.15。我一般会跑三组阈值对比看哪个平衡点最好。提示如果模型在验证集上 mAP 很高但实际推理时全是误检大概率是验证集和训练集背景太相似。这时候需要找一些完全没见过的工地场景图来测。4. 扬尘检测的避坑清单166 张数据踩过的 5 个坑4.1 坑一标注框画的是“扬尘源”而不是“扬尘区域”现象模型训练 loss 正常下降但推理时框总是落在车轮、土堆上而不是扬尘弥漫的区域。原因标注时把“产生扬尘的地方”当成了目标比如车轮碾过的地面、挖掘机铲斗。但扬尘检测真正要框的是空气中悬浮的尘土区域。解决重新检查标注规范。如果标注框明显偏小且集中在物体上需要重新标注或者用分割模型先提取扬尘区域再转检测框。166 张重标工作量不小但比训一个废模型强。4.2 坑二负样本太少导致模型“见工地就报尘”现象验证集 mAP 不错但拿几张没有扬尘的工地照片去测模型仍然输出高置信度的“尘土”框。原因训练集里几乎没有负样本模型没学会“没有扬尘”是什么样。解决从工地监控里截取 20-30 张没有明显扬尘的图作为负样本加入训练集。YOLO 对负样本的处理是如果某张图没有对应 txt 文件或者 txt 为空就只计算背景 loss。这能显著降低误检。4.3 坑三Mosaic 增强把扬尘区域切碎了现象训练时 loss 正常但推理时模型对大块扬尘区域检测不全总是只框出一部分。原因Mosaic 把四张图拼在一起扬尘区域被拼接线切断模型学到的都是“半个扬尘”。解决把 Mosaic 概率从 1.0 降到 0.3-0.5或者用mosaic0先训一轮 baseline看看是不是增强的问题。另外可以开close_mosaic在最后几轮关掉 Mosaic让模型在完整图上微调。4.4 坑四学习率太高导致 loss 爆炸现象训练前几轮 loss 直接变成 NaN或者从 0.5 跳到 10 以上。原因YOLOv8 默认 lr00.01对 166 张图来说太大了。小样本梯度噪声大高学习率容易震荡。解决把lr0降到 0.001 甚至 0.0005同时开warmup_epochs3让学习率从低到高预热。如果已经 NaN 了检查数据里有没有标注框宽高为 0 的情况那会导致除零错误。4.5 坑五验证集 mAP 虚高实际部署翻车现象验证集 mAP50 到了 0.85但部署到工地摄像头后白天还行傍晚和夜间几乎全漏。原因166 张图可能集中在白天某个时段模型没学过傍晚的低对比度场景。解决如果数据里没有夜间或傍晚的图别指望模型能泛化。要么补数据要么在推理前做图像增强比如 CLAHE 直方图均衡化把低对比度图像拉回来。但增强参数需要调调不好会引入噪声。5. 小样本扬尘检测的进阶技巧从 166 张到可用模型5.1 用预训练权重做特征冻结再解冻166 张图直接训整个 YOLOv8n前面几层学到的通用特征会被破坏。我的做法是先冻结 backbone只训 head 20 轮然后解冻全部再训 100 轮。YOLOv8 里可以通过freeze参数控制。# 第一阶段冻结 backbone yolo detect train \ datadust_dataset/dust.yaml \ modelyolov8n.pt \ epochs20 \ freeze10 \ lr00.001 \ projectdust_train \ namestage1 # 第二阶段解冻全部 yolo detect train \ datadust_dataset/dust.yaml \ modeldust_train/stage1/weights/best.pt \ epochs150 \ lr00.0005 \ projectdust_train \ namestage2freeze10表示冻结前 10 层。YOLOv8n 总共约 130 层冻结前 10 层相当于锁住浅层特征提取。两阶段训练在小样本上通常比端到端训提升 3-5 个点 mAP。5.2 用 TTA 和模型集成榨干最后一点精度如果你已经训了好几个模型不同 seed、不同增强参数推理时可以用 TTATest Time Augmentation或者 WBFWeighted Boxes Fusion集成。YOLOv8 自带 TTAyolo detect predict \ modeldust_train/stage2/weights/best.pt \ sourcedust_dataset/images/val \ augmentTrue \ conf0.25augmentTrue会对每张图做多尺度翻转推理然后合并结果。速度会慢 3-5 倍但 mAP 通常能涨 1-2 个点。如果部署对速度有要求TTA 不适合但离线分析可以用。5.3 一个具体技巧用 SAHI 切图检测小扬尘扬尘区域有时候在图像里占比很小640 分辨率下可能只有 20x20 像素。YOLO 对小于 32x32 的目标召回率会明显下降。SAHISlicing Aided Hyper Inference的思路是把大图切成小块分别检测再合并。from sahi import AutoDetectionModel from sahi.predict import get_sliced_prediction detection_model AutoDetectionModel.from_pretrained( model_typeyolov8, model_pathdust_train/stage2/weights/best.pt, confidence_threshold0.25, devicecuda:0 ) result get_sliced_prediction( test_image.jpg, detection_model, slice_height320, slice_width320, overlap_height_ratio0.2, overlap_width_ratio0.2 )slice_height和slice_width设 320意味着把原图切成 320x320 的块每块之间有 20% 重叠。这样小扬尘在切块里会变大更容易被检测到。代价是推理速度变慢但召回率能提升 10-15 个点。我一般只在离线分析或者对召回率要求极高的场景用。5.4 验证方法别只看 mAP看 PR 曲线mAP 是个综合指标但扬尘检测有时候更关心“在高召回率下误检有多少”。我一般会导出 PR 曲线看 recall0.8 时 precision 是多少。如果 precision 低于 0.5说明误检太多需要调置信度阈值或者补负样本。from ultralytics import YOLO import matplotlib.pyplot as plt model YOLO(dust_train/stage2/weights/best.pt) metrics model.val(datadust_dataset/dust.yaml, splitval) # 打印各类别的 PR 曲线数据 print(metrics.box.p) # precision print(metrics.box.r) # recall print(metrics.box.ap50) # AP50如果ap50只有 0.4 左右别急着换模型先检查标注质量。166 张图里如果有 10 张标注框画错了对 mAP 的影响可能超过 5 个点。我一般会随机抽 20 张验证集的预测结果人工看一遍把误检和漏检的原因归类再决定是补数据、调增强还是换模型。最后说个血泪经验小样本数据集别一上来就追求 SOTA 模型。YOLOv8n 在 166 张图上训好了比 YOLOv8x 训崩了强得多。先把 baseline 跑通mAP50 到 0.6 以上再考虑换模型或者加数据。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

NeoHorse-Jev开源第一后,决策模型会成下一波开源主线吗

NeoHorse-Jev开源第一后,决策模型会成下一波开源主线吗

NeoHorse-Jev开源第一后,决策模型会成下一波开源主线吗 【免费下载链接】NeoHorse-1-4B 项目地址: https://ai.gitcode.com/hf_mirrors/TokenRhythm/NeoHorse-1-4B 当行业还在围绕对话模型的"榜单分数"逐分肉搏时,基元律动&#xff08…

2026/10/11 17:58:36 阅读更多 →
YOLOv8n在机场X光安检中的轻量部署实践

YOLOv8n在机场X光安检中的轻量部署实践

简介:本资源是一套面向高校人工智能课程设计与毕业设计的实战型项目,聚焦机场安检场景下的危险品智能识别任务,基于YOLO目标检测算法实现端到端的深度学习解决方案。资源共180个文件,包含37个核心Python源码(含模型训练…

2026/10/11 17:58:36 阅读更多 →
Windows 10 上基于 WSL2 与 Docker Desktop 部署 Dify 的完整指南

Windows 10 上基于 WSL2 与 Docker Desktop 部署 Dify 的完整指南

如果你手头只有一台 Windows 10 开发机,又想在本地体验 Dify 这种大模型应用开发平台,最省心的组合就是 Docker Desktop 加 WSL2。我最近给团队搭内部测试环境,把 Windows 10 上从零部署 Dify 的流程完整走了一遍,期间因为版本检查…

2026/10/11 17:58:36 阅读更多 →

最新新闻

概率统计公式实战手册:面向工程师的可执行公式集

概率统计公式实战手册:面向工程师的可执行公式集

简介:本资源是一份系统、精炼的概率论与数理统计核心公式汇编文档,面向高校数学、统计、计算机及相关专业本科生与考研学生,解决课程复习、考前速记与公式快速检索等实际需求。文档以清晰逻辑分章组织,覆盖随机事件与概率基础&…

2026/10/11 18:44:02 阅读更多 →
JIRA Scrum敏捷项目管理:看板搭建与Sprint执行全流程

JIRA Scrum敏捷项目管理:看板搭建与Sprint执行全流程

简介:基于JIRA的敏捷开发项目管理是一份面向项目经理、Scrum Master及开发团队成员的实操型文档,系统讲解如何借助JIRA落地Scrum增量迭代流程。内容围绕Scrum的角色分工(产品负责人、Scrum Master、开发测试团队)与五步开发法展开…

2026/10/11 18:44:02 阅读更多 →
Qwen-Image-2.1文生图实战指南:7种推荐宽高比+关键参数组合,新手也能出2K高清图

Qwen-Image-2.1文生图实战指南:7种推荐宽高比+关键参数组合,新手也能出2K高清图

【免费下载链接】Qwen-Image-2.1 Qwens most powerful open-source image generation model 项目地址: https://gitcode.com/gh_mirrors/qw/Qwen-Image-2.1 点击查看 免费下载 Qwen-Image-2.1 是 Qwen 团队发布的新一代开源文生图与图像编辑模型:仅 7B …

2026/10/11 18:44:02 阅读更多 →
Kernelbase.dll报错0xc0000142?从定位到修复的完整指南

Kernelbase.dll报错0xc0000142?从定位到修复的完整指南

双击某个程序,屏幕边框闪了一下,然后什么都没有发生。再双击一次,弹窗来了——“应用程序无法正常启动,0xc0000142”。翻事件查看器,故障模块写着一行字:kernelbase.dll。看到这个报错,很多人第…

2026/10/11 18:44:02 阅读更多 →
Linux进程间通信之管道:内核环形缓冲、EOF与SIGPIPE排障实战

Linux进程间通信之管道:内核环形缓冲、EOF与SIGPIPE排障实战

进程间通信(IPC)是我自学系统编程时花时间最久的一块内容,而管道(pipe)又是整个体系里最古老、也最容易被低估的一种方式。说实话,很长一段时间我都觉得管道太简单了——一个 pipe(fd) 申请两个 fd&#xf…

2026/10/11 18:44:02 阅读更多 →
磁盘无法访问?按顺序稳住,数据还有救

磁盘无法访问?按顺序稳住,数据还有救

“磁盘罢工”这个说法很有画面感——前几天半夜有位朋友发来消息,说移动硬盘插上之后电脑一直卡在转圈,等了半天总算弹出提示,结果就是一句冷冰冰的:”无法访问,参数错误。“那块盘里有他两年的项目源文件和修改记录&a…

2026/10/11 18:43:01 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/11 0:00:27 阅读更多 →

月新闻

我发现了一个新思路:用 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 阅读更多 →