本项目以野生保护动物图像分类为主题,共包括数据采集及处理、模型训练、模型封装、模型部署四个阶段, 利用6个课时带领学生体验完整的人工智能作品开发流程,以期为高中阶段人工智能教学提供参考。
目前,在计算机视觉领域有多种图像分类模型,如ResNet、MobileNet、LeNet等,这些模型在不同的图像识别场景下发挥不同的作用。那么,不同网络模型在结构上有什么差异?哪些模型识别速度更快准确率更高?哪些模型更轻量更适合部署在移动端?为了弄清这些问题,笔者在实际教学过程中进行了一系列探索并发现,如果只是讲解理论,对于初次接触深度学习的高中生来说是枯燥且晦涩的。
因此,笔者开发了可以实践的趣味项目,让学生自己动手,亲历完整的问题解决过程,在实践中理解人工智能模型算法原理。在项目实践中,笔者也遇到并解决了一些新的问题,如如何实现本地局域网环境下的模型API调用,以解决机房网络不佳、学生注册调用网络平台API费时费力等问题?有什么硬件是价格低廉、配置简单且适合机房环境下大班教学的?
下面,笔者以完整的“动物识别分类”项目为例对上述问题进行阐述,以期为高中阶段人工智能教学提供参考。
本项目主题:打造AI野生保护动物识别系统。近几年,贩卖野生保护动物的情况屡见不鲜,许多人在不知情的情况下出于好奇而购买,从而触犯了法律,究其根本原因还是缺乏对野生保护动物的认识。我们可以借助人工智能的图像识别技术来解决这一问题。
该项目分四部分,共6课时,分别为:数据采集及处理(2课时)、模型训练(1课时)、模型封装(1课时)、模型部署(2课时)。
该项目流程首先,学生2人一组,从网络上收集8到10种不常见的野生保护动物图片,并进行预处理。然后,分组调用MobileNetV2、resnet50预训练模型,在训练过程中对比两种图像分类模型的差异。接着,利用教师提供的module.py半成品文件,将自己训练出的模型进行封装,实现本地调用。最后,利用Arduino板完成硬件部署。
数据集的获取处理是一个非常复杂的过程,既需要大量高质量的图片数据,又要保证数据集的图片具有足够的多样性,这样才能提高训练模型在实际应用中的泛化水平。由于野生保护动物在生活中并不常见,采用手机或相机拍摄是不可行的,所以教师可以指导学生应用高一学习的Python爬虫知识爬取需要的数据集图片,即根据关键词从百度上爬取8到10种野生保护动物图片,每种500张左右,核心代码如图1所示。
将下载好的数据集图片分类放在10个文件夹中,需要按照飞桨平台的数据集格式规则提前制作好一个label.text文档,在后期模型训练中作为数据索引。教师可以提前制作一份模型文档给学生作为参考。格式如图2所示。
数据处理中重要的一步是将处理好的数据划分训练验证集,使用sklearn.model_selection模块,只需要如下两行代码就可以划分出训练验证集:
使用paddle.su mmary语句查看网络结构,如图4所示。学生从中可以理解MobileNetV2与resnet50在模型结构上的异同,比教师讲解理论要直观清晰许多。
可以选择不同的训练方式进行训练,机房CPU环境下训练时间较长,250个epoch,约需要一个小时左右(如图5)。
在模型训练好后,使用图6所示的代码绘制变化曲线来查看两种训练模型对应的准确率的区别,MobileNetV2约为65%,resnet50约为70%,差距不大,后续还需要继续调优以提高其识别精度。还可以用同样的方法绘制loss曲线,帮助学生理解训练过程中损失函数的变化(如图7)。
加载模型启动模型预测,选择图片对训练出的模型进行预测,代码如图8所示。指导学生选择图片进行多次测试,以体验训练模型的识别精度。
训练出的模型权重文件经过封装,便可以实现本地部署。在机房局域网内,教师启动部署命令,其他学生也可以调用该hub模型进行图像识别。封装的核心步骤是要编写module.py文件,这是比较烦琐的一步,其中包括配置模型信息、编写推理方法、测试推理等,代码较长,具体可参考官网使用指南。
在这个过程中,教师的任务则是要提前为学生准备好module.py的框架代码,这样学生只需更改与自己训练模型相关的少量关键代码行即可,这样可以节省课堂时间与学生的操作难度。
在配置好module.py文件后,学生开始制作自己的paddlehub:新建一个文件夹mobilenet_meimei,与module.py文件中模型的名称一致,在文件夹中加入一个__init__.py空文件,以及刚刚编辑好的module.py文件、assets文件夹。其中,assets文件夹中包含的是前期训练好的模型及参数文件,如图9所示。
在本地部署封装好的模型,利用飞桨提供的测试代码,就可以在本地对模型进行识别调用了。
模型部署阶段是整个项目环节中趣味性、交互性最强的阶段。在这一部分,教师带领学生利用封装好的动物识别模型,结合Arduino制作“动物识别大转盘”,将自己的训练成果真正应用起来。Arduino板无法实现边缘部署,计算推理等工作还是要在计算机端完成,但因其配置步骤简单、价格低廉、功能强大,更适合没有硬件基础的学生以及机房环境下的大班教学。
调用封装好的动物识别模型,在成功识别出相应动物名称后,组装驱动硬件部分实现如下功能:
②利用Pinpong模块,实现Arduino控制舵机转动,在转盘中指向识别出的动物名称。
③利用yeelight模块,结合小彩灯,当识别到不同动物时,彩灯会显示与之相对应的不同颜色,如检测到金丝猴亮起黄灯,检测到耳廓狐亮起绿灯。如果迁移在水果分类项目中,还可以使亮起的灯显示为识别出的相应水果的颜色,如火龙果显示红色、香蕉显示黄色。
在本项目中,教师带领学生体验了完整的图像分类识别流程,理解了resnet50、MobileNetV2两种图像分类模型在结构、训练速度、训练模型识别精度等方面的差异,实现了利用Arduino部署自训练模型,解决了机房局域网环境下API调用本地化等问题。
刘梅.动物识别大转盘:玩转图像分类模型[J].中国信息技术教育,2023(09):79-82.