这次我们来看一个很有意思的工业 AI 案例:品客薯片(Pringles)如何用 AI 优化薯片制造。很多人以为 AI 落地都在互联网行业,其实食品制造这类传统行业,反而是 AI 视觉检测最容易产生实际价值的地方。薯片生产线的核心痛点不是“能不能炸熟”,而是“每一片薯片是否足够统一”。
从公开资料看,品客薯片的生产难点在于:薯片在传送带上高速运动,而且每一片的姿态、位置、弯曲程度都不一样。传统机器视觉依赖固定规则,遇到这种高随机性的场景很容易误判。AI 模型则不同,它可以通过大量标注数据学会“什么样才算合格”。这个案例的重点不是模型有多复杂,而是它真的能在高速生产线上跑起来,并且长期稳定运行。
如果你关心生产制造类 AI 项目的落地思路、视觉检测任务的模型选型、边缘端推理部署,或者想了解“AI + 传统制造”能解决什么实际问题,这篇文章可以直接往下看。我会把这个案例拆解成工业 AI 视觉检测的标准流程:数据采集、模型训练、边缘部署、系统集成、性能监控和问题排查。
1. 核心能力速览
| 能力项 | 说明 |
|---|---|
| 项目类型 | 工业视觉质检 / 图像分类 / 异常检测 |
| 核心目标 | 识别薯片形状、颜色、烘烤程度是否达标,剔除不合格产品 |
| 关键 AI 技术 | 深度学习图像分类、目标检测、异常检测、边缘推理 |
| 部署形态 | 生产线边缘计算设备 + 视觉检测系统 |
| 检测速度要求 | 高速生产线实时检测,需满足产线节拍 |
| 硬件门槛 | 工业相机 + GPU 边缘计算设备(实际算力需按产线测试) |
| 适合场景 | 食品制造质检、工业外观检测、批量产品一致性控制 |
| 与传统机器视觉对比 | 传统规则算法难以处理随机姿态,AI 模型泛化能力更强 |
这个项目的本质是:把“老师傅用眼睛看薯片有没有问题”这件事,变成“AI 模型在产线上高速自动判断”。它解决的不是单一算法问题,而是从数据到部署的整套工程问题。
2. 适用场景与使用边界
薯片生产之所以适合用 AI 而不是纯规则算法,是因为薯片的物理特性太随机了。每片薯片从油炸到传送带的过程中,位置偏移、旋转、弯曲程度都不一样;表面颜色受油炸温度、原料批次影响;形状还会因为切割刀具磨损出现微小变化。传统机器视觉要写大量判断规则,比如“面积在多少像素范围内、曲率小于多少、颜色分布落在哪个区间”,但薯片姿态一变化,规则就失效。
AI 视觉检测特别适合这类场景:
- 检测对象姿态随机,难用固定规则描述。
- 缺陷类型多且相似,需要细粒度分类。
- 产线环境稳定,但产品外观波动大。
- 需要长期迭代,能持续用新数据改进模型。
使用边界也很清楚。AI 模型不会凭空知道“什么样算合格”,它依赖标注数据。如果一个工厂没有历史标注数据、没有质量检验记录,AI 项目的前期成本会很高。另外,AI 视觉检测不能替代所有质检环节,比如内部水分含量、油脂氧化程度这类物理化学指标,还是需要专用传感器或实验室检测,视觉只能覆盖外观。
还要强调合规与安全边界。工业 AI 项目涉及的数据通常包含产线运行状态、产品工艺参数、设备信息,部署时要遵守工厂内部数据管理规范。如果涉及供应商提供的算法或第三方云服务,要确认数据是否可以出域、是否涉及商业机密。AI 质检系统的最终判定结果,应当有人工复核机制,特别是在新批次原料投入、换型生产、工艺调整初期,不能完全依赖模型自动剔除。
3. 环境准备与前置条件
一个完整的工业 AI 视觉检测系统,通常包含以下部分。下面给出一套通用架构,生产环境需要根据实际产线情况调整。
3.1 硬件层
- 工业相机:分辨率、帧率、曝光时间要匹配产线速度。薯片在传送带上高速运动,相机帧率不够就会出现运动模糊,导致误检。
- 光源:低角度环形光或背光,用于突出薯片边缘和表面纹理。光源稳定性直接影响图像质量。
- 边缘计算设备:常用 NVIDIA Jetson 系列或工控机加 GPU 显卡,用于运行 AI 推理模型。
- 产线控制 PLC:用于接收 AI 判定结果,触发剔除机构动作。
3.2 软件层
- 操作系统:Ubuntu 18.04/20.04 或 Windows 10/11 工控版,按边缘设备选择。
- Python 环境:Python 3.8 以上,建议使用虚拟环境隔离依赖。
- 深度学习框架:PyTorch 或 TensorFlow,实际部署时通常转换为 ONNX 或 TensorRT 格式提升推理速度。
- 视觉库:OpenCV 用于图像预处理和后处理。
- 部署工具:TensorRT、ONNX Runtime 或 DeepStream(如果使用 NVIDIA 平台)。
3.3 数据层
- 采集历史生产图像,覆盖不同批次、不同光照条件、不同缺陷类型。
- 标注工具:LabelImg、CVAT 或自研标注平台。
- 数据划分:训练集、验证集、测试集,比例建议 7:2:1。
这里要注意一个常见误区:工业项目不要一上来就追求大模型。薯片检测任务的核心不是“模型多聪明”,而是“数据够不够全、部署够不够稳”。先跑通一个轻量分类模型,再逐步增加检测类别,是更稳妥的路径。
4. 数据采集与标注方案
AI 质检模型的精度上限由数据决定。薯片生产线的数据采集有几个关键点。
4.1 采集覆盖维度
- 不同油炸温度下的薯片颜色变化。
- 不同刀具磨损阶段的薯片形状变化。
- 不同原料批次导致的表面纹理差异。
- 不同光源亮度下的图像差异。
- 传送带速度变化导致的运动模糊程度。
要特别关注“边界样本”,也就是那些人工判断时也会犹豫的薯片。这类样本决定了模型判定的边界在哪里,是提升模型精度的关键。
4.2 标注类别设计
薯片质检的类别设计建议按“缺陷类型 + 严重程度”组合,例如:
| 类别 | 说明 |
|---|---|
| 合格 | 形状、颜色、烤色均符合标准 |
| 颜色偏浅 | 油炸不足,表面颜色过浅 |
| 颜色偏深 | 油炸过度,表面颜色过深 |
| 形状异常 | 弯曲度过大或边缘破损 |
| 异物 | 表面附着异物或烤焦颗粒 |
| 边缘焦黑 | 局部烤焦,颜色不均匀 |
标注时建议每张图只标一个主要缺陷,避免一张图多个标签导致模型学习混淆。如果一张图同时有颜色偏深和边缘焦黑,需要单独设置“组合缺陷”类别或按优先级标注。
4.3 数据增强
薯片检测数据增强的核心不是“把图翻来翻去”,而是模拟产线真实变化:
- 小幅旋转:模拟薯片在传送带上的角度变化。
- 亮度扰动:模拟光源波动。
- 高斯模糊:模拟相机对焦偏差。
- 随机裁剪:模拟薯片在画面中的位置偏移。
- 缩放扰动:模拟不同批次薯片大小差异。
这里不建议做剧烈颜色变换,因为薯片颜色本身就是检测目标,过度增强会破坏语义。
5. 模型选型与训练流程
5.1 模型选型
工业视觉检测不需要追求最新的大模型,优先选择成熟、推理快、生态好的模型:
- 分类任务:ResNet、EfficientNet、MobileNet 系列,用于判断“合格/不合格”或“缺陷类型”。
- 目标检测任务:YOLOv5/YOLOv8、Faster R-CNN,用于定位薯片位置并同时判断缺陷区域。
- 异常检测:PatchCore、SPADE,适用于“只知道正常样本,不知道缺陷长什么样”的场景。
对于薯片检测,推荐第一步先做“二分类 + 多分类”的组合:先用二分类模型判断薯片是否合格,再用多分类模型判断具体缺陷类型。这样模型训练简单,且便于在产线上做分级处理。
5.2 训练流程示例
下面给出一套基于 PyTorch 的图像分类训练流程,数据和模型路径需要按实际项目调整。
import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms, models # 数据预处理 transform = transforms.Compose([ transforms.Resize((224, 224)), transforms.RandomRotation(10), transforms.ColorJitter(brightness=0.2), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ]) # 加载数据集,目录结构为 train/合格、train/颜色偏浅... train_dataset = datasets.ImageFolder(root="./datasets/train", transform=transform) val_dataset = datasets.ImageFolder(root="./datasets/val", transform=transform) train_loader = torch.utils.data.DataLoader(train_dataset, batch_size=32, shuffle=True) val_loader = torch.utils.data.DataLoader(val_dataset, batch_size=32, shuffle=False) # 使用预训练模型迁移学习 model = models.mobilenet_v3_small(weights=models.MobileNet_V3_Small_Weights.DEFAULT) num_classes = len(train_dataset.classes) model.classifier[3] = nn.Linear(model.classifier[3].in_features, num_classes) # 训练配置 criterion = nn.CrossEntropyLoss() optimizer = optim.Adam(model.parameters(), lr=0.001) # 训练循环 device = torch.device("cuda" if torch.cuda.is_available() else "cpu") model = model.to(device) for epoch in range(20): model.train() running_loss = 0.0 for images, labels in train_loader: images, labels = images.to(device), labels.to(device) optimizer.zero_grad() outputs = model(images) loss = criterion(outputs, labels) loss.backward() optimizer.step() running_loss += loss.item() print(f"Epoch {epoch+1}, Loss: {running_loss/len(train_loader):.4f}")这段代码是通用的分类训练模板,实际项目中需要替换数据集路径、调整训练轮数和学习率。更稳妥的做法是使用 TensorBoard 或 wandb 记录每个 epoch 的准确率和损失值,避免训练后期过拟合。
5.3 模型评估
训练完成后,不要只看准确率,要重点看混淆矩阵。薯片缺陷检测的难点在于“易混淆类别”:
- 颜色偏浅和正常偏白之间没有明确边界。
- 边缘轻微焦黑容易被判为颜色偏深。
- 弯曲度过大可能因为拍摄角度问题被漏检。
评估时要统计每一类的精确率、召回率和 F1-score,特别是“合格”类的误杀率:把合格薯片误判为不合格,会造成原料浪费;把不合格薯片漏过去,则影响产品质量。生产环境中通常要设置两个阈值:一个偏保守用于剔除,一个偏宽松用于报警,由人工复核后再决定是否调整。
6. 边缘端推理部署
模型训练完成后,部署到产线边缘设备是另一个工程阶段。常见的做法是把 PyTorch 模型转换为 ONNX,再用 ONNX Runtime 或 TensorRT 推理。
6.1 PyTorch 转 ONNX
import torch # 加载训练好的模型 model = torch.load("./models/chip_classifier.pth") model.eval() # 构造示例输入,尺寸需与训练时一致 dummy_input = torch.randn(1, 3, 224, 224) # 转换为 ONNX torch.onnx.export( model, dummy_input, "./models/chip_classifier.onnx", input_names=["input"], output_names=["output"], dynamic_axes={"input": {0: "batch_size"}, "output": {0: "batch_size"}}, opset_version=11 )6.2 ONNX Runtime 推理
import cv2 import numpy as np import onnxruntime as ort # 创建推理会话 sess = ort.InferenceSession("./models/chip_classifier.onnx", providers=["CUDAExecutionProvider", "CPUExecutionProvider"]) def preprocess(image_path): img = cv2.imread(image_path) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = cv2.resize(img, (224, 224)) img = img.astype(np.float32) / 255.0 mean = np.array([0.485, 0.456, 0.406], dtype=np.float32) std = np.array([0.229, 0.224, 0.225], dtype=np.float32) img = (img - mean) / std img = np.transpose(img, (2, 0, 1)) img = np.expand_dims(img, axis=0) return img def infer(image_path): input_data = preprocess(image_path) outputs = sess.run(["output"], {"input": input_data}) pred_class = np.argmax(outputs[0], axis=1)[0] conf = np.max(outputs[0], axis=1)[0] return pred_class, conf # 测试单张图片 cls, conf = infer("./test_images/chip_001.jpg") print(f"类别: {cls}, 置信度: {conf:.4f}")这段代码已经能在 GPU 或 CPU 上运行 ONNX 模型做推理。生产环境中需要把preprocess函数改写为视频流帧处理,并加入时间戳和批次逻辑。
6.3 TensorRT 加速(NVIDIA 平台)
如果边缘设备是 NVIDIA Jetson 或带 NVIDIA GPU 的工控机,建议使用 TensorRT 进一步加速。ONNX 转 TensorRT 有两种方式:使用trtexec命令行工具,或使用 Python API。
# 使用 trtexec 转换 ONNX 模型为 TensorRT engine trtexec --onnx=./models/chip_classifier.onnx \ --saveEngine=./models/chip_classifier.engine \ --fp16使用--fp16开启半精度推理,可以显著降低显存占用并提升吞吐量。对于 FPN 类缺陷判断,FP16 精度损失通常可接受,但必须在测试集上做精度对比,不能直接上线。
7. 实时检测与产线集成
模型部署到位后,下一步是和产线系统集成。一个完整的实时检测流程包括:
- 从工业相机读取图像帧。
- 对图像做预处理。
- 使用 AI 模型推理,得到缺陷类别和置信度。
- 将结果发送给 PLC,触发剔除机构或报警。
- 记录检测结果,保存异常图片。
7.1 模拟产线检测流程
下面给出一套视频流推理的通用逻辑,实际项目需要按产线协议调整:
import cv2 import numpy as np import onnxruntime as ort import time class ChipDetector: def __init__(self, model_path, conf_threshold=0.7): self.sess = ort.InferenceSession(model_path) self.conf_threshold = conf_threshold self.input_name = self.sess.get_inputs()[0].name self.output_name = self.sess.get_outputs()[0].name def preprocess(self, frame): # 裁切薯片所在区域,减少背景干扰 roi = frame[100:500, 200:600] img = cv2.resize(roi, (224, 224)) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = img.astype(np.float32) / 255.0 mean = np.array([0.485, 0.456, 0.406], dtype=np.float32) std = np.array([0.229, 0.224, 0.225], dtype=np.float32) img = (img - mean) / std img = np.transpose(img, (2, 0, 1)) return np.expand_dims(img, axis=0) def detect(self, frame): input_data = self.preprocess(frame) outputs = self.sess.run([self.output_name], {self.input_name: input_data}) pred_class = np.argmax(outputs[0], axis=1)[0] confidence = np.max(outputs[0], axis=1)[0] return pred_class, confidence # 模拟视频流检测 detector = ChipDetector("./models/chip_classifier.onnx") cap = cv2.VideoCapture(0) # 实际项目中改为工业相机 SDK while True: ret, frame = cap.read() if not ret: break start = time.time() pred_class, confidence = detector.detect(frame) elapsed = time.time() - start # 置信度低于阈值,置为"需要人工确认" if confidence < detector.conf_threshold: result_text = "Manual Check" else: result_text = f"Class {pred_class}, Conf {confidence:.2f}" cv2.putText(frame, result_text, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2) cv2.imshow("Chip Detection", frame) if cv2.waitKey(1) & 0xFF == ord("q"): break cap.release() cv2.destroyAllWindows()这段代码是演示用途,真实产线的处理逻辑更复杂:需要处理多相机同步、触发信号、剔除延迟补偿、异常图像保存、批次统计等。但核心流程一样:读取图像 -> 推理 -> 判断 -> 动作。
7.2 PLC 通信
AI 检测结果要送给 PLC 执行剔除动作,常见的方式是使用 Modbus TCP 或通过工业相机厂商 SDK 直接输出。下面给出一个简化版示例。
from pyModbusTCP.client import ModbusClient # 连接 PLC plc = ModbusClient(host="192.168.1.100", port=502, unit_id=1) plc.open() # 假设线圈地址 0 用于触发剔除 # 检测到不合格品时写入 True if pred_class != 0: plc.write_single_coil(0, True) else: plc.write_single_coil(0, False)PLC 通信的地址和协议必须按工厂实际配置调整,这里只是为了说明集成方式。
8. 接口 API 与批量任务
除了实时产线检测,AI 质检系统还经常需要提供离线批量检测能力,比如历史数据复核、新批次抽检、模型迭代验证。这时可以封装一个简单的 HTTP 接口服务。
8.1 FastAPI 接口封装
使用 FastAPI 封装模型推理,支持单张图片检测和批量检测。
from fastapi import FastAPI, UploadFile, File import uvicorn import numpy as np import cv2 import onnxruntime as ort from io import BytesIO app = FastAPI() sess = ort.InferenceSession("./models/chip_classifier.onnx") @app.post("/predict") async def predict(file: UploadFile = File(...)): contents = await file.read() nparr = np.frombuffer(contents, np.uint8) img = cv2.imdecode(nparr, cv2.IMREAD_COLOR) # 预处理与推理 img = cv2.resize(img, (224, 224)) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img = img.astype(np.float32) / 255.0 mean = np.array([0.485, 0.456, 0.406], dtype=np.float32) std = np.array([0.229, 0.224, 0.225], dtype=np.float32) img = (img - mean) / std img = np.transpose(img, (2, 0, 1)) img = np.expand_dims(img, axis=0) outputs = sess.run(["output"], {"input": img}) pred_class = int(np.argmax(outputs[0], axis=1)[0]) confidence = float(np.max(outputs[0], axis=1)[0]) return {"class": pred_class, "confidence": confidence} if __name__ == "__main__": uvicorn.run(app, host="127.0.0.1", port=8000)启动服务:
uvicorn api_server:app --host 127.0.0.1 --port 80008.2 调用接口测试
import requests url = "http://127.0.0.1:8000/predict" files = {"file": open("./test_images/chip_002.jpg", "rb")} response = requests.post(url, files=files, timeout=30) print(response.json())8.3 批量任务处理
批量检测场景下,建议按目录处理,并加入失败重试和结果记录。
import os import csv import requests input_dir = "./batch_input" output_file = "./batch_result.csv" results = [] for filename in os.listdir(input_dir): filepath = os.path.join(input_dir, filename) if not filename.lower().endswith((".jpg", ".jpeg", ".png")): continue try: with open(filepath, "rb") as f: response = requests.post( "http://127.0.0.1:8000/predict", files={"file": f}, timeout=30 ) data = response.json() results.append([filename, data["class"], data["confidence"]]) print(f"{filename}: class={data['class']}, conf={data['confidence']:.4f}") except Exception as e: print(f"{filename}: 检测失败 - {e}") results.append([filename, "error", ""]) with open(output_file, "w", newline="") as f: writer = csv.writer(f) writer.writerow(["filename", "class", "confidence"]) writer.writerows(results)批量任务要加三个机制:失败重试、进度记录、结果校验。生产线批量检测的数据量通常很大,建议把任务拆分成可断点续跑的形式,防止中途异常导致全部重新执行。
9. 资源占用与性能观察
工业 AI 项目上线前必须做性能验证,重点看三个指标:单帧推理耗时、GPU 显存占用、连续运行稳定性。
9.1 单帧推理耗时
推理耗时决定产线节拍能否跟上。测量方法是在推理代码前后加时间戳:
import time start = time.time() pred_class, confidence = detector.detect(frame) elapsed = time.time() - start print(f"单帧推理耗时: {elapsed * 1000:.2f} ms")如果检测速度跟不上产线速度,优先优化方向:
- 将模型转换为 TensorRT 并开启 FP16。
- 缩小输入分辨率,比如从 224x224 降到 192x192。
- 使用批处理:将多张图像合并为一个 batch 推理。
- 减少图像预处理耗时,使用 ROI 剪裁跳过无关区域。
9.2 显存占用观察
在边缘设备上运行模型时,可以使用nvidia-smi查看显存占用:
nvidia-smi --query-gpu=memory.used,memory.total,utilization.gpu --format=csv -l 1生产环境建议将显存占用控制在设备总显存的 70% 以内,留出余量给系统运行和其他进程。如果显存不足,可以换更轻量的模型结构,或降低推理 batch size。
9.3 长时间稳定性测试
工业产线通常是 7x24 小时运行,AI 检测服务不能出现内存泄漏或崩溃。上线前要做连续 72 小时稳定性测试,重点观察:
- 内存占用是否持续增长。
- GPU 显存是否出现碎片化。
- 长时间运行后单帧推理耗时是否漂移。
- 异常图片保存是否导致磁盘写满。
- 相机掉线后能否自动重连。
常见的内存泄漏点包括:视频帧没有释放、ONNX Runtime 会话重复创建、异常图片保存时文件句柄未关闭、日志系统无限增长。测试时建议每次推理后打印一次内存占用,做趋势观察。
10. 常见问题与排查方法
| 问题现象 | 可能原因 | 排查方式 | 解决方案 |
|---|---|---|---|
| 模型推理准确率低 | 训练数据不充分或标注错误 | 检查混淆矩阵,统计每类样本数量 | 补充缺陷样本,清洗标注数据 |
| 合格品被大量误判为不合格 | 阈值设置过严 | 查看置信度分布 | 调整置信度阈值,增加人工复核 |
| 单帧推理耗时过高 | 模型过大、未用 TensorRT | 测量预处理和推理阶段耗时 | 转 TensorRT、缩小模型输入尺寸 |
| GPU 显存不足 | 推理并发过高或模型过大 | 查看 nvidia-smi 显存占用 | 降低并发数、切换轻量模型 |
| 相机采集图像模糊 | 曝光时间过长或产线速度过快 | 检查采集图像静态清晰度 | 降低曝光时间、增加补光 |
| 长时间运行后服务崩溃 | 内存泄漏或显存碎片化 | 观察内存趋势、查看崩溃日志 | 定期重启服务、修复资源释放逻辑 |
| 不合格品未被剔除 | PLC 通信延迟或触发信号丢失 | 检查 PLC 日志和通信协议 | 增加剔除确认机制,设置补偿时间 |
| 新批次原料上线后误检率升高 | 数据分布漂移 | 对比新旧批次图像特征 | 使用少量新数据微调模型,或增加异常检测机制 |
| API 调用超时 | 推理服务繁忙或模型加载慢 | 检查服务端日志和请求队列 | 增加并发处理能力,设置请求超时重试 |
| 批量检测任务卡住 | 单个图片推理异常导致进程阻塞 | 查看任务日志定位卡住文件 | 增加单文件超时和失败跳过机制 |
这里最值得关注的是“数据分布漂移”问题。薯片生产会随季节、原料供应商、设备状态变化,模型的判定标准可能逐渐失效。生产环境必须建立持续收集异常图片的机制,定期用新数据测试模型,如果准确率明显下降,就要考虑用增量数据重新微调模型。
11. 最佳实践与使用建议
从品客薯片这个案例延伸到通用工业 AI 质检项目,有几条工程经验可以复用。
第一,先跑通再优化。不要一上来就追求 99.9% 准确率。先用一套最小可运行配置上线,拿到真实产线数据,再逐步迭代。
第二,数据比模型重要。工业场景中,标注数据的质量和覆盖度决定模型上限。与其花时间调模型结构,不如把时间花在收集边界样本和清理错误标注上。
第三,模型要能快速回滚。上线前保存多个版本的模型文件,新模型效果不好时能快速切换回旧版本。建议模型文件命名带上版本号和训练日期。
第四,结果必须可追溯。每张异常图片都要保存原图、推理结果、置信度、时间戳,方便后续复盘和争议处理。
第五,合规与授权要提前确认。产线数据、设备数据、工艺数据通常属于公司内部敏感信息。使用第三方 AI 服务或开源模型时,要确认数据是否允许出域、模型是否允许商用、是否需要知识产权授权。
第六,每个 AI 检测系统都要有人工复核机制。特别是新批次原料上线、设备换型、工艺调整初期,AI 模型可能失效,必须有质量人员抽检流程。
12. 总结与下一步
品客薯片的 AI 质检案例给我们的启示在于:AI 在工业制造里的价值不在“炫技”,而在“稳定地解决传统算法解决不了的问题”。薯片这种看似简单的产品,因为姿态随机、缺陷多样、产线高速,反而成了 AI 视觉检测特别适合的阵地。
从工程角度看,这个项目最值得尝试的是完整的“数据采集 -> 模型训练 -> 边缘部署 -> 产线集成”链路。第一阶段可以先验证图像分类能否区分“合格/不合格”,第二阶段再扩展到多类缺陷识别,第三阶段接入 PLC 实现自动剔除。
最容易踩的坑是:用实验室精度替代产线稳定性。模型在测试集上准确率高,不代表在产线现场能稳定跑;光照变化、相机抖动、原料批次不同都会让模型效果打折扣。所以各项性能验证要做完整,特别是连续运行稳定性和数据分布漂移监测,这两点是工业 AI 项目成败的关键。建议收藏备用,实际做项目时可以把这套流程当检查清单用。