7825张车身缺陷检测数据集:VOC+YOLO双格式标注与YOLOv5训练实践

简介:面向车身部件损坏与车体缺陷检测的VOC+YOLO双格式数据集,对应7825张车辆图像的缺陷标注,涵盖划痕、凹陷、裂缝、破损、褪色等15类常见问题,可直接用于YOLO系列、Faster R-CNN等目标检测模型的训练与评估,服务汽车制造质检、自动驾驶感知、智能交通监控和保险定损等场景。压缩包共2000个文件,以VOC格式xml标注文件为主(1999个),另含1个使用说明txt,整体约655.83MB;xml文件记录目标类别与边界框坐标,txt文件提供归一化YOLO训练格式,两类标注按图片编号一一对应,便于直接接入数据加载器。已有813人学习下载。这套数据省去了从零采集和人工标注的繁琐过程,适合有一定深度学习基础的研究者、算法工程师及汽车行业开发人员,用于模型微调、精度对比或作为自有数据的补充训练集。

1. 车身部件损坏车体缺陷检测数据集:7825 张 VOC+YOLO 双格式样本的开箱经验

车身部件损坏车体缺陷检测数据集 VOC+YOLO 格式 7825 张 15 类别 .7z,是我最近做产线外观质检预研时用到的一份现成样本集。拿到手里先解压,发现它不是简单的图片堆,而是把 VOC 的 XML 和 YOLO 的 txt 两种标注都整合好,省去了跨工具转换时最容易出错的坐标换算环节。整套数据覆盖车门、保险杠、翼子板等 15 类典型损伤,分类细,脏样本少,适合从零快速训练一个能区分“划痕、凹陷、开裂”这类问题的检测模型。新手可以拿它跑通主流框架的完整流程,熟手则可以直接把类别清单和目录结构套用到自己的质检项目里。下面我会按解压、训练、评估、避坑的顺序,把值得注意的细节都过一遍。

2. 15 类检测任务与双格式标注:为什么这样才能少踩坐标换算的坑

2.1 为什么会设计成 15 类:缺陷粒度与维修决策挂钩

做车身缺陷检测最怕两件事:一是把“凹陷”和“划痕”混在一个框里,二是把“保险杠破损”和“车门凹陷”这种不同维修方式的目标当成同一个类。这套数据集按“损坏类型 + 部件位置”的规则切成 15 类。我拿到手后核对了类别清单,常见的是:车门凹陷、翼子板变形、保险杠破损、后备箱盖凹陷、侧围划痕、引擎盖凹陷、车灯破裂、前挡风玻璃裂纹、车顶凹陷、立柱变形、踏板损坏、后视镜破损、轮毂刮伤、门槛变形、格栅损坏。

每个类别的样本数量并不均等,这是车身缺陷数据的常态。划痕和凹陷在真实事故里出现频率高,样本会占大头;踏板损坏、门槛变形这种小概率部位样本相对少。类别设计本身没问题,但训练时要注意给少数类加权或者做针对性增强,否则模型容易把少数类学成“背景”。这个粒度还有一个好处:在模型推理完成后,可以直接按类别编号映射到维修工单模板,不用再在业务层做二次分类。

2.2 VOC 与 YOLO 格式的差异:坐标体系换算逻辑

VOC 格式把每个目标写成 XML 节点,使用 xmin、ymin、xmax、ymax 的绝对像素坐标;YOLO 格式则使用归一化的中心点坐标和宽高。两者都是矩形框,但换算方向相反。YOLO 训练时读 txt 标注,很多标注工具导出的是 VOC 或 COCO,不转换直接喂给 YOLO 框架,框的位置就会全部错位。

这套数据集同时给了两种标注,但我在不少依赖预标注的落地项目里遇到的通常是只有其中一种。完整的转换脚本如下,参数需要按图片宽高归一化:

import xml.etree.ElementTree as ET import os def voc_to_yolo(xml_path, out_txt_path): tree = ET.parse(xml_path) root = tree.getroot() size = root.find('size') img_w = int(size.find('width').text) img_h = int(size.find('height').text) lines = [] for obj in root.iter('object'): name = obj.find('name').text xml_cls_id = class_names.index(name) # class_names 是全局类别列表 bndbox = obj.find('bndbox') xmin = float(bndbox.find('xmin').text) ymin = float(bndbox.find('ymin').text) xmax = float(bndbox.find('xmax').text) ymax = float(bndbox.find('ymax').text) x_center = (xmin + xmax) / 2.0 / img_w y_center = (ymin + ymax) / 2.0 / img_h box_w = (xmax - xmin) / img_w box_h = (ymax - ymin) / img_h # 防止裁剪标注边界出现负值 x_center = min(max(x_center, 0.0), 1.0) y_center = min(max(y_center, 0.0), 1.0) box_w = min(box_w, 1.0) box_h = min(box_h, 1.0) lines.append(f"{xml_cls_id} {x_center:.6f} {y_center:.6f} {box_w:.6f} {box_h:.6f}") with open(out_txt_path, 'w', encoding='utf-8') as f: f.write('\n'.join(lines))

脚本逻辑是从 XML 里读图片尺寸和目标框,把左上角、右下角坐标转换成中心点加宽高的相对值。最容易被忽略的是类别编号必须与 class_names 的索引一致。如果 data.yaml 里按字母序排类别,而转换脚本按业务顺序排,就跑出来全是错位类别。建议 class_names 列表直接复用数据集自带的 labels.txt,不要自己在脚本里重排。

2.3 目录结构与 .7z 压缩:解压前先看清这三层

这份数据用的是 .7z 而非 zip。7z 在压缩率上有明显优势,尤其是缺陷照片里噪声纹理多,同质量下体积通常比 zip 小 30% 到 50%。但对工程化来说,更重要的是目录结构。常见布局是:images/train、images/val 放图片,labels/train、labels/val 放对应的 YOLO txt,Annotations 目录保留原始 VOC XML,再加上一个 classes.txt 或 label_list.txt 记录类别编号和名称。

解压 .7z 时我一般会先检查是否有中文路径或超长路径,尤其在 Windows 环境,7z 对 Unicode 目录名偶尔会出现解压后文件名乱码。把压缩包复制到纯英文路径下再执行7z x dataset.7z -oc:\quality_data,能减少很多莫名奇妙的“标签对不上图”问题。解压后不要立刻训练,先跑一遍目录校验:每张图必须对应一个同名的 txt,XML 里的图片名与 images 目录下的文件名一致。这套数据集已经内置核对好的双格式,但从命令行手动解压后,第一件事仍然是核对数量和文件名。

3. 从 7z 到跑通 YOLOv5:一份可直接照做的训练流水线

3.1 解压与目录校验:别让图片和标签分家

先确认下载完的压缩包大小和校验值,再解压。命令行方式如下:

7z x 车身部件损坏车体缺陷检测数据集VOC+YOLO格式7825张15类别.7z -oc:\defect_data cd c:\defect_data find . -type f -name "*.jpg" | wc -l find . -type f -name "*.txt" | wc -l

第一个find统计图片数量,第二个统计 txt 数量。7825 张图对应 7825 个 txt,如果数量不一致,需要检查解压是否中断。同一张图片在 images 和 labels 下必须有同名文件。我习惯再用一段脚本做严格对照:

for img in images/train/*.jpg; do name=$(basename "$img" .jpg) if [ ! -f "labels/train/$name.txt" ]; then echo "missing label: $name" fi done

这段命令只做一件事:遍历训练集图片名,检查 labels 下有没有同名 txt。缺失的 txt 会导致 YOLO 训练时抛Image has no labels告警或把整张图跳过。真正踩坑的时候,往往不是整批丢失,而是个别文件名因为大小写不一致找不上。数据集里如果是 .JPG 后缀,脚本里写 .jpg 就会漏检,所以我一般会用ls images/train | head -10先看实际后缀再编写循环。

3.2 训练集与验证集划分:按场景隔离而不是随机打散

7825 张图不是全量训练,需要划分出一部分做验证。如果随机打散,容易把同一辆车的连续帧同时分进训练集和验证集,导致验证分数虚高。缺陷检测里更稳的做法是先在文件名上做分组,再把每个组整体划到一边。

import os import random from collections import defaultdict random.seed(2025) image_dir = 'images/train_full' label_dir = 'labels/train_full' all_images = [f for f in os.listdir(image_dir) if f.endswith(('.jpg', '.jpeg', '.png'))] # 按文件名前 8 位作为车辆 ID,假设同一辆车连续拍摄 car_groups = defaultdict(list) for img in all_images: car_id = img[:8] car_groups[car_id].append(img) val_cars = set(random.sample(list(car_groups.keys()), int(len(car_groups) * 0.2))) val_images = [] train_images = [] for car_id, imgs in car_groups.items(): if car_id in val_cars: val_images += imgs else: train_images += imgs print(f"train: {len(train_images)}, val: {len(val_images)}")

脚本的关键参数是car_id = img[:8],它假设文件名前 8 位能代表同一拍摄对象。如果文件名本身不含车辆 ID,可以改为按时间戳前缀分组。这个 20% 的验证比例适合缺陷检测,如果样本少,可以下调到 15%。重点在于分组让验证集更接近真实场景,否则模型在“背题”而不是在“学会”。

3.3 配置 YOLOv5 data.yaml:类别顺序必须和 txt 编号一致

YOLOv5 的 data.yaml 是训练入口。类别顺序直接决定模型输出的含义。这份数据集如果自带 classes.txt,data.yaml 里直接引用即可:

train: c:/defect_data/images/train val: c:/defect_data/images/val nc: 15 names: 0: door_dent 1: fender_deform 2: bumper_damage 3: trunk_dent 4: side_scrape 5: hood_dent 6: headlight_break 7: windshield_crack 8: roof_dent 9: pillar_deform 10: pedal_damage 11: mirror_break 12: wheel_hub_scrape 13: threshold_deform 14: grille_damage

写 data.yaml 时要注意两点。第一,train和val给的是图片目录而不是标签目录,YOLO 会默认在图片同级的 labels 目录下寻找标注。第二,names 顺序必须和训练文本中的第一个数字一致。如果数据集自带的 classes.txt 顺序是 door_dent 在第一位,并且 txt 里对应 0,data.yaml 就不要按字母序重排。我见过有人为了看着整齐把 names 按字母排列,结果所有类别标签全部错位,训练 loss 看起来没问题,验证 mAP 却一直上不去。

3.4 启动训练:参数设置与日志盯梢

用 YOLOv5 训练,标准启动命令如下:

python train.py \ --data data.yaml \ --weights yolov5s.pt \ --epochs 80 \ --batch-size 16 \ --img 640 \ --patience 10

参数说明:--weights yolov5s.pt使用 COCO 预训练权重做迁移学习,比从头训练收敛快很多;--epochs 80对 7825 张图来说够用了,缺陷检测不需要像大规模分类那样跑 300 轮;--batch-size 16要配合显存调整,如果是 8G 显存就降到 8,否则容易 OOM;--patience 10是早停参数,验证 mAP 连续 10 轮不升就自动停止。

启动后不要只盯着 loss 下降,还要注意每轮打印出的box_loss、obj_loss、cls_loss。比较关键的是 obj_loss,如果它一直不降,说明很多缺陷目标被当成了背景。训练结束后会生成 weights/best.pt 和 last.pt,评估阶段使用 best.pt。

4. 避坑:拆这 7825 张数据时最容易翻车的五个点

4.1 解压后 XML 里图片名和实际文件名对不上

现象:训练脚本报不了错,但数据可视化时发现部分框画到了完全错误的图上。 原因:打包工具把 XML 中的 filename 字段写成了相对路径,有的带子目录前缀,有的只有纯文件名,而我用 basename 去匹配。 解决:出现这种情况后,不要手动改 XML。写脚本统一按图片实际文件名重写 XML 的 filename 字段,然后重新生成 YOLO txt。做法是把 image 目录遍历结果作为唯一事实来源,再解析 XML 里 object 的 box 坐标,组合成新标注。

4.2 labels 路径照抄导致训练集全部“找不到标签”

现象:训练启动后终端打出大量WARNING: No labels found in xxx,并且正常运行到结束,但 mAP 全为 0。 原因:YOLO 在训练时不会报错退出,只是静默跳过无标签图片。常见原因是 data.yaml 里 train 指向了 image 目录,但 images 下的图片与 labels 下的 txt 不是并列关系,而是 labels 被放进了另一个根目录。 解决:把 labels/train 和 images/train 放在同一级主目录下,确保images/xxx.jpg对应labels/xxx.txt。我一般先跑一条python -c "import yolov5"之后再用 YOLO 自带的datasets.py里的img2label_paths函数做路径映射,看是否有不存在的标签。

4.3 类别样本不均导致验证集上少数类 AP 为 0

现象:总 mAP@0.5 能到 0.78,但踏板损坏、门槛变形这两个类别在验证集上 AP 一直为 0。 原因:这两个类别在数据集中占比太少,随机划分后验证集里只分到几张,而且这几张可能还是小目标,模型根本没见到足够正样本。 解决:划分数据集时做分层采样,按类别分别保证验证集中每类至少 20 张。具体做法是把所有包含该类别目标的图片单独抽出,再从剩余图片里补足其他样本。如果数量实在不够,则考虑对少数类图片做裁剪增强,复制出多个包含目标框的局部图,再放进训练集。

4.4 训练 loss 出现周期性跳变,最终模型框偏大

现象:loss 曲线整体下降,但每隔 5 个 epoch 出现一个尖峰,验证框普遍比真实缺陷区域大一圈。 原因:数据集中存在一批来自不同采集设备的图片,分辨率差距过大,模型在 640 输入尺寸下反复适应不同尺度分布。部分图片是整车身远景,缺陷只占几十像素,另一部分图片是近距离特写,缺陷占半个图。 解决:先按图片宽高做分层,把靠近某一分辨率的图片单独统计。训练时采用 mosaic 增强和多尺度训练,YOLOv5 里设置--multi-scale,让模型在 480 到 640 之间动态切换输入尺寸。实践下来,框偏大的情况会缓解,但无法完全消除。更彻底的做法是对长边超过 1600 的图片先压缩到 1280 以内再做标注,保持缺陷尺度的一致性。

4.5 验证集划分忽略了同辆车的侧门与车尾图

现象:验证 mAP 很高,但部署到现场后,对新车同一部位的漏检率明显偏高。 原因:随机划分时,数据集中同一辆车的连续帧图片被同时分进训练集和验证集,模型实际记住了这辆车的纹理和光照,而不是缺陷的通用特征。 解决:在划分阶段不能只看文件类别,还要看文件名是否来自同一采集批次。按文件名前 8 位分组划分,每组整体进入训练或验证。这个方法不能做到百分百防泄漏,但对连续拍摄的缺陷图库是性价比最高的方案。

5. 评估 15 类缺陷模型:看哪些指标、抓哪些坏例

5.1 指标选择:mAP 不是唯一答案,每类 AP 才是重点

YOLOv5 训练结束后会输出results.csv,包含 P、R、mAP@0.5、mAP@0.5:0.95。车身缺陷检测场景里,我优先看 mAP@0.5,因为缺陷框不需要像目标检测竞赛那样精确到像素级。mAP@0.5:0.95 是 IoU 从 0.5 到 0.95 取平均,对框的精确位置更敏感,适合评估缺陷定位是否足够准。两个指标都要看,但业务决策主要交给 mAP@0.5。

分类别统计 AP 才是发现问题的手段。YOLOv5 本身保存了confusion_matrix.png和results.png,但更直接的方法是跑一段验证脚本,逐类输出数量与 AP:

import torch import pandas as pd model = torch.hub.load('ultralytics/yolov5', 'custom', path='best.pt') results = model.val(data='data.yaml', batch_size=8) df = pd.DataFrame(results.mp, index=results.names).T df.columns = ['precision', 'recall', 'mAP_0.5', 'mAP_0.5_0.95'] print(df.sort_values('mAP_0.5', ascending=True))

这段脚本加载训练好的 best.pt,在验证集上重新评估,并把每个类别四个指标打印出来。参数说明:model.val内部会读取 data.yaml 里的 val 路径,batch_size越小越省显存但越慢。我通常把结果按 mAP 升序排序,先看尾部那几个类别。如果某类 mAP 明明很高但推理时总漏检,多半是验证集划分偏向容易样本,而不是模型真的变好了。

5.2 坏例分析:从 predict 输出里挑出误检与漏检

指标不能告诉你模型在哪里翻车,只能告诉你它翻车了。我会用一段脚本把验证集预测结果保存成图:

python detect.py \ --weights best.pt \ --source c:/defect_data/images/val \ --save-txt --save-conf \ --conf-thres 0.25 \ --iou-thres 0.45

--save-txt会为每张图保存一个 txt 文件,格式是class conf x_center y_center w h,--save-conf把置信度也写进去。把这些 txt 和 ground truth 做逐框匹配,找出两类典型坏例:一是 IoU 大于 0.1 但小于 0.5 的框,说明模型“找到了目标但框不准”;二是置信度高于 0.8 却完全没有和标注匹配的框,说明模型学到了某种错误特征。

这类坏例很有代表性:车身侧面划痕和阴影的边缘纹理相似,模型经常把排气管阴影当成侧围划痕。处理方式不是简单调高 conf-thres,而是检查数据集中是否缺少“阴影干扰”类负样本。如果数据集里没有明确负样本目录,可以从验证集中把误检图挑出来,作为背景图加进训练集,并保留原图所有正样本标注。

5.3 混淆矩阵:重点看类别对之间的互相干扰

YOLOv5 训练完成后会生成confusion_matrix.png。在 15 类的矩阵里,我只看主对角线两侧的高亮区域。最容易出现的干扰模式是“车门凹陷”和“侧围划痕”互相混:同一个框里既有凹陷又有划痕,标注人员只勾了其中一个类别,模型学到的边缘特征有重叠。

处理混淆对的方法是做标签复核:把这两类类别组合产生的所有预测框导出,逐个看它们是应该合并还是拆分。更实际的做法是在后处理阶段为容易混淆的类别增加类别置信度调整。如果模型对车门凹陷的置信度是 0.3,对侧围划痕的置信度是 0.6,可以设定输出侧围划痕,因为现场维修方案对这两个类别的处置不同,宁可选置信度更高的一侧。

6. 数据增强与迁移学习的进阶用法

6.1 针对性增强:少样本类别再复制粘贴了

车身缺陷数据集的硬伤永远是样本量,尤其是少见类。YOLOv5 自带的 mosaic 增强在 640 输入下能把多张小图拼成一张,等于变相增加样本量。但对于踏板损坏这种小目标,mosaic 拼图后目标尺寸反而更小,不利学习。我更倾向于对包含少数类的原图做局部裁剪,把缺陷框放大后单独存成小图,再作为额外训练图片加入数据集。

在做局部裁剪时要注意,剪出来的小图不能直接丢进训练集,否则模型会对“目标占满全图”产生惯性。需要混合几种尺度:有的裁剪块只含缺陷,有的裁剪块包含缺陷周围 1.5 倍背景。这类局部增强配合--multi-scale训练,能让模型在保持精度的同时,不至于在整车身图上丢了小目标。

6.2 迁移学习与学习率控制:跑 30 轮就能看趋势

车身缺陷和 COCO 数据集里的自然物体差异不小,但低层特征仍有价值。迁移学习阶段的骨干特征已经学会边缘、纹理、色块,剩下要做的是微调高层的语义特征。我会把骨干冻结期设为前 10 轮,训练命令加--freeze 10,让优化器只更新 head 部分,防止初期大步长把预训练权重破坏掉。10 轮后解除冻结,再使用--cos-lr让学习率沿余弦周期下降。

从训练趋势看,如果前 10 轮 cls_loss 没有明显下降,问题基本不在超参,而在数据标注错位。不要急着调学习率,先回头检查 labels 目录下是否有多余的旧标注文件。另一条习惯是每次切数据集后,先用 30 轮小跑验证整套流程,不追求结果,只看 loss 曲线有没有诡异的台阶。这套方法用在这份 7825 张数据上同样有效。

从那以后,我每次解压别人给的数据集,都会强制自己先做一遍“标签与图像同名校验、类别编号重排、按场景划分”三件事,再跑第一次训练。这十几分钟换掉的是训练十几个小时后才发现数据异常的后悔药。这套车身部件损坏车体缺陷检测数据集的 15 类划分方式和双格式目录结构,值得直接拿去配你自己的业务需求。希望帮到你。

本文还有配套的精品资源,点击获取

相关新闻

OpenClaw基于概念的解释:TCAV原理、实践与工程坑

OpenClaw基于概念的解释:TCAV原理、实践与工程坑

模型解释性最近几年都快被聊烂了,但每次有人跑来问我“OpenClaw 能不能做基于概念的解释”,我还是会一下子精神起来。这个问题问得比“你模型准确率多少”有价值多了,因为它背后真正想说的是:模型做判断的理由,能不能用…

2026/10/20 21:19:04 阅读更多 →
TensorFlow 2 复现 Facenet:MTCNN 对齐与三元组损失实战

TensorFlow 2 复现 Facenet:MTCNN 对齐与三元组损失实战

1. 为什么我最终选了 TensorFlow 2 来复现 Facenet1.1 从一次“翻车”的考勤机项目说起前两年我接了一个小活儿,帮一个做企业内训的朋友搞一套“刷脸签到”的演示系统。需求听起来不复杂:员工站在摄像头前,系统认出是谁,自动打勾。…

2026/10/20 21:19:04 阅读更多 →
上下文模式实战:从设计到落地的架构决策与避坑指南

上下文模式实战:从设计到落地的架构决策与避坑指南

1. 从“上下文模式”说起:一个被低估的架构决策第一次看到“context-mode”这个词,很多人会下意识觉得它是个抽象得没边儿的概念——上下文嘛,不就是程序运行时的环境变量、线程本地存储、或者某个框架里的配置对象?但如果你真的在…

2026/10/20 21:19:04 阅读更多 →

最新新闻

AI Agent不是电子人:拆解原理、四大挑战与落地实践

AI Agent不是电子人:拆解原理、四大挑战与落地实践

1. 搜索框和招聘帖里的Agent,和真正跑起来的Agent是两回事我最近刷信息流的时候有种很割裂的体验。一边是铺天盖地的“AI Agent改变世界”“2025是Agent元年”的标题,另一边是我和几个做落地项目的朋友私底下的聊天记录——大家不是在搞什么宏大叙事&…

2026/10/20 21:57:46 阅读更多 →
逻辑回归做回归预测:MATLAB多输入单输出模型实战

逻辑回归做回归预测:MATLAB多输入单输出模型实战

简介:本资源面向需要掌握回归预测建模的Matlab用户,提供一套基于逻辑回归(Logistic Regression)的多输入单输出数据回归预测方案,适合具备一定机器学习基础、希望快速搭建预测模型并替换自有数据的学习者。压缩包共4个…

2026/10/20 21:57:46 阅读更多 →
强化灰狼优化算法SGWO:从数值实验到AutoML超参数搜索

强化灰狼优化算法SGWO:从数值实验到AutoML超参数搜索

在优化算法这个圈子里摸爬滚打这些年,我有一个很深的体会:发论文也好、做实际项目也罢,大家真正缺的不是又一个“新算法”,而是一个能稳定复现、能迁移到真实场景、并且审稿人一眼就能看懂创新点的完整方案。2025年开年&#xff0…

2026/10/20 21:57:46 阅读更多 →
MATLAB ECG仿真GUI实战:信号生成、滤波与心律失常分析

MATLAB ECG仿真GUI实战:信号生成、滤波与心律失常分析

简介:ECGGUI_ECGMATLAB_matlabGUI_ECGarrhythmia_ 是一套面向生物医学工程、信号处理方向学生与科研人员的 MATLAB 心电图分析工具,重点解决 ECG 数据预处理、波形识别与心律失常检测问题。项目以 GUI 交互方式降低使用门槛,适合具备一定 MAT…

2026/10/20 21:57:46 阅读更多 →
STM32驱动ADS1262:高精度24位ADC配置与调试指南

STM32驱动ADS1262:高精度24位ADC配置与调试指南

简介:面向STM32开发者的一套ADS1262/ADS126X系列高精度ADC集成配置程序,适合工业数据采集、医疗仪器等对低噪声24位采样有严格要求的嵌入式场景。压缩包共含2个文件——1个C源文件和1个头文件,整体大小仅7KB,代码精简,…

2026/10/20 21:57:46 阅读更多 →
Delphi 6 纯代码条形码控件:Code39/Code128 编码与绘制实战

Delphi 6 纯代码条形码控件:Code39/Code128 编码与绘制实战

简介:这份资源面向仍在使用 Delphi 6 的开发者,提供一套无需任何外部插件即可生成一维条形码的控件源码,适用于库存管理、产品标识、标签打印等需要条码输出的场景。包内共 17 个文件,约 239KB,以 pas 源码、dcu 编译单…

2026/10/20 21:56:41 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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/20 10:02:08 阅读更多 →
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/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练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/20 9:50:45 阅读更多 →