(复旦大学体教部 上海 200433)
在健身、健美运动中,对于肌肉外形和发达程度的评价,主要依靠个人主观经验判断,对于初学者来说,这一方法缺乏一定的准确性。卷积神经网络(Convolutional Neural Networks,CNN)在计算机图像识别、分类工作上具有强大的优势,利用CNN识别胸肌发达程度具有可行性[1]。
CNN在体育领域主要应用于图像识别和目标检测,图像识别是指利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对象的技术[2]。例如,利用卷积神经网络对体育技术动作关键环节进行识别和特征提取,为运动技术识别、生物力学分析、运动损伤诊断等工作提供依据[3-5]。目标检测是一种基于目标几何和统计特征的图像分割,可利用计算机图像处理技术对目标进行实时跟踪定位[6]。体育比赛中,识别运动员、球的位置和轨迹,具有重要的战术利用价值[7-8]。
图1 卷积神经网络拓扑结构
图2 卷积层与卷积核
图3 线性整流层及ReLU激活函数
图4 池化层(Max Pooling)
VGGNet是由牛津大学计算机视觉组和Google DeepMind公司的研究员共同研发的一例经典CNN模型,VGGNet在图像分类、识别工作中具有较好的泛化能力,是提取图像特征工程中较为常用的网络模型[9]。该研究采用VGGNet-16迁移学习方式构建胸肌发达程度的识别模型,探索利用计算机图像识别技术智能化评价肌肉外形的可行性,为健身、健美爱好者提供一个方便的评价工具。
图5 全连接层
图6 VGGNet-16 的结构图
图7 胸肌图像数据集
卷积神经网络(CNN)是一种具有多层结构的深度神经网络,它是一种有监督的学习网络,CNN带有深层次卷积运算,能够自动提取和学习图像特征,运用带有标签(类别)的数据样本对网络加以训练,能够逐渐形成输入与输出之间的映射关系,具有了对新样本进行预测和识别的能力[10]。CNN的一般结构包括输入层(Input)、卷积层(Convolutional layer)、线性整流层(Rectified Linear Units layer)、池化层(Pooling layer)、全连接层(Fully-Connected layer)和输出层(outputs)(见图1)。
输入层(Input)用于数据的输入,对于图像分类任务,输入层是由图像像素灰度值构成的矩阵。
卷积层是图像特征提取和特征映射的关键结构。卷积层中包含一个m×n矩阵的卷积核,卷积核在输入矩阵(源像素)上逐步滑动,每滑动一步就与源像素上对应的局部像素值相乘并相加,并映射到目标像素值矩阵中,从而完成特征提取工作(见图2)。
图8 胸肌发达程度等级
图9 图像RGB三通道
图10 采用VGGNet-16预训练模型(ImageNet)进行迁移学习
图11 迁移学习完成后的模型效果
线性整流层是将卷积层的输出结果做非线性运算,包含非线性的激励函数,常用的激励函数有sigmoid、tanh、ReLU等(见图3)。
池化层计算方式有最大池化和均值池化,池化层的作用是对图像进行降维,减小网络的计算量,防止过拟合现象产生(见图4)。
全连接层通常是一个BP神经网络,在模型训练过程中,全连接层通过不断调整权值,逐渐形成图像特征与输出目标之间的关系映射,从而具备图像识别能力(见图5)。
输出层用于最后输出结果,对于图像识别任务,输出层可使用softmax函数输出对应类别标签。
VGGNet是在传统的CNN网络上进行了深度的增加,网络层数达到16~19层,VGGNet包括VGGNet-16(见图6)和VGGNet-19,16和19为网络层数[11]。与以往的卷积网络不同,VGGNet的每一个卷积层采用了多个3×3小卷积核,从而对图像特征提取更加细致,准确率大大提升。
2.1.1 数据收集
通过现场拍照和网络征集的方式采集不同发达程度的胸肌照片,采集对象为18~30岁的男性。要求上半身裸露的正面照,图像光线充足、轮廓清晰、背景整洁,胸肌部分无遮挡(见图7)。最终筛选出1500张照片建立数据集。
2.1.2 数据分级
图12 混淆矩阵
图13 分类错误案列
将胸肌发达程度分成5个等级,1~4级的胸肌发达程度依次增大,第5级为肥胖人群(见图8)。聘请5名专家对1500张照片进行逐一等级识别,定为该照片对应的胸肌发达程度。
数据集归类结果如表1所示。
2.1.3 训练集、测试集的划分及数据集加权
划分数据集为训练集和测试集,训练集用于对VGGNet-16进行训练,测试集在训练完成后对模型的准确率进行评估,测试集不参与模型训练过程,否则会导致过度拟合。数据集划分过程中,先将数据集随机化,使得各等级图片在数据集中均匀分布,然后按照75%训练集、25%测试集的比例划分,最终得到训练集和测试集数据如表2所示。
2.1.4 数据增强
深度学习算法需要大量的训练数据,而该研究训练集仅有1125张照片,是一个极小的样本数据,容易造成模型过拟合现象,因此采用数据增强手段来增加样本。对原始图片进行随机的裁剪、旋转、翻转、缩放、亮度变换、模糊变换、标准化等一些列操作,人为地扩充样本数量,从而提升模型的泛化能力。该研究采用以下数据增强手段(见表3)。
VGGNet-16的输入层是一个224×224×3的矩阵,即一张宽224像素、高224像素、3通道(RGB)的图片。经过尺度变换后矩阵中的像素值由[0,255]缩放到[0,1]范围内(见图9)。
迁移学习(Transfer Learning)是一种机器学习方法,是把源领域的知识,迁移到目标领域,使得目标领域能够取得更好的学习效果[12]。该研究采用ImageNet的VGGNet-16预训练模型作为源领域进行迁移学习,目标领域为胸肌发达程度识别。ImageNet的VGGNet-16预训练模型是指已经用ImageNet数据集训练好的VGGNet-16模型,模型中的参数是在ImageNet图像集上学习到的,使用预训练模型进行迁移学习,可以耗费较少的资源,减少训练时间[12]。
该研究借助开源人工神经网络库Keras完成模型的构建、训练与识别任务,进行迁移学习时,复用原始VG GNe t-16预训练模型的卷积层部分(Block1~Block5),并将卷积层部分设置为不可学习,而全连接层部分(Dense1、Dense2、Output Layer)替换为自己设置的全连接层(见图10)。自设的全连接层包含一个隐藏层,神经元个数为1024,采用ReLU激活函数,随机失活函数dropout=0.5,输出层采用softmax分类函数,损失函数采用交叉熵(crossentropy),学习率为lr=1e-5,训练迭代次数为30次。
图11为模型分类效果,从图中看到,在不断地迭代训练过程中,在训练集上的分类准确率(Training Acc)和在测试集上分类的准确率(Test Acc)都在不断上升,而在训练集上的损失率(Training Loss)和在测试集上的损失率(Test Loss)连续下降,在第15次迭代时逐渐达到平稳。最终,模型在测试集上的准确率达到84.0%,损失达到0.65,准确率较原始的预训练模型有很大程度提高。
图12是迁移学习完成后的模型在测试集上分类结果的混淆矩阵,矩阵中纵轴代表图片真实等级,横轴代表模型识别的等级。理想情况下,矩阵中的数值分布在左上角到右下角的对角线上,即左图中灰色区域(右图中亮色区域),代表着预测准确率达到100%。若其他区域数值不为0,说明在该类别上出现预测错误,数值代表出现错误的数目。例如,当在真实等级为1级的87张图片中,模型识别结果出现了12次错误,其中8张图片错误的识别为2级,4张图片识别为3级。从矩阵中可见,模型对各个等级图片的识别均有错误,对角线边缘模糊,说明模型在识别相邻等级的图片时容易出现混淆。
图13为随机抽取的9张预测错误案列。通过观察案例并结合混淆矩阵可得,模型对相邻级别的图片容易发生混淆,预测结果存在偏差,由于模型卷积层部分并没有参与训练,因此可能是卷积层提取特征不全面导致。
对原始的VGGNet-16预训练模型(ImageNet)进行微调,开放部分卷积层。设置原始模型卷积部分Block1~Block3仍为不可学习,而Block4和Block5设置为可学习,使得部分卷积层为提取胸肌图片特征而调整参数。全连接层部分(Dense1、Dense2、Output Layer)仍采用包含1024个神经元的单隐藏层,学习率为lr=1e-5,训练迭代次数为30次(见图14)。
图14 Block4和Block5设置为可学习
图15为进行微调后的模型效果,从图中看到,模型预测的准确率逐渐提高,损失率逐渐下降,在第20次迭代时逐渐达到平稳。最终,进行微调后的模型在测试集上的准确率达到95.2%,结果趋近完美,符合该研究对胸肌发达程度识别的需求。
图15 迁移学习完成后的模型效果
图16是对模型进行微调后在测试集上预测结果的混淆矩阵,从图中可见,大多数数值分布在对角线上,仅有极少数等级出现预测错误,说明使用微调后的VGGNet-16对胸肌数据进行迁移学习,能够很好地提取胸肌图像特征,并能够较为准确地识别胸肌发达程度。借助Keras的相关方法可以查看模型中各个卷积层与池化层对图像的特征提取据结果。VGGNet-16网络层数达16层,随着网络的深入,图像像素数目减少,卷积核数量增加,从而提取更加细致的特征。图17为模型对某胸肌图片进行识别,查看模型中第2层、第5层、第8层的卷积层对该图片的特征提取结果,从图中看到,模型经过反复迭代训练,已经能够很好地适应胸肌样本,并成功地提取出胸肌的轮廓、颜色、纹理等特征,基于这些特征,将胸肌归为等级3。
图16 混淆矩阵
图17 部分卷积层特征提取结果(部分图片)
使用VGGNet-16预训练模型(ImageNet)对胸肌图像进行迁移学习,经过30次迭代训练后,模型识别胸肌发达程度的准确率达到95.2%,损失达到0.0658,能够很好地提取胸肌图像特征,并能够较为准确地识别胸肌发达程度。
表1 各个等级胸肌图像数量
表2 各个等级图像数量
表3 对胸肌图片进行数据增强