刚看到RT-Thread这个命题的时候,我第一反应是:工业质检AI,听着像是个要上产线、碰机械臂、调工业相机的大工程,普通开发者怎么碰?但仔细拆完这个命题之后,我的想法变了——这恰恰是近几年嵌入式赛题里少见的、对个人开发者足够友好的方向。它不要求你懂复杂的运动控制,不要求你处理海量PLC协议,核心其实就是一件事:把图像识别跑在带RT-Thread的嵌入式设备上,实现一个能用的质检demo。
我这两年正好做过几个类似的边缘视觉项目,从算法选型到硬件选型都踩过不少坑,借这个命题公布的机会,把我的完整思路和实操方案整理出来。这篇文章适合谁?打算参加RT-Thread相关开发者赛事的同学、想入门边缘AI但不知道从哪下手的嵌入式工程师、以及好奇"工业质检到底是怎么落地"的产品经理。我会把从硬件选型到模型部署、再到最终答辩展示的完整链路都讲一遍,照着这个思路走,哪怕你是第一次接触AI的嵌入式开发者,也能拿出一个能打的作品。
1. 为什么工业质检会成为嵌入式命题的"香饽饽"
1.1 行业侧:质检是所有工厂的刚需,但传统方案贵到离谱
传统工业质检的主流方案是什么?是工业相机加高性能工控机,一套下来动辄几万到几十万。视觉算法跑在PC上,通过网线或采集卡连接,产线上每个工位都要部署一套完整的工控机系统。大型工厂可以这么玩,但中小型工厂、尤其是做小批量多品种生产的车间,根本算不过这笔账。
这就带来一个巨大的市场空白:能不能把质检算法压缩到几百块钱的嵌入式板卡上,让一个工位用一台带摄像头的边缘终端就能完成检测?这个市场空白,恰恰是嵌入式开发者最擅长填的。RT-Thread这个命题选在工业质检方向,本质上是在呼应这个行业趋势——边缘AI质检正在从"集成商专属方案"变成"通用嵌入式能力"。
1.2 技术侧:模型轻量化让边缘推理成为可能
放在五年前,工业质检的算法模型动辄几十上百兆参数,普通嵌入式芯片根本扛不住。但最近两年,轻量化模型的进展非常快。以YOLO系列为例,从YOLOv5n到YOLOv8n,参数量降到3M左右,INT8量化后模型体积只有几兆,在RKNN、TensorRT这类推理框架上能达到几十毫秒一帧的推理速度。这意味着什么?意味着一个300块的AI开发板,就能完成过去需要上万块工控机才能完成的检测任务。
再加上现在模型转换工具链越来越成熟,ONNX到RKNN、ONNX到TensorRT都有相对完善的转换流程,嵌入式开发者不需要自己从零写推理代码,只需要会训练模型、会调参、会处理数据,就能把AI能力落在嵌入式设备上。这也是这个命题敢说"每个开发者都能做"的技术底气。
1.3 命题设计者的深层考量:这是一个"可演示、可量化、可讲故事"的方向
站在命题设计的角度,工业质检AI比一般的嵌入式题目多了一个巨大的优势:效果可量化。你可以用一个固定数量的测试集,跑一遍检测程序,直接报出准确率、漏检率、误检率。这些数字对评委来说非常直观,一听就懂,一看就知道你做了多少工作。
同时这个方向还自带"行业叙事"——智能制造、无人车间、降本增效。哪怕你做的只是一个简化版的demo,只要流程完整、逻辑自洽,就能在答辩环节把项目讲得很饱满。这一点对参赛作品来说非常重要,评委每天看几十个作品,单靠技术细节很难记住你,但"我给某个具体缺陷类别做了一个嵌入式实时检测系统"这种清晰的故事线,记忆点非常强。
2. 动手前先想清楚:质检终端在整个系统里到底扮演什么角色
2.1 产线的真实痛点从来不是"识别"本身
不少第一次接触工业质检的开发者,会把注意力全放在"怎么把缺陷识别准"上,这个方向没有错,但如果只做到这一步,作品在产线场景下其实是废的。为什么?因为产线质检是一个完整链条:触发、采集、推理、分拣、统计、追溯。
触发是指产品到位后怎么通知相机拍照,可能是光电传感器,也可能是传送带上的编码器信号;采集是指相机怎么拍照、光源怎么补偿;推理是算法识别;分拣是发现缺陷后怎么把不良品踢出去,可能是一个电磁阀加吹气装置,也可能是一个机械臂;统计是每个班次检出多少不良品、不良率是多少;追溯是每个缺陷产品属于哪个批次、哪台机器、哪个时间段产的。
RT-Thread在这个链条里最适合扮演的是边缘终端的控制大脑——它负责响应传感器触发信号,协调相机拍照,把推理结果转成控制指令,同时把检测数据和统计结果上传到上位机或云端。
2.2 芯片选型没有正确答案,只有合理的组合方式
做这类项目时,我一般把系统拆成两部分:RTOS负责实时控制和逻辑调度,AI算力由独立的NPU或GPU承担。RT-Thread跑在MCU上,处理触发信号、串口通信、结果输出这类实时任务;AI推理跑在带NPU的SoC上,比如瑞芯微RK3588、RK3566,或者算能BM1684这类边缘计算芯片。
这种组合方式的好处是职责清晰:MCU的实时性和稳定性是最好的,不会被AI推理的负载波动影响;SoC算力强,能跑相对复杂的模型。两者的通信方式可以是串口、USB或者以太网,MCU收到触发信号后通知SoC抓图推理,SoC把结果回传,MCU根据结果控制分拣机构——整个架构既能保证实时性,又能保证AI性能。
2.3 如果只用RT-Thread一片搞定,也有可行路径
有人说我不熟悉Linux,也不会用SoC,能不能只用MCU加轻量级TinyML方案?完全可以。如果你的检测任务比较简单,比如只识别一种特定类型的缺陷,用MobileNetV2或TinyML框架(比如TensorFlow Lite for Microcontrollers),跑在带硬件加速器的MCU上(比如带CMSIS-NN的Cortex-M系列),也能实现几帧每秒的推理速度。
注意,这条路线下你需要仔细评估三个限制:一是模型体积,MCU的Flash通常只有几百KB到几MB;二是推理速度,MCU上跑AI通常是几百毫秒到一秒一帧;三是内存,激活值(中间层特征图)会占不少RAM,选型号时一定要看SRAM大小。如果检测节拍要求不高(比如每3秒检测一次),MCU方案完全够用。
3. 完整技术栈选型:从摄像头到推理框架的一次性配齐
3.1 图像采集不是随便买个USB摄像头就能用,但也不是非工业相机不可
很多开发者在图像采集这一步犯了难:工业相机动辄几千上万,买个便宜的USB摄像头画质不行,到底怎么选?我的建议是分场景处理。
如果做的是静态摆放场景(比如手机镜头放在固定治具上检测外观缺陷),一个支持手动对焦、画质尚可的USB摄像头(比如500万像素级别的模组)就够了,关键是架好稳定支架和光源。如果做的是动态流水线场景,就要考虑帧率和曝光时间,这时优先选全局快门(Global Shutter)的工业相机,避免运动模糊。
此外还有一个容易被忽视的点:摄像头的光学畸变。工业相机一般畸变控制得很好,但普通USB摄像头的广角畸变比较明显,会在图像边缘造成误判。解决办法是拍照测试后用OpenCV做相机标定,把畸变系数算出来,推理前先做去畸变处理。
3.2 算力硬件横向对比:不同预算的方案差异非常大
我用一张表把常见的几类方案列出来,方便你做决策参考:
| 方案 | 代表硬件 | 推理性能(YOLOv8n INT8) | 开发难度 | 适合场景 |
|---|---|---|---|---|
| 入门MCU | STM32H743 + 摄像头 | 1-3 FPS | 中等 | 单类缺陷、实时性高、功耗敏感 |
| 中端SoC | RK3566 / RK3568 | 10-30 FPS | 中低 | 典型demo、多类缺陷检测 |
| 中高端SoC | RK3588 / Jetson Orin Nano | 30-100 FPS | 中低 | 多路检测、生产节拍要求高 |
| 高算力边缘 | 算能BM1684X / Jetson Orin NX | 100-200 FPS | 中高 | 接近量产、多相机接入 |
对于大多数参赛作品来说,RK3566/RK3568是性价比最高的选择——开发板几百块,跑YOLOv8n可以到十几帧每秒,支持Python和C++两种开发方式,调试效率高。如果你有量产化考量,瑞芯微的RV1126/RV1106这类带NPU的芯片更合适,功耗低、价格低,但开发流程相对更繁琐一些。
3.3 为什么推荐RT-Thread做控制层:比裸机更优雅,比Linux更可控
这时候有人会问:我直接用Linux板卡不是更方便吗?为什么要引入RT-Thread?我的看法是,RT-Thread在三个层面有不可替代的价值。
第一是实时性保证。产线设备收到传感器信号到执行机构动作的延迟,通常要求控制在几十毫秒内。Linux调度的不确定性比较大,虽然大部分情况下够用,但在极端负载下可能产生毛刺。RT-Thread的中断响应和调度延迟是确定性的,这点在工业环境非常关键。
第二是成本与功耗。MCU加RT-Thread的成本和功耗,远低于任何Linux方案。如果你的系统只需要一颗MCU配合SoC做控制,总物料成本可以压缩到几十块钱的规模。
第三是启动速度和稳定性。RT-Thread的启动时间在毫秒级别,不像Linux要等几秒钟。产线设备断电重启是常事,恢复时间是实打实的停机时间,MCU方案的快速启动优势很大。
4. 模型训练到部署的完整链路,手把手走一遍
4.1 数据集:没有现成数据怎么办?这是拦住大多数人的第一道坎
工业质检项目最常遇到的现实问题:没有公开数据集,工厂的真实缺陷数据涉及保密拿不到,网上找的图片和自己的场景又不匹配。这个问题的本质是数据分布差异,公开数据集里学到的特征,很难直接迁移到真实产线。
我的解决思路是"三步走":
第一步,用合成数据打底。先拍一批合格品的照片,用图像处理工具在合格品上叠加模拟缺陷——比如用Gaussian噪声模拟划痕、用黑色色块模拟异物、用模糊模拟污渍,生成几百张到上千张训练图片。合成数据虽然和真实缺陷有差异,但能让模型先学到"缺陷和正常的边界"这个粗粒度的概念。
第二步,用公开数据集做预训练。比如NEU-DET钢板表面缺陷数据集、PCB瑕疵数据集这些经典工业检测数据,虽然和你自己的产品不完全一样,但能帮模型学到通用的表面缺陷特征(划痕、麻点、氧化等模式是跨行业相似的)。
第三步,也是最重要的一步——现场微调。找一台真实的测试设备,拍几十张到上百张现场照片,对合成数据和预训练模型做微调。这一步能显著提升模型在真实场景下的表现。
4.2 标注工具和标注规范:这一步偷懒,后面全盘皆输
标注质量和检测效果是强相关的,这里没有捷径。我推荐用LabelImg或X-AnyLabeling这类免费工具,标注格式统一导出为YOLO格式或者PASCAL VOC格式。
有个经验要特别提醒:缺陷类别的边界定义要尽量具体。很多新手会把"缺陷"定义得很模糊,比如"表面瑕疵"这一类下面包含了划痕、凹坑、脏污,模型很难学。正确的做法是把类别细化,比如"划痕"、"凹坑"、"异物"、"色斑"分开标注。一个模型学10类具体缺陷,比学1类笼统缺陷的效果好一个量级。
注量方面,每类缺陷建议不低于100个标注框,理想是300到500个。如果某类缺陷实在凑不齐样本,可以考虑做数据增强来补齐,但我建议优先保证真实样本的数量,合成数据只能作为补充。
4.3 模型选型:别一上来就上大模型,轻量才是嵌入式的主旋律
工业质检场景的模型选型,核心逻辑是"够用就好"。我在实际项目里最常用的是YOLOv8n和YOLOv5nu,这两个是当前检测精度和推理速度最平衡的小模型。如果对速度有极致要求,也可以试试YOLOv10n或RT-DETR-Lite这类更轻的方案。
训练时注意几个关键参数:
- 输入分辨率:尽量用640x640,这是大多数模型和NPU加速器优化过的标准尺寸
- Batch Size:嵌入式训练卡大概率跑不动大批次,8到16就够了,如果显存不够就降低批量,但需要配合调低学习率
- Epochs:200轮起步,通过Early Stopping机制观察验证集loss变化,防止过拟合
- 训练数据划分:按7:2:1或8:1:1划分训练集、验证集、测试集,注意同一类缺陷不要全部集中在某一个划分里
4.4 模型转换和部署:ONNX到RKNN全流程说明
模型训练好后,部署到RK系列芯片的流程我梳理成这几步:
首先把训练好的PyTorch模型导出为ONNX格式。用YOLO官方脚本或ultralytics提供的export接口就行,注意导出时设置opset=12或更高,开启动态轴或固定输入尺寸(建议固定尺寸,NPU引擎都偏好固定shape的模型)。
然后运行RKNN-Toolkit2的转换脚本,把ONNX转成RKNN格式。这一步要注意三件事:一是量化方式建议用"混精度量化",在几个关键层保留FP16,精度损失更小;二是量化数据集准备20到50张代表性图片,覆盖不同光照和不同缺陷类型;三是转换后一定要在PC上先跑一遍仿真推理,对比原始模型和量化模型的输出差异,发现问题及时调整。
最后,在设备端用RKNN Runtime加载模型,进行推理。流程是:读取图像 -> Resize到模型输入尺寸 -> 做归一化 -> 推理 -> 解析输出 -> 后处理画出检测框。整个流程的耗时瓶颈通常在后处理和图像前后处理,注意用C++实现时开启编译优化,能显著提升整体效率。
5. 最容易翻车的三个环节:打光、漏检和阈值调优
5.1 打光:模型精度再高,也救不了暗光和反光
我见过太多项目在实验室里精度刷到99%,一上产线就崩,十有八九是光照问题。工业视觉的铁律是——先把图像拍清楚,再谈算法。你要让模型看到什么特征,就要让光源把那个特征凸显出来。
常见的打光方案有三种,对应不同场景:
- 前向环形光:适合检测表面颜色差异、印刷瑕疵,均匀照亮整个视野
- 低角度环形光:适合检测划痕和凹凸纹理,光线以掠射角照射,微小的高度变化会产生明显阴影
- 背光源:适合检测轮廓、透光性异常,比如透明的瓶子是否变形、内部是否有异物
如果你不想在光源上投入太多,我强烈建议你用两个漫射光板加一个柔光罩,从左右两侧45度角打光,这样能消除大部分反光和阴影问题。拍摄时注意固定曝光参数,不要开启自动曝光,否则不同环境亮度会导致模型输入分布漂移。
5.2 漏检一定比误检严重,设计时要分清角色和底线
工业质检有个重要概念叫"缺陷优先级"。漏检意味着不良品流出到下游,可能造成客户投诉甚至安全事故,后果严重;误检意味着把良品当成不良品,造成返工和浪费,成本相对可控。因此在设计阶段就要确定模型的行为倾向——宁可多报,不可漏报。
实操层面怎么做?答案是调节置信度阈值。默认0.25的置信度阈值,如果你发现漏检率偏高,就把它调低到0.15甚至0.1,让更多疑似缺陷被圈出来。相应地,你还需要加一道人工复核逻辑:对低置信度的检测结果,系统不直接判NG,而是标记为"待复核",提示人工查看。这样能在漏检和误检之间找到最佳平衡点。
5.3 别只看mAP,生产环境要盯着Precision、Recall和F1三个指标
训练完成后,很多同学习惯性只看mAP(平均精度均值),然后觉得"我模型调好了"。但mAP是一个综合排序指标,它不能直接告诉你"在某个置信度阈值下,系统的实际表现如何"。在质检场景,你需要看的是三个指标的组合:
- Precision(精确率):检测出的缺陷中,真正的缺陷占多少,衡量的是误报比例
- Recall(召回率):真正的缺陷中,被检测出来的占多少,衡量的是漏检比例
- F1 Score:两者的调和平均,是综合平衡指标
我一般建议先根据业务需求确定一个可接受的漏检率(比如0.1%),然后调整置信度阈值让Recall达标,再观察Precision是否可接受。如果Precision太低,考虑增加训练数据、细化缺陷类别,或者用数据增强强化少数类样本,而不是一味调低置信度阈值。
6. 不止是检测:围绕RT-Thread做深,拉开作品差距的加分思路
6.1 结合重量或尺寸传感器,做多源数据融合质检
如果只做一个摄像头检测,作品会比较单薄。但你把思路放宽到"多传感器融合",项目立刻厚实起来。比如在流水线上增加一个重量传感器,结合视觉检测结果做综合判断——视觉检测发现外观缺陷,重量传感器检测缺件或重量异常,两种信号通过RT-Thread统一采集和逻辑判断,输出综合质检结果。
这个设计有两个好处:一是更接近真实产线的质检逻辑,单独一个视觉系统在工厂里很难独立承担最终质量判断;二是体现了RT-Thread在协同调度上的价值,多路传感器数据同步、时间戳对齐、逻辑仲裁都是由RTOS完成的。
6.2 数据上云与产线追溯:把单个检测点升级成质量管理闭环
做一个能实时显示检测结果的本地Web界面,工作量不大,但能让评委直观看到你的作品在"管理侧"的价值。RT-Thread通过MQTT协议将检测结果、缺陷图片、统计摘要上传到云端或本地服务器,建立一个简单的数据看板,展示当班产量、不良率、缺陷类型分布、各时段趋势曲线。
更进一步,你可以为每个检测产品生成一个唯一的序列号,把检测结果关联到序列号,实现单件追溯。这个功能在真实工厂需求里非常刚性——出问题时要能快速定位到是哪个批次、哪个工位、哪个操作员生产的产品。
6.3 在线学习与模型热更新:展示工程能力的加分点
大部分参赛作品的模型都是一次性部署、不再更新的。如果你想在答辩时展现更强的工程能力,可以设计一个"模型热更新"机制:RT-Thread设备启动时从服务器拉取最新的模型文件和版本号,检测到服务器有新版本就自动下载替换,替换过程中保持系统服务的连续性。
这个设计的难度并不高,但很容易讲出彩。它体现的是对"产线系统的持续运营"的理解——工厂质检不会一成不变,产品换型、工艺调整、新材料引入都会让既有模型的性能衰减,在线更新机制是工业质检系统能否长期稳定运行的关键。
写在最后:一点个人体会
我从第一次在嵌入式设备上跑通YOLO到做出一个能上产线演示的质检原型,前后花了整整两周。期间最大的感触是,工业质检AI并没有想象中那么高的门槛,真正卡人的反而是那些不起眼的工程细节——光源角度偏了几度、样本漏标了几张、置信度阈值调错了方向,每一个小坑都会让你多折腾一两天。
如果让我给正准备做这个命题的开发者一条最务实的建议:先用最快的时间把端到端的最小链路跑通,哪怕先不做UI、暂时用笔记本电脑插上摄像头实现"拍照-推理-画框-标NG"这四个步骤,你就已经跑赢了大多数因为卡在模型部署和硬件适配上的同学。全链路跑通之后,再一厘米一厘米地打磨精度和体验,你会发现每一步优化都有明确的方向。
最后再分享一个小技巧:答辩演示时,不要只给大家看一个停留在"检测成功"的界面——准备一件真实的待检测样品,在摄像头前现场演示一遍从拍照到判定NG的完整流程,再同步在大屏幕上展示检测结果的实时更新过程。这种"所见即所得"的现场效果,远比任何PPT和数据更能打动评委。祝各位都能在RT-Thread的这道命题下,做出让自己满意也让人眼前一亮的作品。