动物识别大转盘:玩转图像分类模型

2023-05-30 16:09刘梅
中国信息技术教育 2023年9期
关键词:图像识别

刘梅

摘要:本项目以野生保护动物图像分类为主题,共包括数据采集及处理、模型训练、模型封装、模型部署四个阶段,利用6个课时带领学生体验完整的人工智能作品开发流程,以期为高中阶段人工智能教学提供参考。

关键词:模型训练;Arduino;MobileNet;百度飞桨;图像识别

中圖分类号:G434  文献标识码:A  论文编号:1674-2117(2023)09-0079-04

目前,在计算机视觉领域有多种图像分类模型,如ResNet、MobileNet、LeNet等,这些模型在不同的图像识别场景下发挥不同的作用。那么,不同网络模型在结构上有什么差异?哪些模型识别速度更快准确率更高?哪些模型更轻量更适合部署在移动端?为了弄清这些问题,笔者在实际教学过程中进行了一系列探索并发现,如果只是讲解理论,对于初次接触深度学习的高中生来说是枯燥且晦涩的。因此,笔者开发了可以实践的趣味项目,让学生自己动手,亲历完整的问题解决过程,在实践中理解人工智能模型算法原理。在项目实践中,笔者也遇到并解决了一些新的问题,如如何实现本地局域网环境下的模型API调用,以解决机房网络不佳、学生注册调用网络平台API费时费力等问题?有什么硬件是价格低廉、配置简单且适合机房环境下大班教学的?下面,笔者以完整的“动物识别分类”项目为例对上述问题进行阐述,以期为高中阶段人工智能教学提供参考。

项目介绍

1.项目背景

本项目主题:打造AI野生保护动物识别系统。近几年,贩卖野生保护动物的情况屡见不鲜,许多人在不知情的情况下出于好奇而购买,从而触犯了法律,究其根本原因还是缺乏对野生保护动物的认识。我们可以借助人工智能的图像识别技术来解决这一问题。

2.项目时长

该项目分四部分,共6课时,分别为:数据采集及处理(2课时)、 模型训练(1课时)、模型封装(1课时)、模型部署(2课时)。

3.项目流程

首先,学生2人一组,从网络上收集8到10种不常见的野生保护动物图片,并进行预处理。然后,分组调用MobileNetV2、resnet50预训练模型,在训练过程中对比两种图像分类模型的差异。接着,利用教师提供的module.py半成品文件,将自己训练出的模型进行封装,实现本地调用。最后,利用Arduino板完成硬件部署。

项目实施

1.数据采集及处理

(1)数据采集

数据集的获取处理是一个非常复杂的过程,既需要大量高质量的图片数据,又要保证数据集的图片具有足够的多样性,这样才能提高训练模型在实际应用中的泛化水平。由于野生保护动物在生活中并不常见,采用手机或相机拍摄是不可行的,所以教师可以指导学生应用高一学习的Python爬虫知识爬取需要的数据集图片,即根据关键词从百度上爬取8到10种野生保护动物图片,每种500张左右,核心代码如图1所示。

将下载好的数据集图片分类放在10个文件夹中,需要按照飞桨平台的数据集格式规则提前制作好一个label.text文档,在后期模型训练中作为数据索引。教师可以提前制作一份模型文档给学生作为参考。格式如图2所示。

(2)数据预处理

数据处理中重要的一步是将处理好的数据划分训练验证集,使用sklearn.model_selection模块,只需要如下两行代码就可以划分出训练验证集:

from sklearn.model_selection import train_test_split

train_img, val_img, train_label, val_label = train_test_split(data, label, test_size=0.2)

接下来按照飞桨官网[1]提供的代码进行数据预处理。

2.模型训练

(1)神经网络的搭建

直接调用飞桨平台的内置模型,调用代码如图3所示。

使用paddle.summary语句查看网络结构,如图4所示。学生从中可以理解MobileNetV2与resnet50在模型结构上的异同,比教师讲解理论要直观清晰许多。

(2)模型训练

可以选择不同的训练方式进行训练,机房CPU环境下训练时间较长,250个epoch,约需要一个小时左右(如下页图5)。

(3)模型评估

在模型训练好后,使用下页图6所示的代码绘制变化曲线来查看两种训练模型对应的准确率的区别,MobileNetV2约为65%,resnet50约为70%,差距不大,后续还需要继续调优以提高其识别精度。还可以用同样的方法绘制loss曲线,帮助学生理解训练过程中损失函数的变化(如下页图7)。

(4)模型预测

加载模型启动模型预测,选择图片对训练出的模型进行预测,代码如第82页图8所示。指导学生选择图片进行多次测试,以体验训练模型的识别精度。

3.模型封装

训练出的模型权重文件经过封装,便可以实现本地部署。在机房局域网内,教师启动部署命令,其他学生也可以调用该hub模型进行图像识别。封装的核心步骤是要编写module.py文件,这是比较烦琐的一步,其中包括配置模型信息、编写推理方法、测试推理等,代码较长,具体可参考官网使用指南。[2]

在这个过程中,教师的任务则是要提前为学生准备好module.py的框架代码,这样学生只需更改与自己训练模型相关的少量关键代码行即可,这样可以节省课堂时间与学生的操作难度。在配置好module.py文件后,学生开始制作自己的paddlehub:新建一个文件夹mobilenet_meimei,与module.py文件中模型的名称一致,在文件夹中加入一个__init__.py空文件,以及刚刚编辑好的module.py文件、assets文件夹。其中,assets文件夹中包含的是前期训练好的模型及参数文件,如下页图9所示。之后启动以下两条命令:

hub install mobilenet_meimei

hub serving start -m mobilenet_meimei

在本地部署封装好的模型,利用飞桨提供的测试代码,就可以在本地对模型进行识别调用了。

4.模型部署

模型部署阶段是整个项目环节中趣味性、交互性最强的阶段。在这一部分,教师带领学生利用封装好的动物识别模型,结合Arduino制作“动物识别大转盘”,将自己的训练成果真正应用起来。Arduino板无法实现边缘部署,计算推理等工作还是要在计算机端完成,但因其配置步骤简单、价格低廉、功能强大,更适合没有硬件基础的学生以及机房环境下的大班教学。

(1)所需材料

硬件:Arduino*1、舵机*2、yeelight LED灯*1、杜邦线*6、小音箱或语音播报模块。

软件:jupyter或idle。

(2)实现功能

调用封装好的动物识别模型,在成功识别出相应动物名称后,组装驱动硬件部分实现如下功能:①利用pyttsx3模块,实现语音播報识别出的保护动物名称。

②利用Pinpong模块,实现Arduino控制舵机转动,在转盘中指向识别出的动物名称。③利用yeelight模块,结合小彩灯,当识别到不同动物时,彩灯会显示与之相对应的不同颜色,如检测到金丝猴亮起黄灯,检测到耳廓狐亮起绿灯。如果迁移在水果分类项目中,还可以使亮起的灯显示为识别出的相应水果的颜色,如火龙果显示红色、香蕉显示黄色。

(3)实现方式

核心代码如图10所示。

结语

在本项目中,教师带领学生体验了完整的图像分类识别流程,理解了resnet50、MobileNetV2两种图像分类模型在结构、训练速度、训练模型识别精度等方面的差异,实现了利用Arduino部署自训练模型,解决了机房局域网环境下API调用本地化等问题。

参考文献:

[1]飞桨官网[EB/OL].https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/beginner/data_preprocessing_cn.html.

[2]飞桨官网[EB/OL].https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/nn/Sequential_cn.html#sequential.

猜你喜欢
图像识别
基于Resnet-50的猫狗图像识别
高速公路图像识别技术应用探讨
图像识别在物联网上的应用
图像识别在水质检测中的应用
浅谈模式识别在图像识别中的应用
基于多组合内容的图像识别机制