十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

YOLO+VLM:AOI的下一站,从“检出一个缺陷”到“维护一个产品状态”

YOLO+VLM:AOI的下一站,从“检出一个缺陷”到“维护一个产品状态” AOI的下一站从“检出一个缺陷”到“维护一个产品状态”做AOI自动光学检测的朋友可能都经历过这样一个阶段拿到一个YOLO模型训练部署检测框出来了缺陷标出来了任务完成了。但如果你正在做高密度PCB检测、Micro-LED晶圆质检、或者任何需要“持续理解缺陷分布”的项目你会发现——一个检测框越来越不够用了。AOI检测的重点正在从“某个模型能跑多少帧”转向“系统能不能持续得到一致、足够新的产品状态”。YOLO仍然重要但它不该独自承担缺陷分类、定位、尺寸测量和工艺溯源的全部任务。这不是YOLO不行了。恰恰相反YOLO——尤其是YOLO26——仍然是工业端侧缺陷检测最常用、最有效的一类工具。但当AOI的任务从“这片板子有没有缺陷”变成“这片板子有什么缺陷、在哪、多大、同一位置上一批有没有出现过、是焊膏印刷问题还是回流焊问题”时一个检测框已经不足以支撑后续的质量决策。2026年AOI正在经历一场从“跑一个模型”到“多模型融合”的范式转移。这场转移的背后是检测、跟踪、分割、深度估计与VLM开始协作——而YOLO26的路线图恰好为这场转移提供了关键的技术底座。01 AOI的一个检测框为什么开始不够用了AOI的核心任务长期以来被定义为“在图像中找到缺陷的位置和类别”。YOLO能回答两个问题画面里有什么缺陷以及它大致在哪里。对于固定工位、固定缺陷类型、固定相机的AOI任务这已经足够。但今天的高端AOI面临的是更复杂的连续质量管控任务。检测到一个焊点空洞之后系统还要知道它是不是上一块板同一个位置的缺陷尺寸是否符合IPC标准是否在历史批次中反复出现是否与前一工位的工艺参数相关。这些问题分别需要时间信息、几何信息和工艺语义信息。以Micro-LED芯片阵列检测为例单颗芯片尺寸仅几十微米阵列密度极高。传统AOI依赖单一检测模型输出缺陷框但高密度阵列中相邻芯片的缺陷极易混淆缺陷的尺度、位置和批次间关联难以建立。AOI需要维护的已不是一个检测框列表而是一个产品状态条目缺陷ID、类别、二维与三维位置、尺寸、置信度、检测时间戳和关联的工艺参数。它可以随新批次持续更新也可以在不同工位间传递。这个状态才是质量工程师和MES系统真正可以消费的输入。伪代码AOI缺陷状态管理pythonclass DefectState: AOI缺陷状态条目——多模型融合后的统一输出 def __init__(self): self.defects {} # defect_id - DefectEntry class DefectEntry: def __init__(self, defect_id, category, bbox, confidence): self.id defect_id self.category category # YOLO检测结果 self.bbox_2d bbox # 二维框 self.position_3d None # Depth/Stereo提供 self.area_pixel None # Segmentation提供 self.depth_mm None # Depth估计提供 self.timestamp now() # 时间戳 self.track_id None # Tracker提供 self.semantic_judgment None # VLM提供 self.confidence confidence # 多模型交叉验证后的置信度02 不同模型不是重复而是在解决不同问题AOI的多模型融合不是把五份检测结果摆在一起而是让不同的模型回答不同的问题。在工业缺陷检测场景中这一逻辑正在被越来越多的方案验证检测模型YOLO26负责“是什么缺陷”焊点空洞、划痕、异物、翘曲。YOLO26针对此任务进行了优化与YOLO11等之前版本相比提供了更快的速度和更高的精度。分割模型负责“缺陷边界怎样”精确勾勒缺陷轮廓用于尺寸测量和面积计算。深度估计负责“缺陷有多深”对于3D AOI场景判断凹陷、凸起的高度。异常检测负责“有没有没见过的东西”捕获训练集中未出现的新型缺陷。VLM负责“这意味着什么”判断缺陷是否达到报废标准是否符合客户规范。注意YOLO26的路线图显示其深度估计任务已经进入预训练阶段支持逐像素距离预测为AOI的3D检测提供了原生支持。举一个实际AOI场景YOLO26给出焊点空洞的候选框分割模型精确定义空洞边界并计算面积占比深度估计判断空洞是否贯穿焊点当缺陷形态复杂或标准模糊时VLM给出是否符合IPC-610标准的最终判断。这解释了AOI领域的一个关键趋势多模型不是“大模型替代小模型”。更合理的组合往往是快模型持续跑产线节拍慢模型在需要精细判断时介入。检测模型提供速度和确定性大模型提供理解和柔性。伪代码AOI多模型协同推理pythonclass AOIMultiModelPipeline: AOI多模型协同流水线——让不同模型回答不同问题 def __init__(self): self.detector YOLO(yolo26n.pt) # 检测是什么 self.segmenter SegmentationModel() # 分割边界怎样 self.depth_estimator YOLO(yolo26n-depth.pt) # 深度离多远/多深 self.tracker SORT() # 跟踪还是不是它 self.vlm VLMClient() # VLM意味着什么 def process_board(self, image, board_id): # Step 1: 检测——YOLO26快速检出候选缺陷 det_results self.detector(image, conf0.25) defects [] for det in det_results: # Step 2: 分割——精确定义缺陷边界 mask self.segmenter(image, det.bbox) # Step 3: 深度——获取缺陷深度信息3D AOI场景 depth_map self.depth_estimator(image) depth_value depth_map[det.bbox] # Step 4: VLM——模糊/新型缺陷语义判断仅低置信度触发 if det.conf 0.7 or det.category unknown: semantic self.vlm.analyze(image, det.bbox, prompt判断该缺陷是否达到报废标准并说明原因) else: semantic None defects.append({ category: det.category, bbox: det.bbox, mask: mask, depth: depth_value, area_px: mask.area(), confidence: det.conf, vlm_judgment: semantic }) # Step 5: 跟踪——与历史批次同一位置关联 for defect in defects: defect.track_id self.tracker.update(defect.bbox, board_id) return self._build_board_state(board_id, defects)03 关键不是全都一起跑而是按产线节拍调度不同模型没有必要同频执行。YOLO26检测可以每秒15-20帧持续运行跟上产线节拍分割只在检出缺陷后对ROI区域执行精确计算缺陷尺寸深度估计只在需要三维信息时开启VLM只在缺陷置信度低、标准模糊或新型缺陷出现时介入若把这些模块都固定成同一帧率不仅浪费边缘端算力也会让检测队列越积越长。例如AOI系统可以让YOLO26持续运行检测分割只在检出缺陷后对候选区域执行VLM只在新缺陷类型、低置信度或客户标准变更时处理关键图像。每个模块的频率必须由产线节拍、缺陷率和当前资源决定而不是由“模型能跑多快”单独决定。伪代码AOI按需调度器pythonclass AOIScheduler: AOI模型调度器——不同模型不同频率按需触发 def __init__(self): self.detector YOLO(yolo26n.pt) self.segmenter SegmentationModel() self.depth_estimator YOLO(yolo26n-depth.pt) if USE_3D else None self.vlm VLMClient() self.tracker SORT() # 调度策略 self.detect_every_n_frames 1 # 每帧检测 self.segment_on_defect True # 检出缺陷时才分割 self.depth_on_3d_required True # 需要三维信息时才开启 self.vlm_on_low_conf True # 低置信度时才调用VLM def run_pipeline(self, frame, frame_id): # 1. 检测——每帧都跑 detections self.detector(frame, conf0.25) # 2. 跟踪——每帧更新 self.tracker.update(detections) # 3. 分割——只在检出缺陷时触发 if detections and self.segment_on_defect: for det in detections: det.mask self.segmenter(frame, det.bbox) # 4. 深度——只在需要3D信息时触发如靠近目标或配置开启 depth_map None if self.depth_estimator and self.depth_on_3d_required: depth_map self.depth_estimator(frame) # 5. VLM——只在低置信度、新型缺陷或语义歧义时触发 for det in detections: if det.conf 0.7 or det.category unknown: det.vlm_result self.vlm.analyze( frame, det.bbox, prompt分析该缺陷类型、严重程度和是否符合IPC标准 ) return self._merge_results(frame_id, detections, depth_map)04 AOI多模型融合最大的工程坑通常不是模型本身模型数量增加后瓶颈很容易从NPU算力转到数据路径。YOLO26在工业AOI中的优势正在于此——端到端无NMS推理和移除DFL模块使模型导出更干净ONNX/TensorRT等平台一键导出无障碍。在PCB AOI场景中YOLO26已成功微调用于检测6类裸PCB板缺陷无NMS端到端检测头大幅简化了部署流程。对于AOI系统而言每类缺陷的召回率直接对应产线的漏检率escape rate——漏检的缺陷将流向下一道工序。但即便是YOLO26这样的高效模型在多模型融合架构中也需要精心设计数据流。一帧相机数据若先被CPU复制给检测再复制给分割、深度和VLM内存带宽、格式转换和同步等待很快就会拖慢系统。YOLO26对INT8量化的原生支持使其在边缘端部署时能够进一步降低延迟和内存占用。在汽车零部件缺陷检测的实战中YOLO26系统已成功在某知名车企的生产线上稳定运行8个月检测速度达到每秒15-20帧。伪代码共享输入避免重复拷贝pythonclass AOISharedBuffer: 共享帧Buffer——避免多模型间的数据重复拷贝 def __init__(self): self.frame_buffer None # 统一的图像Tensor self.buffer_owner None # 当前持有者 self.timestamp None self.lock threading.Lock() def acquire(self, model_name): 模型获取帧数据共享读取不拷贝 with self.lock: if self.frame_buffer is None: return None # 返回引用而非拷贝 return self.frame_buffer def release(self, model_name): 模型释放帧数据 with self.lock: # 减少引用计数不释放原始Buffer pass class AOIPipeline: def process_frame(self, raw_frame): # 写入共享Buffer零拷贝 shared AOISharedBuffer() shared.frame_buffer raw_frame # 仅保存引用 # 多模型并行读取同一份数据 det_thread Thread(targetself.detector.predict, args(shared,)) depth_thread Thread(targetself.depth_estimator.predict, args(shared,)) det_thread.start() depth_thread.start() # ... # 所有模型读完后再释放 # 避免在模型读取期间修改Buffer05 多模型融合的价值是交叉验证而不是简单叠加单模型难免会在边界条件下出错。检测分数中等时若分割结果清晰、深度值合理、与历史批次同一位置的缺陷记录一致系统对该缺陷的信任可以提高反过来如果检测框突然出现、深度跳变、轨迹无法关联就应降低可信度或要求重新观察。这种融合不是把几个confidence取平均。它要同时考虑几何一致性、时间连续性、观测质量和任务约束。在AOI场景中一个缺陷如果连续出现在多块板的同一位置且形态相似系统可以给出“疑似工艺偏差”的预警如果只是孤立出现则标记为偶发缺陷。每条条件都应该带有时间戳避免用第100帧的检测去融合第98帧的深度或第101帧的跟踪状态。伪代码AOI交叉验证融合pythonclass AOIFusionEngine: 多模型交叉验证融合——不是取平均而是验证一致性 def fuse(self, det_result, seg_result, depth_result, history, vlm_result): 融合多模型结果输出最终可信度 base_conf det_result.confidence # 条件1分割一致性——缺陷边界清晰且面积合理 if seg_result and seg_result.area 20: base_conf * 1.1 # 条件2深度一致性——深度值在合理范围内 if depth_result and 0.1 depth_result 10: base_conf * 1.1 # 条件3历史一致性——同一位置历史缺陷记录 historical history.get(det_result.bbox, None) if historical: if historical.category det_result.category: base_conf * 1.2 # 历史一致信任度提升 else: base_conf * 0.8 # 历史不一致怀疑 if historical.count 5: # 连续多块板同一位置出现预警工艺问题 self.alert_工艺偏差(det_result.bbox) # 条件4VLM语义验证 if vlm_result: if vlm_result.severity critical: base_conf * 1.3 elif vlm_result.severity acceptable: base_conf * 0.7 # 时间一致性检查——确保所有结果来自同一帧 assert det_result.timestamp seg_result.timestamp depth_result.timestamp return min(base_conf, 1.0)06 从“检出缺陷”到“维护状态”AOI的演进方向2026年的AOI系统正在从单一检测模型走向多模型融合架构。YOLO仍然是AOI检测的核心但它正在从“唯一的模型”变成“多模型系统中的一员”。未来的AOI系统不是某个模型跑多快而是检测、分割、深度估计与VLM开始协作共同维护一个一致的产品质量状态。最终形态由调度器维护统一的产品状态未来的AOI系统不一定把所有模型写死成一条流水线。Scheduler可以根据任务和状态决定调用路径只需快速筛查先用轻量模型扫描整板检出疑似缺陷调用精检测模型YOLO26进行缺陷分类和定位需要精确尺寸调用分割模型精确勾勒缺陷边界需要三维信息调用深度估计模型测量高度/深度结果冲突或标准模糊调用VLM进行语义判断伪代码AOI调度器维护产品状态pythonclass AOISceneState: AOI最终输出统一的产品质量状态 def __init__(self): self.board_id None self.defects [] # 缺陷列表 self.pass_fail PASS # 整板判定 self.timestamp now() self.metadata {} # 工艺参数、批次信息等 class AOIAgent: AOI智能调度器——按需调用模型维护统一状态 def process(self, board_image, board_id, task): # 判断任务类型 if task quick_scan: # 只需快速筛查 results self.lightweight_model(board_image) return self._build_state(results) elif task defect_analysis: # 检出缺陷后详细分析 detections self.yolo26(board_image) for det in detections: # 按需调用 if det.conf 0.7: det.vlm_result self.vlm(board_image, det.bbox) if self.need_3d: det.depth self.depth_estimator(board_image, det.bbox) if self.need_precision: det.mask self.segmenter(board_image, det.bbox) return self._build_state(detections) elif task conflict_resolution: # 结果冲突时调用VLM重新判断 return self.vlm(board_image, task.context)07 结语端侧视觉真正的进化不是从“一个模型”走向“很多模型”而是从“单次推理”走向“持续维护环境状态”。对于AOI系统来说这意味着检测模型YOLO26负责发现缺陷——快、准、稳分割负责精确定义缺陷边界——为尺寸测量提供依据深度估计负责补充三维信息——为3D AOI提供支撑VLM负责开放语义判断——处理模糊标准和新型缺陷Fusion负责交叉验证和时间对齐——输出一致、可用的产品状态最值得避免的做法是把模型简单堆在一起、让它们以相同频率跑、再等待一堆互不一致的结果。更可靠的架构是小模型按高频维护基础状态大模型按事件补充语义不同模型共享输入并带上时间戳最后由融合层输出一个一致、实时、可检查的产品状态。在AOI这个领域真正的挑战不是让一个模型变得更强而是让多个模型各司其职、协同工作——从“检出一个缺陷”走向“维护一个产品状态”。
返回列表