基于YOLOv5的乐谱识别:数据集标注与训练避坑指南
简介一套基于YOLOv5的乐谱识别训练数据集与预训练模型面向深度学习初学者及音乐信息检索研究者可用于目标检测实战、乐谱元素定位与识别模型调优。压缩包共329个文件、约37MB主体为162张jpg乐谱图像与154个xml标注文件xml中记录了乐谱元素的边界框信息按需转换成YOLO格式即可直接训练另有yaml模型配置、pt权重文件、events与csv训练日志能还原从数据预处理、标签解析到模型迭代验证的完整流程。整体目录清晰训练过程中的train_batch预览图、结果表格与曲线等辅助内容可帮助判断收敛效果、对比超参数设置。已有338人学习下载适合具备基础Python和深度学习知识、希望借助真实标注数据快速上手YOLOv5训练与推理的开发者也可作为课程设计或竞赛项目的数据基础。1. 把乐谱当目标检测来做少走弯路的数据集先行方案拿到一批扫描乐谱要转成可播放的 MIDI 或者 MusicXML接手的工程师往往第一反应是上 OCR。真正做过乐谱识别OMR的人会告诉你传统 OCR 路线在印刷谱上勉强能动手写谱和低清扫描件几乎全军覆没。我的做法是反过来——把整页乐谱当作图像检测问题用 YOLOv5 训练自己的数据集先让模型把音符、谱号、升降号这些要素全部框出来再交给后面的规则脚本组装成语义。这个路线最反直觉的一点是模型精度不是瓶颈数据集质量才是。适合手里有几百页同风格乐谱、想最快见到可用识别效果的人。2. 乐谱数据集怎么造从扫描件到 YOLO 训练集的全流程2.1 先定类别体系再动手标注乐谱识别不是把整页谱子识别成一段文本而是要把每个音符、每个记号的位置和类别找出来。YOLOv5 只负责检测所以类别体系设计直接决定后续解析脚本的复杂度。我一般会把类别控制在 9 到 12 个以内whole_note全音符、half_note二分音符、quarter_note四分音符、eighth_note八分音符、treble_clef高音谱号、bass_clef低音谱号、sharp升号、flat降号、time_signature拍号、rest休止符。这里有个很多人上来就踩的误区纠结要不要把音符按音高分成几十类。YOLOv5 做的是目标检测不是音高分类。音高信息是靠音符在五线谱上的垂直位置算出来的这属于检测后的后处理逻辑不应该塞给检测模型。检测模型要做的只有一件事——把音符框出来并告诉后面“这是几分音符”音高由框的中心点纵坐标结合谱线间距计算准确率更高训练也更容易收敛。2.2 标注规范五线谱间距是边界框的度量尺标注乐谱和标注车辆行人完全不同。车辆行人框松一点没关系乐谱里的音符密集排列框的边界稍微偏一点后处理算音高时就可能跨线错位。我的标注规范是统一用一个完整小节线区域作为基准先量出五线谱的线间距staff space再按这个间距的倍数来控制框的收缩。以quarter_note为例框要同时包住符头和符干左边界对齐符头左侧右边界对齐符干右侧上边界到符干顶端下边界到符头底部。如果只框符头目标会变得太小YOLOv5 在 640 分辨率下很难学如果连带旁边的音符一起框进去两个相邻音符的框就会高度重叠极大影响 NMS。这些规则听起来琐碎但在标注阶段省下的每一分钟都会在训练阶段成倍还回来。2.3 把标注转成 YOLO 格式坐标归一化与类别编号脚本标注工具导出的格式五花八门常见的是 VOC 的 XML 格式。我自己写了一个转换脚本把所有 XML 统一转成 YOLO 的 txt 格式核心逻辑如下import os import xml.etree.ElementTree as ET from pathlib import Path CLASS_MAP { whole_note: 0, half_note: 1, quarter_note: 2, eighth_note: 3, treble_clef: 4, bass_clef: 5, sharp: 6, flat: 7, time_signature: 8, rest: 9, } def convert_xml_to_yolo(xml_path, out_path): tree ET.parse(xml_path) root tree.getroot() img_w int(root.find(size/width).text) img_h int(root.find(size/height).text) lines [] for obj in root.iter(object): name obj.find(name).text if name not in CLASS_MAP: continue bbox obj.find(bndbox) x1 float(bbox.find(xmin).text) y1 float(bbox.find(ymin).text) x2 float(bbox.find(xmax).text) y2 float(bbox.find(ymax).text) x_center (x1 x2) / 2 / img_w y_center (y1 y2) / 2 / img_h w (x2 - x1) / img_w h (y2 - y1) / img_h lines.append(f{CLASS_MAP[name]} {x_center:.6f} {y_center:.6f} {w:.6f} {h:.6f}) Path(out_path).write_text(\n.join(lines), encodingutf-8)这段脚本逻辑很直白解析 XML 里的物体坐标做归一化后写入 txt。有个细节要注意YOLO 格式的x_center / y_center / w / h全部是相对图像宽高的比例值范围是 0 到 1。我见过有人直接把像素坐标写进 txt模型训练损失直接炸掉这是数据格式上的最低级错误但发生率极高。转换完后一定要抽几张图把 txt 里的坐标画回原图对比确认框没有偏移再进入下一步。2.4 数据扩充策略切谱、多尺度、随机擦除乐谱扫描件通常是整页 A4直接丢进 YOLOv5 训练音符目标会小到只有十几个像素基本学不到特征。常见做法是先做滑窗切块把整页谱按 512 或 640 的窗口切成若干块每块之间保留 20% 重叠避免音符恰好被切在边界上。我一般会把 100 页谱切成 800 到 1200 张训练图这个量级训练 YOLOv5s 已经足够。随机擦除是我在乐谱数据上觉得收益最高的增广手段。扫描件常有墨水污渍、装订阴影用random_erasing在训练时随机遮挡小区域可以让模型对局部噪点更鲁棒。相比之下旋转角度超过 10 度要慎重——五线谱本来就是水平结构旋转过多会让模型学会识别“斜着的谱子”而真实扫描件大多是端正的。水平翻转更是要慎用这点在后面的训练配置里会详细展开。3. 训练配置与超参数让 YOLOv5 老老实实认谱的五个关键设置3.1 网络选型为什么默认从 YOLOv5s 开始很多教程一上来就推荐 YOLOv5x理由是精度最高。但在乐谱识别这个场景里YOLOv5s 是性价比最稳的起点。原因很简单乐谱目标极度密集单张 640 切块里有上百个音符目标这本身就是对小目标检测能力的考验v5x 的特征图更大、参数更多对小目标有一定优势但训练时间和显存占用也成倍上涨。如果数据集只有一千张左右大模型很容易过拟合跑出来的 mAP 反而不如 s 版本。我自己做过对比同一份数据集YOLOv5s 训练 150 轮的 mAP50 大约能到 0.82YOLOv5x 能到 0.87但训练时间从 40 分钟拉到 3 小时。对乐谱识别这样的结构化场景0.82 的 mAP50 已经足够支持后续的规则解析。先把 s 跑通全流程确认数据没问题再上大模型追精度这才是合理路径。3.2 数据配置与训练命令最小改动跑通数据配置只需要一个 YAML 文件指定训练集、验证集路径和类别信息# omr.yaml train: ./datasets/omr/images/train val: ./datasets/omr/images/val nc: 10 names: [whole_note, half_note, quarter_note, eighth_note, treble_clef, bass_clef, sharp, flat, time_signature, rest]训练命令我一般用这样的形式python train.py \ --weights yolov5s.pt \ --data omr.yaml \ --epochs 150 \ --batch-size 16 \ --imgsz 640 \ --hyp hyp.scratch-low.yaml \ --device 0参数说明--weights yolov5s.pt是 COCO 预训练权重迁移学习对小数据集非常关键不建议从零训练--imgsz 640是默认输入尺寸如果你的数据集里音符普遍偏小后续可以试试--imgsz 960或--imgsz 1280——分辨率上来后小目标召回率会明显提升但训练时间也线性上涨--hyp hyp.scratch-low.yaml是官方低增强预设乐谱这种高密度小目标场景用低增强比默认的高增强更稳前者不会过度切碎音符。3.3 五个必调超参数照着改就能避开大多数训练翻车乐谱识别训练和平时的检测任务有几个很不一样的超参数倾向头一回跑的人几乎都会在这几个地方栽跟头。第一个是mosaic。YOLOv5 默认开启 mosaic 增强把四张图拼在一起训。对乐谱来说音符本来就密集mosaic 拼接后音符被切成一半的概率很高模型会学到大量残缺目标。我一般把mosaic从默认的 1.0 降到 0.3或者在训练后期关闭。第二个是mixup默认 0.1 左右就行太高会让谱面背景糊成一片干扰五线谱线的检测。第三个是hsv_h、hsv_s、hsv_v三个颜色增强参数。乐谱是黑白文档不是自然图像颜色扰动完全没有意义甚至会把黑底白字的反色谱变成灰色乱码。我直接把这三项调到 0。第四个是fliplr这是乐谱识别独有的坑。乐谱水平翻转后四分音符符干方向会左右颠倒模型靠符干方向区分音符类型的话翻转后的数据就会产生语义错误。我在乐谱数据上会把fliplr直接设为 0只在垂直方向做轻微翻转。第五个是degrees默认是 0.0不要轻易加。乐谱里的五线谱是强水平结构旋转超过 5 度会让音符和谱线的相对位置关系失真后处理计算音高时会产生系统偏差。提供一个我多次使用的低增强配置片段直接写入 hyp 文件里对应字段即可mosaic: 0.3 mixup: 0.1 hsv_h: 0.0 hsv_s: 0.0 hsv_v: 0.0 fliplr: 0.0 degrees: 0.0这些参数不是玄学每一项背后的理由都能和乐谱的结构特征对应上。照着这个配置跑一轮至少能避开训练发散和识别方向错乱这两个最大的坑。4. 乐谱识别训练避坑从漏检到误检的四条血泪经验4.1 训练集小目标太多导致 AP 曲线诡异现象训练过程中 mAP 一直在 0.5 到 0.6 之间震荡PR 曲线在低召回率区间有一个诡异的“拐头”precision 先升后降。原因乐谱里的四分音符、八分音符在 640 分辨率下只有 20 到 30 像素宽。YOLOv5 的默认锚框是在 COCO 数据集上聚类出来的对这样的小目标并不适配。解决两个手段同时上。第一用python utils/autoanchor.py --data omr.yaml重新计算锚框跑一遍会自动在训练前更新锚框尺寸我跑完这个步骤后 mAP50 涨了 5 个点第二把--imgsz从 640 提到 960小目标的像素面积翻了一倍多识别率立刻改观。注意显存不够时先降 batch-size不要为了保 batch 牺牲分辨率。4.2 升降号和四分音符互相误检现象验证集里升号被识别成四分音符四分音符被识别成升号两类之间的混淆矩阵一片红。原因升号和四分音符的边界框形状确实接近都是细长形而且符头区域高度重叠。如果标注时只框符头不框符干两类几乎无法从形状上区分。解决升号的规范标注是框住整个升号记号包括两个竖杠和中间的交叉部分四分音符则要包含符头加符干。单纯靠 YOLOv5 的视觉特征很难完全消除这类混淆我还会在后处理里加一条规则兜底检测结果的置信度低于 0.4 时检查该位置是否同时存在五线谱线如果目标中心落在谱线上优先判定为音符。4.3 数据集划分不当导致验证集虚高现象训练集 mAP50 只有 0.75验证集却一直保持在 0.9 以上一部署到新扫描件上立刻打回原形。原因划分训练集和验证集时用了随机切分同一首曲谱的不同页面被分到了两边。模型相当于在“开卷考试”验证集里的谱面风格、字体和排版训练时都见过。解决按“曲目”切分而不是按“页面”切分。每首曲子是一个完整样本单元要么全在训练集要么全在验证集。这样验证集的指标才有真实参考价值。这个坑在公开数据集不明显但自建数据集时几乎人人中招。4.4 印刷谱训练后上手写谱直接翻车现象训练集全是铜版印刷谱拿手写谱去推理识别率从 0.85 掉到 0.3大量音符漏检。原因手写谱的符头大小、符干长度、连线角度都和印刷谱有巨大差异模型学到的特征分布完全不匹配。解决数据集里必须混入目标场景的数据。如果最终要识别手写谱训练集里至少要有一半是手写谱样本。没有现成手写谱数据可以从透明手写板采集或者用图像风格迁移做一批合成样本。这一步没法省靠图像增强做不出来手写风格这是数据分布的硬边界。5. 乐谱识别难例加强小目标、少样本与后处理兜底5.1 小目标专用处理策略乐谱里最常见的难例是 32 像素以下的符头目标尤其在整页谱不切块的情况下。YOLOv5 的 P3 特征层负责小目标检测但默认的 anchor 尺寸在 10 像素以下覆盖不足。一个经过验证的做法是训练时开启多尺度--multi-scale参数让模型每 10 个 batch 随机切换一次输入分辨率从 0.5 倍到 1.5 倍模型被迫学会在多种尺度下识别音符。代价是训练时间多 30% 左右但对小目标的召回率提升很值得。我一般只在最后一轮训练时关掉多尺度相当于让模型在固定分辨率下精调一轮。5.2 用 copy-paste 解决类别不平衡乐谱数据里四分音符可能占 60% 以上而低音谱号可能只有不到 1%。YOLOv5 的 loss 函数用的是 BCE类别严重不平衡时少样本类别几乎学不出来。我在实践中发现最有效的手段是 copy-paste 增广把标注好的低音谱号、全音符这类稀有样本用脚本随机粘贴到训练图的空白区域构建出更多正样本。import cv2 import numpy as np def paste_rare_object(bg_img, obj_img, obj_box, paste_center): 把稀有目标粘贴到背景图上返回新图和新的标注框 x1, y1, x2, y2 obj_box oh, ow y2 - y1, x2 - x1 cx, cy paste_center # 计算粘贴位置避免超出边界 bx1 max(0, cx - ow // 2) by1 max(0, cy - oh // 2) bx2 min(bg_img.shape[1], bx1 ow) by2 min(bg_img.shape[0], by1 oh) paste obj_img[y1:y1 (by2 - by1), x1:x1 (bx2 - bx1)] bg_img[by1:by2, bx1:bx2] paste return bg_img, (bx1, by1, bx2, by2)这段脚本的核心是把稀有类别抠出来在背景图上随机位置粘贴同时返回新的坐标框。使用时要注意粘贴位置避开已有的五线谱区域否则音符和谱线的相对位置关系会被破坏后处理算音高会出错。我会先跑一个简单的谱线检测拿到所有五线谱带的区域粘贴时绕过它们。5.3 难例挖掘把验证集硬样本回流训练集训练完一轮后用训练好的权重去推理验证集专门收集那些漏检和误检的图片。把这些图片挑出来人工核对修正标注后合并进训练集再训练一轮。这个流程听起来简单但作用非常直接每一轮难例挖掘都在逼模型去处理自己最不擅长的样本。我在乐谱项目上做了两轮难例挖掘mAP50 从 0.78 涨到 0.84而且增加的量只有不到 200 张图。难例挖掘比单纯加数据更有效因为它有针对性。6. 验证与后处理技巧mAP 之外还要盯漏检率模型训完第一件事不是看 mAP 曲线而是用detect.py把验证集结果可视化出来python detect.py \ --weights runs/train/exp/weights/best.pt \ --source ./datasets/omr/images/val \ --conf 0.25 \ --iou 0.45 \ --save-txt \ --save-conf--save-txt会输出每个检测框的坐标和类别到 txt 文件--save-conf会附带置信度。我会用这些小批量脚本扫一遍检测结果统计每个类别在多少张图中漏检。乐谱识别的特殊性在于漏检比误检的危害大得多——漏掉一个四分音符后面的 MIDI 生成就少一个音整段旋律就断了误检最多多一个噪音音一听就能发现。所以我的验证标准是mAP50 过 0.8 不算过关每个类别的召回率都要单独看quarter_note的召回率低于 0.9 就继续迭代。阈值调整是最后一环YOLOv5 默认的conf_thres0.25在自然图像上够用乐谱这种密集目标场景我会在推理时把conf_thres降到 0.1 到 0.15然后把置信度低于 0.3 的结果全交给后处理规则二次筛查。这个操作相当于让检测模型“宁多勿漏”把判断题留给后面的规则脚本去做。代价是推理输出量变大但对乐谱的后续组装来说多一个候选框远比少一个真实音符更容易处理。我在这类项目里有一个固定习惯每轮训练前先写一个增广可视化脚本把增强后的图和标注框画出来人工过一遍。有一次忘了关水平翻转四分音符的符干方向被随机翻转模型学出了大量的“镜像音符”检查增强图时一眼就发现了问题省下了整整一轮训练时间。把这套流程走完你会发现自己手里的乐谱识别模型真正能扛住真实扫描件的考验。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Shopee 快速选品铺货实操指南:从选品到批量上架的完整流程

Shopee 快速选品铺货实操指南:从选品到批量上架的完整流程

一、快速选品前,先明确三个前提 很多人一上来就急着找产品、铺链接,结果铺了几百条也没有订单。问题往往不在执行力,而在前期没有想清楚三件事: 目标市场是谁:Shopee 的 Site 不同,消费习惯差异很大。马来西…

2026/10/11 5:24:42 阅读更多 →
claude-mem实战:解决大模型“金鱼记忆”,实现跨会话记忆管理

claude-mem实战:解决大模型“金鱼记忆”,实现跨会话记忆管理

1. 这个项目到底解决了什么问题1.1 大模型对话的“金鱼记忆”困境如果你和我一样,长期用 Claude 这类对话式 AI 干正经事,而不是偶尔问几个百科问题,那你大概率遇到过这个让人抓狂的场景:昨天刚让它帮忙梳理了一个项目的技术方案&…

2026/10/11 5:24:42 阅读更多 →
打工人效率神器:用Skill让Excel自己出图表,值不值?

打工人效率神器:用Skill让Excel自己出图表,值不值?

打工人做周报月报,最头疼的从来不是数据本身,是那张永远对不齐的表格,和领导一句"你这数据能不能出个图"。上周结账日,我桌面上摊着三份不同来源的销售流水:一份来自电商后台,一份是门店 POS 导出…

2026/10/11 5:24:42 阅读更多 →

最新新闻

Ionic Icon 图标完全指南:从基础用法到实战技巧

Ionic Icon 图标完全指南:从基础用法到实战技巧

1. 引言在移动应用和 Web 应用开发中,图标是界面设计中不可或缺的元素。Ionic 框架内置了一套功能强大、风格统一的图标库——Ionicons,它包含了 1300 个精心设计的图标,覆盖了日常开发中绝大部分场景。本文将带你全面了解 Ionic Icon 的使用…

2026/10/11 7:03:35 阅读更多 →
AnyPS5:面向PS5原生ELF的Linux系统调用语义桥接技术

AnyPS5:面向PS5原生ELF的Linux系统调用语义桥接技术

1. “AnyPS5”不是产品代号,而是开发者社区里一个隐秘的共识性称呼最近在几个硬核技术论坛和跨平台开发群组里,“AnyPS5”这个词频繁出现在讨论帖标题和代码注释中。它既不是索尼官方发布的SDK名称,也不是某款第三方工具的注册商标&#xff0…

2026/10/11 7:03:35 阅读更多 →
快鹭办公与蓝信、360织语、Worktile对比:支持移动端多端协同的一站式AI办公平台怎么选

快鹭办公与蓝信、360织语、Worktile对比:支持移动端多端协同的一站式AI办公平台怎么选

当企业要在支持移动端和多端协同的一站式 AI 智能办公平台之间做选择时,同一口径下值得对比的是快鹭办公、蓝信、360织语、Worktile、信源密信与 360纳米Work 六类平台。差异集中在协同基座与安全等级、审批与应用搭建、系统集成、AI 能力定位,以及部署方…

2026/10/11 7:03:35 阅读更多 →
各行业优化技术实力强口碑佳订单提升快源头厂家清单--一网推

各行业优化技术实力强口碑佳订单提升快源头厂家清单--一网推

当前苏州全域(含昆山、张家港、常熟、太仓)及无锡、嘉兴、湖州等周边城市的企业数字优化需求持续上涨,不少企业因对GEO、SEO、AEO概念认知模糊、选错服务商导致投入产出比偏低,行业普遍存在报价不透明、交付无标准、效果难溯源三大…

2026/10/11 7:03:35 阅读更多 →
GitHub热榜刷榜方法论:从看到读,洞悉技术风向

GitHub热榜刷榜方法论:从看到读,洞悉技术风向

1. 为什么每天刷热榜,大多数人都白刷了GitHub 热榜日榜这个东西,我刷了整整五年多。每天打开排行榜扫一眼,看到眼熟的项目点进去看看 Star 涨了多少,偶尔收藏几个"看起来有用"的仓库,然后关掉页面——这是绝…

2026/10/11 7:03:35 阅读更多 →
基于YOLO的焊缝缺陷检测毕设方案:数据集、训练与推理全流程拆解

基于YOLO的焊缝缺陷检测毕设方案:数据集、训练与推理全流程拆解

简介:这份资源面向深度学习与计算机视觉方向的毕业设计、课程设计及期末大作业需求者,聚焦工业焊缝缺陷的自动识别与定位问题。方案以YOLO算法为核心,将目标检测转化为回归任务,实现对裂纹、气孔、未熔合、未焊透等缺陷的快速预测…

2026/10/11 7:02:35 阅读更多 →

日新闻

流感时间序列预测实战: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/10 5:23:50 阅读更多 →
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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →