揭秘PCB缺陷检测数据集99.8%准确率:yolov9实战要点
简介面向印制电路板缺陷检测的YOLOv9格式数据集专为工业质检与深度学习目标检测场景设计可帮助算法工程师、科研人员快速搭建并训练缺陷识别模型。资源包共含2000个文件其中1297个txt标注文件与702张jpg图像一一对应每个txt记录缺陷类别及归一化坐标可直接用于YOLOv9训练702张jpg图片覆盖多种板卡与缺陷形态环境变量丰富另有1个yaml配置文件预设数据集路径与类别列表压缩包整体大小为120.79MB。数据标注质量高模型识别准确率可达99.8%不仅适合模型调参实验也能用于产线检测方案的快速原型验证。已有436人学习使用对从事印制电路板质检、工业视觉的工程师与研究人员来说省去了自行采集与标注的繁琐流程是可直接上手的训练数据集。无论是入门目标检测还是优化生产环境中的缺陷识别精度都能从中获得有效支撑数据划分合理训练验证即开即用。1. 1297张图加99.8%准确率这套PCB缺陷检测数据集的水分在哪里1297张图片yolov9格式标注对外宣称99.8%的识别准确率做成PCB电路板缺陷检测识别数据集——这个描述放到真正做工业视觉的人面前第一反应不是兴奋而是先问三个问题99.8%是哪个口径算出来的那1297张图里缺陷类别是怎么分布的标注坐标有没有抽检过因为PCB缺陷检测的难点从来不是“分得清大类”而是小目标、类间相似、标注噪声三件事叠在一起时模型还能不能稳住。这套数据集的真实价值在于能让你快速跑通yolov9从数据准备到权重导出的完整链路同时用来验证自己对检测指标的理解是否到位。如果目标是直接部署到产线1297张只能算起点不是终点。2. PCB缺陷检测数据集里有什么从缺陷类型到yolov9标签文件2.1 先认清楚PCB裸板缺陷的六种常见类型做PCB裸板缺陷检测最常遇到的缺陷类型就那么几类。不同数据集命名略有差异但核心类别基本一致类别现象描述对检测模型的实际挑战missing_hole漏孔该有的钻孔缺失目标极小可能只有几像素到几十像素mouse_bite鼠咬铜箔边缘出现凹陷与正常走线的局部形状接近类间相似度高open_circuit断路导体线路断裂断裂点很小容易淹没在噪声里short短路相邻导线之间搭连需要结合上下文判断单看局部容易漏spur毛刺铜箔边缘多余凸起和正常走线拐角很难区分copper_spurious多余铜皮不该有铜的位置残留了铜对比度低光照一变就掉点拿到这份数据集后第一步不是急着训练而是先统计每个类别各有多少个框。假设1297张图平均每张带两到三个标注框实例总数大概在2600到3900之间。如果某个类别只有几十个实例那训练时这一类的AP基本看运气99.8%这个数字也大概率不包含这种少数类。2.2 yolov9标注文件究竟长什么样yolov9用的是YOLO系列通用的标注格式每张图片对应一个同名txt文件每一行描述一个目标框五个字段依次是类别id、中心点x坐标、中心点y坐标、框宽、框高。注意这里四个坐标值全部是相对图片宽高的归一化值取值范围是0到1。0 0.528645 0.412344 0.012358 0.018745 2 0.731245 0.211489 0.031247 0.024456第一行的含义是类别id为0的缺陷比如missing_hole框中心点位于图片宽度的52.86%处、高度的41.23%处框宽占图片宽度的1.24%框高占图片高度的1.87%。这类小框在PCB数据里非常常见也正是为什么后面训练时输入分辨率不能随便用416这类偏小的值。我一般会建议拿到数据后先写一段检查脚本把所有标签文件逐行读一遍确认字段数量、坐标范围、类别id合法性都没问题。因为很多数据集的标注文件是转换工具批量生成的转换过程里最容易出现坐标越界、字段缺失、类别id从1开始而不是从0开始这类问题。import os label_dir labels/train image_dir images/train for label_file in os.listdir(label_dir): # 两张图用同一stem关联 stem os.path.splitext(label_file)[0] image_path os.path.join(image_dir, stem .jpg) if not os.path.exists(image_path): print(f图片缺失: {image_path}) with open(os.path.join(label_dir, label_file), encodingutf-8) as f: lines f.readlines() for idx, line in enumerate(lines): parts line.strip().split() # 合法yolov9标签每行必须是5个字段 if len(parts) ! 5: print(f{label_file} 第{idx 1}行字段数异常: {line.strip()}) continue try: cls int(parts[0]) x, y, w, h map(float, parts[1:]) except ValueError: print(f{label_file} 第{idx 1}行存在非数值字段: {line.strip()}) continue # 归一化坐标超出[0,1]说明转换工具算错了 if not (0 x 1 and 0 y 1 and 0 w 1 and 0 h 1): print(f{label_file} 第{idx 1}行坐标越界: {line.strip()})这段脚本会在训练前把所有坏标签暴露出来。字段数不对通常是因为行尾多了空格或制表符坐标越界则几乎可以断定是某个标注工具把像素坐标直接当成归一化坐标写了出来。跑完这一段没有输出再谈后续训练。2.3 用可视化脚本确认框是不是画在了正确位置文件格式合法不等于标注内容正确。yolov9格式的坐标是中心点加宽高如果转换时把左上角坐标误当成中心点坐标字段层面完全合法但框会整体偏到右下角。这种错误不会报错只会让模型训练出来一团糟。我常用的做法是把标注框画回原图抽几十张人眼扫一遍。import cv2 import os label_dir labels/train image_dir images/train output_dir check os.makedirs(output_dir, exist_okTrue) for label_file in os.listdir(label_dir): stem os.path.splitext(label_file)[0] image_path os.path.join(image_dir, stem .jpg) img cv2.imread(image_path) if img is None: print(f无法读取图片: {image_path}) continue h, w img.shape[:2] with open(os.path.join(label_dir, label_file), encodingutf-8) as f: for line in f: parts line.strip().split() if len(parts) ! 5: continue cls, x, y, bw, bh int(parts[0]), *map(float, parts[1:]) # 中心点宽高格式转成左上角右下角像素坐标 x1 int((x - bw / 2) * w) y1 int((y - bh / 2) * h) x2 int((x bw / 2) * w) y2 int((y bh / 2) * h) cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.putText(img, str(cls), (x1, max(0, y1 - 5)), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1) cv2.imwrite(os.path.join(output_dir, stem .jpg), img)这里把归一化中心点转回像素坐标时宽高要除以2做加减这个细节是踩坑率最高的地方。写错符号或乘错系数轻则框偏半个身位重则整个框贴到图片角落。可视化脚本跑出来的图重点观察两类样本小目标是否严格贴合缺陷边缘以及相邻缺陷的框是否互相串位。2.4 类别id映射表要锁死yolov9训练时类别是靠data.yaml里的names列表映射的顺序必须和txt里的类别id完全一致。比如某个数据集把0定义为mouse_bite你却写成了missing_hole训练不会报错但验证时AP和混淆矩阵会非常难看你会以为模型学得差其实是标签含义错位了。path: ./ # 数据集根目录 train: images/train val: images/val names: 0: missing_hole 1: mouse_bite 2: open_circuit 3: short 4: spur 5: copper_spurious这里有一个隐藏问题需要注意yolov9官方仓库和ultralytics实现的graph结构在部分版本中不完全一致但yaml配置的写法是通用的。你只要保证names顺序和标签文件里的id一一对应训练器本身不做校验。3. 用yolov9格式跑通训练目录、环境和划分脚本3.1 先按这份结构整理目录拿到1297张图片和对应标签后第一件事不是急着写模型而是先把目录整理成训练器认识的固定结构。常见做法是PCB_dataset/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/ └── data.yaml图片和标签分目录存放图片文件名和标签文件名共用同一个stem。训练器在读取时会自动把labels/train下的txt和images/train下的jpg按文件名配对所以文件名改过就废了。整理时不要手动拖拽写个脚本批量移动。3.2 关键一步按板号分组划分别全局随机1297张图怎么切分直接决定了后面那个“99.8%”有没有参考价值。如果直接对全部图片做随机划分同一块板子不同位置的切片可能同时出现在训练集和验证集里验证时模型实际上见过同一块板的纹理特征mAP会被严重虚高。正确的做法是先按文件名里的板号归组再按组划分。import random import shutil import os from collections import defaultdict random.seed(42) root PCB_dataset # 假设文件名是 board01_p01.jpg 这样的命名 all_images [f for f in os.listdir(images_all) if f.endswith((.jpg, .png))] groups defaultdict(list) for img in all_images: board img.split(_)[0] # 按板号分组 groups[board].append(img) board_names list(groups.keys()) random.shuffle(board_names) split int(len(board_names) * 0.8) train_boards board_names[:split] val_boards board_names[split:] for board in train_boards: for img in groups[board]: stem os.path.splitext(img)[0] shutil.copy(os.path.join(images_all, img), os.path.join(images/train, img)) shutil.copy(os.path.join(labels_all, stem .txt), os.path.join(labels/train, stem .txt)) for board in val_boards: for img in groups[board]: stem os.path.splitext(img)[0] shutil.copy(os.path.join(images_all, img), os.path.join(images/val, img)) shutil.copy(os.path.join(labels_all, stem .txt), os.path.join(labels/val, stem .txt)) print(f训练集板数: {len(train_boards)}, 验证集板数: {len(val_boards)})随机种子固定成42每次划分结果可复现。如果图片命名里没有板号信息那就退而求其次按连续时间戳分组至少保证验证集和训练集的时间点不重叠。这一步做不好后面所有指标都是自嗨。3.3 安装依赖与版本选型训练yolov9有两种路径一是官方仓库二是ultralytics封装好的训练器。对于做数据集验证的场景我一般用ultralytics闭环体验好数据加载、增广、日志、导出一条龙省去自己拼代码的时间。pip install ultralytics python -c import ultralytics; print(ultralytics.__version__)如果机器上已有旧版本先升级pip install -U ultralytics这里不建议盲目追求最新版。yolov9相关的模型定义在ultralytics里属于后加入的架构早期版本可能加载不了yolov9c.yaml太新的版本也可能因为依赖冲突报奇怪的错误。选一个相对稳定的版本组合跑通流程后不要再动环境。3.4 统计类别分布防止少数类被淹没划分完成后把train和val两个集合的类别实例数分别统计一遍。这一步能提前预警两类问题某个类别在验证集里一个样本都没有或者某个类别在整个训练集里只有不到50个框。前者会导致评估结果缺失后者需要针对这个类别多采样或调整loss权重。from collections import Counter counts Counter() for split in [train, val]: label_dir flabels/{split} for label_file in os.listdir(label_dir): with open(os.path.join(label_dir, label_file)) as f: for line in f: parts line.strip().split() if len(parts) 5: counts[(split, int(parts[0]))] 1 for split in [train, val]: print(split, {k: v for (s, k), v in counts.items() if s split})如果某个缺陷类别在训练集里数量明显偏少后续要在增广参数里给它单独开小灶或者干脆在采集阶段补拍这一类样本。1297张图这种体量每类少于100个框的类别基本注定AP不会高。4. 训练参数与99.8%的口径把识别准确率跑在明面上4.1 第一次训练的最小命令在没有额外预训练权重的情况下直接从头训练yolov9c也可以体量不大收敛速度相对快。命令如下yolo train datadata.yaml modelyolov9c.yaml epochs300 batch8 imgsz640 patience30 projectpcb_yolov9 namerun1想用预训练权重做迁移学习写法稍有不同yolo train datadata.yaml modelyolov9c.pt epochs150 batch8 imgsz640第一行的yolov9c.yaml表示从网络结构创建模型完全不依赖预训练权重权重文件体积小首次训练时更稳不容易出现“预训练权重类别对不上导致某些层被随机初始化”的情况。第二行是从公开的yolov9c.pt继续微调收敛更快但要求你的数据集类别数和权重文件原本的类别数一致否则最后一层会重建。对1297张图这个量级两种方式各有各的用法先从头训验证数据本身没问题再考虑迁移学习。4.2 六个必调参数照这个表改参数建议值调参理由epochs150-300PCB缺陷目标小收敛慢太早停会欠拟合batch8-16取决于显存太小会让batch norm统计不稳定imgsz640起步显存够用就1280小孔和鼠咬这类缺陷在640下只有十几个像素分辨率不足直接漏检patience20-30配合早停防止过拟合后继续空跑optimizerAdamW小数据集上SGD收敛偏慢AdamW对学习率更鲁棒augmentmosaic1.0degrees0PCB板的方向固定旋转增广反而制造不真实样本640分辨率下一张图中的漏孔缺陷可能只有5到8个像素模型几乎只能靠上下文猜。如果显存允许把imgsz提到1280对小目标AP的提升立竿见影代价是训练时间翻倍。degrees设0是很多检测公开教程里不会提但实际产线非常重要的参数因为PCB在治具上的方向是确定的训练时引入旋转会让模型把“倾斜的走线”当作新特征去学习白白消耗拟合能力。4.3 训练日志怎么看不要只盯最后一行训练过程中控制台会滚动输出每一轮的loss和指标Epoch gpu_mem box_loss cls_loss dfl_loss Instances Size 120 4.21G 0.6426 0.3841 0.5237 127 640这里要看的是趋势而不是单点数值。box_loss缓慢下降是正常的cls_loss如果持续上升大概率是类别标签噪声太大模型在强行记忆错误标注。更直观的是每隔几十轮把best.pt在验证集上跑一遍看mAP50曲线如果它先升后降而训练loss还在降那就是过拟合的信号patience参数会在30轮后自动截停。4.4 99.8%是怎么来的三种口径差别巨大标题里99.8%的识别准确率听起来很美但作为工程师我有义务拆一下这个数字可能的来源。第一是阈值口径。yolov9评估标准有mAP50IoU阈值0.5和mAP50:95IoU从0.5到0.95逐级平均。同一个模型mAP50能达到99%mAP50:95可能只有70%出头。99.8%几乎必然是在mAP50这个宽容口径下得出的且大概率是某一个类别的AP不是全部类别的均值。第二是数据口径。如果验证集和训练集来自同一块板的不同区域验证时模型其实已经见过这块板的走线风格和光照特征相当于开卷考试。严格的做法是按板号分组划分这块内容上一章已经给了脚本。第三是场景口径。同一批次的PCB油墨颜色、线宽、表面处理完全一致模型学到的纹理特征只属于这个批次。换一批板子光照一变准确率掉到95%甚至90%都算正常。1297张图本身覆盖的场景有限99.8%只能代表“在这批数据上表观性能不错”不代表产线环境下的真实良率。5. 避坑与排查PCB缺陷检测训练中的五个高频翻车点5.1 训练启动时提示0 images found现象yolo train命令刚跑起来日志里出现WARNING提示没有找到标签或图片随后训练直接中断甚至会自动下载COCO数据集。原因data.yaml里的path字段写错了。yolov9训练器用path拼接train和val的相对路径如果path指向了错误目录整个数据集加载就会失败。另一个常见原因是labels目录和images目录的stem不一致比如图片叫pcb_001.jpg标签却叫pcb_001.txt_extra。解决先确认data.yaml的三行路径拼接后的实际物理路径真实存在再检查标签文件夹里是否存在与图片文件名一一对应的txt。推荐在训练前跑一遍前面2.2节里的标签检查脚本它会顺便报告图片缺失情况。5.2 坐标转换后框全部偏到右下角现象训练开始时loss正常下降但下降到一定程度就不动验证集上mAP一直很低。把预测结果画回图片发现框总是偏在真实目标的右下方。原因转换工具把像素级左上角坐标当成了yolov9需要的归一化中心点坐标。一个宽100像素、高50像素的框中心点坐标是(left50, top25)而不是(left, top)。直接用左上角坐标除以图片宽高框就会整体偏移半个身位。解决转换时执行x_center (left width / 2) / image_widthy_center (top height / 2) / image_height。改完再跑一遍2.3节的可视化脚本把框画出来人眼确认这一步省不了。5.3 自己写了旋转增广精确率反而下跌现象代码里手工加了随机旋转90度和水平翻转训练后精确率不但没涨反而明显下跌漏检变多。原因PCB检测场景中板子方向在生产线上是固定的旋转90度产生的图像在真实环境里根本不会出现模型被迫为不存在的方位分配拟合能力。更隐蔽的问题是手工旋转图片时必须同步旋转标注框的坐标和尺寸很多人只转了图标签没跟着转等于把错误标注喂给模型。解决不要手工改图像和标签用训练器内置的mosaic、flipud、fliplr这些参数化增广它们会自动同步标签。PCB场景下最稳妥的做法是degrees0水平翻转按需开启垂直翻转和旋转都关掉。5.4 验证集里有训练集的“邻居”现象训练时mAP50高达98%但拿一批全新板的图片去测试性能立刻掉到85%以下。原因划分时直接用全局随机同一块PCB不同区域的切片被同时分到了训练集和验证集。模型在验证时“见过”了同一块板的走线纹理、油墨颜色、光照条件指标虚高。解决老老实实按板号分组划分。如果文件名里能提取出板号或时间戳就按那个归组实在没有也要按连续编号分段而不是打乱后平分。这个问题的危害性主要体现在“自我感觉良好”上线前几乎必定翻车。5.5 OpenCV读取图片后颜色通道顺序错乱现象copper_spurious这种靠颜色区分于背景的缺陷训练后AP为0而形状类的缺陷都正常。原因OpenCV的cv2.imread读取图片返回的是BGR三通道而yolov9训练内部默认按RGB处理。如果预处理管道里混用了OpenCV读取和PIL读取模型学到的颜色映射就乱套了颜色敏感缺陷首当其冲。解决统一走一条读取链路。最好全部交给训练器内置的数据加载器处理不要自己额外读取图片做预处理。如果必须自己读取用cv2.cvtColor(img, cv2.COLOR_BGR2RGB)显式转换后再进模型。6. 训练完之后用pr曲线验收再谈部署6.1 用validate命令扫一遍全阈值表现训练结束后默认会输出mAP50、mAP50:95和precision/recall曲线图。我习惯在训练完成的runs本文还有配套的精品资源点击获取

相关新闻

AI就绪化编程:让代码真正被大模型理解与协作

AI就绪化编程:让代码真正被大模型理解与协作

1. 这不是职业转型指南,而是一份“代码能力进化路线图”“软件工程师的未来之路——从写代码到驾驭AI”这个标题,最近在技术社区里被反复提起,但很多人一看到“驾驭AI”,下意识就想到“要不要去学大模型”“是不是得转行做AI工程师…

2026/10/18 11:37:07 阅读更多 →
基于Hadoop+Spark的商场商铺数据分析与可视化系统毕设实战指南

基于Hadoop+Spark的商场商铺数据分析与可视化系统毕设实战指南

每次到了毕业设计季,我都能在群里看到同一类提问:“大数据方向毕设到底做什么题目好?Hadoop和Spark是不是必须用?数据从哪来?可视化做到什么程度能过答辩?”问的人很多,能答得清楚的人很少。今天…

2026/10/18 11:37:07 阅读更多 →
C#实战:Windows进程管理与优雅关闭程序窗口指南

C#实战:Windows进程管理与优雅关闭程序窗口指南

做 Windows 桌面开发的朋友,迟早会接到一个听起来很简单的需求:用 C# 去关闭其他程序窗口、进程。我第一次深入碰这个,是在一套自动化部署脚本里——新版安装包要覆盖旧版,但上一版的老进程还占着文件,不先关掉&#x…

2026/10/18 11:36:07 阅读更多 →

最新新闻

hostapd-2.10源码解析:从编译到二次开发实战指南

hostapd-2.10源码解析:从编译到二次开发实战指南

简介:hostapd-2.10源码包面向Linux无线开发与嵌入式网络工程师,用于在Linux系统上以软件方式创建和管理WiFi热点,替代硬件AP实现主机模式接入点。包内共655个文件,以363个C源文件和235个头文件为核心,覆盖nl80211驱动、…

2026/10/18 15:50:15 阅读更多 →
LISREL验证性因素分析完整指南:从模型识别到拟合判读

LISREL验证性因素分析完整指南:从模型识别到拟合判读

简介:一份面向社会科学、心理学及教育学研究者与学生的LISREL软件验证性因素分析教学PPT,系统讲解结构方程模型中验证性因素分析的核心逻辑与实操要点。资源从“准确Vs简洁”的数据处理两难切入,说明如何输入相关矩阵、设定理论模型、输出再生…

2026/10/18 15:50:15 阅读更多 →
通义千问Qwen3本地部署实战:MoE架构、硬件选型与性能调优

通义千问Qwen3本地部署实战:MoE架构、硬件选型与性能调优

前几天有个朋友来问我,说他拿到一台旧工作站,想跑一个新出的开源模型,问我到底值不值得折腾。我第一反应是问他:你要跑的模型是哪个?他回答说在想跑通义千问 Qwen3 系列。我说那就很值得,Qwen3 这一代把 Mo…

2026/10/18 15:50:15 阅读更多 →
AI原生应用人机共创成功案例:用TaoToken统一Key打通多模型协作链路

AI原生应用人机共创成功案例:用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/18 15:50:15 阅读更多 →
翁恺C语言习题集刷题指南:环境搭建、题型拆解与避坑要点

翁恺C语言习题集刷题指南:环境搭建、题型拆解与避坑要点

简介:浙江大学翁恺教授C语言课程习题与源码合集,专门面向C语言初学者、备考计算机等级考试或自学编程的读者,覆盖从基础语法到典型算法的多层次练习。资源共4个文件,包含txt题解文档、Python辅助脚本、inscode在线交互文件和html页…

2026/10/18 15:50:15 阅读更多 →
红色党建风工作总结PPT模板:从空白页到成稿的工程化流程

红色党建风工作总结PPT模板:从空白页到成稿的工程化流程

简介:这是一套面向党政部门的工作总结PPT模板,整体采用红色党建风格,视觉庄重且富有感染力,适合年终总结、阶段汇报、主题教育展示等场合。模板内置完整汇报逻辑,共分为工作目标与背景、工作成果与亮点、挑战与解决方案…

2026/10/18 15:49:14 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/18 12:16:16 阅读更多 →