目录
1、前言
ResNet(残差网络)是一种深度卷积神经网络架构,广泛用于图像分类任务。它是由微软研究院的研究人员于2015年推出的,以其通过使用残差连接训练非常深的网络的能力而闻名。
ResNet背后的主要思想是解决深度神经网络训练过程中出现的梯度消失问题。当梯度变得太小而无法正确更新网络早期层中的权重时,就会出现这个问题,从而导致性能下降。
ResNet通过引入快捷连接或跳过连接来解决这个问题,这些连接允许网络学习残差映射。这些连接跳过一个或多个层,直接将输入传播到后面的层。这有助于减少梯度消失的影响,并允许网络学习更复杂、更深入的表示。
ResNet架构有不同的版本,如ResNet-18、ResNet-34、ResNet-50等。名称中的数字表示网络的深度,与层数相对应。较深的版本通常具有更好的性能,但需要更多的计算资源进行训练。
ResNet在各种图像分类挑战上取得了最先进的成果,包括ImageNet大规模视觉识别挑战赛(ILSVRC)。它也被广泛应用于其他计算机视觉任务,如对象检测和分割。
其中每一个模块的具体搭建参考之前的 博文,这里不多赘述
2、resnet 猫狗分类实战
为了方便做消融试验,这里将resnet 5个系列的模型复现,并且选择不同的优化器进行对比
项目下载在文末
2.1 训练
这里采用经典的二分类数据集猫、狗图像分类,其中训练集和验证集的数目为:1400、600
经过数据增强、输入网络的数据如下:
这里测试了100个epoch,效果如下:
这里采用了官方的预训练权重, 并且从头训练,导致过拟合
parser.add_argument("--pretrained", default=True, type=bool) # 采用官方权重
parser.add_argument("--freeze_layers", default=True, type=bool) # 冻结权重
指标曲线如下:
2.2 推理
这里推理脚本默认推理目录下的所有数据
默认需要保证和训练的版本一样,这里的提供两个模型,一个是最好的权重,一个是最后的权重
parser.add_argument("--model", default='resnet18', type=str, help='resnet 18、34、50、101、152') # 选择哪一个resnet模型
parser.add_argument("--weights", default='runs/weights/best.pth', type=str, help='best、last')
推理如下:
3、更换数据集训练
项目下载:基于resnet网络系列实现的迁移学习、图像识别多分类项目:猫狗图像实战资源-CSDN文库
需要下载的库文件如下:【requirements.txt】
matplotlib==3.7.5
numpy==1.24.4
opencv_python==4.10.0.84
Pillow==10.4.0
prettytable==3.11.0
scikit_learn==1.3.2
torch==1.8.2+cu102
torchvision==0.9.2+cu102
tqdm==4.66.5
然后数据集摆放好即可:【里面每个目录都是同一类的图片数据】
整个项目目录: