RK3399pro实现安全帽识别
前段时间公司智慧工地项目要实现安全帽识别,使用 firefly 的RK3399pro的边缘盒子。最初我们找算法公司买现成的算法,由于我们的使用场景与环境非常复杂,所以实际使用时总是有问题。算法公司不愿意免费优化算法,所以公司决定自己解决。
我们公司没有搞人工智能算法的,按着网上找的什么tensorflow、pytorch 、yolo 我们
小组越学越糊涂。说实话我们真心想学会,算法工程师工资高,学会了怎么训练算法并移植到边缘盒子,这样可以找一个工资更高的工作。
安装
安装很简单,点击下载setup.exe,然后下一步、下一步就可以安装了。
安装后有会有两个程序:
AI Builder : 训练算法用的。
图片标注工具:标注训练数据用的。
有一点要注意,如果自己的电脑安装有英伟达芯片的显卡就勾选CUDA,其他芯片的显卡就不要勾选。我的电脑电脑是RTX1070 8G显存。
我另外一个同事电脑i3的CPU,没有独立显卡,也能很好的训练出算法。
以前我们被算法公司忽悠,我一直以为训练算法的机器至少要 i7已上的CPU,要好几块RTX3090的显卡才行。现在才知道普通PC就可以训练AI算法了。
训练算法
这个工具完全颠覆了我对算法的认知,感觉是个人就能训练出AI算法。
最多就三步:标注数据、训练算法、导出
第一步:标注数据
收集足够的图片放到一个目录中,打开“图片标注工具”标注这些数据。只要会用鼠标拉框就能标注数据,很简单。
网盘中有标注好的安全帽数据,我就直接拿来用了。标注数据也省了。
这个数据中把没戴安全帽的头标注为 head, 把戴了安全帽的头标注为 helmet, 没戴在头上的安全帽没有标注。这样算法就不会把没戴在头上的安全帽识别为戴了安全帽的头。
第二步:训练算法
新建训练任务
输入任务名称,我起名“安全帽识别”。
选择算法要运行的设备,我用的是3399pro边缘盒子,选择“RK3399-PRO NPU”。
如果要训练能在
手机上运行的算法,可以选择“Android 手机”。这个工具真的很良心,还能做手机上的算法。
选择模型大小。
创建好训练任务后,将训练数据设置为收集的安全帽图片的目录。
点击训练按钮
点击“开启训练”按钮就开始训练了。这太简单了吧
第三步:导出模型与SDK
训练差不多的时候就可以导出模型。
点击“导出模型/SDK”按钮
在弹出的对话框中,设置要导出的内容与要保存的目录。
我们的项目使用的是C++语言,所以我选择“C++ SDK”。
设置好后,点击“导出”按钮。
说明文档、SDK、模型、Demo源码都会保存到指定的目录中。
集成算法
导出的文件 sdk.zip 里面有如下文件
文件 model.model:训练好的算法模型文件。
class_list.txt:模型识别的物体的类别列表。该文件列出了类别编号与类别名的对应关系。
目录 libs : 起点物体识别SDK的库文件与用到的第三方库。
目录 demo:是使用 SDK 的范例代码。
文件 get_key : 用于获取设备 licnese key 的程序。
调用流程
范例代码
下面是使用训练出来的模型的范例代码:
模型不准怎么办
用这个工具最大的好处是,自己可以随时针对真实使用场景提升模型的精度。这样项目的落地就有了很好的保障。
方法一
最简单的办法就是将识别有问题的图片找出来,放到训练用的数据目录中,并用配套的“图片标注工具”标注好,然后重新训练。(如果是视频,就将视频解码为图片,或者直接截图)
方法二
新建一个目录,将真实使用的摄像头的视频解码为图片(大概500张)。将训练数据目录设置为改目录,然后重新导出模型。不用标注数据也不用重新训练模型,只要重新导出就可以了。
这个方法我开始不清楚是什么原因,后来问了作者,才知道用 RK3399pro NPU要把模型进行 int8 量化,量化时用的图片与真正使用时的越一样就越准。什么是模型int8量化,自己去网上查。
意外惊喜
如果导出 restFul SDK,集成起来更加简单,几乎直接可以用,细节大家可以仔细研究。这个工具越用越觉得好。
其他问题
360 会误报误杀。安装与使用时建议关闭360。
这事情我专门去问了作者,作者说是里面配套的数据标注软件是python的,为了方便使用,将python代码打包为了exe文件,所以360会误报误杀。
感想
在以前以为AI算法高深莫测,所有的算法公司与算法工程师都告诉我们训练AI算法需要多高的算力,要学习一堆高深的数学知识,我们这个小公司根本没办法自己单独训练算法的。我们也一直认为我们无法在没有AI算法工程师的情况下训练算法的。直到老板的朋友推荐这个工具给我们后,我们才知道原来自己定制AI算法原来可以这么简单。
原作者:hq1978