高跟鞋检测数据集实战:YOLO标注格式解析与训练避坑指南
简介本资源为面向目标检测学习者的女士高跟鞋检测数据集适用于YOLO系列模型的训练与验证可支撑服饰识别、电商图像分析等场景的入门与进阶实践。压缩包共552个文件包含276张jpg图像与276个xml标注文件一一对应标注信息可直接用于检测任务的数据读取与格式转换整体约10.55MB体量轻便便于快速下载与本地调试。配套项目提供基于ultralytics的WebUI操作方式覆盖数据预处理、模型训练与推理全流程可通过python webui_det.py或run_det.bat启动按readme.md步骤即可复现实验。目前已有104人学习适合希望以较小数据量跑通高跟鞋检测流程、验证标注质量与训练配置的开发者参考使用。1. 高跟鞋检测数据集从标注格式到 YOLO 训练落地的完整拆解做鞋类识别项目的开发者大概都遇到过这个尴尬通用 COCO 数据集里根本没有细分的“女士高跟鞋”类别自己从零标注又得耗掉大量时间。这份 high-heels 检测数据集就是冲着这个缺口来的——它把高跟鞋作为独立目标类别做了标注可以直接喂给 YOLO 系列做训练。适合谁用做电商商品识别、智能穿搭推荐、鞋类库存盘点或者单纯想跑通一个细粒度目标检测流程的从业者。数据集本身不复杂但真正落地时会碰到格式转换、类别映射、小目标漏检这几道坎下面按实际拆包顺序讲清楚。2. 数据集结构与标注格式先搞清楚手里拿的是什么拿到一个检测数据集第一件事不是急着写训练脚本而是把目录结构和标注格式摸清楚。不同来源的数据集在标注方式上差异很大有 VOC XML 的、有 COCO JSON 的、也有直接给 YOLO txt 的。格式判断错了后面所有步骤都是白费功夫。2.1 目录布局与文件组织这类目标检测数据集通常按以下结构组织我拆过的几个版本大同小异high-heels/ ├── images/ │ ├── train/ │ │ ├── 000001.jpg │ │ ├── 000002.jpg │ │ └── ... │ ├── val/ │ │ └── ... │ └── test/ │ └── ... ├── labels/ │ ├── train/ │ │ ├── 000001.txt │ │ └── ... │ ├── val/ │ │ └── ... │ └── test/ │ └── ... ├── data.yaml └── README.mdimages 和 labels 是平行目录文件名一一对应。图片是 jpg 格式标注是 txt 格式每行代表一个目标框。这种布局是 YOLOv5 之后的标准做法YOLOv8、YOLOv9、YOLOv10 都兼容。先跑一条命令确认文件数量和对应关系# 统计各子集图片数量 for split in train val test; do count$(ls high-heels/images/$split/*.jpg 2/dev/null | wc -l) echo $split: $count images done # 检查图片和标注是否一一对应 for split in train val test; do img_count$(ls high-heels/images/$split/*.jpg 2/dev/null | wc -l) lbl_count$(ls high-heels/labels/$split/*.txt 2/dev/null | wc -l) echo $split - images: $img_count, labels: $lbl_count done如果 images 和 labels 数量对不上说明有图片没标注或者标注文件命名不匹配这个必须在训练前修掉。常见原因是文件名大小写不一致或者有隐藏文件混进去了。2.2 YOLO 标注格式逐字段解读YOLO 的标注格式很简洁每个 txt 文件里每行一个目标class_id x_center y_center width height五个字段全部是归一化到 0~1 的浮点数。class_id从 0 开始编号x_center和y_center是框中心点相对图片宽高的比例width和height是框的宽高相对图片宽高的比例。举个例子一张 640×480 的图片里有一个高跟鞋框的像素坐标是左上角 (200, 150)、右下角 (440, 390)那么框宽 440 - 200 240归一化后 240/640 0.375框高 390 - 150 240归一化后 240/480 0.5中心 x (200 440) / 2 320归一化后 320/640 0.5中心 y (150 390) / 2 270归一化后 270/480 0.5625对应标注行就是0 0.5 0.5625 0.375 0.5用一段脚本快速验证标注文件是否合法import os def validate_yolo_labels(label_dir): 检查 YOLO 标注文件的合法性 issues [] for fname in os.listdir(label_dir): if not fname.endswith(.txt): continue fpath os.path.join(label_dir, fname) with open(fpath, r) as f: lines f.readlines() if len(lines) 0: issues.append(f{fname}: 空标注文件) continue for i, line in enumerate(lines): parts line.strip().split() if len(parts) ! 5: issues.append(f{fname} 第{i1}行: 字段数{len(parts)}应为5) continue try: cls_id int(parts[0]) vals [float(x) for x in parts[1:]] except ValueError: issues.append(f{fname} 第{i1}行: 存在非数值字段) continue if cls_id 0: issues.append(f{fname} 第{i1}行: class_id 为负数) for v in vals: if v 0 or v 1: issues.append(f{fname} 第{i1}行: 坐标值 {v} 超出 [0,1] 范围) return issues issues validate_yolo_labels(high-heels/labels/train) if issues: for issue in issues[:20]: print(issue) print(f\n共发现 {len(issues)} 个问题) else: print(所有标注文件格式合法)这段脚本检查三件事字段数是否为 5、class_id 是否为非负整数、坐标值是否在 [0,1] 范围内。跑完如果有输出就得逐条修。坐标越界通常是因为标注工具导出时没做归一化或者图片尺寸信息丢失导致的。2.3 data.yaml 配置与类别映射data.yaml 是 YOLO 训练时的数据入口配置文件内容一般长这样path: ./high-heels train: images/train val: images/val test: images/test nc: 1 names: 0: high-heelsnc是类别数names是类别索引到名称的映射。如果数据集只有高跟鞋一个类别nc就是 1。有些版本可能还包含其他鞋类那就得按实际标注文件里的 class_id 来改。注意names里的类别顺序必须和标注文件里的 class_id 严格对应。如果标注里高跟鞋是 0那 names 里 0 就必须是 high-heels。搞反了模型学出来的东西完全是错的。3. 用 YOLOv8 跑通训练从环境配置到首轮推理数据集检查没问题之后下一步就是把它喂进模型。YOLOv8 是目前上手成本最低的选择ultralytics 库封装得很干净几行代码就能跑起来。但配置细节不注意照样翻车。3.1 环境搭建与依赖安装先建一个干净的虚拟环境避免和系统里已有的包冲突python -m venv venv_heels source venv_heels/bin/activate # Windows 用 venv_heels\Scripts\activate pip install ultralytics8.2.0 pip install opencv-python pillow matplotlib pyyamlultralytics 会自动装 torch 和 torchvision但版本可能和你的 CUDA 不匹配。装完之后验证一下 GPU 是否可用import torch print(fPyTorch version: {torch.__version__}) print(fCUDA available: {torch.cuda.is_available()}) if torch.cuda.is_available(): print(fGPU: {torch.cuda.get_device_name(0)}) print(f显存: {torch.cuda.get_device_properties(0).total_memory / 1024**3:.1f} GB)如果 CUDA available 是 False要么是没装对 CUDA 版本的 torch要么是驱动有问题。CPU 也能训但高跟鞋这种小目标数据集CPU 训一轮可能要几十分钟GPU 几分钟就搞定了。3.2 训练脚本与关键参数设置YOLOv8 的训练入口非常简洁from ultralytics import YOLO # 加载预训练权重n 是最小版本速度快适合先跑通 model YOLO(yolov8n.pt) # 开始训练 results model.train( datahigh-heels/data.yaml, # 数据配置文件路径 epochs100, # 训练轮数 imgsz640, # 输入图片尺寸 batch16, # 批次大小显存不够就调小 device0, # GPU 编号CPU 填 cpu workers4, # 数据加载线程数 patience20, # 早停耐心值20轮没提升就停 lr00.01, # 初始学习率 lrf0.01, # 最终学习率因子 optimizerSGD, # 优化器 augmentTrue, # 开启数据增强 projectruns/heels, # 输出目录 nameexp1, # 实验名称 exist_okTrue, # 允许覆盖同名实验 pretrainedTrue, # 使用预训练权重 verboseTrue # 打印详细日志 )几个参数值得展开说imgsz640是 YOLO 系列的经典输入尺寸。高跟鞋在图片里通常占比较小如果原始图片分辨率很高比如 1920×1080缩到 640 之后高跟鞋可能只剩几十个像素检测难度会明显上升。这种情况可以考虑imgsz1280但显存占用会翻倍。batch16是 8GB 显存下的安全值。如果训练时出现 CUDA out of memory优先降 batch 而不是降 imgsz因为 imgsz 对精度影响更大。patience20是早停机制。如果验证集 loss 连续 20 轮没有改善训练自动终止避免过拟合。高跟鞋数据集如果只有几百张图这个参数尤其重要。lr00.01配合optimizerSGD是 YOLO 的默认组合对大多数场景够用。如果训练 loss 震荡厉害可以换成optimizerAdamW并把lr0降到 0.001。3.3 训练过程监控与指标解读训练启动后终端会实时打印每一轮的指标Epoch GPU_mem box_loss cls_loss dfl_loss Instances Size 1/100 2.1G 1.234 0.876 1.123 12 640 2/100 2.1G 1.098 0.654 1.045 16 640 ...box_loss是边界框回归损失cls_loss是分类损失dfl_loss是分布焦点损失。三个 loss 都应该随着训练轮数增加而下降。如果某个 loss 不降反升说明学习率可能太大了。训练结束后在runs/heels/exp1/目录下会生成weights/best.pt验证集上表现最好的权重weights/last.pt最后一轮的权重results.csv每轮的详细指标confusion_matrix.png混淆矩阵results.pngloss 和 mAP 曲线重点看results.png里的 mAP50 和 mAP50-95 曲线。mAP50 是 IoU 阈值 0.5 时的平均精度mAP50-95 是 IoU 从 0.5 到 0.95 每隔 0.05 取一个值的平均。高跟鞋检测如果 mAP50 能到 0.85 以上基本就够用了。3.4 推理验证与结果可视化训练完之后拿几张测试集图片跑推理看看效果from ultralytics import YOLO import cv2 model YOLO(runs/heels/exp1/weights/best.pt) # 对单张图片推理 results model.predict( sourcehigh-heels/images/test/000001.jpg, conf0.25, # 置信度阈值 iou0.45, # NMS IoU 阈值 imgsz640, saveTrue, # 保存带标注的结果图 projectruns/heels, namepredict ) # 批量推理整个测试集 results model.predict( sourcehigh-heels/images/test/, conf0.25, iou0.45, saveTrue, save_txtTrue, # 同时保存预测结果的 txt projectruns/heels, namepredict_batch )conf0.25是置信度阈值低于这个值的检测框会被过滤掉。如果发现漏检多可以降到 0.1 试试如果误检多就提到 0.4 以上。iou0.45是 NMS 的 IoU 阈值控制重叠框的合并程度。高跟鞋如果出现两只鞋紧挨着的情况这个值可以适当调高到 0.5~0.6避免把两只鞋合并成一个框。推理结果会保存在runs/heels/predict/下带框的图片可以直接肉眼检查。重点看三种情况高跟鞋被漏检的、背景被误检成高跟鞋的、框位置明显偏的。这三种问题对应的原因和解决方向完全不同。4. 避坑与排查高跟鞋检测里最容易翻车的五个地方目标检测项目有个特点代码跑通了不代表结果能用。下面这五个坑是我在实际项目里反复踩过的每一个都有明确的现象和解决路径。4.1 现象训练 loss 正常下降但 mAP 始终为 0原因data.yaml 里的names和标注文件里的 class_id 对不上。比如标注里高跟鞋是 class_id 0但 names 里写的是0: shoe或者干脆 names 为空。YOLO 在计算 mAP 时按 names 的索引去匹配对不上就全部算错。解决打开任意一个标注 txt看第一列的数字。然后检查 data.yaml 里names对应索引的类别名。两者必须一致。如果不确定直接把 names 改成0: high-heels确保和标注的 class_id 0 对应。4.2 现象小目标高跟鞋大量漏检原因原始图片分辨率高高跟鞋在图中占比小缩放到 640 之后特征几乎消失。这是细粒度检测的典型问题。解决三个方向。第一把imgsz提到 1024 或 1280代价是显存和训练时间增加。第二用切片推理把大图切成小块分别检测再合并ultralytics 支持saug参数做切图增强。第三换更大的模型yolov8n 换成 yolov8m 或 yolov8l小目标特征提取能力更强。4.3 现象验证集 mAP 很高但实际推理效果差原因训练集和验证集的图片来自同一批数据分布太接近。模型过拟合了训练集的特定场景比如固定的背景、固定的拍摄角度换一批真实场景的图片就崩了。解决检查数据集的划分方式。如果 train 和 val 是从同一批连续拍摄的图片里随机切的那验证集基本没有泛化评估价值。正确做法是按场景或按拍摄批次划分确保验证集里的图片和训练集有明显差异。另外开启更强的数据增强mosaic、mixup、随机裁剪也能缓解过拟合。4.4 现象两只高跟鞋紧挨着时只检测出一个框原因NMS 的 IoU 阈值设得太低把两个相邻的框合并了。高跟鞋成对出现是常态这个问题在鞋类检测里特别常见。解决把推理时的iou参数从默认的 0.45 提到 0.55 甚至 0.6。如果还不行说明模型本身对相邻目标的区分能力不够需要在训练时增加这类样本或者用 Soft-NMS 替代标准 NMS。4.5 现象训练到一半突然报 CUDA out of memory原因YOLO 训练过程中数据增强尤其是 mosaic会动态生成不同尺寸的拼接图显存占用不是恒定的。前期可能刚好卡在显存边缘跑到某个 batch 就爆了。解决把batch降到 8 或 4同时开启ampTrue自动混合精度能省不少显存。如果还不行把workers也降下来数据加载线程太多也会占显存。实在不行就换更小的模型yolov8n 的显存需求比 yolov8m 小很多。5. 进阶技巧用验证集反推数据质量与模型边界训练跑通只是起点真正决定项目能不能交付的是你能不能从验证结果里读出数据本身的问题。我一般会做一件事把验证集里所有漏检和误检的样本单独拎出来按图片维度统计找出问题最集中的那批图。import os import json from collections import defaultdict from ultralytics import YOLO model YOLO(runs/heels/exp1/weights/best.pt) # 对验证集推理并保存结果 results model.predict( sourcehigh-heels/images/val/, conf0.25, iou0.45, save_txtTrue, save_confTrue, projectruns/heels, nameval_analysis ) # 统计每张图的检测数量 pred_dir runs/heels/val_analysis/labels gt_dir high-heels/labels/val stats [] for fname in os.listdir(gt_dir): if not fname.endswith(.txt): continue img_name fname.replace(.txt, .jpg) gt_path os.path.join(gt_dir, fname) pred_path os.path.join(pred_dir, fname) with open(gt_path) as f: gt_count len([l for l in f.readlines() if l.strip()]) pred_count 0 if os.path.exists(pred_path): with open(pred_path) as f: pred_count len([l for l in f.readlines() if l.strip()]) stats.append({ image: img_name, gt: gt_count, pred: pred_count, diff: pred_count - gt_count }) # 按差异绝对值排序找出问题最大的图 stats.sort(keylambda x: abs(x[diff]), reverseTrue) print(检测数量偏差最大的 10 张图) for s in stats[:10]: print(f {s[image]}: GT{s[gt]}, Pred{s[pred]}, Diff{s[diff]})这段脚本做的是逐图对比真实标注有几个高跟鞋模型预测了几个。diff为正说明误检多为负说明漏检多。把偏差最大的那批图找出来一张一张看基本能定位到数据集的系统性问题。如果漏检集中在某几类拍摄角度比如俯拍、侧拍说明训练集里这类角度的样本太少需要补充。如果误检集中在某种背景比如货架、地板纹理说明模型把背景特征学成了高跟鞋的一部分需要增加负样本。还有一个实用技巧用model.val()跑一次完整验证拿到每个类别的 P、R、mAP 指标metrics model.val( datahigh-heels/data.yaml, splitval, conf0.25, iou0.45 ) print(fmAP50: {metrics.box.map50:.4f}) print(fmAP50-95: {metrics.box.map:.4f}) print(fPrecision: {metrics.box.mp:.4f}) print(fRecall: {metrics.box.mr:.4f})Precision 高 Recall 低说明模型保守只敢在很有把握的时候出框适合对误检容忍度低的场景。Recall 高 Precision 低说明模型激进宁可错杀不可放过适合对漏检容忍度低的场景。根据你的业务需求调conf阈值来平衡这两个指标。从那以后我每次拿到新的检测数据集都会先跑一遍逐图对比分析把偏差最大的前 20 张图过一遍再决定要不要调模型。这个习惯帮我省了很多盲目调参的时间。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

DCGAN数据增强实战:从原理到替换数据集避坑指南

DCGAN数据增强实战:从原理到替换数据集避坑指南

简介:这份资源是DCGAN在TensorFlow框架下的完整实现,面向希望将生成对抗网络用于图像增强与扩充的开发者与研究者,尤其适合医学影像、人脸识别等小样本场景。代码已跑通,替换data文件夹中的图像数据集即可直接使用,对X…

2026/10/14 5:37:15 阅读更多 →
告别手动补索引:SLS 支持索引自动发现,让数据开箱即用、自由分析

告别手动补索引:SLS 支持索引自动发现,让数据开箱即用、自由分析

作者:无哲 也许你也曾经遇到过这样的场景:线上突发故障,你顺着线索一路排查,终于锁定了一个随新版本上线、包含关键信息的日志字段。但点击查询时,系统却提示:“该字段未配置索引,无法进行分析”…

2026/10/14 5:37:15 阅读更多 →
AI视频工作流:电影级制作平民化的技术拐点

AI视频工作流:电影级制作平民化的技术拐点

1. 这不是“又一个AI视频工作流”,而是电影工业级流程的平民化拐点最近在剪辑室熬了三个通宵,用一套刚搭好的新链路重做了去年被客户反复打回的商业短片——成片交付时,客户盯着调色监看屏愣了五秒,脱口而出:“这真是你…

2026/10/14 5:37:15 阅读更多 →

最新新闻

Flutter跨平台开发实战:从环境搭建到架构优化的完整指南

Flutter跨平台开发实战:从环境搭建到架构优化的完整指南

简介:这份PDF资料面向跨平台移动应用开发的初学者,以及有编程基础但尚未接触Flutter的开发者,系统讲解Flutter从环境搭建到项目实战的完整路径。内容涵盖Flutter自绘引擎、AOT编译与热重载等核心优势,Windows与macOS下的SDK安装和…

2026/10/14 6:19:25 阅读更多 →
Agent稳定性工程化:Harness机制设计与落地实践

Agent稳定性工程化:Harness机制设计与落地实践

1. 从“能跑”到“跑得稳”:Agent 稳定性问题的工程化破局思路做 Agent 开发的人大概都有过这种体验:Demo 阶段一切丝滑,一旦放到真实业务里跑上几百上千次,各种稀奇古怪的失败就开始冒出来。同一个输入,今天返回正常结…

2026/10/14 6:19:25 阅读更多 →
EMC Symmetrix DMX操作手册:企业级存储现场作业指南

EMC Symmetrix DMX操作手册:企业级存储现场作业指南

简介:本资源是EMC Symmetrix DMX系列企业级存储系统的官方级操作手册,面向存储运维工程师、系统集成人员及维保技术人员,聚焦DMX设备日常巡检、硬件故障定位与现场处置等核心运维场景。手册覆盖DMX 800/1000/2000/3000全型号架构图示&#xf…

2026/10/14 6:19:25 阅读更多 →
短视频背景音乐版权如何合规解决?可商用音乐素材平台盘点

短视频背景音乐版权如何合规解决?可商用音乐素材平台盘点

在短视频与商业内容爆发式增长的今天,背景音乐的版权合规已成为创作者和企业必须正视的核心问题。未经授权使用音乐不仅可能导致视频下架、账号限流,还可能引发法律纠纷与经济损失。选择正规可商用音乐素材平台,是保障内容安全、提升创作效率…

2026/10/14 6:19:25 阅读更多 →
豆包优化公司哪家好?AI搜索推荐优化找谁做

豆包优化公司哪家好?AI搜索推荐优化找谁做

越来越多用户开始用豆包这类AI助手查资料、做决策。QuestMobile数据显示,2026年6月豆包月活跃用户已达到约3.82亿。对企业来说,品牌能否在AI回答中被提及、被推荐,直接影响新客户对品牌的初步印象。“豆包优化公司哪家好、AI搜索推荐优化找谁…

2026/10/14 6:19:25 阅读更多 →
Hive文件存储格式深度解析:从TextFile到ORC的选型与优化

Hive文件存储格式深度解析:从TextFile到ORC的选型与优化

1. 为什么文件存储格式值得单独拎出来讲做数据仓库这行的人,绕不开Hive。而一旦你开始认真用Hive处理稍微上点规模的数据,迟早会撞上一个问题:同样的SQL,为什么别人跑几分钟,我跑半小时?排除掉数据倾斜、资…

2026/10/14 6:18:25 阅读更多 →

日新闻

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/13 16:22:04 阅读更多 →
影刀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/12 18:11:17 阅读更多 →