杨 珊,易 黎,张萌洁,朱相印,何中海
(电子科技大学 信息与软件工程学院,成都 610054)
基于项目的学习(PBL)是以学生为中心,引入基于项目的教学模式,对培养具有创新思维、分析和解决问题能力强的学生具有必然性和现实意义[1]。PBL-F 是针对新生开展的基于项目的学习课程。软件学院的PBL-F 课程系列,是引导学生进入项目学习的重要实践课程,通常安排在大一第二学期。以开发项目为出发点,要求学生在16 学时课堂时间及课后时间解决一个或多个项目问题。学习过程中教师是引导者,学生进行小组合作、自主探索,并积极使用多种信息资源,通过自主学习来构建自己的知识,增加真实的工程体验[2]
本文通过“基于Python 的图像分类项目实践”课程案例的介绍,具体阐述本门新生项目实践课程教学的方案设计、实践方法,总结该方法的实现效果。
本课程主要采用Python 语言完成项目,要求学生掌握基本的语法和数据类型、深度学习的模型概念、预训练模型调用、数据集增强以及迁移训练等概念,理解项目实践的步骤,团队任务分工合作的方法,多任务合作时间合理分配。其中基础知识内容的大量学习时间将放在课后以及线上平台完成。本课程的初衷在于以项目形式,引入学生学习人工智能的相关概念和基础知识内容,难度较低,多以引导性的方式完成项目,旨在让学生体会完整项目的成就感和人工智能神经网络的趣味性,激发新生的专业兴趣。
本课程课堂学时共16 学时,前4 个学时为基本语法、深度学习及CNN 网络基本知识概念掌握,后12 个学时为项目任务。任务分为3 个阶段内容,如图1 所示,首先学生需要在引导下先完成一个小狗种类图像分类实践[2](任务一),然后针对任务一中选出的预训练模型[3],进行迁移训练(任务二),以及使用增强数据集[4]进行迁移训练[5](任务三)。
图1 PBL-F 课程实践任务要求分解
任务一主要需要学生利用深度学习框架PaddlePaddle 中PaddleHub 模块[6]提供的多种CNN模型,完成对50 张小狗种类的分类,并对最终选择的3 种模型进行准确度、效率等基本指标计算,以此掌握图像分类基本过程。
任务二需要学习PaddleHub 中迁移学习finetune 使用方式,构建自己的中药材数据集,包括训练集、验证集和测试集,并使用该训练集对任务一选择的某个预训练模型进行迁移训练,最终使用学生小组自己搜集的另外100 张中药材图片,评价模型结果。
任务三需要构建自己的图片数据集增强库。基于线性代数的知识,编写图像增强库,用于任务二图片数据集增强。再利用增强后的数据集针对任务二选择的预训练模型重新进行迁移训练,再通过100 张中药材图片评价和比较模型的训练结果。其中,任务一作为基础训练内容需要所有同学都参与完成,任务二和任务三的内容需要同学分为3 人一组,合作完成不同功能模块的内容。
本课程项目提供百度AI Studio 在线学习和编程平台,该平台使用了基于notebook 的交互式编码环境,主要功能为文件上传、代码编码运行、markdown 文档编写、变量监控调试、性能监控、代码导入、运行状态保存,生成版本后提交教师评分等功能。同时编程环境可以根据需求选择GPU 环境,配置为如下。
1)GPU: tesla V100
2)video mem: 16 GB
3)CPU: 2 cores
4)RAM: 16 GB
5)disk: 100 GB
该环境每天有8 h 的免费使用时间,便于学生学习实践和代码测试。
本课程任务的设计和线上线下教学结合的方式主要为解决大一学生对于Python 语言不熟悉,图像分类入门时间短以及实操环境难以搭建等困难,同时希望将数学知识和程序项目做有效的结合与实践。因此本课程任务有以下4 个特点。
1)通过在AI Studio 平台设计各种语法作业,边学边练,使得学生课后可以快速掌握Python语言。
2)通过3 个任务的详细步骤和子任务设计,学生能够快速掌握图像分类方法,和基于预训练模型进行迁移训练的方法。
3)本课程迁移训练任务部分的实操环境需要使用到深度学习框架和GPU,学生电脑难以达到要求。通过选择基于AIstudio 平台的开发环境,减少环境部署的压力和时间。
4)本课程通过两轮教学实施发现,学生对于数据集增强函数内部逻辑缺乏深刻的理解。因此设计任务三的数据增强内容,学生需要自主编写矩阵乘法函数,完成图像分类数据集增强的几种基本操作,如翻转、位移、旋转等几种易于使用矩阵乘法实现的图片数据操作。该任务模块设计将线性代数知识与实践内容有机结合,让学生对数学知识学以致用,同时深刻理解数据集增强的内涵。
本课程学时共16 学时,前期4 个学时将用于课堂理论知识的讲述,让学生对于人工智能、深度学习、图像分类等等名词形成一定的知识概念,同时通过案例的讲解,对任务本身的解析和组队任务的分配,引入实践任务平台,开启学生线上学习和实践的入口。
图像分类基础练习要求所有学生动手参与,这是入门图像分类的基本训练,也是后期迁移训练和增强迁移训练开展的基础。该任务需要识别pet_images 中的50 张小狗图片,并通过图片名称和识别结果做比较,评价所选的CNN 模型[7]的能力。
1)项目运行时间计算。
2)小狗图片原始标签提取,如图片文件collie_03797.jpg 的真实类别是collie。
3)预训练模型标签提取。
该阶段任务内容需要学生通过阅读百度飞桨的文档[8],掌握预训练模型基本使用方法,得到小狗图片预测结果,并将真实类别和预测结果一并存储。最终得到的某一图片文件识别结果如此处所示:{'Beagle_01141.jpg':['beagle','english foxhound',0]}
4)模型评价、结果比较和展示。
该阶段任务需要对当前工作的预训练模型的识别结果进行计算,得到模型的准确率、运行时间等各项指标,并通过统计图示进行展示。如对ResNet、AlexNet、VGG、GoogleNet 和MobileNet[9]5 种预训练模型的运行时间比较,和模型识别准确率的比较以及展示。
迁移训练和图像增强迁移训练需要学生组成3 人的团队完成,每个学生可以根据难度和自己的能力选择不同的任务。3 人分工和难度如下。
1)完成迁移训练主体程序内容,仿造任务一构造中草药数据集识别程序(难度:中级)。
2)搜集五种中草药图片每种100 张,阅读迁移训练数据集构造的文档,编写程序处理图片和数据集生成代码,构造为迁移训练可以使用的数据集(难度:初级)。
3)学习数据集增强原理,阅读示例代码,不使用numpy 库自己完成图片的矩阵乘法运算,为每张中草药图片生成翻转、位移、旋转的增强图片(难度:高级)。
2.3.1 迁移训练任务
完成迁移训练程序的同学,需要阅读finetune 程序的代码,完成部分缺失代码的编写,并调整fine-tune 参数,测试迁移训练的结果。
fine-tune[10]是迁移学习中使用得最多的方式之一。其主要思想是通过对预训练模型进行结构和参数的微调来实现模型迁移,从而达到模型适应新领域数据的目的。
基于PaddleHub 提供的fine-tune 流程,大约分为以下7 个步骤:
1)导入相关的包和加载迁移训练模型;
2)准备数据集(分为PaddleHub 自带数据集和自定义数据集);
3)生成迁移训练的读取器(data_reader),调用接口预处理数据集图像;
4)进行迁移训练运行时参数配置,包括是否使用GPU 训练、优化策略和训练次数等等;
5)组建训练任务,需要去获取module 的上下文环境,在输出变量中找到特征图提取层feature_map,然后在这层后面接入一个全连接层,生成训练任务(task);
6)调用finetune_and_eval 接口,针对构建的训练任务进行迁移训练;
7)训练完成后,使用task 的predict()函数即可测试当前模型对新图片的分类能力。
2.3.2 自定义数据集任务
自定义数据集构造的任务,需要额外编写脚本代码,处理自己搜集的训练图片,将其构造为可用的命名格式,并且根据PaddleHub 中预训练模型fine-tune 接口的要求,按照7:2:1 划分训练集、测试集和验证集[11]的图片,并编写数据集构造和数据集读取代码,以及图片的标签文档。
本次任务选择中药材图片识别任务,后续课程开展可以规定任务类型和范围,由学生自主选择和设计类似的图像识别任务,增大学生的课程参与度。
2.3.3 数据集增强矩阵计算任务
数据集增强任务需要完成以下5 种图片数据增强[12]的任务:水平翻转、垂直翻转、位移、旋转和缩放。深度学习对数据集的大小有较高的要求。在图像分类任务中,图像数据增强是经常采用的方法之一,可以减少过拟合的概率,在原始样本较少的情况下,增加训练样本的多样性。
假设每个原始图片的宽度是w,高度是h,图片中的某个点位置是(x0,y0),变换后该图片的点是(x1,y1)。
1)水平翻转。水平翻转可以转换为找图片中的点关于某个轴的对称点。此时我们的对称轴应该是w/2。因此翻转后的横坐标为x1=w-x0。而y不变,可以得知,y0=y1。由此,可以得到水平翻转的矩阵式:
2)垂直翻转。垂直翻转带来的是纵坐标的变换,翻转后的纵坐标为y1=-y0+h。x不变。由此,可以得到水平翻转的矩阵式:
3)位移。位移变换带来的是纵坐标和横坐标的变换,翻转后的横坐标x1=x0+Δx,纵坐标y1=y0+Δy,由此,可以得到位移变换的矩阵式:
4)旋转。原始点依旧是(x0,y0),半径设为R,变换后该图片的点是(x1,y1),则x0=Rcosα,y0=Rsinα。
如图2 所示,(x1,y1)是(x0,y0)以半径R旋转θ得到,所以x1可以表示为:
图2 旋转变换示意
同理,y1=y0cosθ-x0sinθ。由此可得旋转的矩阵式为:
5)缩放。缩放变换带来的是纵坐标和横坐标的变换,翻转后的横坐标x1=αx0,纵坐标y1=αy0,α为变换系数。因此,可以得到缩放变换的矩阵式为:
可以发现,每种变换的不同之处在于变换矩阵的不同。学生需要实现每种变换的变换矩阵,然后通过对图片的每个点进行左乘变换矩阵操作即可实现上述5 种图像增强。
实现效果以垂直变换为例,首先需要将待变换图片处理为numpy 数组,代码1 展示了水平翻转的变换矩阵,代码2 展示了基于每个图像点的矩阵乘法实现。
代码1 水平翻转变换矩阵定义
代码2 矩阵乘法
通过matrixMul(self.transform,point)对图片的每个点进行循环处理,最后就可以得到变换后的新坐标位置,再将图片数组根据新坐标位置重新转换成图片即可得到变换结果。水平翻转变换结果如图3 所示。
图3 图像结果
项目考核分为平时成绩和期末成绩两项分数,其中答辩、项目实践、期末报告团队三人分数一致。互评分数来自于学生对团队成员的工作认可评价。具体评价方式如表1 所示。
表1 新生项目考核评价设计
通过细分考核项内容,从学生的基础考核、项目完成情况、团队合作程度、项目汇报情况、报告撰写情况多个维度考核,体现项目的综合性特点,更全面考核学生知识获得程度。
PBL-F 图像分类项目课程设计是大一学生初步接触项目的重要衔接课程。本课程教学过程主要采用的是语法基础学练结合与综合实践相结合的层次化实践教学方式,为后续深入学习专业课程打下基础。本课程的教学实践具有以下4 个方面的意义。
1)侧重培养学生的实践能力,内容应既有理论性,也有工程实用性,旨在锻炼学生的动手能力、实际工程能力、团队协作能力和汇报能力。
2)实践环节的fine-tune 任务是中药材识别任务,后续可以改进为由学生自主选择不同识别任务,如害虫识别、食物识别等,激发学生完成课程的兴趣,增加课程参与度。
3)学生通过本项目学习实践预训练模型相关基础技术和应用。在当下生成式AI 大模型迅速发展的社会背景下,从预训练模型的使用入门进行深度学习,具有学习的前瞻性意义。
4)本课程项目在实施过程中将任务模块化分工,任何学生的任务都是必不可少的环节,强调学生团队的合作和任务调度,增加团队协作意识。
通过两轮的教学实践发现,学生的语法作业完成度99.3%,基础的小狗分类实践完成度为95.2%,fine-tune 任务完成度为92%,通过代码和在线平台运行结果发现抄袭现象较少,通过互评发现学生项目实际参与度达到97%。通过两轮实践报告发现,大部分学生基本掌握了相关领域基础知识、工程项目设计方法、团队分工方法等课程目标。上述数据证明本课程项目能够提高学生实际动手能力和项目实践能力,同时能在实践中得到一定的成就感和实际效果反馈,提高专业学习兴趣,增强专业信心。