一个 AOI 芯片检测的真实项目,带你彻底认识深度学习落地的核心武器
开头:你以为深度学习很难?
你有没有过这种经历?
刷短视频看到别人用 AI 识别猫猫狗狗,觉得很酷。打开 GitHub 找了个 YOLO 教程,照着跑了一遍——识别效果还不错。
然后你想:「我也想在产线上用这个。」
打开项目代码,发现里面有train.py、export.py、compare_onnx.py、assemble_v4_cbroken_safe.py……每个文件都看不懂。
你以为深度学习很难,其实不是难——是没人告诉你从哪开始。
我第一次接触深度学习的时候,也是这样。Python 会写,PyTorch 没碰过,YOLO 只听说过名字。后来接手了一个 AOI(自动光学检测)项目,需要训练芯片焊盘缺陷检测模型。
三个月后,我训出了 99.93% 准确率的极性分类模型,部署到了产线上。
不是因为我有多聪明——而是因为深度学习的「入门门槛」比你想象的低。
一、深度学习到底是什么?
传统图像处理 vs 深度学习
传统图像处理: 输入图像 → 人工设计规则(阈值/边缘/形态学)→ 输出结果 例如:用 OpenCV 写 500 行代码检测芯片缺陷 深度学习: 输入图像 + 标注数据 → 模型自动学习特征 → 输出结果 例如:用 5 行代码训练一个检测模型核心区别:传统方法靠人写规则,深度学习靠数据学规则。
工业视觉的三大任务
| 任务 | 输入 | 输出 | AOI 应用 |
|---|---|---|---|
| 目标检测(Detection) | 图像 | 目标位置 + 类别 | 灯组检测、芯片检测 |
| 图像分类(Classification) | 图像 | 类别概率 | 极性分类、缺陷分类 |
| 实例分割(Segmentation) | 图像 | 像素级掩码 | 焊盘分割 |
二、3 分钟跑通第一个 YOLO 训练
环境要求
# 1. 创建 Conda 环境conda create-n yolo_env python=3.12 conda activate yolo_env# 2. 安装 PyTorch(CUDA 12.8)pip install torch torchvision--index-url https://download.pytorch.org/whl/cu128# 3. 安装 Ultralyticspip install ultralytics最简训练脚本
# train.py — 5 行代码训练一个分类模型fromultralyticsimportYOLO# 1. 加载预训练模型model=YOLO("yolov12n-cls.pt")# 2. 开始训练results=model.train(data="dataset/",# 分类任务:文件夹结构epochs=30,# 训练 30 轮batch=256,# 批大小imgsz=224,# 输入尺寸)# 3. 产出:runs/classify/train/weights/best.pt5 行代码,训练完成。产出一个.pt权重文件。
三、AOI 项目:一个工业级深度学习项目的全貌
项目目录树
AOI_train_python/ ├── group_detect/ # 灯组检测(HBB 目标检测) │ ├── train.py # 训练脚本 │ ├── compare_hbb_onnx.py # ONNX 验证 │ └── data.yaml # 数据集配置 ├── chip_detect/ # 芯片检测(OBB 旋转检测) │ ├── train.py │ ├── yolo_obb_export.py │ └── data.yaml ├── polar_classify/ # 极性分类(图像分类) │ ├── yolo_train.py # 统一训练入口 │ ├── yolo_export.py # ONNX 导出 │ └── data/datasets/ # 数据集 ├── chip_defect/ # 缺陷分类(图像分类) │ ├── yolo_train.py │ ├── yolo_export.py │ └── assemble_v*.py # 数据组装脚本 └── deliveries/ # 模型交付归档 ├── defect_cls/ # 缺陷分类交付 ├── polar_cls/ # 极性分类交付 └── joint_e2e/ # 双模型联验四大模块一览
| 模块 | 任务类型 | 模型 | 输入尺寸 | 精度 | 速度 |
|---|---|---|---|---|---|
| group_detect | HBB 检测 | YOLO11s | 640x640 | 100% | 23ms |
| chip_detect | OBB 检测 | YOLO11s-obb | 320x320 | 100% | 11ms |
| polar_classify | 分类 | YOLO12n-cls | 224x224 | 99.93% | 5ms |
| chip_defect | 分类 | YOLO11n-cls | 224x224 | 98.77% | 5ms |
业务流水线
整板图像(4000x3000) ↓ group_detect(找灯组,HBB) ↓ rotate_crop(切块,旋转校正) ↓ chip_detect(找芯片,OBB) ↓ polar_classify(极性分类,8 类) ↓ 导出 ONNX ↓ 产线 C++ 系统四、技术栈全景图
┌─────────────────────────────────────────────────┐ │ 技术栈全景 │ ├─────────────────────────────────────────────────┤ │ 框架:Ultralytics YOLO(v8 / v11 / v12) │ │ 训练:PyTorch 2.7 + CUDA 12.8 │ │ GPU:NVIDIA GeForce RTX 5090 │ │ 导出:ONNX(opset=12, IR=8, FP16) │ │ 部署:C++ ONNX Runtime │ │ 标注:X-AnyLabeling │ │ 环境:Conda(Python 3.12) │ └─────────────────────────────────────────────────┘为什么选 YOLO?
- 快:推理速度极快,满足产线实时要求
- 准:工业场景精度足够
- 简单:API 设计优雅,5 行代码就能训练
- 生态:Ultralytics 社区活跃,文档完善
为什么导出 ONNX?
.pt是 PyTorch 专属格式,C++ 不认识- ONNX 是通用格式,ONNX Runtime / TensorRT / OpenVINO 都支持
- 产线标准路径:
.pt→.onnx→ C++ 推理
五、避坑指南(新手高频错误)
坑1:GPU 版本不匹配
# ❌ 错误:先装 PyTorch 再装 CUDApip install torch# 装的是 CPU 版本!python-c"import torch; print(torch.cuda.is_available())"# False# ✅ 正确:先确认 CUDA 版本,再装对应 PyTorchnvidia-smi# 查看 CUDA 版本pip install torch--index-url https://download.pytorch.org/whl/cu128 python-c"import torch; print(torch.cuda.is_available())"# True坑2:显存不够
# ❌ 错误:直接上 large 模型model=YOLO("yolov12l-cls.pt")# 显存爆炸# ✅ 从 nano 开始model=YOLO("yolov12n-cls.pt")# 参数最少,显存友好坑3:数据集格式不对
# ❌ 错误:分类任务用检测格式dataset/ ├── images/ │ ├── train/ │ └── val/ └── labels/# 分类任务不需要 labels# ✅ 正确:分类任务用目录结构dataset/ ├── train/ │ ├── class1/ │ ├── class2/ │ └── class3/ └── val/ ├── class1/ ├── class2/ └── class3/坑4:训练集和验证集有重叠
现象:训练集上 99%,产线上 80%。
原因:同一张图既在训练集又在验证集,模型「背答案」了。
解法:严格划分训练集和验证集,不能有重叠。
坑5:不看训练日志
现象:训练完了不知道效果怎么样。
解法:训练完成后查看results.csv,关注val/box_loss和val/mAP50。
AOI 项目优秀实践
- 模块化架构:四大模块职责清晰,可独立训练和部署
- 统一训练入口:
yolo_train.py参数化设计,一行命令训练 - 版本化管理:数据集、权重、ONNX 都有版本号,可追溯
AOI 项目可改进之处
- 缺少环境搭建文档:没有
environment.yml,新人搭建环境靠猜 - 缺少 CONTRIBUTING 指南:不知道怎么参与贡献
- 缺少自动化测试:训练脚本没有单元测试
结尾
说回那个「深度学习很难」的故事。
后来我发现,深度学习的入门门槛其实很低。5 行代码训练一个模型,10 行代码导出 ONNX,20 行代码部署到 C++。
不是因为深度学习有多难——而是因为没人告诉你从哪开始。
现在你知道了。从pip install ultralytics开始,训练你的第一个模型。
翻翻你的项目:
- 你的项目有深度学习需求吗?还是传统图像处理就够了?
- 你有 GPU 吗?没有的话可以用 Google Colab 免费 GPU。
- 你有标注数据吗?没有的话可以从 COCO 数据集开始练手。
评论区说说你对深度学习的第一印象,以及你想用它解决什么问题。
觉得有用?
收藏这篇,下次想入门深度学习时翻出来照着做。转发给你团队里那个天天说「深度学习太难了」的同事。
下期预告:
模型训练 80% 的时间在搞数据,你准备好了吗?
从标注到裁图到增强,AOI 项目的数据流水线全拆解。
下一篇,我们聊数据准备——深度学习的「粮食」。
本文是《深度学习基础知识与实战技术栈》系列第一篇。