最近正好项目中在做一些识别相关的内容,我也陆陆续续写了一些实验性质的博文用于对自己使用过的模型进行真实数据的评测对比分析,感兴趣的话可以自行移步阅读即可:
《移动端轻量级模型开发谁更胜一筹,efficientnet、mobilenetv2、mobilenetv3、ghostnet、mnasnet、shufflenetv2驾驶危险行为识别模型对比开发测试》
《图像识别模型哪家强?19款经典CNN模型实践出真知【以眼疾识别数据为基准,对比MobileNet系列/EfficientNet系列/VGG系列/ResNet系列/i、xception系列】》
《基于轻量级卷积神经网络模型实践Fruits360果蔬识别——自主构建CNN模型、轻量化改造设计lenet、alexnet、vgg16、vgg19和mobilenet共六种CNN模型实验对比分析》
《基于轻量级模型GHoshNet开发构建眼球眼疾识别分析系统,构建全方位多层次参数对比分析实验》
本文紧接前面两篇测评分析博文:
《基于EfficientNet(B0-B7)全系列不同参数量级模型开发构建中草药图像识别分析系统,实验量化对比不同模型性能》
《基于MobileNet(v1-v3)全系列不同参数量级模型开发构建中草药图像识别分析系统,实验量化对比不同模型性能》
前面两篇测评分析的博文主要是使用EfficientNet全系列网络模型和MobileNet全系列模型来开发构建的对比实验,相较之下都偏向于轻量级的网络模型,本文则选择的是在“重量级”领域里面比较经典的VGG和ResNet模型,实验同样是以基准数据集【中草药图像数据集】为例,开发构建不同参数量级的模型,之后在同样的测试数据集上进行评测对比分析。
数据集中共包含23种类别数据,清单如下:
aiye
baibiandou
baibu
baidoukou
baihe
cangzhu
cansha
dangshen
ezhu
foshou
gancao
gouqi
honghua
hongteng
huaihua
jiangcan
jingjie
jinyinhua
mudanpi
niubangzi
zhuling
zhuru
zhuye
zicao
简单看下部分数据实例:
VGG模型是一种卷积神经网络,由牛津大学的Visual Geometry Group(VGG)开发。该模型在多个计算机视觉任务中取得了很好的性能。VGG模型的主要特点是其简单性和一致性。以下是VGG模型的构建原理:
卷积层设计:VGG模型的特点之一是使用连续的3x3卷积核来替代较大的卷积核(如11x11、7x7、5x5)。这种设计可以减少参数的数量,并增加网络的非线性表达能力。通过堆叠多个3x3的卷积层,可以模拟更大的感受野,从而捕获更多的上下文信息。
网络深度:VGG模型有多种变体,如VGG13、VGG16等,这些变体通过增加网络的深度来提高性能。VGG16有16层网络,其中包括13个卷积层和3个全连接层。
池化层设计:VGG模型使用2x2的最大池化层来降低特征图的维度,同时保留重要的信息。池化层有助于减少参数数量,并提高模型的泛化能力。
全连接层设计:VGG模型的全连接层使用了较小的输出维度,从而降低了参数的数量。这种设计使得模型更加轻量级,适合于在资源有限的设备上运行。
激活函数:VGG模型使用ReLU作为激活函数,这有助于加快训练速度并提高模型的性能。
以VGG16为例,其结构包括13个卷积层和3个全连接层。其中,卷积层的滤波器大小均为3x3,且连续的多个3x3卷积层可以模拟更大的感受野。这种设计减少了参数的数量,并增加了非线性。全连接层的输出维度相对较小,从而降低了模型的复杂性和参数数量。通过增加网络的深度,VGG模型提高了性能,并在ImageNet竞赛中获得了很好的成绩。
VGG模型通过使用连续的3x3卷积核、增加网络深度、合理的池化层和全连接层设计,以及使用ReLU激活函数,实现了简单、高效和稳定的性能。这些特点使得VGG模型成为计算机视觉领域的经典模型之一。
ResNet(Residual Network)模型是一种深度卷积神经网络,通过引入残差连接(residual connection)来克服深度神经网络的训练困难。以下是ResNet模型的构建原理:
残差连接:ResNet的核心思想是引入残差连接,通过跳跃连接(shortcut connection)或短路连接(skip connection)将输入特征图直接传递到网络的深层次。残差连接允许网络中的信息直接从浅层传递到深层,从而帮助深层网络更好地学习特征表示。
基本残差块:ResNet的基本残差块由多个卷积层组成,每一层之间通过残差连接连接。在残差块中,输入特征图与经过一系列卷积层处理后的特征图相加,形成一个残差函数。通过这种设计,网络的输出不再是原始的输入特征图,而是经过学习得到的残差。
ResNet34:ResNet34是一个较浅的ResNet模型,由34个残差块组成。每个残差块包含多个卷积层,通过短连接将输入和输出特征图相加。这种设计使得网络能够学习到更高级别的特征表示。ResNet34在许多计算机视觉任务中取得了很好的性能,并且模型相对较小,计算量适中,适合于在资源有限的设备上运行。
ResNet50:ResNet50是一个较深的ResNet模型,由50个残差块组成。与ResNet34相比,ResNet50具有更多的卷积层和更深的网络结构。每个残差块包含多个卷积层,并通过长连接将不同层的特征图相加。这种设计使得网络能够学习到更丰富和抽象的特征表示。ResNet50在许多计算机视觉任务中表现出了优异的性能,特别是对于大规模数据集和复杂任务。
ResNet模型通过引入残差连接来克服深度神经网络的训练困难,使得网络能够学习到更高级别的特征表示。不同的ResNet变体(如ResNet34和ResNet50)具有不同的网络深度和结构,适用于不同的应用场景。
训练集占比75%,测试集占比25%,所有模型按照相同的数据集配比进行实验对比分析,计算准确率、精确率、召回率和F1值四种指标。结果详情如下所示:
{
"ResNet34": {
"accuracy": 0.8748335552596538,
"precision": 0.871665027788982,
"recall": 0.8803229220649138,
"f1": 0.8737002469555489
},
"ResNet50": {
"accuracy": 0.8548601864181092,
"precision": 0.8587270698471103,
"recall": 0.8626802470660845,
"f1": 0.8550007957111904
},
"VGG13": {
"accuracy": 0.8575233022636485,
"precision": 0.8566698729208566,
"recall": 0.8594214126246992,
"f1": 0.8542432551472233
},
"VGG16": {
"accuracy": 0.8042609853528628,
"precision": 0.8062970639500385,
"recall": 0.8100581071958697,
"f1": 0.8042860328837819
}
}
简单介绍下上述使用的四种指标:
准确率(Accuracy):即分类器正确分类的样本数占总样本数的比例,通常用于评估分类模型的整体预测能力。计算公式为:准确率 = (TP + TN) / (TP + TN + FP + FN),其中 TP 表示真正例(分类器将正例正确分类的样本数)、TN 表示真负例(分类器将负例正确分类的样本数)、FP 表示假正例(分类器将负例错误分类为正例的样本数)、FN 表示假负例(分类器将正例错误分类为负例的样本数)。
精确率(Precision):即分类器预测为正例中实际为正例的样本数占预测为正例的样本数的比例。精确率评估分类器在预测为正例时的准确程度,可以避免过多地预测假正例。计算公式为:精确率 = TP / (TP + FP)。
召回率(Recall):即分类器正确预测为正例的样本数占实际为正例的样本数的比例。召回率评估分类器在实际为正例时的识别能力,可以避免漏掉过多的真正例。计算公式为:召回率 = TP / (TP + FN)。
F1 值(F1-score):综合考虑精确率和召回率,是精确率和召回率的调和平均数。F1 值在评估分类器综合表现时很有用,因为它同时关注了分类器的预测准确性和识别能力。计算公式为:F1 值 = 2 * (精确率 * 召回率) / (精确率 + 召回率)。 F1 值的取值范围在 0 到 1 之间,值越大表示分类器的综合表现越好。
为了能够直观清晰地对比不同模型的评测结果,这里对其进行可视化分析,如下所示:
从整体评测结果来看:ResNet34取得了最优的计算结果,ResNet50和VGG13的效果则不相上下十分接近,VGG16的效果最差,可能跟本身数据集体量不大有关系,过多的参数量反而导致模型性能下降。
这个分析评测结果仅供参考,大家在实际项目开发中可以参考这组实验,不过也可以基于自己的数据集开发全系列的模型来综合对比选取最优的模型作为生产环境的模型。