光伏板缺陷检测实战:数据集构建、YOLOv8模型训练与部署全链路
简介这份资源面向光伏运维、工业质检与AI算法学习者提供光伏板缺陷检测的完整数据集与配套模型覆盖裂纹、脏污、热斑、遮挡、破损等常见缺陷类型可直接对接YOLO等主流检测框架用于训练、验证与算法复现。压缩包为7z格式共2000个文件约43.16MB其中1626个txt标注文件、359张jpg与7张png图像构成训练与验证样本3个yaml负责数据与模型配置2个py脚本和2个pt权重文件支撑训练与推理另附1个csv记录训练过程指标。已有64人学习下载。读者可据此快速搭建缺陷检测流程理解标注格式与目录组织借助预置权重完成推理验证并参考训练曲线调整参数适合作为课程设计、科研实验或无人机巡检图像分析的实践起点。1. 光伏板缺陷数据集与模型从航拍到可复现检测链路屋顶光伏和地面电站的巡检现在越来越多靠无人机挂载可见光或红外相机拍一圈回来再跑缺陷检测。但真正动手的人会发现公开可用的光伏板缺陷数据集少得可怜标注质量参差不齐模型换一个电站就掉点。这个标题讲的就是把「数据集 模型 检测代码」这条链路打通数据从哪来、怎么标、模型选哪个、代码怎么跑、参数怎么调。适合两类人——手里有巡检图想跑检测的运维工程师以及想在这个方向做落地验证的算法同学。核心不是刷某个榜单而是让一套检测代码在你自己的电站图上能出结果、能复现、能迭代。2. 光伏板缺陷数据集来源、标注格式与清洗策略2.1 公开数据集盘点与自建数据的取舍光伏板缺陷检测的公开数据集常见的有基于红外热成像的也有可见光航拍的。红外数据集里缺陷表现为热斑标注相对容易因为热斑在灰度图上就是高亮区域可见光数据集里缺陷类型更多包括隐裂、断栅、污渍、鸟粪、二极管故障等标注难度大得多。我一般会先确认自己的相机类型如果只有可见光就别硬套红外数据集特征分布完全不一样。自建数据集是绕不开的路。一个中等规模电站无人机飞一遍大概能出几百到上千张图按 4:1 划分训练和验证再留一部分做测试。关键是标注规范要统一隐裂用多边形框污渍用矩形框断栅用细长矩形。标注工具用 LabelImg 或 CVAT 都行导出 YOLO 格式或 COCO 格式。这里有个血泪经验不同标注员对「污渍」和「阴影」的边界判断不一致最后模型学出来的框会飘。解决办法是标注前先定一份缺陷定义文档每类缺陷给 5 张典型图作为参照。提示自建数据集时同一块板的不同角度、不同光照至少各拍一张否则模型会把「拍摄角度」当成缺陷特征。2.2 标注格式转换与数据增强的实操YOLO 格式的标注是每张图一个 txt每行class_id x_center y_center width height坐标归一化到 0-1。COCO 格式是单个 json包含 images、annotations、categories 三个字段。如果你用 YOLOv5 或 YOLOv8 训练直接转 YOLO 格式最省事。下面是一个把 COCO 转 YOLO 的脚本片段import json import os from PIL import Image def coco2yolo(coco_json, img_dir, out_dir): with open(coco_json, r) as f: data json.load(f) # 建立 image_id 到文件名的映射 img_map {img[id]: img for img in data[images]} # 建立 category_id 到 0-based 索引的映射 cat_map {cat[id]: i for i, cat in enumerate(data[categories])} for ann in data[annotations]: img_info img_map[ann[image_id]] w, h img_info[width], img_info[height] # COCO 的 bbox 是 [x_min, y_min, width, height] x, y, bw, bh ann[bbox] x_center (x bw / 2) / w y_center (y bh / 2) / h nw, nh bw / w, bh / h line f{cat_map[ann[category_id]]} {x_center:.6f} {y_center:.6f} {nw:.6f} {nh:.6f}\n txt_path os.path.join(out_dir, img_info[file_name].replace(.jpg, .txt)) with open(txt_path, a) as f: f.write(line)这段代码的逻辑是遍历 COCO 的 annotations把每个框的绝对坐标转成归一化的中心点加宽高。参数上注意cat_map的索引要从 0 开始YOLO 的类别索引必须连续不能跳号。img_info[file_name]要和实际图片文件名一致否则训练时找不到标签。转换完建议抽查几张用可视化脚本把框画回图上确认没有偏移。数据增强方面光伏板缺陷检测里翻转和旋转是安全的因为板子方向不固定但颜色抖动要谨慎污渍和阴影的区分本来就靠颜色抖太狠会把污渍洗掉。Mosaic 增强对提升小目标检测有帮助但隐裂这种细长目标在拼接后可能被截断建议 Mosaic 概率不要开到 1.00.5 左右比较稳。2.3 数据集划分的坑别让同一块板同时出现在训练和验证集这是最容易翻车的地方。无人机巡检时同一块板可能拍了多张如果随机划分训练集和验证集里会有同一块板的不同角度图验证指标虚高实际部署时换一个电站就崩。正确做法是按「电站」或「巡检架次」划分同一块板的所有图只进一个集合。如果数据量实在不够至少按「拍摄时间」划分让验证集的图来自不同时段。另一个坑是负样本。很多数据集只标了有缺陷的板没标正常的板。模型没见过正常板会把正常板也框出缺陷。建议在训练集里加入 10%-20% 的正常板图片标注为空文件即可。YOLO 训练时空标签的图会被当作背景负样本能有效降低误检。3. 模型选型YOLOv8 还是轻量化方案参数怎么定3.1 为什么光伏板缺陷检测偏爱 YOLO 系列光伏板缺陷检测本质是目标检测任务缺陷目标小、长宽比极端隐裂是细长线对模型的感受野和多尺度融合要求高。YOLOv8 在速度和精度上比较均衡而且 Ultralytics 的代码封装好改数据集配置就能跑。如果部署在边缘设备上比如无人机机载或巡检机器人YOLOv8n 或 YOLOv8s 是常见选择参数量小推理快。如果只做离线分析YOLOv8m 或 YOLOv8l 能多拿几个点。选型时别只看 mAP。光伏板缺陷检测里漏检一个隐裂比误检一个污渍代价大得多所以召回率比精确率重要。调参时可以把置信度阈值调低比如 0.25让模型多出框再在后处理里过滤。下面是一个 YOLOv8 的训练配置片段# data.yaml path: ./pv_dataset train: images/train val: images/val test: images/test names: 0: crack 1: stain 2: broken_grid 3: bird_drop这个 yaml 里path是数据集根目录train/val/test是相对路径。names的顺序必须和标注时的类别索引一致否则模型学出来的类别会错位。训练命令用yolo detect train datadata.yaml modelyolov8s.pt epochs100 imgsz640 batch16。imgsz设 640 是默认值如果隐裂特别细可以提到 1024但显存占用会翻倍。batch根据显存调16 是 8G 显存的保守值。3.2 关键参数学习率、锚框与 NMS 阈值学习率用默认的 0.01 起步如果 loss 震荡就降到 0.001。YOLOv8 自带余弦退火一般不用手动调。锚框方面YOLOv8 是 anchor-free 的不需要聚类锚框但如果你用 YOLOv5就需要用kmeans重新聚类因为光伏板缺陷的长宽比和 COCO 差很远。NMS 阈值默认 0.7如果同一块板上有多个相邻缺陷NMS 会把它们合并这时候要调高到 0.8 或 0.9。注意训练时如果val的 mAP 一直不涨先检查标注有没有越界坐标小于 0 或大于 1YOLO 会直接忽略这些框导致某些类别学不到。3.3 轻量化与部署从 PyTorch 到 ONNX 再到边缘设备训练完的.pt模型要部署到边缘设备一般先转 ONNX。命令是yolo export modelbest.pt formatonnx opset12。opset选 12 兼容性比较好。转完后用onnxruntime推理速度比 PyTorch 快 20%-30%。如果设备支持 TensorRT再转一次 engine速度还能再提。但注意TensorRT 对动态 shape 支持有限如果输入尺寸固定转的时候要指定imgsz。轻量化方面YOLOv8n 在 Jetson Nano 上大概能跑到 10 FPS 左右够用。如果还不够可以剪枝或量化但量化后精度会掉需要重新在验证集上评估。我一般会保留两个模型一个高精度的离线分析用一个轻量的在线巡检用。4. 检测代码落地训练、推理与结果可视化4.1 训练脚本与日志监控Ultralytics 的训练入口很简单但生产环境里我习惯写一个包装脚本把超参、数据路径、输出目录都参数化。下面是一个训练脚本的骨架from ultralytics import YOLO import argparse def train(args): model YOLO(args.model) results model.train( dataargs.data, epochsargs.epochs, imgszargs.imgsz, batchargs.batch, lr0args.lr, patience20, # 20 轮不涨就早停 save_period10, # 每 10 轮存一次 projectargs.project, nameargs.name ) return results if __name__ __main__: parser argparse.ArgumentParser() parser.add_argument(--model, defaultyolov8s.pt) parser.add_argument(--data, defaultdata.yaml) parser.add_argument(--epochs, typeint, default100) parser.add_argument(--imgsz, typeint, default640) parser.add_argument(--batch, typeint, default16) parser.add_argument(--lr, typefloat, default0.01) parser.add_argument(--project, defaultruns/train) parser.add_argument(--name, defaultpv_exp) args parser.parse_args() train(args)patience20是早停验证集 20 轮不提升就停省时间。save_period10每 10 轮存一个 checkpoint防止训练中断丢进度。日志在runs/train/pv_exp下results.csv里有每轮的 loss 和 mAP用 pandas 读出来画曲线能直观看到有没有过拟合。4.2 推理脚本与批量处理推理时如果图片多别一张张跑用stream模式批量处理。下面是一个批量推理并保存结果的脚本from ultralytics import YOLO import os import cv2 def infer(model_path, img_dir, out_dir, conf0.25): model YOLO(model_path) os.makedirs(out_dir, exist_okTrue) for img_name in os.listdir(img_dir): if not img_name.endswith((.jpg, .png)): continue img_path os.path.join(img_dir, img_name) results model(img_path, confconf) # 把框画到图上 annotated results[0].plot() cv2.imwrite(os.path.join(out_dir, img_name), annotated) # 保存检测结果到 txt with open(os.path.join(out_dir, img_name.replace(.jpg, .txt)), w) as f: for box in results[0].boxes: cls int(box.cls) xyxy box.xyxy.tolist()[0] f.write(f{cls} {xyxy[0]:.2f} {xyxy[1]:.2f} {xyxy[2]:.2f} {xyxy[3]:.2f}\n) if __name__ __main__: infer(best.pt, ./test_images, ./output, conf0.25)conf0.25是置信度阈值调低能提高召回但误检也会多。results[0].plot()返回的是带框的 numpy 数组直接写盘就行。保存的 txt 是绝对坐标方便后续和标注对比算指标。如果要做视频流检测把model(img_path)换成model(frame)循环即可但要注意帧率YOLOv8s 在 CPU 上大概 5 FPSGPU 上 30 FPS。4.3 结果可视化与指标计算可视化不只是画框还要看漏检和误检。我一般会把验证集的预测结果和真值画在一起用不同颜色区分。指标计算用pycocotools或自己写 IoU 匹配。下面是一个简单的 mAP 计算片段import numpy as np def compute_iou(box1, box2): # box 格式 [x1, y1, x2, y2] x1 max(box1[0], box2[0]) y1 max(box1[1], box2[1]) x2 min(box1[2], box2[2]) y2 min(box1[3], box2[3]) inter max(0, x2 - x1) * max(0, y2 - y1) area1 (box1[2] - box1[0]) * (box1[3] - box1[1]) area2 (box2[2] - box2[0]) * (box2[3] - box2[1]) union area1 area2 - inter return inter / union if union 0 else 0这个函数是 mAP 计算的基础IoU 阈值一般取 0.5。实际算 mAP 还要按类别、按置信度排序代码量不小建议直接用torchmetrics里的MeanAveragePrecision省事且不容易错。5. 避坑与排查光伏板缺陷检测的 5 个常见翻车点5.1 现象验证集 mAP 很高换电站就崩原因数据集划分时同一块板的不同角度图被分到了训练和验证集模型记住了板子的背景特征而不是缺陷本身。解决按电站或巡检架次划分确保验证集的板子训练时没见过。如果已经训了重新划分后重训别偷懒。5.2 现象隐裂检测不出来污渍倒是框得很准原因隐裂是细长目标YOLO 的默认锚框或特征金字塔对小长条目标不敏感。解决提高输入分辨率到 1024或者在数据增强里加随机旋转让隐裂在不同角度出现。另外检查标注是不是把隐裂标成了矩形细长目标用多边形标注更准但 YOLO 只支持矩形所以标注时尽量贴紧。5.3 现象训练 loss 不降或者降了又反弹原因学习率太大或者数据里有脏标注坐标越界、类别错位。解决先把学习率降到 0.001 试 10 轮如果还不降用脚本检查所有标签文件把坐标不在 0-1 之间的行删掉。类别错位的话重新核对data.yaml里的names顺序和标注时的类别索引。5.4 现象推理时同一块板出几十个框原因NMS 阈值太低或者置信度阈值太低。解决把 NMS 的iou阈值从 0.7 提到 0.85置信度从 0.25 提到 0.4。如果还有重叠框检查是不是模型把一块板的多个缺陷当成了同一个这时候要看看标注是不是把整块板标成了一个框。5.5 现象ONNX 推理结果和 PyTorch 不一致原因导出 ONNX 时没有指定opset或动态轴导致某些算子行为不同。解决导出时加opset12和dynamicFalse输入尺寸固定。如果还不一致用onnxruntime的InferenceSession跑一遍和 PyTorch 的输出逐元素对比定位是哪个层出了问题。常见的是 NMS 在 ONNX 里被融合了导致阈值行为不同。6. 进阶技巧用滑动窗口滤波提升小缺陷召回光伏板缺陷里隐裂和断栅在整张大图里可能只占几十个像素直接缩放到 640 会丢细节。一个实用的技巧是滑动窗口推理把大图切成有重叠的小块每块单独推理再把结果映射回原图。重叠区域用 NMS 合并。下面是一个滑动窗口推理的代码片段import cv2 import numpy as np from ultralytics import YOLO def sliding_window_infer(model, img, window640, stride320, conf0.25): h, w img.shape[:2] all_boxes [] for y in range(0, h, stride): for x in range(0, w, stride): # 切窗口边界处理 x2 min(x window, w) y2 min(y window, h) x1 max(0, x2 - window) y1 max(0, y2 - window) patch img[y1:y2, x1:x2] results model(patch, confconf) for box in results[0].boxes: xyxy box.xyxy.tolist()[0] # 映射回原图坐标 all_boxes.append([ xyxy[0] x1, xyxy[1] y1, xyxy[2] x1, xyxy[3] y1, float(box.conf), int(box.cls) ]) # 对所有框做 NMS if not all_boxes: return [] boxes np.array([b[:4] for b in all_boxes]) scores np.array([b[4] for b in all_boxes]) classes np.array([b[5] for b in all_boxes]) indices cv2.dnn.NMSBoxes(boxes.tolist(), scores.tolist(), conf, 0.5) return [all_boxes[i] for i in indices]window640是窗口大小stride320是步长重叠一半能避免边缘缺陷被切掉。cv2.dnn.NMSBoxes做最终合并nms_threshold0.5。这个方法的代价是推理时间翻几倍但小缺陷召回能提 10-15 个点。我一般只在离线分析时用在线巡检还是整图推理。另一个技巧是测试时增强TTA把图翻转、旋转后分别推理再合并结果。YOLO 自带augmentTrue参数推理时加上就行但速度会慢。如果对精度要求高可以开。验证滑动窗口效果时别只看 mAP要单独统计小目标面积小于 32x32的召回率。如果小目标召回没涨说明窗口切得不对或者 NMS 把相邻窗口的框合并错了。调stride和nms_threshold多试几次找到平衡点。我自己的习惯是每换一个电站先拿 20 张图跑一遍滑动窗口和整图推理对比漏检再决定用哪种。别一上来就全量跑浪费时间。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

SPECTER通道密码深度解析:ST3GG首创的跨RGB通道跳跃隐写术是怎么工作的

SPECTER通道密码深度解析:ST3GG首创的跨RGB通道跳跃隐写术是怎么工作的

【免费下载链接】ST3GG All-in-one steganography suite 项目地址: https://gitcode.com/gh_mirrors/st/ST3GG 点击查看 免费下载 ST3GG(stegg)是一款开源的一体化解隐写工具包,能在图片、音频、文档、网络包等上百种载体中隐藏与…

2026/10/11 19:17:21 阅读更多 →
SpringBoot+Vue+MyBatis+MySQL企业级服装商城系统全栈实战解析

SpringBoot+Vue+MyBatis+MySQL企业级服装商城系统全栈实战解析

做服装商城项目之前,我其实一直觉得它跟通用电商没有本质区别:无非是商品、购物车、订单、支付那一套。直到真上手之后才发现,服装行业的业务约束比想象中复杂得多。尺码库存要锁死,颜色款式不能乱配,换季上架下架频繁…

2026/10/11 19:17:21 阅读更多 →
Turbo Intruder并发原理与实战:从安装到接口批量测试

Turbo Intruder并发原理与实战:从安装到接口批量测试

第一次用Burp自带的Intruder跑一批接口参数时,发到2000多个请求,界面就开始卡顿,结果区滚动都费劲。后来换成Turbo Intruder做同样的并发重放,几万条请求跑下来界面基本不卡,速率还能继续往上提,这才意识到…

2026/10/11 19:17:21 阅读更多 →

最新新闻

采矿CAD课程设计PPT:从软件操作到工程表达的全链路建模

采矿CAD课程设计PPT:从软件操作到工程表达的全链路建模

简介:本资源是一份面向高校采矿工程、地质环境与安全工程专业学生的《采矿CAD课程设计》教学课件,聚焦矿山地质环境治理与生态保护的CAD辅助设计实践。课件系统梳理了矿山地质环境定义、矿区生态破坏成因(含景观与生态双重破坏)、…

2026/10/12 0:54:26 阅读更多 →
桌面调度台 vs 云端 Agent 平台:Orca、美团 CatPaw、NVIDIA 路由器的三条路线谁先跑通

桌面调度台 vs 云端 Agent 平台:Orca、美团 CatPaw、NVIDIA 路由器的三条路线谁先跑通

桌面调度台 vs 云端 Agent 平台:Orca、美团 CatPaw、NVIDIA 路由器的三条路线谁先跑通 【免费下载链接】orca Orca is the ADE for working with a fleet of parallel agents. Run any coding agent with your own subscription. Available on desktop, mobile and …

2026/10/12 0:54:26 阅读更多 →
Kubernetes Python 客户端 V1beta2ResourceClaim 模型详解:Dynamic Resource Allocation 资源声明的完整 API 参考

Kubernetes Python 客户端 V1beta2ResourceClaim 模型详解:Dynamic Resource Allocation 资源声明的完整 API 参考

后端云原生容器编排 【免费下载链接】python Official Python client library for kubernetes 项目地址: https://gitcode.com/gh_mirrors/python1/python 点击查看 免费下载 导读 本文面向使用官方 Kubernetes Python 客户端(本项目仓库 gh_mirrors/p…

2026/10/12 0:54:26 阅读更多 →
CodeIgniter 4 Request 类详解:HTTP 请求的面向对象封装与全局数据安全访问

CodeIgniter 4 Request 类详解:HTTP 请求的面向对象封装与全局数据安全访问

后端Web框架 【免费下载链接】CodeIgniter4 Open Source PHP Framework (originally from EllisLab) 项目地址: https://gitcode.com/gh_mirrors/co/CodeIgniter4 点击查看 免费下载 本指南以 CodeIgniter 4 官方用户指南 request.rst 为主体,系统讲解框…

2026/10/12 0:54:26 阅读更多 →
Vibe Coding 的边界:从“70% 问题“到“80% 墙“,AI 编程五大局限性与人机分工深度解析

Vibe Coding 的边界:从“70% 问题“到“80% 墙“,AI 编程五大局限性与人机分工深度解析

文档教程Vibe Coding示例工程 【免费下载链接】vibe-vibe The First Systematic Vibe Coding Open-Source Tutorial | From Zero to Full-Stack, Empowering Everyone to Build Products with AI | Live at: www.vibevibe.cn ;首个系统化 Vibe Coding 开源教程 | 零…

2026/10/12 0:53:26 阅读更多 →
不用模拟器也能玩PS5游戏?拆解AnyPS5的“非模拟器魔法“:relinker重链接+PRX库+RDNA到SPIR-V

不用模拟器也能玩PS5游戏?拆解AnyPS5的“非模拟器魔法“:relinker重链接+PRX库+RDNA到SPIR-V

不用模拟器也能玩PS5游戏?拆解AnyPS5的"非模拟器魔法":relinker重链接PRX库RDNA到SPIR-V 【免费下载链接】AnyPS5 Tool for automatic PS5 executables porting to Linux and Windows 项目地址: https://gitcode.com/GitHub_Trending/an/Any…

2026/10/12 0:53:26 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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 阅读更多 →