VGG16实现分类任务
VGG16实现分类任务
VGG是2014年由牛津大学著名研究组VGG(Visual Geometry Group)提出,斩获当年ImageNet竞赛中定位任务第一名和分类任务第二名。
原理图
原理简述
例如有张224x224的RGB图片,我们让他通过两个卷积核为3的卷积层,再通过最大池化层(核尺寸为2,步距为2)。至于卷积层的输入输出维度,参考下图,我们一般常用VGG16模型,最终用多个FC实现分类,也可将FC换成卷积核为1的卷积层。
数据集
同样选用本人常用的海贼王数据集来测试,可以根据个人需求修改。
下面提供一个简单数据集。
Kaggle的鸟儿分类数据集,共315个分类
https://www.kaggle.com/gpiosenka/100-bird-species
可以用kaggle命令选择下载
1 | kaggle datasets download -d gpiosenka/100-bird-species |
数据预处理
讲图片预resize为224x224的图片,并进行随机翻转,可参考图像增广
https://www.quarkhackers.space/2021/10/15/%E5%9B%BE%E5%83%8F%E5%A2%9E%E5%B9%BF/
最终转为Tensor,并进行归一化处理。
参考代码
1 | transforms.Compose([transforms.RandomResizedCrop(224), |
训练结果
结果分析
在训练过程,针对此数据集,VGG16的学习率不宜过高,过高会出现loss不收敛
在loss为0.01时结果如下
VGG网络acc可达到百分之90以上,只是对于小数据集而言,模型过于繁重,可选用层数少的模型,并且在后面3层FC,可根据个人需求修改。
完整代码链接
https://github.com/JiaZhengJingXianSheng/VGG16