无人机视角船只检测实战:YOLO11数据集构建、训练调参与边缘部署全流程
简介这份资源面向无人机视觉与水上目标识别方向的学习者和开发者提供基于 ultralytics YOLO11 的船只检测完整方案可用于水上目标识别与海上搜救等场景。包内包含已标注的目标检测数据集同时提供 YOLO 格式 txt 标签与 VOC 格式 xml 标签并已划分 train、val、test 三个子集附有 data.yaml 文件可直接用于 YOLOv5、v8、v9、v10、v11、v12 等算法训练类别为 boat船只。压缩包共约 2000 个文件涵盖 1059 个 txt 标签与说明、284 张 jpg 图像、169 个 py 脚本、88 个 yaml 配置以及少量 cpp、js、html 等推理与展示文件整体约 676.5MB。资源还附带使用教程与模型评价指标曲线图便于读者快速复现训练流程、评估检测效果并理解工程目录结构。目前已有 89 人学习适合需要快速上手无人机视角船只检测任务的中高级读者参考。1. 无人机视角船只检测为什么通用 YOLO 模型在水面上会集体翻车把 YOLO11 直接套到无人机航拍的海面画面里十有八九第一轮推理就会让你怀疑人生近岸的白色游艇被识别成浪花远处的渔船干脆消失密集停靠的码头船只糊成一团。这不是模型不行而是无人机视角 水面场景这两个条件叠加后把通用目标检测的假设全部推翻了。水面高反光、目标尺度跨度极大从几十像素的小艇到占半屏的货轮、海天背景高度相似、船只朝向任意这些都是 COCO 预训练权重没见过的分布。这个方向真正要解决的问题是给定一段无人机巡检或搜救航拍视频稳定地框出船只并区分大小类型为后续的搜救定位、航道监控、非法捕捞取证提供结构化输入。它适合三类人做海事/渔政/救援无人机载荷的工程师、想用 ultralytics 生态快速搭一套垂直检测流水线的算法同学、以及手里有航拍素材但不知道怎么标注和训练的数据负责人。整套方案的核心链路是「数据集构建 → YOLO11 训练调参 → 无人机端部署推理」下面按这条链路拆开讲每一步都给到能直接抄的命令和参数。2. 数据集构建从航拍原片到 YOLO11 可训练的标签2.1 为什么无人机船只数据集不能直接拿 COCO 或 DOTA 凑很多人第一反应是拿 DOTA 或 COCO 里的 boat 类来训结果 mAP 上不去还找不到原因。问题出在三个维度视角DOTA 是卫星正射无人机是斜视带透视、尺度分布卫星图里船只像素占比稳定无人机画面里随高度剧烈变化、背景干扰卫星图海面干净无人机低空会有浪花、尾迹、反光带。所以这个任务的数据集必须自己构建或使用专门针对无人机海上视角标注的版本类别通常简化为boat单类或者细分为boat/ship/small_boat多类。标注规范上我一般坚持两条一是框紧贴船体可见轮廓不要把尾迹浪花框进去否则模型会学歪二是最小目标不低于 8×8 像素低于这个尺寸的样本直接丢弃因为 YOLO11 在 P3 特征图stride 8上对更小的目标召回极差留着只会拉低指标还增加标注成本。2.2 目录结构与 data.yaml 的正确写法YOLO11 沿用 ultralytics 的标准数据集结构别自己发明目录名否则训练脚本会找不到文件。标准结构如下dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yamldata.yaml是最容易写错的地方路径写相对还是绝对、类别名和 nc 对不对得上直接决定训练能不能启动# data.yaml path: /home/user/dataset # 数据集根目录绝对路径最稳 train: images/train # 相对 path 的路径 val: images/val test: images/test nc: 1 # 类别数必须和 names 长度一致 names: 0: boat # 索引从 0 开始顺序不能乱逻辑说明path是根train/val/test都是相对它的子路径这样换机器时只改一行path就行。nc和names必须严格对应写错会导致训练时类别索引越界或全部预测成背景。参数上如果做大小船区分把nc改成 3names补全1: ship、2: small_boat同时确认标注文件里的 class id 也同步改了。2.3 标注格式转换从 LabelImg/VOC 到 YOLO txt如果你用 LabelImg 标的是 VOC XML或者从别的平台导出的是 COCO JSON都要转成 YOLO 的归一化 txt。核心公式是x_center (xmin xmax) / 2 / Wy_center (ymin ymax) / 2 / Hw (xmax - xmin) / Wh (ymax - ymin) / H全部归一化到 0~1。import os import xml.etree.ElementTree as ET # VOC XML 转 YOLO txt def voc_to_yolo(xml_path, out_txt_path, classes): tree ET.parse(xml_path) root tree.getroot() size root.find(size) W int(size.find(width).text) H int(size.find(height).text) lines [] for obj in root.iter(object): cls_name obj.find(name).text if cls_name not in classes: continue cls_id classes.index(cls_name) bbox obj.find(bndbox) xmin float(bbox.find(xmin).text) ymin float(bbox.find(ymin).text) xmax float(bbox.find(xmax).text) ymax float(bbox.find(ymax).text) # 归一化并裁剪到 [0,1]防止标注越界 xc min(max((xmin xmax) / 2 / W, 0), 1) yc min(max((ymin ymax) / 2 / H, 0), 1) w min(max((xmax - xmin) / W, 0), 1) h min(max((ymax - ymin) / H, 0), 1) lines.append(f{cls_id} {xc:.6f} {yc:.6f} {w:.6f} {h:.6f}) with open(out_txt_path, w) as f: f.write(\n.join(lines)) classes [boat] # 批量处理时遍历 images 目录txt 输出到同名 labels 目录逻辑说明classes列表的顺序就是 class id 的映射必须和data.yaml的names完全一致。归一化后做min/max裁剪是血泪经验——标注时手抖把框拖出图像边界不裁剪的话 YOLO 训练会直接报坐标越界错误。参数上:.6f保留六位小数足够YOLO 内部会再处理精度再高没意义。2.4 数据增强策略水面场景该开哪些、该关哪些ultralytics 内置的增强里有几个在水面场景是必须关掉的。flipud上下翻转要关因为海天关系被破坏后模型会学到错误的空间先验mosaic可以开但概率别太高0.5 左右太高会让小目标被拼接到不合理位置。hsv_h色调扰动可以适当加大到 0.02因为水面反光在不同时段色温差异大hsv_v亮度扰动加到 0.5模拟逆光/顺光。这些在训练命令里通过参数覆盖即可不用改源码。3. YOLO11 训练从环境安装到关键参数调优3.1 ultralytics 安装与那个经典报错的排查pip install ultralytics报could not find a version that satisfies the requirement ultralytics是新手第一道坎。原因通常有三个Python 版本太低ultralytics 要求 3.8建议 3.10、pip 源没配好、或者网络环境导致索引拉取失败。排查顺序是先python --version确认版本再pip install -U pip升级 pip然后指定国内源重试。# 确认 Python 版本低于 3.8 直接换环境 python --version # 升级 pip 并指定源安装 pip install -U pip pip install ultralytics -i https://pypi.tuna.tsinghua.edu.cn/simple # 验证安装能打印版本号就成功 yolo version逻辑说明-i指定镜像源解决拉取失败yolo version是 ultralytics 提供的 CLI 自检命令。如果还报错检查是不是在 conda base 环境里和已有包冲突建议新建虚拟环境conda create -n yolo11 python3.10。参数上GPU 训练还需要确认 CUDA 和 PyTorch 版本匹配torch.cuda.is_available()返回 True 才算就绪。3.2 从预训练权重启动训练的最小命令不要从零训用yolo11n.pt或yolo11s.pt做迁移学习收敛快且小样本下更稳。无人机船只检测我一般从yolo11s起步n 太小精度不够m/l 在边缘设备上跑不动。yolo detect train \ modelyolo11s.pt \ data/home/user/dataset/data.yaml \ epochs150 \ imgsz640 \ batch16 \ device0 \ projectruns/boat \ nameexp1 \ patience30 \ cacheTrue逻辑说明model指定预训练权重data指向 yamlepochs150 对中等数据集够用patience30表示 30 轮无提升就早停省时间。cacheTrue把图像缓存到内存小数据集能显著加速但内存小于 16G 且数据集大时别开。参数上imgsz640是默认如果小目标多可以提到 960 或 1280但显存占用会翻倍batch要相应降到 8 或 4。3.3 针对小目标和密集船只的四个必调参数默认参数在船只场景下不够用这四个是我每次都会动的参数默认值建议值作用imgsz640960~1280提升小目标分辨率mosaic1.00.5降低拼接对小目标的干扰scale0.50.3减小缩放幅度保护小目标copy_paste0.00.3复制粘贴增强缓解密集遮挡imgsz提到 960 后P3 特征图上的小船只激活更强召回明显改善。mosaic降到 0.5 是因为海面背景单一过度拼接会让模型分不清真实海天线。scale减小是因为无人机高度变化已经带来足够尺度多样性再大幅缩放会让小目标更小。copy_paste对密集停靠的码头场景特别有效把船只实例复制到其他位置增加遮挡样本。3.4 训练过程监控与中断恢复训练启动后重点看三个指标box_loss是否稳定下降、mAP50是否在 50 轮后还在涨、cls_loss有没有异常波动。如果box_loss震荡剧烈多半是学习率太高或 batch 太小把lr0从 0.01 降到 0.005 试试。中断了不用重头来加resume参数# 从上次中断处恢复指向 last.pt yolo detect train resume modelruns/boat/exp1/weights/last.pt逻辑说明resume会读取优化器状态和 epoch 计数无缝续训。注意last.pt是每轮都存的best.pt是 mAP 最高时存的部署用best.pt续训用last.pt。参数上如果换了数据集或改了类别数不能 resume必须重新训。4. 推理与部署把训练好的模型塞进无人机链路4.1 单张与批量推理的命令行写法训练完先别急着上机本地验证一遍推理效果# 单张图片推理保存结果 yolo detect predict \ modelruns/boat/exp1/weights/best.pt \ source/home/user/test_imgs \ conf0.25 \ iou0.45 \ saveTrue \ projectruns/predict # 视频推理输出带框的视频 yolo detect predict modelbest.pt sourceflight.mp4 saveTrue streamTrue逻辑说明conf0.25是置信度阈值低于此值的框丢弃iou0.45是 NMS 的 IoU 阈值密集船只场景可以调到 0.5~0.6 减少误抑制。streamTrue对长视频是必须的否则会一次性加载全部帧爆内存。参数上如果发现漏检多先降conf到 0.15 看是不是阈值卡太死如果误检多升到 0.35。4.2 Python API 集成到自有流水线实际项目里很少用 CLI都是嵌到 Python 服务里from ultralytics import YOLO import cv2 model YOLO(runs/boat/exp1/weights/best.pt) # 对单帧推理返回 Results 对象 results model.predict( sourceframe, conf0.25, iou0.5, imgsz960, device0, verboseFalse ) # 提取框、类别、置信度 for r in results: boxes r.boxes for box in boxes: xyxy box.xyxy[0].cpu().numpy() # 左上右下坐标 cls int(box.cls[0]) # 类别 id conf float(box.conf[0]) # 置信度 # 这里接你的业务逻辑上报、跟踪、告警逻辑说明predict返回的Results对象里boxes包含所有检测框xyxy是像素坐标cls和conf是类别和置信度。verboseFalse关掉冗余日志生产环境必开。参数上imgsz要和训练时一致训练用 960 推理也用 960否则精度会掉。4.3 边缘设备部署的量化与加速无人机机载算力有限Jetson 系列是常见选择。把 PyTorch 模型导出成 TensorRT 能提速 2~3 倍# 导出 TensorRT 引擎FP16 量化 yolo export modelbest.pt formatengine halfTrue device0 imgsz960 # 导出 ONNX通用性更好 yolo export modelbest.pt formatonnx opset12 simplifyTrue逻辑说明formatengine生成 TensorRT 引擎halfTrue用 FP16 量化精度损失通常小于 1% mAP 但速度翻倍。simplifyTrue对 ONNX 做图优化去掉冗余算子。参数上Jetson 上导出要在目标设备上做因为 TensorRT 引擎和 GPU 架构绑定在服务器上导出的拿到 Jetson 上跑不了。5. 避坑与排查船只检测里最容易翻车的五件事5.1 训练 loss 正常但 mAP 一直是 0现象box_loss在降但mAP50始终为 0 或极低。原因data.yaml里nc和names对不上或者标注 txt 里的 class id 超出了nc范围模型把所有预测都归到背景。解决用脚本扫一遍所有 label 文件确认 class id 最大值小于nc同时核对names顺序和标注时的类别顺序一致。5.2 小船只全部漏检现象大船能检出几十像素的小艇一个都框不到。原因imgsz太小导致小目标在特征图上消失或者scale增强把小目标缩得更小。解决imgsz提到 960 以上scale降到 0.3同时检查数据集里小目标样本占比低于 10% 的话要专门补充小目标数据。5.3 海面反光被误检成船只现象阳光反射带、白色浪花被框成 boat。原因训练集里缺少反光负样本模型没学到「反光不是船」的判别特征。解决收集一批纯海面反光、无船只的负样本图label 为空文件加入训练集比例控制在正样本的 10%~15%同时把hsv_v亮度扰动加大让模型对高亮区域更鲁棒。5.4 推理速度在 Jetson 上慢到不可用现象服务器上 30 FPSJetson 上只有 3 FPS。原因没做量化或者用了yolo11l这种大模型。解决换yolo11n或yolo11s导出 TensorRT FP16 引擎imgsz从 1280 降到 640如果小目标要求不高。实测yolo11s TensorRT FP16 640 在 Orin Nano 上能到 25 FPS 左右。5.5 换了个海域 mAP 断崖下跌现象在 A 海域训的模型拿到 B 海域精度掉一半。原因不同海域水色、光照、浪高差异大模型过拟合了 A 域的纹理。解决做域随机化增强hsv_h和hsv_s加大扰动范围同时尽量收集多海域数据混合训练。如果目标域数据极少用少量目标域样本做微调lr0设小一点 0.001训 20~30 轮即可。6. 进阶技巧用切片推理把远距离小目标召回拉满前面所有调参做完如果远距离小目标召回还是不够最后一招是切片推理SAHI 思路。原理很简单把高分辨率原图切成有重叠的小块每块单独推理再把结果映射回原图做 NMS 合并。这样小目标在切片里变成了「大目标」召回率能提升 10~20 个百分点。代价是推理耗时成倍增加所以只在对召回要求极高的搜救场景用。from ultralytics import YOLO import numpy as np model YOLO(best.pt) def sliced_inference(img, slice_size640, overlap0.2): h, w img.shape[:2] stride int(slice_size * (1 - overlap)) all_boxes [] for y in range(0, h, stride): for x in range(0, w, stride): # 切出当前块边界处做裁剪 patch img[y:yslice_size, x:xslice_size] if patch.shape[0] 32 or patch.shape[1] 32: continue res model.predict(patch, conf0.25, verboseFalse)[0] for box in res.boxes: x1, y1, x2, y2 box.xyxy[0].cpu().numpy() # 映射回原图坐标 all_boxes.append([x1x, y1y, x2x, y2y, float(box.conf[0])]) # 这里接全局 NMS按 conf 排序后做 IoU 抑制 return all_boxes逻辑说明slice_size是切片边长overlap是重叠比例0.2 表示相邻切片重叠 20%防止目标正好卡在切缝上被截断。每个切片的检测框坐标加上切片在原图的偏移x, y就映射回去了。参数上slice_size一般设成训练时的imgszoverlap0.2~0.3 之间太小会漏切缝目标太大推理耗时飙升。最后必须做全局 NMS否则重叠区域的同一目标会被重复框出。验证切片推理有没有效果别只看 mAP要单独统计小目标面积小于 32×32的召回率。我一般会跑一版不开切片和开切片的对比如果小目标召回提升不到 5 个百分点说明瓶颈不在分辨率而在数据本身回去补小目标样本比调推理策略更值。这套流程我踩过的最大坑是切片后忘了做全局 NMS结果一张图里同一艘船被框了七八次上报系统直接炸了。所以每次改推理逻辑先在几十张图上肉眼过一遍再上量。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

OpenSim符号肌肉力矩臂计算:从源码到多元多项式拟合

OpenSim符号肌肉力矩臂计算:从源码到多元多项式拟合

简介:本资源是一套基于OpenSim框架的符号肌肉力矩臂计算系统源码,面向生物力学、康复工程与人体运动仿真方向的研究人员及研究生,用于解决肌肉与关节之间力学关系量化分析的问题。包内共16个文件,以py脚本、dat数据文件、osim模型…

2026/10/11 22:29:20 阅读更多 →
基于YOLOv8的校园宿舍安全监测系统:从训练到部署全流程

基于YOLOv8的校园宿舍安全监测系统:从训练到部署全流程

简介:这份资源是面向计算机、人工智能、通信工程、自动化等专业学生与教师的YOLOv8目标检测实战项目,以校园宿舍安全监测为应用场景,可用于毕业设计、课程设计、大作业或项目立项演示。压缩包共8个文件,约15.91MB,包含…

2026/10/11 22:29:20 阅读更多 →
打印审计必备:从SPOOL文件解析SHD与SPL还原打印记录

打印审计必备:从SPOOL文件解析SHD与SPL还原打印记录

简介:面向打印监控、打印审计与打印数据恢复场景,该资源提供了一套不依赖传统HOOK函数、打印消息或虚拟打印机的SPOOL文件解析工具链,适合系统管理员、打印服务开发者及安全分析人员学习。从原理上看,SHD保存任务元数据&#xff0…

2026/10/11 22:28:20 阅读更多 →

最新新闻

PS5硬件扩展边界全解析:接口、协议与物理限制

PS5硬件扩展边界全解析:接口、协议与物理限制

项目标题“AnyPS5”目前在公开网络中无权威技术文档、官方产品发布或主流科技媒体报导支撑,亦未见于索尼互动娱乐(Sony Interactive Entertainment)任何已知产品线、开发代号或公开技术白皮书。经多平台语义检索与行业术语交叉验证&#xff0…

2026/10/11 23:15:10 阅读更多 →
YOLOv8+PaddleOCR车牌识别全链路工程实践

YOLOv8+PaddleOCR车牌识别全链路工程实践

简介:本资源是一套面向本科毕业设计与人工智能课程实践的智能车牌识别系统完整实现方案,聚焦图像识别与机器学习在智能交通场景中的落地应用。系统基于YOLOv8目标检测与PaddleOCR文字识别双引擎协同架构,覆盖车牌定位、字符分割、OCR识别全流…

2026/10/11 23:15:08 阅读更多 →
无电压传感器三相PWM整流器虚拟磁链定向仿真全解析

无电压传感器三相PWM整流器虚拟磁链定向仿真全解析

1. 这个项目到底在做什么说句实在话,三相PWM整流器的Simulink仿真,我在学生时代和工程实践里都反反复复碰过很多次。电压型PWM整流器这一块,最常见的控制策略是电压定向矢量控制(VOC),也就是把三相交流量通…

2026/10/11 23:15:06 阅读更多 →
RWKV7-G1 0.1B 推理模型发布:把纯血 RNN 塞进嵌入式设备的 TaoToken 实测路径

RWKV7-G1 0.1B 推理模型发布:把纯血 RNN 塞进嵌入式设备的 TaoToken 实测路径

/* 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 23:15:04 阅读更多 →
RAP消息被截断排查:从50字符到220字符的嵌入式通信避坑指南

RAP消息被截断排查:从50字符到220字符的嵌入式通信避坑指南

上周我接到一个很典型的排查任务:现场反馈物联网关上报到平台的消息“丢尾”,一条本该有 80 个字符的 RAP 消息,对端只收到了 50 个字符。第一反应是 TCP 拆包没处理好,查了一圈才意识到,根本不是网络问题,…

2026/10/11 23:14:59 阅读更多 →
车载空调系统建模全流程:从热力学方程到量产图纸

车载空调系统建模全流程:从热力学方程到量产图纸

车载空调这东西,看着是个普普通通的汽车零部件,真要较真起来能让人头大一圈。热力学、流体力学、控制理论、结构设计全搅在一起,你光会仿真或者光会画图都不够,得从算法推导一路干到图纸落地才算是真本事。我这些年折腾车载空调建…

2026/10/11 23:13:59 阅读更多 →

日新闻

流感时间序列预测实战: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 阅读更多 →