news 2026/9/14 15:37:08

YOLO+大模型:电子元器件质检智能识别平台实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
YOLO+大模型:电子元器件质检智能识别平台实践

做电子元器件质检这行,最烦的就是每天对着几百块PCB基板找一颗瑕疵电容,看久了眼睛都花。传统机器视觉方案在固定场景下确实能跑,但一换板型、一换光源,阈值参数就要重新调一遍。我最近把YOLO系列检测模型和DeepSeek、千问大模型组合起来,做了一套智能识别平台:前端让YOLO定位每一颗元器件的坐标和类别,后端让大模型根据上下文修正误判、回答“这个丝印到底对应什么型号”这类问题,整体跑下来,把质检流程里最耗人的“人工复核”环节压掉了一大半。这套方案适合正在做电子制造自动化、工业质检,或者单纯对目标检测工程化感兴趣的朋友参考。

整套系统的名字听起来很长,但拆开其实就是三块:YOLO负责“看得见”,大模型负责“想得明白”,中间再加一层工程化的调度逻辑。这里我把从需求拆解、数据集制作、模型训练、大模型接入到问题排查的完整过程都写出来,尽量把踩过的坑和最终落地的参数都讲清楚。

1. 项目整体架构与方案选型

1.1 需求拆解:为什么要把YOLO和大模型放在一起

设计这套系统之前,我先列了几个要解决的真实问题。一是检测对象特殊,贴片电阻、电容、芯片、连接器尺寸都很小,最小的0402封装只有1.0mm×0.5mm,普通检测模型很容易漏检。二是检测结果不能只看“是什么”,还得看“合不合理”,比如一颗芯片丝印模糊,YOLO给出“芯片”的置信度只有0.4,但结合它在电源电路附近、封装形态是QFP,有经验的工程师就能判断出它大概率是电源管理芯片,这种跨模态的推理能力传统检测算法给不了。三是产线希望自动生成检测报告,包括每个器件的坐标、类别、型号猜测和异常说明,纯靠规则模板写起来非常痛苦。

所以我把架构分成了感知层、认知层和应用层。感知层是YOLO检测模型,输出目标框、类别和置信度;认知层由DeepSeek和千问大模型组成,负责把YOLO输出转成文本描述,结合元器件知识库做推理问答;应用层是FastAPI后端加前端界面,把检测结果可视化,并支持一键导出报告。这个分层的好处是每一层都能独立迭代,YOLO模型升级不影响大模型逻辑,大模型换了也不影响检测结果展示。

1.2 YOLO版本选型:从v8到v12该怎么挑

YOLO系列更新太快,从v8到v12再到社区讨论中的YOLO26,很多人会纠结用哪一代。我实际把v8、v10、v11、v12都跑过一遍对比实验,先看下表,再讲我的最终选择逻辑。

版本核心改动优势劣势适合场景
YOLOv8Anchor-Free,C2f模块,Ultralytics维护生态成熟、文档多、部署方案全推理速度中等大多数通用检测需求,最稳的起点
YOLOv10NMS-Free训练,双标签分配省去NMS后处理,推理更快部分算子需要重新适配高吞吐、边缘设备部署
YOLOv11改进Backbone与Neck,C3k2模块精度/速度平衡好,官方权重覆盖全对比v8提升有限,不够惊艳精度和速度都想兼顾的项目
YOLOv12引入区域注意力机制对复杂背景、遮挡场景更鲁棒训练显存占用偏高背景复杂、目标密集的检测
YOLO26社区路线图中的新一代演进版本预期在注意力机制和多尺度融合上有迭代尚未完全稳定,依赖社区成熟度作为预留扩展项,不推荐第一个上生产

我最后的选型是主线用YOLOv8x,副线用YOLOv11m。原因很简单:v8x的权重文件经过大量验证,TensorRT部署有成熟方案;v11m在相同mAP下推理速度比v8x快约15%,适合做实时预览模式。v10的NMS-Free省掉后处理确实快,但它的输出头结构和v8不同,导致我要重新写一套后处理逻辑,对于这个项目来说时间成本不划算。v12在大背景复杂场景下确实更强,但电子元器件数据集里目标基本都在PCB板上,背景相对干净,区域注意力的收益不明显。YOLO26我留了接口,后续版本稳定后再评估切换。

1.3 大模型选型的两个原则

大模型部分,我选择了DeepSeek和千问两个系列,不是随便凑的。DeepSeek在中文文本理解、代码生成和结构化输出方面表现稳定,我用它来解析YOLO的检测结果、写检测报告、回答“XXXX型号是什么”这类问题。千问系列,尤其是Qwen2.5-VL这个多模态版本,可以直接输入图片,适合对YOLO裁剪出来的目标小图做二次校验,比如判断一颗电容上的丝印字符是不是OCR读错了。这两个模型一个偏文本逻辑、一个偏视觉理解,配合起来刚好互补。

选型的另一个原则是接口兼容性。DeepSeek和千问都提供OpenAI兼容的API格式,这意味着我可以用同一套代码库管理两家模型的调用,切换时只需要改base_url和model名称,工程代价非常小。这一点在快速迭代阶段帮了大忙。

2. 电子元器件数据集构建:从采集到标注

2.1 数据采集:别只会用网上公开数据集

训练检测模型的第一步是数据。网上确实有PCB板、电子元器件的公开数据集,但直接拿来用会有两个问题:一是拍摄角度和产线不一致,模型在真实场景下泛化变差;二是公开数据的标注规范五花八门,有的把电阻电容统称为“Passive Component”,有的细分成几十个类别,很难统一。我的做法是分两条线走:先用公开数据集做预训练和模型验证,再拿自己产线采集的真实图像做微调。

采集时注意几个细节。板卡类型要覆盖尽量多,包括电源板、主板、模组板;每块板至少拍5个角度,正上方、左侧15度、右侧15度、底部斜拍、强光直射下各来一张;分辨率建议不低于1200万像素,因为小器件在远距离拍摄下真的只有几十个像素,分辨率不够后面怎么增强都白搭。光源也要考虑进去,产线常见的白光环形光和自然光都各拍一套,模型才不会被某种光照习惯绑定。

2.2 半自动标注:让模型给自己当标注员

标注电子元器件非常耗时,我第一版人工标了5000个框就累得不行。后来用半自动标注流程:先用Roboflow或公开的PCB预训练权重对采集图像做一轮预测,把预测结果导入X-AnyLabeling,人工只修正漏框和类别错误,标注效率至少提升3倍。对于0402这种极小的器件,我会先把图像切块放大,再单独标注,避免目标太小看不清楚。

这里有一个重要的标注规范:类别不要分得太细,也不要太粗。太细会导致样本不均衡,比如“铝电解电容”和“钽电容”外观差异本来就小,模型容易混淆;太粗又会影响实际使用,比如把芯片统一标成“IC”,后面大模型回答具体型号时就缺少上下文。我最终分了8类:贴片电阻、贴片电容、芯片、连接器、电感、二极管、三极管、其他。芯片类还额外加了封装属性标注,方便后续和丝印知识库关联。

2.3 标注格式转换与数据划分

通用标注工具导出的一般是COCO JSON或Pascal VOC XML,而Ultralytics的YOLO训练需要txt格式,每行是“类别 x_center y_center width height”,坐标都是归一化后的值。我写了一个转换脚本,手工标注完成后一键处理成YOLO格式,同时按比例划分数据集。

import os import random import xml.etree.ElementTree as ET from pathlib import Path classes = ["resistor", "capacitor", "chip", "connector", "inductor", "diode", "transistor", "other"] def voc_to_yolo(xml_file, out_txt): tree = ET.parse(xml_file) root = tree.getroot() img_w = int(root.find("size/width").text) img_h = int(root.find("size/height").text) lines = [] for obj in root.iter("object"): cls_name = obj.find("name").text if cls_name not in classes: continue cls_id = classes.index(cls_name) bbox = obj.find("bndbox") x1 = float(bbox.find("xmin").text) y1 = float(bbox.find("ymin").text) x2 = float(bbox.find("xmax").text) y2 = float(bbox.find("ymax").text) x_center = ((x1 + x2) / 2) / img_w y_center = ((y1 + y2) / 2) / img_h w = (x2 - x1) / img_w h = (y2 - y1) / img_h lines.append(f"{cls_id} {x_center:.6f} {y_center:.6f} {w:.6f} {h:.6f}") with open(out_txt, "w") as f: f.write("\n".join(lines)) # 划分数据集 image_files = [p for p in Path("images").glob("*.jpg")] random.shuffle(image_files) train = image_files[: int(len(image_files) * 0.8)] val = image_files[int(len(image_files) * 0.8) : int(len(image_files) * 0.9)] test = image_files[int(len(image_files) * 0.9) :] # 遍历并转换标注 for split, file_list in zip(["train", "val", "test"], [train, val, test]): os.makedirs(f"datasets/pcb/{split}/labels", exist_ok=True) for img in file_list: xml_file = img.with_suffix(".xml") if xml_file.exists(): voc_to_yolo(str(xml_file), f"datasets/pcb/{split}/labels/{img.stem}.txt")

数据划分时要注意按板卡类型分组,不要让同一块板的不同角度照片同时出现在训练集和验证集。否则模型学到的可能是“这块板长什么样”而不是“这类器件长什么样”,验证集指标会虚高,实际部署时马上露馅。

2.4 样本不平衡与小目标增强

电子元器件数据里,贴片电阻和电容数量占绝对大头,芯片和连接器相对少,二极管和三极管就更少。直接用原始数据训练,模型会把所有小方块的都预测成电阻。我用了几个处理手段:一是对少数类做过采样,把芯片、电感、二极管这几类图像在每轮训练中多重复几次;二是在Ultralytics配置里开启Mosaic增强,把四张图拼接成一张,让模型在小尺寸下也能看到完整目标;三是对小目标单独做copy-paste增强,把芯片、连接器这类关键目标从原图切下来,随机贴到其他板上,同时更新标注框。

小目标增强方面,我实际对比过,效果排序是:高分辨率原图输入 > 切图检测 > 单纯Mosaic增强。也就是说,如果硬件算力允许,优先把训练和推理的分辨率从640提升到1280,小目标的mAP能涨4到6个点。切图方案是把大分辨率图切成若干有重叠的patch,分别检测后再合并结果,适合离线质检,但实时性会受影响。

3. YOLO训练与部署优化

3.1 环境准备与训练配置

训练环境我用的是Ubuntu 22.04 + Python 3.10 + CUDA 12.1 + PyTorch 2.3,GPU是单张RTX 4090 24GB。装Ultralytics很简单,直接pip安装即可。数据配置需要准备一个YAML文件,指向训练集和验证集的图像路径,列出类别名称。

# pcb.yaml path: datasets/pcb train: train/images val: val/images test: test/images names: 0: resistor 1: capacitor 2: chip 3: connector 4: inductor 5: diode 6: transistor 7: other

启动训练时我用的命令是:

yolo detect train data=pcb.yaml model=yolov8x.pt epochs=200 imgsz=1280 batch=8 patience=20 optimizer=AdamW lr0=0.001

这里imgsz设成1280是为了小目标,batch设成8是因为1280分辨率下显存占用高。patience=20表示连续20个epoch验证集指标不提升就自动早停,可以省时间。backbone先用ImageNet预训练权重,比从头训练快得多,而且收敛更稳。

3.2 训练过程怎么看,loss曲线怎么读

训练时不要只盯着终端打印的mAP,我更关注三个指标:box_loss、cls_loss、dfl_loss。刚开始训练时box_loss会快速下降,这是模型在学“目标大概在哪个位置”;500个大迭代之后loss下降会变缓,这时模型在做精细位置回归。如果cls_loss一直在降但val mAP停滞,大概率是过拟合了,这时候应该检查数据集是否太小,或者增强是否过重。如果训练loss还在降、验证loss开始反弹,那就是过拟合信号,要提前停止或者加正则。

我一直保留训练过程中的best.pt和last.pt两个权重。best.pt是验证集指标最好的,用于最终部署;last.pt是最新epoch的,万一训练被中断还能接着跑。训练结束后还会跑一遍test集,用小批量推理检查一下漏检和误检样例,这一步比任何指标都直观。

3.3 小目标漏检的针对性优化

即便用了1280分辨率,漏检现象还是存在,尤其是0402封装的电阻和电容。排查之后我发现问题不在模型结构,而在图像输入方式。我做了一个可配置的切片推理模块:把原始大图按512×512窗口、50%重叠率切成子图,先检测子图,再把结果映射回原图坐标。这个方案让小器件的召回率提升了约10%,代价是单张图推理时间从0.8秒涨到1.6秒,对于离线质检任务完全可以接受。

超参数层面,我对mAP偏低的小类别单独调了class weights,用损失权重放大芯片、电感、连接器这几类。操作上,Ultralytics支持在训练配置里传cls=参数增加分类损失权重,也可以写自定义loss,但最简单的办法是给类别列表里少数类做重复采样,我实际试下来效果已经够用。

3.4 模型导出与推理加速

训练完成后,我把模型导出为ONNX,再用TensorRT做INT8量化,最终部署到一台RTX 3060的边缘服务器上。导出命令很简单:

yolo export model=best.pt format=onnx imgsz=1280 dynamic=True

ONNX导出后先用onnxruntime测试输出形状对不对,再用trtexec转成engine。量化时需要在验证集上跑一遍校准,TensorRT会用校准数据统计每层激活值的分布。量化后模型体积从120MB降到36MB左右,推理时间从18ms降到6ms。对于产线上的实时模式,这个速度刚好够用。

有个细节要提醒:导出时imgsz必须和训练时的输入分辨率一致,否则网络内部尺寸对齐会出问题。如果要用动态批量,dynamic=True一定要打开,否则部署时batch只能固定成1,GPU利用率上不去。

4. 融合DeepSeek与千问大模型的智能识别平台

4.1 大模型在平台里的分工

平台的大模型部分,我按输入输出类型做了明确分工。DeepSeek以纯文本为主,输入是YOLO输出的结构化JSON,输出是自然语言检测报告、故障说明、元器件型号解释。千问多模态部分用的是Qwen2.5-VL,输入是YOLO裁剪出来的目标小图,输出是这个目标的外观描述、丝印OCR内容、封装判断,相当于一个“看图说话”校准器。二者通过一个调度模块协作:当YOLO置信度低于0.5时,触发千问多看一次图;当YOLO输出结果足够可信,直接交给DeepSeek整合成报告,不浪费多模态调用。

这样设计是为了控制成本和时间。多模态模型的单次推理比纯文本贵很多,如果每颗器件都调千问VL,产线上几百个目标会产生大量开销。我加了一个置信度阈值逻辑,低置信度才启用多模态复核,高置信度直接走文本流程,系统整体吞吐和成本都更可控。

4.2 DeepSeek API接入示例

DeepSeek的接口兼容OpenAI格式,所以我直接用了openai这个Python包。关键代码就几十行,先把检测结果组装成固定结构的文本,再让DeepSeek按要求输出JSON。

from openai import OpenAI import json client = OpenAI( api_key="your-deepseek-api-key", base_url="https://api.deepseek.com" ) def build_prompt(detections, image_name): det_lines = [] for det in detections: det_lines.append( f"- 目标ID {det['id']}: {det['class']}, " f"置信度 {det['confidence']:.2f}, " f"坐标 ({det['x']:.1f}, {det['y']:.1f}, {det['w']:.1f}, {det['h']:.1f})" ) det_str = "\n".join(det_lines) return f""" 你是一个电子元器件检测报告助手。以下是YOLO模型从图片"{image_name}"中检测到的目标信息: {det_str} 请根据以上信息生成结构化检测报告,输出JSON格式,字段如下: {{ "summary": "整体结论", "component_count": 目标总数量, "detections": [每条目标给出建议备注], "abnormal": ["异常项"] }} 只输出JSON,不要有多余文字。 """ resp = client.chat.completions.create( model="deepseek-chat", messages=[ {"role": "system", "content": "你是电子制造行业的质检分析助手。"}, {"role": "user", "content": build_prompt(detections, image_name)} ], temperature=0.2, max_tokens=1500, response_format={"type": "json_object"} ) result = json.loads(resp.choices[0].message.content)

这里有两个容易踩的坑。一是response_format里的json_object模式只有在请求参数里同时声明才能启用,否则模型会输出大段多余解释,解析容易失败。二是temperature要压低,我设成0.2,质检场景不需要模型发挥创造力,要的是稳定输出。

4.3 千问多模态复核:给低置信度目标一个“第二次机会”

对于置信度低于0.4的目标,系统会把原始图片里对应的目标区域裁剪出来,连带上下文范围再裁一圈,一起发给Qwen2.5-VL做复核。为什么要带周边上下文?因为只看目标本身可能很难判断,比如一个光秃秃的黑色长方体,单独看像芯片,但看到周围有引脚和散热焊盘,就能确认是LDO稳压器。

from openai import OpenAI vl_client = OpenAI( api_key="your-dashscope-api-key", base_url="https://dashscope.aliyuncs.com/compatible-mode/v1" ) def qwen_vl_review(crop_path, context_path): import base64 with open(crop_path, "rb") as f: crop_b64 = base64.b64encode(f.read()).decode() with open(context_path, "rb") as f: ctx_b64 = base64.b64encode(f.read()).decode() resp = vl_client.chat.completions.create( model="qwen-vl-plus", messages=[ { "role": "user", "content": [ {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{crop_b64}"}}, {"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{ctx_b64}"}}, {"type": "text", "text": "请比较这两张图片,前者是目标裁剪图,后者是周边上下文。请判断前者的电子元器件类别,并说明依据。"} ] } ], temperature=0.1 ) return resp.choices[0].message.content

千问VL复核结果返回后,系统会把它和YOLO的原始置信度做一个加权融合。比如YOLO说0.4置信度是芯片,千问也说这是芯片并给出“引脚间距明显、顶面丝印清晰”的理由,那最终置信度就上调到0.7,进入正常报告流程。如果千问认为这是电容,系统会打上“类别待人工确认”标签,单独列到异常清单里。

4.4 本地知识库与bge-m3:让大模型学会查手册

DeepSeek和千问虽然很强,但它们不懂你产线上特定型号元器件的丝印编码规则。我给平台加了一个RAG知识库模块,用bge-m3做embedding,把常见元器件的规格书、丝印对照表、替代料表都向量化存进来。用户问“AB8536是什么”,系统先用bge-m3检索知识库,找到最相关的Top5片段,再把片段拼进prompt,让大模型基于检索结果回答。

检索代码大致是这样的:

from FlagEmbedding import BGEM3FlagModel import numpy as np model = BGEM3FlagModel("BAAI/bge-m3", use_fp16=True) def embed_texts(texts): outputs = model.encode(texts, return_dense=True) return outputs["dense_vecs"] def search_kb(query, kb_embeddings, kb_docs, top_k=5): q_emb = embed_texts([query])[0] scores = np.dot(kb_embeddings, q_emb) top_indices = np.argsort(scores)[::-1][:top_k] return [kb_docs[i] for i in top_indices], [float(scores[i]) for i in top_indices]

整个链路跑通后,用户在前端界面选中一个检测框,系统会同时显示YOLO类别、千问复核结果、bge-m3检索到的型号资料,再由DeepSeek汇总成一段可读性很强的话。这种把实时检测和离线知识库结合起来的体验,是纯YOLO方案做不到的。

4.5 平台界面与交互设计

前端我用Gradio快速搭了一版原型,后来又套了一层Vue的壳子方便产线用浏览器访问。功能包括:上传图片或接入摄像头流、显示检测框和类别标签、点击检测框查看大模型分析结果、批量导出XML/PDF报告。后台用FastAPI提供两个核心接口:/detect用于YOLO检测,/analyze用于大模型综合分析。两个接口解耦,前端可以先展示检测框,再异步加载分析结果,用户不会觉得卡顿。

我在界面上专门加了一个“置信度热力图”,把低置信度目标用橙色标出,高置信度用绿色。这样质检员一眼就能看到哪些目标需要重点关注,比逐条看数字效率高很多。

5. 常见问题与排查技巧实录

5.1 问题速查表

现象可能原因解决办法
小尺寸器件漏检严重输入分辨率过低、目标像素太少imgsz提升到1280,开启切片推理,使用TTA
电阻和电容互相误判外观过于相似、标注类别边界不清晰采集更多近景纹理图,细分标注规范,用千问VL二次复核
推理速度不达标模型太大、TensorRT未启用换YOLO v11m或v10,转ONNX+TensorRT INT8,降低输入分辨率
大模型回答不准确Prompt上下文不足、知识库检索不准补充RAG检索片段,压低temperature,增加few-shot示例
高置信度目标仍然识别错训练数据类别不平衡、过拟合检查数据集分布,过采样少数类,降低训练epoch或增强强度
千问VL调用超时图片过大、网络延迟裁剪图压缩到512×512以内,图片转base64后缩小尺寸

5.2 类别混淆的详细排查过程

电容和电阻的混淆,是我在这个项目里遇到最多的一个问题。从形状上看,贴片电阻通常是黑色小方块,贴片电容偏棕色或浅色,但在低光照、回流焊后有助焊剂残留的情况下,颜色特征会被严重干扰。我排查后发现两个关键问题:一是标注阶段误标了大约3%的电容为电阻,模型学到了错误的类别边界;二是训练数据里近景特写图太少,模型能看到的纹理特征有限。

解决办法是重新做了一轮标注校对,把所有电容类图片调出来使用千问VL批量预审,发现疑似标错的再人工确认。同时增加了一组“焊后板”采集数据,让模型看到回流焊之后的真实外观。最终电阻和电容的类别置信度从0.55左右提升到0.82,误判率降了一半以上。

5.3 大模型幻觉控制

大模型最容易出的问题就是幻觉,尤其是面对一个它没见过的丝印编码时,可能会编一个看起来很像的型号。我的处理思路是强约束:在system prompt里明确写“如果知识库中没有匹配信息,请直接回答未知,不要猜测”;把YOLO的置信度和坐标信息当作“观测事实”,大模型只能基于这些事实推理,不能自己发明检测框;低置信度目标必须触发千问VL复核,复核结果和大模型报告分开显示,避免大模型被误导。

另外我整理了几十条真实丝印问答对,做成few-shot示例放进prompt里,模型输出格式稳定了很多。这个方法成本低,效果却非常明显,产线测试时报告可用率从72%提升到91%。

5.4 实测性能数据

给这整套系统做个阶段性的性能总结。YOLO检测部分,用RTX 3060跑TensorRT INT8量化后的模型,1280分辨率下单张推理约6ms,FP32约15ms,CPU模式下约180ms,完全满足产线需求。目标检测指标方面,我最终实现了mAP50为0.89、mAP50-95为0.74,其中芯片和连接器这几类数据量少的类别mAP50也达到了0.82,说明过采样和copy-paste增强起效了。大模型分析链路,单张板卡约35个目标,DeepSeek生成报告平均1.2秒,千问VL复核每个目标约1.8秒,加上RAG检索,整套平台单张图片从上传到拿到完整分析报告大约需要30秒,适合离线抽检场景。

结尾

做这套系统最大的体会是:别把大模型想成“什么都能干的神器”,也别把YOLO当成需要频繁换代的玩具。实际工程里,YOLO负责给出确定性的检测框和类别,大模型负责在检测结果基础上做解释、纠错和报告生成,各干各擅长的事,效果才会稳。最后再分享一个小技巧:先把YOLO检测、DeepSeek报告、千问复核、bge-m3检索四个模块单独打通,确认每个模块的输出格式都能被下一个模块解析,再去做界面集成。先搭最小可用闭环,再逐步加功能,比一上来就铺大而全的平台要省力得多。如果后续要扩展,可以考虑把检测类别从8类扩展到几十类,或者在YOLO基础上再加一个实例分割头,直接输出器件轮廓,这会是一套实用性很强的工业质检方案。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/14 15:36:47

智能问数进入决策时代:从查数到拍板的四大技术跃迁

1. 项目概述:当“问数”不再只是查数,而是直接参与拍板“智能问数进入决策时代”——这句话不是PPT里的口号,是我去年在给三家制造业客户做BI系统升级时,被反复按在会议室白板前听他们说的原话。他们不关心报表多好看,…

作者头像 李华
网站建设 2026/9/14 15:36:12

ROS2节点与话题通信:从原理到实践的完整指南

第一次接触ROS2的时候,我花了两天时间才真正想明白“节点”和“话题”到底是什么意思。网上教程一大片,但绝大多数是念API文档,念完我还是不知道:什么时候该建一个节点?话题为什么不能像函数一样直接调用?为…

作者头像 李华
网站建设 2026/9/14 15:35:31

VLA模型训练适配的数据采集设备核心设计

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

作者头像 李华