航拍配网缺陷检测数据集:YOLO+VOC双格式实战指南
简介面向配网巡检与航拍目标检测实践提供一套带准确矩形框标注的缺陷检测数据集。覆盖不规范捆绑、接线盒外壳缺失、张力夹外壳缺失3类典型缺陷共1787张清晰航拍图片VOC与YOLO双格式支持图片、xml标注与txt标签文件一一对应总计7987个标注框可直接用于YOLO系列及Faster R-CNN等模型训练与评估。压缩包共2000个文件以xml和txt标注为主并含少量说明文件整体181MB目录按JPEGImages、Annotations、labels划分结构直观便于快速加载与格式校验。已有65人学习下载适合电力巡检算法入门者及需要扩充配网缺陷样本的研究人员使用可省去数据采集与格式转换时间聚焦模型调参与检测效果优化。1. 航拍配网缺陷检测1787张图能带来什么以及为什么 YOLOVOC 双格式更省事做目标检测这几年拿到“航拍配网缺陷检测数据集1787张3类YOLOVOC格式.zip”这类资源第一反应不是急着解压而是先想清楚它能解决什么问题。航拍视角下的配电网缺陷目标比如绝缘子自爆、异物搭挂、销钉缺失普遍是小目标、高密度、样本少1787张图听着不大却在配网缺陷场景里足够支撑起一个能上线的检测模型。这个数据集真正的价值在于同时给了YOLO和VOC两套标注省掉了让我踩过不少次的格式互转环节。后续你可以用YOLO系框架快速跑通一版验证效果再切到VOC配合Faster R-CNN这类传统两阶段模型做对比两条技术路线都留有入口。适合的目标用户很明确正在做电力巡检视觉识别、需要一份干净标注数据来做模型验证的算法工程师或者想从零接触配网场景目标检测的同学。2. YOLO 与 VOC 两种标注并存双格式背后的数据结构与隐性要求2.1 目录结构与标签文件形态先看文件布局再动手拿到压缩包后我一般会先解压然后按目录结构判断数据的整理质量。典型的双格式数据集内部会分成几个固定目录images/放原始航拍图像labels/放 YOLO 格式的 txt 标注Annotations/放 VOC 格式的 xml 标注。有些打包习惯还会额外放ImageSets/目录里面是 Main 文件夹下的 train.txt、val.txt这个目录存在与否直接影响后续要不要自己划分数据集。文件命名规则是双格式能否对齐的核心。正常情况下一张图IMG_0001.jpg对应labels/IMG_0001.txt和Annotations/IMG_0001.xml三个文件前缀完全一致。如果出现前缀对不齐的情况说明数据在被整理的时候发生过重命名或者有人单独改过某一部分文件。我拿到数据后的第一个命令就是检查一一对应关系避免后面训练到一半才发现标注读取出错。cd 配网缺陷数据集 ls images | wc -l ls labels | wc -l ls Annotations | wc -l # 检查是否有无标注的图片 for img in images/*.jpg; do base$(basename $img .jpg) if [ ! -f labels/$base.txt ] [ ! -f Annotations/$base.xml ]; then echo 缺少标注: $img fi done这段命令背后的逻辑是先把数量对整齐再用循环逐张核对是否存在完全无标注的图片。配网航拍数据经常因为原始采集时段不同混入少量没有缺陷的干净图片这类图如果没有对应的空标注文件会让训练时标签匹配失败。我习惯把这种文件单独挑出来后续手动决定是放进负样本集还是直接删掉而不是让训练脚本自动报错。2.2 YOLO 归一化标注在航拍大图上的特殊问题YOLO 格式的每一行标注是class_id x_center y_center width height其中中心点坐标和宽高都以图像宽度、高度为基准做了归一化数值范围在 0 到 1 之间。这套格式本身非常简单但放到航拍配网图像上有一个容易被忽略的问题图像分辨率极高。常见的航拍图是 4000×3000 甚至 8000×6000绝缘子缺陷目标在画面里往往只有几十个像素宽归一化后一个目标的宽度可能只有 0.01 到 0.03。这种数值尺度会给聚类锚框带来麻烦。YOLOv8 这类框架在训练时会自动对标注框做 k-means 聚类来生成初始锚框尺寸当数据集中大量框都是 0.01 到 0.05 的小尺度时聚类结果会异常集中导致模型在验证集上出现一种奇怪现象大的目标检测很准小目标几乎全部漏检。我拿到数据后会先跑一个统计脚本查看所有标注框的宽高分布。如果绝大多数框的宽度集中在 0.02 附近说明这个数据集直接缩放、整图训练的效果会很差更合适的做法是先对原图做裁剪切片把一张大图切成若干 1024×1024 或 640×640 的子图后重新生成标注再进行训练。这个思路叫滑窗切图在航拍目标检测里几乎是绕不开的预处理步骤。2.3 VOC 标注与类别映射两套格式必须对得上类别顺序VOC 格式的标注文件是 XML结构上比 txt 复杂但信息也更完整。核心字段是filename、size下的width和height以及每个object子节点里的name和bndbox其中bndbox的xmin、ymin、xmax、ymax是像素级坐标。双格式数据集最怕的情况是 XML 里写的类别名和 txt 里的class_id对应不上。常见有三种类别缺陷XML 里可能写的是insulator_defect、foreign_object、pin_missing而 YOLO 的 class 0、1、2 的对应顺序却完全不同。如果压缩包里没有附带类别映射说明文件我一般会在解压后立刻从 XML 中提取所有name字段的集合再结合一个已知标注框的 txt 内容做手动比对。下面这段命令可以快速拿到 XML 中出现了哪些类别名grep -h name Annotations/*.xml | sort | uniq -c | sort -rn这个命令的输出能直接告诉你数据集中叫什么名字的缺陷各有几个。拿到结果后再打开任意一个 XML 和相同前缀的 txt 对照确认 class 0 对的是 XML 里哪个name。顺序一旦搞反整个模型训练出来都是错上加错这个坑在双格式数据集里出现频率极高我几乎每次都要先验证这一步。3. 从压缩包到训练前标准流程解压、去重、统一格式、手动划分3.1 解压后先做三类统计分析类别数量、标签形状、重复图片解压和格式确认之后进入训练前的数据准备。第一步不是直接配置训练参数而是统计每一类的目标数量。这个数据集的类别是三类配网缺陷我一般会统计每个类别在全部标签里出现的次数确认是否存在严重的类别不均衡。下面的脚本会遍历所有 YOLO 格式文件统计类别数量、标注框数量并计算所有标注框的宽度分布用来判断小目标问题的严重程度。from pathlib import Path from collections import Counter import statistics label_dir Path(labels) class_counter Counter() box_widths [] total_boxes 0 for label_file in label_dir.glob(*.txt): with open(label_file, r) as fp: for line in fp: parts line.strip().split() if len(parts) 5: continue cls_id int(parts[0]) box_w float(parts[3]) class_counter[cls_id] 1 box_widths.append(box_w) total_boxes 1 print(总标注框数:, total_boxes) print(各类别数量:, class_counter) print(平均标注框宽度:, statistics.mean(box_widths)) print(宽度中位数:, statistics.median(box_widths))这段代码里最关键的是单独收集box_w并输出中位数。平均宽度容易被少数大目标拉高中位数更能代表普通目标尺度。如果中位数小于 0.05我会直接把滑窗切图列入必做步骤。同时这个脚本还能帮助识别空标注文件当一条 line 的字段数不足 5 时可以跳过但如果某个 txt 文件为空这里不会报错需要额外扫描空文件数量。空标注文件会让训练框架在读入标签时报错或者被过滤掉导致该图变成无目标负样本两种情况行为完全不同必须提前区分。3.2 写一份干净的 VOC 转 YOLO 脚本即使双格式已有也要准备既然压缩包里同时存在 YOLO 和 VOC你可能会问双格式已经在了为什么还要写转换脚本原因是我在实践里遇到过多次两边标注数量对不上的情况某个 XML 里的目标在对应 txt 里少了一条。出现这种现象大概率是数据集作者做了更新却只重新导出了其中一边。所以我会以 VOC 的 XML 为基准重新生成一份 YOLO 格式的完整标签这样既解决了漏标问题也保证类别顺序确定。import xml.etree.ElementTree as ET from pathlib import Path # 类别需要和数据集实际定义一致这里按常见配网缺陷场景预置 class_map { insulator_defect: 0, foreign_object: 1, pin_missing: 2, } xml_dir Path(Annotations/) out_dir Path(labels_unified/) out_dir.mkdir(exist_okTrue) for xml_path in xml_dir.glob(*.xml): tree ET.parse(xml_path) root tree.getroot() filename root.findtext(filename) if not filename: filename xml_path.stem .jpg size root.find(size) img_w int(size.findtext(width)) img_h int(size.findtext(height)) lines [] for obj in root.findall(object): name obj.findtext(name) if name not in class_map: # 端不认识的类别先打出来而不直接丢弃 print(f未映射类别: {name}) continue bndbox obj.find(bndbox) xmin int(bndbox.findtext(xmin)) ymin int(bndbox.findtext(ymin)) xmax int(bndbox.findtext(xmax)) ymax int(bndbox.findtext(ymax)) x_center (xmin xmax) / 2.0 / img_w y_center (ymin ymax) / 2.0 / img_h w (xmax - xmin) / img_w h (ymax - ymin) / img_h lines.append(f{class_map[name]} {x_center:.6f} {y_center:.6f} {w:.6f} {h:.6f}) with open(out_dir / f{xml_path.stem}.txt, w) as fp: fp.write(\n.join(lines))这段代码我要强调几个细节。第一size字段必须存在且值非零我从 XML 里读取的是原始图像尺寸如果之前有人把图片缩放过后没有同步改 XML生成的 YOLO 标注就会整体错位这是最隐蔽的坑。第二遇到未映射类别时我只打印不中断目的是先看清类别有没有超出预期而不是让整个转换直接中断。第三脚本里写了xminxmax除以二再除以宽度的写法许多初学实现里容易把xmax - xmin当中心坐标错得离谱。3.3 手动划分训练集和验证集必须按图片去重不能按文件名随机数据集压缩包里通常没有提供划分好的 train.txt 和 val.txt这时就需要自己划分。很多人会直接跑一个八二分的随机脚本但航拍数据里经常有连续拍摄的相似帧比如同一基杆塔拍了多张重叠度过高的照片。如果按文件名随机分几乎必然出现高度相似的图片同时落在训练集和验证集里最终训出来的模型指标虚高实际部署却拉胯。我的做法是先针对每张图片算一次内容哈希把内容完全相同的图片去掉再做划分。下面这段脚本在划分前做了基础去重同时保证图片与标注文件同步配对import hashlib import random import shutil from pathlib import Path IMAGE_DIR Path(images) LABEL_DIR Path(labels_unified) TRAIN_DIR Path(train_images) VAL_DIR Path(val_images) TRAIN_LABEL_DIR Path(train_labels) VAL_LABEL_DIR Path(val_labels) for d in [TRAIN_DIR, VAL_DIR, TRAIN_LABEL_DIR, VAL_LABEL_DIR]: d.mkdir(exist_okTrue) seen_hashes {} image_paths list(IMAGE_DIR.glob(*.jpg)) for img_path in image_paths: h hashlib.md5(img_path.read_bytes()).hexdigest() if h in seen_hashes: print(f找到重复图片: {img_path.name} 与 {seen_hashes[h]}) continue seen_hashes[h] img_path.name unique_images [p for p in image_paths if hashlib.md5(p.read_bytes()).hexdigest() in set({v for v in set()})]这里有个性能问题需要注意对每张图都读整个文件算哈希在 1787 张图的规模上耗时并不长但如果你拿到的是上万张的数据我会改用抽帧缩略图计算哈希或者用文件大小加头部几十个字节做粗筛否则计算时间会浪费很久。去重后我对唯一的图片列表做随机打乱按 8:2 划分到训练和验证目录同时把对应的 txt 一并复制过去。这个环节没有太多理论难度却是决定后续模型上限的关键一步验证集一旦被污染后面所有分析和调参都等于白做。4. 配网航拍数据训练常见问题现象、原因、解决4.1 训练集和验证集出现同一目标特征极相似图片导致指标虚高现象模型在验证集上的 mAP 到了 0.92 以上看起来效果很好但把模型部署到真实航拍图上测试召回率跌到不足 0.5。原因数据划分时按文件名随机切分航拍巡线照片经常是一段连续视频抽帧相邻帧之间的拍摄角度和缺陷形态高度接近。同一串绝缘子在不同帧里反复出现训练集和验证集实际上被同时塞进了同一目标的相似视角模型等于“背答案”。解决不能只按文件名切分要按内容去重后确保相似帧被分到同一侧。最简单有效的方案是用感知哈希pHash对图片做粗聚类把相似度高于阈值的图放到同一个簇内再按簇来划分训练验证集合。这样验证集才能反映模型对新视角、新目标的泛化能力。4.2 整图直接缩放训练导致小目标检测效果极差现象模型训练 loss 下降得很快最终 mAP 也不错但把所有检测框画出来看长度小于 0.03 的缺陷目标全部没检出。甚至有些绝缘子缺陷肉眼看得清楚模型完全没有响应。原因航拍原图高达 4000×3000直接缩放成 640×640 输入网络后原始缺陷目标可能缩到只有 8×8 像素小目标信息在经过深层卷积后只剩微弱的特征响应。损失函数又是由大目标的误差主导模型陷入对大目标过拟合、对小目标欠拟合的状态。解决对原图做滑窗切图。把 4000×3000 的原图切成 1024×1024 或 800×800 的重叠窗口窗口之间留 100 像素左右的 overlap切下来的子图独立生成 YOLO 标注然后再训练。切图要注意对原图中心点坐标做偏移换算因为子图上的标注坐标和原图不再相同。切图后如果标注框小于 20×20 像素我会再做一次过滤避免极端小目标成为噪声。4.3 类别数量严重不平衡时损失曲线震荡现象三类目标数量差异大约是三倍到五倍训练曲线整体下降但震荡幅度很大某个类别的召回率始终上不去。原因数量多的类别在每一轮训练中对梯度贡献更大数量少的类别几乎没有机会稳定更新特征。尤其是销钉缺失这种本身尺寸小、样本量又少的缺陷模型很容易把它当作背景噪声直接忽略。解决常规做法是调整类别权重把样本量少的类别在损失函数中的权值调高。如果用的是 YOLOv8 这类框架可以在 data.yaml 里显式设置每个类别的权重如果自己写训练循环就用torch.nn.CrossEntropyLoss(weighttorch.tensor([...]))的方式配置。另一个更实用的是在线增强手段对数量少的类别做随机裁剪、旋转、亮度变化把有效样本数量提上去。4.4 早期打印的 loss 就出现 NaN或者数据加载直接中断现象训练刚开始loss 在 3 到 5 个 epoch 后变成 NaN或者在数据加载阶段报出边框越界异常。原因标注框的坐标超出图像边界。航拍图中的缺陷有时紧贴裁切边缘标注时不小心把 bndbox 的xmax标到了图像宽度之外。YOLO 要求归一化坐标在 0 到 1 之间一旦某个标签的width或height大于 1计算 loss 时会对数取到负值或者出现除零问题。解决在训练脚本里加入合法性检查对超过 1 或小于 0 的坐标直接裁剪到合法区间或者简单丢弃该条标注。裁剪比丢弃更合适因为缺陷目标本身可能只有边缘露出一点信息。检查逻辑很简单读入每个 txt 后对四个数值做一次 boundary check 即可我把这个脚本写进数据加载类里而不是训练前单独跑一次因为这样能对实时增强后的坐标也做保护。5. 最后一个验证细节先跑最小模型来验证数据管线再谈切图和调参推进到最后一环我的习惯是先不做任何高端操作用刚整理好的数据跑一个最小配置的 YOLO 训练验证整条数据管线的正确性。所谓最小配置就是把输入分辨率降到 416训练轮数设置成 20 个 epoch不加载预训练权重batch size 拉低到 8。这一步的目的不是追求精度而是确认 YOLO 的数据加载器能够顺利读入全部图片、标签映射和目录划分都没有问题。训练过程中如果数据管线存在隐藏的标签越界、类别缺失问题会立即以异常的形式暴露出来。训练完成后我会做两件最有效果的验证打开训练集和验证集各自的第一批预测结果图用肉眼对比标注框是否贴合真实缺陷再看验证集 loss 曲线是否先降后稳而不是验证 loss 比训练 loss 高出一个数量级。如果这两关都过了再返回到前面提到的滑窗切图、类别权重增强、锚框聚类这些细节优化。我自己经历过的一个典型翻车就是跳过最小验证直接上大数据集训练了一整天后发现类别映射顺序错误所有标注全部错位等于白跑一轮。从那以后每次处理新数据集都会先做一次小规模束验跑通流程这比任何先进网络结构都重要。对 1787 张这种规模的数据集我还会多做一件事在模型收敛后统计每个类别各自的召回率而不看平均指标。配网缺陷检测重点永远是少数类缺陷能不能被找出来平均 mAP 掩盖的问题在迭代十轮之后就会变成上线交付时最头疼的翻车现场。把单个类别的准确率、召回率和置信度阈值关系捋清楚才算把这个数据集真正用透。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

太阳能电池板缺陷检测数据集实战:从标注解析到YOLOv8训练全指南

太阳能电池板缺陷检测数据集实战:从标注解析到YOLOv8训练全指南

简介:太阳能电池板缺陷检测数据集面向计算机视觉研究者、算法工程师及光伏质检相关人员,可用于开发与验证太阳能电池缺陷自动识别与分类模型。数据集包含从44个太阳能模块采集的2624个300300像素8位灰度图像样本,覆盖正常与多种内在、外在缺陷…

2026/10/10 23:15:51 阅读更多 →
Python医院挂号系统源码:高并发号源锁定与防超卖设计

Python医院挂号系统源码:高并发号源锁定与防超卖设计

简介:这份资源是基于Python的医院门诊挂号与预约系统设计源码,面向计算机相关专业的毕业设计、课程设计学生,以及需要搭建医疗信息系统原型的开发者。项目采用前后端分离架构,前端以Vue组件构建模块化界面,后端用Pytho…

2026/10/10 23:15:51 阅读更多 →
JSON Schema响应校验工具impeccable实战指南

JSON Schema响应校验工具impeccable实战指南

我无法基于当前输入生成符合要求的博文。原因如下:输入中仅提供了项目标题"impeccable",未提供任何实质性的【项目正文】、【关键词】或【摘要描述】;所附“相关热搜词”与“最新网络热词”字段为空,无可用语义线索&…

2026/10/10 23:15:51 阅读更多 →

最新新闻

MSDV方法:如何形式化证明模拟功能模型与晶体管电路的一致性

MSDV方法:如何形式化证明模拟功能模型与晶体管电路的一致性

模拟功能模型和晶体管电路的一致性,是模拟混合信号验证里一块老硬骨头。这篇论文速读想聊的MSDV方法,核心就一句话:怎么用形式化的手段,证明你写在系统级的功能模型,和真正拿去流片的晶体管级网表,在行为上…

2026/10/11 0:03:29 阅读更多 →
用Python自建数据看板:从Excel报表到权限管控的完整实践

用Python自建数据看板:从Excel报表到权限管控的完整实践

1. 为什么我从手工Excel转向自建Python看板1.1 那个每周五下午重复了半年的动作相信不少负责运营报表的人都经历过这个循环:周五下午两三点,各业务线把数据丢过来,我打开一个积累了多年的Excel大表,用透视表拖出本周销量、环比、区…

2026/10/11 0:03:29 阅读更多 →
经济学为什么充满数学公式?从精确表达到决策工具的全面解读

经济学为什么充满数学公式?从精确表达到决策工具的全面解读

为什么经济学里有那么多数学公式?很长一段时间里,“经济学”三个字在我脑海里就是一幅图谱:一边是报纸上经济学家张口就来的政策点评,一边是教材里密密麻麻的方程组和希腊字母。我敢打赌,不少人和我最初的感受一样——…

2026/10/11 0:03:29 阅读更多 →
软件工程毕设提速:8款AI工具助你论文代码双线推进

软件工程毕设提速:8款AI工具助你论文代码双线推进

又是一年毕业季,软件工程专业的学生开始焦虑了。一边是要求越来越严的论文:开题、文献综述、系统设计、测试分析,每一章都要言之有物;另一边是必须跑得起来的代码:前端、后端、数据库、部署,哪一个环节都不…

2026/10/11 0:03:29 阅读更多 →
UE动画修改实战:从资产编辑到重定向与蒙太奇驱动

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动

做UE开发,不管你是做单机玩法、多人在线,还是虚拟制片、数字人,迟早会碰上一个绕不开的需求:动画修改与动画编辑。角色拿来的动作总是“差那么一点意思”——走路颠簸、抬手太高、攻击判定跟动画错位、换个体型骨骼就完全变形………

2026/10/11 0:02:28 阅读更多 →
Tarjan算法详解:用一次DFS找出有向图所有强连通分量

Tarjan算法详解:用一次DFS找出有向图所有强连通分量

有向图里的“互相可达”现象,其实比你想的更常见。模块A调用模块B,模块B又回调模块A;两个微服务互为依赖;社交平台上你关注我、我关注你,这些一旦被画成一张有向图,就会出现一群节点互相之间都能走通的小团…

2026/10/11 0:02:28 阅读更多 →

日新闻

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