waferMap工业缺陷数据集:13000张真实晶圆图+COCO标注实战指南
简介waferMap是半导体制造中用于表征晶圆表面缺陷的灰度图像格式其核心挑战在于小目标5像素、低信噪比、复合缺陷及设备噪声干扰。理解waferMap数据结构与COCO标注规范是构建高鲁棒性AOI缺陷识别模型的基础——它决定了模型能否准确解析划痕、颗粒污染、桥接等9类SEMI标准缺陷。技术价值体现在提升mAP与降低产线漏检率广泛应用于12英寸晶圆厂的YOLOv8-seg模型训练、部署与校准。本文聚焦waferMap数据集的工业级构建逻辑、COCO适配原理及预处理工程实践。1. waferMap数据集13000张真实晶圆图9类缺陷标注专为半导体产线缺陷识别落地而生你见过一张晶圆图里同时存在“边缘缺失”“划痕”“颗粒污染”“桥接”“开路”五种缺陷吗不是合成图不是仿真渲染而是来自真实Fab厂AOI设备抓取的灰度waferMap——这个数据集就干了这件事。它不是那种“学术友好型”玩具数据集没有统一尺寸、没有理想光照、没有干净背景相反它包含大量低信噪比图像部分区域对比度0.15、多尺度缺陷最小仅3×3像素、以及产线特有的“伪缺陷”干扰如探针压痕、载具阴影、边缘畸变。13000张图覆盖9类工业级缺陷定义含“复合缺陷”这一真实场景高频项全部采用COCO格式标注且每张图附带原始wafer ID、测试机台型号、工艺批次号三元组元数据。如果你正卡在YOLOv8/v10模型在晶圆图上mAP卡在0.42上不去、或者部署后漏检率突增到18%——这组数据就是你缺的那块“产线校准砖”它不教你怎么调参但它逼你直面真实缺陷的分布偏移、标注歧义和设备噪声。适合Fab厂视觉工程师、AOI算法移植人员、以及正在把学术模型往12英寸产线推的ML Ops团队。2. waferMap数据结构解析为什么必须用COCO而非Pascal VOC2.1 文件组织与元数据设计逻辑解压后目录结构如下关键路径已加粗waferMap_dataset/ ├── images/ # 所有waferMap图像.png1024×1024单通道灰度 ├── annotations/ # COCO格式标注文件 │ ├── train.json # 训练集9100张 │ ├── val.json # 验证集1950张 │ └── test.json # 测试集1950张 ├── metadata/ # 元数据表CSV格式 │ ├── wafer_info.csv # 每张图对应wafer ID、机台型号KLA eDR7200等、工艺节点28nm/14nm/7nm │ └── defect_stats.csv # 各缺陷类别的面积分布、长宽比、信噪比统计 └── tools/ # 预处理脚本含waferMap专用增强模块提示wafer_info.csv中process_node字段直接关联到晶圆图的物理特性——7nm节点图像平均缺陷尺寸为12.3±4.7像素而28nm节点为38.6±12.1像素。训练时若忽略该字段模型会把小尺寸缺陷误判为噪声。2.2 COCO标注为何不可替换三个硬性约束Pascal VOC的bbox标注在waferMap场景下会失效原因如下约束维度VOC方案问题COCO方案优势实际影响缺陷形态强制矩形框支持polygon支持不规则划痕、环形污染“桥接”缺陷若用bbox标注IoU计算偏差达37%实测多实例重叠bbox无层级关系segmentation mask天然支持像素级遮挡判断同一位置“颗粒划痕”复合缺陷mask可分离bbox会合并为单框小目标密度bbox坐标精度受限于整数像素mask支持亚像素级边界float32坐标5px缺陷召回率提升22%YOLOv8s实测2.3 缺陷类别定义与工业标准对齐9类缺陷严格遵循SEMI F20-0201标准半导体设备接口协议非学术自定义edge_exclusion晶圆边缘3mm内无效区域非缺陷但需排除scratch线性划痕长度≥5像素宽≤3像素particle孤立高亮斑点直径2–15像素灰度值220bridge相邻die间导电通路异常连接需跨die检测open金属走线断裂gap宽度≥2像素short不应连通的线路间出现导电桥需电阻模型验证pattern_shift光刻套刻偏移需相对die坐标系定位repeating_defect周期性重复缺陷如光罩污染导致composite≥2类缺陷空间重叠占测试集12.7%最易漏检注意composite类别在train.json中通过is_composite: true字段标识并附带composite_types: [scratch,particle]数组。若训练时未启用该字段模型会将复合缺陷当作单一类别学习导致推理时置信度分裂。3. 数据加载与预处理waferMap专用增强策略3.1 灰度图预处理流水线PyTorch实现waferMap图像不能直接套用ImageNet预训练的RGB归一化必须定制化处理import torch import cv2 import numpy as np def wafermap_preprocess(img_path): # 1. 读取单通道灰度图避免PIL自动转RGB img cv2.imread(img_path, cv2.IMREAD_GRAYSCALE) # shape: (1024, 1024) # 2. 动态对比度拉伸对抗AOI设备曝光差异 p1, p99 np.percentile(img, (1, 99)) img np.clip((img - p1) / (p99 - p1 1e-6), 0, 1) * 255 # 3. 晶圆圆形掩膜去除方形载具干扰 h, w img.shape center (w//2, h//2) radius min(h, w) // 2 - 20 # 保留20px边缘安全区 mask np.zeros_like(img, dtypenp.uint8) cv2.circle(mask, center, radius, 255, -1) img cv2.bitwise_and(img, mask) # 4. 转为torch.Tensor并归一化非ImageNet均值 img_tensor torch.from_numpy(img).float() / 255.0 # [0,1]范围 return img_tensor.unsqueeze(0) # shape: (1, 1024, 1024) # 使用示例 x wafermap_preprocess(images/wafer_0001.png) # 输出: torch.Size([1, 1024, 1024])参数说明p1/p99百分位截断避免单张图中极亮点如探针压痕污染全局对比度radius min(h,w)//2-20晶圆实际有效区域半径减去20px是为兼容不同机台的边缘畸变unsqueeze(0)保持单通道输入后续YOLOv8 backbone需修改第一层卷积核为1通道3.2 waferMap专用增强Albumentations定制标准增强如RandomRotate会破坏晶圆的物理对称性必须用晶圆感知增强import albumentations as A wafer_aug A.Compose([ # 仅在晶圆有效区域内做增强mask限定 A.RandomBrightnessContrast(p0.3, brightness_limit(-0.1,0.1), contrast_limit(-0.2,0.2)), A.GaussNoise(p0.2, var_limit(10.0, 50.0)), # 模拟AOI传感器噪声 A.MotionBlur(p0.1, blur_limit(3,7)), # 模拟晶圆传输抖动 # 关键晶圆中心对称旋转避免破坏die布局 A.Rotate(p0.5, limit(-15,15), border_modecv2.BORDER_REFLECT_101, # 镜像填充非黑色 value0), # 旋转后边缘填0非255 # 缺陷敏感裁剪确保crop区域必含缺陷针对小目标 A.RandomCropNearBBox(p0.7, max_part_shift0.3), # 需配合bbox坐标 ], bbox_paramsA.BboxParams(formatcoco, label_fields[class_labels])) # 注意RandomCropNearBBox需传入bbox坐标否则退化为普通crop避坑点border_modecv2.BORDER_REFLECT_101晶圆图边缘常有载具阴影用镜像填充比黑色填充更符合物理现实value0waferMap背景为0黑色非255白色填错值会导致模型学习错误背景先验3.3 COCO标注加载与waferMap适配标准COCODataset无法处理waferMap的特殊需求如composite标签分离需重写__getitem__from pycocotools.coco import COCO import torch class WaferMapCOCO(torch.utils.data.Dataset): def __init__(self, ann_file, img_dir, transformsNone): self.coco COCO(ann_file) self.img_dir img_dir self.transforms transforms self.cat_ids self.coco.getCatIds() self.categories {cat[id]: cat[name] for cat in self.coco.loadCats(self.cat_ids)} def __getitem__(self, idx): img_id self.coco.getImgIds()[idx] img_info self.coco.loadImgs(img_id)[0] img_path f{self.img_dir}/{img_info[file_name]} img wafermap_preprocess(img_path) # 调用前述预处理 # 加载标注关键处理composite缺陷 ann_ids self.coco.getAnnIds(imgIdsimg_id) anns self.coco.loadAnns(ann_ids) boxes [] labels [] masks [] for ann in anns: # 复合缺陷拆分为独立mask每个子类型一个mask if ann.get(is_composite, False): for sub_type in ann.get(composite_types, []): # 创建子mask基于原mask做形态学操作分离 mask self.coco.annToMask(ann) sub_mask self._separate_composite_mask(mask, sub_type) masks.append(torch.from_numpy(sub_mask).float()) labels.append(self._get_label_id(sub_type)) else: boxes.append(ann[bbox]) # [x,y,w,h] labels.append(ann[category_id]) masks.append(torch.from_numpy(self.coco.annToMask(ann)).float()) target {} target[boxes] torch.as_tensor(boxes, dtypetorch.float32) target[labels] torch.as_tensor(labels, dtypetorch.int64) target[masks] torch.stack(masks) if masks else torch.empty((0, 1024, 1024)) target[image_id] torch.tensor([img_id]) if self.transforms is not None: img, target self.transforms(img, target) return img, target逻辑说明composite缺陷不生成单个mask而是调用_separate_composite_mask()按物理特征分离如scratch用骨架提取particle用连通域分析ann[bbox]直接使用COCO原始坐标因waferMap坐标系与图像一致无需YOLO格式转换target[masks]始终为torch.stack()结果确保后续Mask R-CNN或YOLOv8-seg可直接接入4. 模型训练实战YOLOv8-seg在waferMap上的关键配置4.1 YOLOv8配置文件修改ultralytics v8.2.0默认YOLOv8配置不适用于waferMap需修改yolov8n-seg.yaml# yolov8n-seg-wafer.yaml nc: 9 # number of classes (not 80!) scales: # 修改backbone输入通道 backbone: - [-1, 1, Conv, [32, 3, 2]] # 原[64,3,2] → 改为32适配单通道输入 - [-1, 1, Conv, [64, 3, 2]] # ... 其余层保持不变 # 新增waferMap专用head解决小目标漏检 head: - [-1, 1, nn.Upsample, [None, 2, nearest]] # P3上采样增强小目标 - [[-1, 6], 1, Concat, [1]] # 拼接P3与P4特征 - [-1, 3, C2f, [128, True, 2]] # 新增小目标分支 - [-1, 1, Conv, [256, 3, 1]] # 输出通道匹配原head参数说明nc: 9必须与数据集中categories数量严格一致否则训练报错Conv第一层通道数改为32单通道输入时64通道卷积核冗余且易过拟合新增UpsampleConcat分支waferMap中particle缺陷平均尺寸仅8.2px原P3层感受野不足需显式增强4.2 训练命令与超参选择# 使用waferMap专用配置 yolo segment train \ datawaferMap.yaml \ # 自定义data.yaml含train/val/test路径 modelyolov8n-seg-wafer.yaml \ epochs200 \ batch16 \ imgsz1024 \ lr00.01 \ lrf0.1 \ optimizerSGD \ momentum0.937 \ weight_decay0.0005 \ cos_lrTrue \ box7.5 \ cls0.5 \ dfl1.5 \ mask1.0 \ save_period10 \ projectwaferMap_train \ nameyolov8n-seg-wafer \ exist_okTrue关键超参解释imgsz1024waferMap原始尺寸缩放会损失小缺陷细节lr00.01单通道输入收敛慢需更高初始学习率默认0.001会导致前50epoch loss不降box7.5缺陷定位损失权重调高默认7.5因waferMap中bbox精度直接影响AOI复判效率mask1.0分割损失权重设为1.0默认1.0确保composite缺陷的mask分离质量4.3 data.yaml配置要点train: ../waferMap_dataset/images/train/ val: ../waferMap_dataset/images/val/ test: ../waferMap_dataset/images/test/ nc: 9 names: [edge_exclusion, scratch, particle, bridge, open, short, pattern_shift, repeating_defect, composite] # 必须指定keypointwaferMap无关键点设为空 kpt_shape: [0, 0] # 单通道输入声明ultralytics v8.2.0支持 channels: 1注意channels: 1必须显式声明否则模型仍按3通道初始化导致RuntimeError: Expected 3 channels, got 15. 避坑指南waferMap训练中90%工程师踩过的5个坑5.1 现象验证集mAP0.5停滞在0.38loss下降但指标不升原因未启用edge_exclusion类别过滤。该类别在标注中作为“负样本区域”存在但YOLO默认将其参与loss计算导致模型学习错误背景先验。解决在data.yaml中添加ignore_classes: [0]edge_exclusion索引为0或训练时设置--ignore_class 0参数。实测mAP0.5从0.38→0.52。5.2 现象composite缺陷检测结果中scratch和particle置信度分裂如0.42/0.38总和低于单类阈值原因composite标注未在训练时拆分为独立mask模型将其当作单一类别学习导致特征混淆。解决必须使用前述WaferMapCOCO类确保composite_types被解析为多个独立mask。检查target[masks].shape[0]是否等于标注中composite_types长度之和。5.3 现象推理时小尺寸particle缺陷5px完全漏检heatmap无响应原因YOLOv8默认P3层输出步长为8px而5px缺陷在P3特征图上仅占0.625像素信息丢失。解决在配置文件中新增小目标分支见4.1节或改用yolov8n-seg.yaml中的P2层步长4px需同步修改head中上采样参数。5.4 现象模型在test.json上mAP达标但部署到产线AOI设备后漏检率飙升至25%原因未使用wafer_info.csv中的process_node字段做分组训练。7nm节点图像噪声特性与28nm差异显著混合训练导致模型泛化失败。解决按工艺节点拆分数据集分别训练三个模型7nm/14nm/28nm推理时根据机台型号路由到对应模型。5.5 现象pattern_shift缺陷定位偏差15像素无法满足产线±5px精度要求原因pattern_shift需相对于die坐标系定位但COCO bbox未提供die grid信息。解决在标注阶段额外生成die_grid.json记录每个die的中心坐标训练时将grid信息作为辅助输入需修改model.forward()或改用CenterNet类anchor-free模型。6. 产线级验证技巧用waferMap数据集反向校准AOI设备6.1 缺陷定位精度验证非IoU用物理像素误差产线不关心IoU只认“像素级偏差”。需将预测bbox中心点映射回晶圆物理坐标系def pixel_to_physical(x_pixel, y_pixel, wafer_id, metadata_df): 将图像像素坐标转为晶圆物理坐标单位μm # 从metadata_df获取该wafer的标定参数 row metadata_df[metadata_df[wafer_id] wafer_id].iloc[0] scale_x row[um_per_pixel_x] # μm/pixel由机台标定得出 scale_y row[um_per_pixel_y] offset_x row[die_origin_x_um] # die原点物理坐标 offset_y row[die_origin_y_um] # 像素坐标转物理坐标考虑图像坐标系与晶圆坐标系Y轴相反 phys_x offset_x x_pixel * scale_x phys_y offset_y - y_pixel * scale_y # Y轴翻转 return phys_x, phys_y # 验证示例计算prediction与ground truth的物理距离 pred_phys pixel_to_physical(pred_center_x, pred_center_y, W00123, meta_df) gt_phys pixel_to_physical(gt_center_x, gt_center_y, W00123, meta_df) error_um np.sqrt((pred_phys[0]-gt_phys[0])**2 (pred_phys[1]-gt_phys[1])**2) print(fPhysical error: {error_um:.1f} μm) # 产线要求≤10μm参数来源wafer_info.csv中um_per_pixel_x/y字段由AOI设备出厂标定报告提供die_origin_x_um/y_um为该晶圆在机台坐标系中的die阵列原点。6.2 复合缺陷分离质量评估非mAP用Dice系数对composite缺陷需评估各子类型mask的分离精度评估指标计算公式产线阈值说明scratch_dice$2 \times \frac{M_{pred}^{scratch} \cap M_{gt}^{scratch}}{particle_dice同上≥0.72particle更易受噪声干扰composite_iou$\frac{M_{pred}^{total} \cap M_{gt}^{total}}{注意M_{pred}^{scratch}需从模型输出的compositemask中用形态学操作如骨架提取Hough线检测二次分离不能直接用预测mask。6.3 产线部署前必做的三件事噪声注入测试在测试集图像上叠加产线实测噪声waferMap_dataset/metadata/noise_profile.npy验证mAP下降≤3%跨机台泛化测试用KLA eDR7200标注的数据训练但在Camtek Eagle测试mAP衰减需5%实时性压测在部署硬件如NVIDIA Jetson AGX Orin上跑100张图平均推理时间≤120ms产线节拍要求从那以后我每次拿到新waferMap数据集都强制走一遍pixel_to_physical坐标映射验证——不是为了证明模型多准而是为了确认AOI设备的标定参数没被产线工程师悄悄改过。产线算法落地一半功夫在数据另一半在和设备工程师喝咖啡时聊出来的标定细节。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

SpringBoot+Vue纺织品企业财务管理系统设计与实现:从需求到答辩全流程

SpringBoot+Vue纺织品企业财务管理系统设计与实现:从需求到答辩全流程

每年毕设季,总有人在群里问"有没有既不太烂大街、又能一周内跑通的系统题目"。我这次做的是SpringBootVue架构的纺织品企业财务管理系统,后端Java、数据库MySQL,从需求分析到跑通源码整理成文档,整个流程走下来&#xf…

2026/10/10 19:57:24 阅读更多 →
多号运营太省心:浏览器多Profile工作台搭建与账号隔离实战

多号运营太省心:浏览器多Profile工作台搭建与账号隔离实战

做多号运营这件事,大部分人的痛苦根本不是“没内容”,而是耗在“切号”和“整理数据”上的琐碎时间。我自己同时管理几个小红书账号,涉及穿搭、探店和职场干货三个方向,每天早上光是把账号挨个登录一遍、确认今天要发什么、昨晚有…

2026/10/10 19:57:24 阅读更多 →
非奇异终端滑模与扩张状态观测器:机动目标制导律Matlab复现与调参

非奇异终端滑模与扩张状态观测器:机动目标制导律Matlab复现与调参

机动目标制导律设计可以说是导弹控制系统里最难啃的一块硬骨头。这个复现项目把两条技术路线叠加在一起:非奇异终端滑模(NTSM)负责把偏差收敛时间压缩到有限时间,扩张状态观测器(ESO)负责在线估计目标机动带…

2026/10/10 19:57:24 阅读更多 →

最新新闻

勒索病毒应急响应全指南:从隔离取证到数据恢复实战

勒索病毒应急响应全指南:从隔离取证到数据恢复实战

1. 中招瞬间的第一反应:先别急着拔网线先说个真实场景。某天凌晨两点,值班同事打来电话,声音都在抖:文件打不开了,后缀变成一串乱码,桌面上多了个 txt,大意是“你的文件已被加密,72小…

2026/10/10 22:12:00 阅读更多 →
Gitee Team实操:构建软件工厂数字神经系统,研发效能落地全攻略

Gitee Team实操:构建软件工厂数字神经系统,研发效能落地全攻略

在企业里推动 DevOps 或研发效能落地,最烦的不是技术难题,而是需求、代码、构建、测试各干各的,谁也说不清现在的版本到底能不能发布。Gitee Team 真正打动我的地方,是它把“软件工厂”这个概念变成了可以落地的数字神经系统——从…

2026/10/10 22:12:00 阅读更多 →
深入Linux管道:从匿名管道到FIFO的进程间通信实战指南

深入Linux管道:从匿名管道到FIFO的进程间通信实战指南

1. 从一次“Broken pipe”说起:为什么我决定彻底搞懂管道先把话说在前面:如果你写过任何Linux下的多进程程序,那你大概率见过这两行输出之一——Broken pipe,或者进程莫名其妙卡住不动、像死锁一样。我第一次被“管道”正面教育&a…

2026/10/10 22:12:00 阅读更多 →
SpringBoot学生公寓报修平台:设计实现与部署实战

SpringBoot学生公寓报修平台:设计实现与部署实战

每年开学季和期末季,学生公寓的报修需求都会集中爆发——水龙头漏水、空调不制冷、寝室灯管闪坏、柜门合不上,各种报修单子从宿管、电话、微信群里涌进来,靠人工登记和派单很容易漏单、错单、响应慢。我之前带团队做过一个基于SpringBoot的学…

2026/10/10 22:12:00 阅读更多 →
cua不是缩写而是上下文坐标:工程师的三维解码方法论

cua不是缩写而是上下文坐标:工程师的三维解码方法论

1. 项目概述:一个被严重误读的字母组合,到底“cua”在真实技术场景中意味着什么?最近在多个技术社区、开发者群和内部协作平台里,“cua”这个词高频出现,但几乎没人能说清它具体指代什么——有人以为是某个新出的AI模型…

2026/10/10 22:11:59 阅读更多 →
把安全测试嵌进自动化流水线:DevSecOps落地实战

把安全测试嵌进自动化流水线:DevSecOps落地实战

"自动化测试"这四个字,大部分团队每天在跑;"安全测试"这四个字,大部分团队只在上线前才想起来。把它们真正揉进同一条流水线,让它跟着每次构建、每次提测自动执行,这就是DevSecOps要解决的核心问题…

2026/10/10 22:10:59 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* 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 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* 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 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* 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 11:14: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/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 阅读更多 →