【DigiKey创意大赛】石头剪刀布之AI时代+No6.作品提交贴
[复制链接]
本帖最后由 传媒学子 于 2024-1-7 11:48 编辑
石头剪刀布之AI时代
-- 作者:传媒学子
文档格式有一些不一样,可以直接下载pdf或者doc版本。
一、作品简介
随着科技的发展,AI应用已经逐步被部署在嵌入式硬件平台中,目前一部分嵌入式硬件平台已经具备实时推理的能力,树莓派硬件平台是其中一个比较典型的代表。
本项目名称石头剪刀布之AI时代, 利用在得捷电子商城购买的树莓派4B(4GB),部署yolofastestv2算法,通过树莓派第二代摄像头来采集手势,利用host主机进行训练,将yolofastestv2推理算法模型网络和权重数据移植入树莓派,执行推理,实时识别石头、剪刀、布三种手势。游戏开始后,随机生成一种手势,然后识别玩家手势,比对结果。
作品实物图&硬件图:
作品效果图:
二、系统框图
本项目主要是在PC端训练AI模型,然后将生成的网络模型权重参数等信息导入到树莓派中,借助ncnn的框架,实现对手势的实时采集和检测。
因此,我这边选择了树莓派4B搭载Broadcom BCM2711, Quad core Cortex-A72 (ARM v8) 64-bit SoC @ 1.8GHz CPU,板载LPDDR4-3200 SDRAM作为部署推理的硬件平台。因为深度学习神经网络还是需要一定的内存,所以这里选择了4GB的内存,预算充足的话,建议直接上8GB的DDR;另外,我们还需要通过camera来实时采集图像,最开始需要用camera采集图像供PC端进行训练使用,后续还需要树莓派也需要通过摄像头实时采集用户的手势图像,实际上是使用Gstream和opencv来获取视频流以及截取图像。主要设计原理见图1。
图1 系统框图
图1中紫色的部分是在PC台式机上进行了,通过PyCharm和Cuda来使用RTX4060Ti来进行模型训练,整体训练时间大概30min, 这里提到PC的内存要尽量大一些,否则batch size不能设的过大,本人16GB内存,batch size=4,训练300轮,大概需要30min左右。在第三章会详细介绍具体的过程。图1中黄色部分就是将训练生成的模型参数等放到树莓派NCNN框架中进行实时推理。C++是要快于python的,因为python是解释性语言,因此借助NCNN可以得到跟高的实时推理帧率。
图2 软硬件示意图
图2是树莓派执行推理的软硬件框图,从video的获取,到最终在显示屏上的结果显示; Raspberry Pi NoIR Camera V2 摄像头模块使用 Sony IMX219 800万像素图像传感器,采集图像质量是较高的,可以满足训练和推理的需求。
因为项目是为了能够和AI来进行石头剪刀布的游戏,因此,整个游戏在树莓派上的执行过程如图3所示,每一轮游戏分为lost, win, tied三种,分别是用户输、用户赢了、平局。
图3 石头剪刀布游戏流程示意图
三、各部分功能说明(图文结合)
3.1树莓派软硬件准备
3.1.1树莓派镜像安装
执行AI推理离不开ncnn,opencv等软件,如果尝试自行安装,会非常耗时而且不一定能安装成功,建议直接按照下面的教程,进行安装,可以节省非常多的时间;
本项目选择了Bullseye 64bit OS, 因为AI模型推理是比较耗费CPU资源的,因此建议使用64bit的OS,并且考虑到一些软件的兼容性,最好使用比较稳定的OS版本。
图4 树莓派Bullseye 64bit OS
3.1.2软硬件调试与准备
树莓派软件准备主要是需要确认NCNN/Opencv以及摄像头可以正常采集图像;电脑端需要下载好cuda驱动等。
以下是我经历各种弯弯道道后琢磨出来的方法:WIN11先下载pycharm和Anaconda,设置好Anaconda环境变量,然后创建一个env, 打开pycharm在这个env中,拉取 ,然后执行pip3 install -r requirements.txt
这里能安装完大多数的所需要的软件,但是pytorch和cuda需要按照如下自行安装,cuda需要与自己的显卡和pytorch相对应。
通过上边调试,基本可以完成对图像的采集,以及PC的本地环境搭建。
3.2数据集收集与处理
树莓派来搜集图像,可以用脚本take_photo.py,执行此脚本,可以在本地目录下生成images目录,相应的图像可以拍摄到该目录中:
收集完图像后,需要使用Labelmee软件来进行数据标注,因为yolo算法需要提前设定标注,才能更好的进行训练。标注完的图像,还需要进一步归类为训练集和测试集,可以设定90%的图像是训练集,10%的图像是测试集。
通过dic_lab.py, labelmetoyolo.py两个脚本来执行这个动作;之后还需要生成数据集和训练集的路径,通过gen_train_txt.py和gen_val_txt.py可以完成。这里的脚本和处理前后的数据集都在pycharm的工程下,Yolo-FastestV2/data_my下。
3.3模型训练(PC训练)
具体可以参考项目结项附件中的Yolo_FastestV2_train,根据PC内存情况设置合适的batch_size等。分为以下步骤:
- 生成锚框参数:python genanchors.py --traintxt .\ data_my\train.txt
- 将生成的参数填入game.data中
- Train: python train.py --data data_my/game.data
- 评估:python evaluation.py --data dataset_my/game.data --weights .\weights\*.pth
- 测试:python test.py --data dataset_my/game.data --weights .\weights\*.pth --img .\dataset_my\test3.jpg
- Convert onnx:python pytorch2onnx.py --data dataset_my/game.data --weights .\weights\*.pth --output yolo-fastestv2.onnx
- onnx-sim:python -m onnxsim yolo-fastestv2.onnx yolo-fastestv2-opt.onnx
注意使用附件中工程时,需要特别注意重新生成训练集,因为里面的路径都是绝对路径,可以通过修改相应的生成脚本进行重新生成。
3.4模型部署(树莓派部署)
按照上述说明安装的OS, 则进入:~/ncnn/build/tools/目录下,然后执行gen_yolofastestv2.sh会自动将生成的
yolo-fastestv2-opt.bin,yolo-fastestv2-opt.param文件放入到~/software/YoloFastest_V2/目录下,然后在PC端的mobaxterm上执行codeblocks,即可编译ncnn工程,然后执行即可;
结项包中的AI_Gesture_game_source_code_for_raspi_4B.tar.gz是树莓派codeblocks文件工程。项目的整体流程图如下:
图3程序流程图
整个项目的软件流程图如上所示,开始后,按s键即可开始游戏,按q键即可退出游戏。AI的手势采用变化的seed来生成random的0/1/2来保证公平性,用户的手势则是通过实时检测实时识别来通过AI判断的,最终相应的结果会打印在屏幕中,具体的效果图可以参考第一章的图片,或观看第五章的视频。
神经网络图如下(完整网络图见作品包yolo-fastestv2-opt.onnx.png):
…
四、作品源码
树莓派镜像(已经安装好opencv/ncnn等必备软件):
作品源码链接:
包含以下源码、数据集以及相应的脚本;
- PC训练源码(包含818章标注好的手势图像):Yolo_FastestV2_train.part1.rar & Yolo_FastestV2_train.part2.rar
- 树莓派ncnn部署源码:AI_Gesture_game_source_code_for_raspi_4B.tar.gz
五、作品功能演示视频
演示视频包含了数据采集、数据标注、数据训练和结果测试四个主要部分,视频链接如下:
六、项目总结
经过1个多月的努力,终于体会到了“山重水复疑无路,柳暗花明又一村”的感觉。因为AI对于大多数嵌入式工程师来讲,是一个可能听起来老套,但用起来新的东西,对于我也是。最开始感觉很茫然,训练环境搭建,NCNN推理环境搭建,每一步都无从下手。到最后,终于理清从数据采集、数据标注、Pytorch训练到树莓派NCNN推理等一套完整的AI工程之旅。从游戏体验上讲,感觉是比较完备的一个游戏。遗憾之处是本项目实时推理能力虽然标称上能达到20FPS, 但是实际感受上可能在10FPS以下,可能是视频流到图像流的转换耗费了较长的时间;项目结束后,需要再好好研究一下系统中的瓶颈,从而再进行更深层次的优化。
帖子分享链接汇总:
【DigiKey创意大赛】石头剪刀布之AI时代+No6.结项贴
七、致谢
项目的最后,要感谢论坛能举办这个比赛,也感谢得捷能够赞助这个比赛,得以让我有机会下定决心窥探一下AI的奥秘。同时,在数据集收集和数据标注等工作中,我的爱人也给予了我了很多帮助。数千张图像的标注,是一项费时而又枯燥的事情。最后,也希望我的这个作品能给大家带来不一样的视野:将嵌入式装上AI的翅膀,用AI改变世界,用创新引领未来。
|