第一讲:课程导论与项目全景

各位同学,大家好。我是你们这门课的主讲。在机器视觉这行摸爬滚打了十几年,从最早的工业相机调试,到后来做嵌入式端的算法移植,踩过的坑确实不少。今天咱们开始第一讲,先聊聊分拣机这个行业,以及我们为什么要做算法移植。

说实话,分拣机这东西,你在大街上的快递站、物流中心、甚至食品厂里都能见到。但真正把它做稳定、做快,其实没那么简单。我当年刚入行时,跟过一个项目——给某快递公司做包裹分拣。结果呢?一到双十一,机器就卡壳,识别率掉到70%以下。老板急得直跳脚。后来才发现,问题出在算法移植上——我们在PC上跑得飞快的模型,到了嵌入式板子上,根本跑不动。

嗯,这就是我们今天要讲的核心痛点。

分拣机行业现状

先说说行业现状。分拣机,说白了就是自动把不同种类的物料分开。比如快递包裹按地址分、食品按颜色分、电子元件按大小分。目前主流的分拣方式有三种:

  • 机械式分拣:靠挡板、推杆、皮带。简单粗暴,但容易损坏物料。
  • 气动式分拣:用高压气流吹走物料。速度快,但噪音大。
  • 视觉引导式分拣:用相机拍照,算法识别,然后机械臂或气嘴动作。这是目前最主流、也是我们课程要讲的方向。

视觉引导式分拣,核心就两步:识别定位。识别是什么?就是告诉系统“这是个苹果,不是橙子”。定位呢?就是告诉机械臂“苹果在坐标(100, 200, 50)处”。

但问题来了——现在的分拣机,对速度要求越来越高。一条产线每分钟要处理几百件物料。你算法再准,跑得慢,照样白搭。我见过太多项目,算法在PC上跑30帧,一上嵌入式板子,直接掉到5帧。你说这怎么用?

物料识别痛点

接下来聊聊痛点。物料识别,看着简单,实际坑很多。我总结了几条:

  • 光照变化:车间里的灯,上午和下午亮度不一样。甚至同一个灯,用久了也会衰减。模型在实验室里跑得挺好,一到现场就翻车。我曾经遇到过,一个模型在白天识别率99%,到了晚上只有60%。后来查了半天,发现是光照不均匀导致的。
  • 物料多样性:同一种物料,可能有不同颜色、不同形状、不同纹理。比如苹果,有红的、绿的、黄的。你模型只见过红苹果,突然来个青苹果,它就懵了。
  • 遮挡与堆叠:物料在传送带上,经常互相遮挡。你只能看到一部分,怎么判断它是什么?这需要模型有很强的推理能力。
  • 实时性要求:这是最要命的。分拣机要求毫秒级响应。你算法再准,如果一帧处理时间超过100ms,产线就得停。我见过一个项目,算法移植到Jetson Nano上,推理时间从20ms变成了200ms。为什么?因为模型太大,显存不够,频繁交换数据。

核心矛盾:算法精度 vs 推理速度。精度越高,模型越大,速度越慢。怎么平衡?这就是我们这门课要解决的核心问题。

算法移植全流程概览

好,那算法移植到底是个什么流程?我给大家画个图(嗯,用文字描述吧):

  1. 模型训练:在PC上用PyTorch或TensorFlow训练模型。这一步大家应该都会。
  2. 模型转换:把训练好的模型,转换成嵌入式平台能跑的格式。比如转成TensorRT的.engine文件,或者RKNN的.rknn文件。这一步最容易出问题——算子不支持、精度下降、内存对齐不对,等等。
  3. 模型量化:把FP32的模型,量化成FP16甚至INT8。精度会掉一点,但速度能翻好几倍。我个人的习惯是,先做FP16量化,如果精度还能接受,再尝试INT8。
  4. 推理引擎集成:在嵌入式板子上,用C++调用推理引擎(比如TensorRT、RKNN Toolkit)。这一步要注意内存管理,别搞内存泄漏。
  5. 前后处理优化:图像预处理(缩放、归一化)和后处理(NMS、坐标转换)也要用C++重写。Python在这块太慢了。
  6. 系统联调:把算法和机械控制、通信模块整合到一起。跑起来,看帧率、看延迟、看稳定性。

这个流程,说起来简单,做起来每一步都有坑。比如模型转换,我遇到过最离谱的一次——模型转成TensorRT后,推理结果全是NaN。查了三天,发现是某个自定义算子不支持。后来只能手写CUDA算子替代。嗯,这种经历,一次就够了。

开发板选型:Jetson Nano vs RK3588

最后聊聊开发板选型。目前市面上主流的嵌入式AI板子,就两个阵营:NVIDIA的Jetson系列,和瑞芯微的RK系列。我们课程主要用Jetson Nano和RK3588。为什么选这两个?

对比项 Jetson Nano RK3588
算力 472 GFLOPS (FP16) 6 TOPS (INT8)
显存 4GB LPDDR4 8GB/16GB LPDDR4X
推理框架 TensorRT RKNN Toolkit
生态 非常成熟,社区活跃 国内支持好,文档中文多
价格 约800元 约1200元
功耗 5W-10W 8W-15W
适用场景 中小型项目,快速原型 对算力要求更高的场景

我个人建议:如果你刚入门,预算有限,先玩Jetson Nano。生态好,遇到问题网上随便一搜就有答案。但如果你要做量产项目,对算力有要求,RK3588更合适。毕竟6 TOPS的INT8算力,跑轻量级模型绰绰有余。

避坑指南:我曾经在Jetson Nano上跑YOLOv5s,FP16量化后推理时间约30ms。但同样的模型,在RK3588上INT8量化后,推理时间只有15ms。所以选板子时,一定要结合你的模型和精度要求来。别盲目追求高算力,也别为了省钱选太弱的板子。

好了,第一讲就到这里。我们梳理了分拣机行业现状、物料识别的痛点、算法移植的全流程,以及开发板选型。下一讲,我们会深入讲解如何搭建开发环境,包括Jetson Nano和RK3588的刷机、配置、以及TensorRT和RKNN Toolkit的安装。到时候我会手把手带大家操作。

记住一句话:算法移植,不是把代码拷过去就完事了。它是一个系统工程,每一步都要精心设计。 咱们慢慢来,不着急。

注意:课程中所有代码和示例,我都会提供完整的工程文件。但请务必自己动手敲一遍。光看不练,等于白学。我见过太多人,看视频时觉得“我都会了”,一上手就卡住。嗯,别做那种人。

好,下课。有问题随时在群里问我。咱们下节课见。