首页 > 其他分享 >ResNet:Deep Residual Learning for Image Recognition

ResNet:Deep Residual Learning for Image Recognition

时间:2025-01-03 20:46:33浏览次数:1  
标签:映射 nn Image ResNet Deep 残差 channels 网络 self

摘要
残差网络:一种深度学习中的神经网络结构,通过引入跳跃连接来解决深度神经网络中的梯度消失和梯度爆炸问题。ResNet(residual networks)的简单介绍
输入层学习参差函数,而不是学习未残差的函数。以及在ImageNet和COCO数据集上取得好的成绩。
1 介绍
揭示了网络的深度对于训练结果非常重要,但是并不是神经网络的层数越深网络模型越高,一味的加深会导致梯度下降或者梯度爆炸,当层数达到最合适的时候,增加层数会使训练误差增大,使训练准确率下降。解决上述问题可以通过归一初始化和在中间层归一,这样能够使数十层网络开始收敛(随机梯度下降与反向传播)。然后残差网络的提出正解决了这类问题,使用ResNet网络模型,对于越深的网络模型,训练的结果越好。
参差网络的特征:这个快捷连接既不需要增加额外的参数,也不需要增加计算的复杂度。
参差网络的实现:通过indentity mapping(自身映射)来创建一个快捷连接。
残差网络相对于之前模型的优点:

  • 深度残差网络很容易取优化,但是对应的普通,没有使用残差的,在增加深度时会出现更高的训练误差。
  • 残差网络可以更容易从深度大幅度增加中获得精度增益,比之前的模型产生更好的结果。
  • 残差网络模型适用性强,并且可以在很深的神经网络模型取得成功。
  • 残差网络模型泛化性强。

2 相关工作
VLAD是编码残差矢量的表示,Fisher Vector(费舍尔向量)是VLAD的概率版本。残差矢量编码比原始矢量编码更有效。
好的预处理可以简化优化。这里给出将系统重新分为多个子问题,每个子问题用残差网络来解决。
快捷连接实现了层相应,梯度和传播误差居中的方法。优越性:门是有参数的,而残差网络中的快捷连接是无参数的。
残差网络于其它网络模型的比较:“highway networks”和门控功能与本论文的残差网络相似,都提供了快捷连接。列出他们与残差网络的区别。但是highway networks在面对深度极大增加情况下,并没有显示准确性的提高。
3 深度残差学习
3.1 残差学习
在ResNet中,网络的输出由两部分组成:恒等映射(identity mapping)和残差映射(residual mapping)。恒等映射指的是将输入直接传递到下一层,而残差映射则是对输入进行一些非线性变换后再进行传递。
H(x)为底层映射,它是由几个堆叠层拟合的;F(x)为残差映射;x为这些层的第一层输入,x到x为恒等映射;对于普通函数输入x经过一层层底层映射,最终变为H(x);在残差函数中,残差函数F(x)= H(x)-x,原始的函数就变为H(x)=F(x)+x.

深度学习对于网络深度遇到的问题是梯度消失和梯度爆炸,传统对应的解决方案则是数据的初始化(normlized initialization)和批量归一化(batch normlization)、正则化(dropout),但是这样虽然解决了问题,深度加深了,却带来了另外的问题,就是网络性能的退化问题,深度加深了,错误率却上来了,而残差用来设计解决退化问题,其同时也解决了梯度问题,使得网络性能也提升了。

3.2 快捷通道自身映射
自身映射(恒等映射)是显著的对于解决退化问题并且自身映射也是经济的。

残差映射的输出层中x输入与F残差函数的输出必须相等,维数也得相等。
3.3 网络结构


对比三种网络结构,残差网络可以再恒等映射中使用1 * 1的卷积来降低模型的维度。
3.4 实施
实验中的参数以及特征为:
在[256,480]随机采样图片的短边进行缩放;
图像或水平翻转裁剪224*224;
再减去每像素的平均值;
数据增强:标准颜色增强;
每次卷积后和激活前采用批归一化;
初始化权重,从头开始训练;
使用SGD小批量大小为256;
学习率初始时为0.1,误差平稳时除以10;
使用0.0001的权重衰减;
使用0.9的动量;
没有使用正则化;
4 实验
4.1 ImageNet分类


实验说明在普通神经网络中,34层的神经网络比18层的神经网络有更高的误差。也说明在一般神经网络中,层数越高不能代表准确率越好。
残差网络在不同层数的设计:

每一个小方格代表一个残差块,可以看出在更深的层(64层以后)都使用1 * 1卷积来降低维度。

1 * 1卷积用于减少和增加维度,使3*3卷积输入/输出维度较小的瓶颈。
4.2 CIFAR-10和分析
ResNet都有很好的效果
ResNet响应有更小的响应强度。
4.3 PASCAL和MS COCO的目标检测
ResNet都有很好的效果

import torch
from torch import nn
from torch.nn import functional as F
from d2l import torch as d2l


class Residual(nn.Module):  #@save
    def __init__(self, input_channels, num_channels,
                 use_1x1conv=False, strides=1):
        super().__init__()
        self.conv1 = nn.Conv2d(input_channels, num_channels,
                               kernel_size=3, padding=1, stride=strides)
        self.conv2 = nn.Conv2d(num_channels, num_channels,
                               kernel_size=3, padding=1)
        if use_1x1conv:
            self.conv3 = nn.Conv2d(input_channels, num_channels,
                                   kernel_size=1, stride=strides)
        else:
            self.conv3 = None
        self.bn1 = nn.BatchNorm2d(num_channels)
        self.bn2 = nn.BatchNorm2d(num_channels)

    def forward(self, X):
        Y = F.relu(self.bn1(self.conv1(X)))
        Y = self.bn2(self.conv2(Y))
        if self.conv3:
            X = self.conv3(X)
        Y += X
        return F.relu(Y)

定义残差块,每一个残差块都包含两个3 * 3卷积层,且其后面有一个批量规范化层,其中第一个卷积层后面直接跟ReLU激活函数,最后在卷积块输出后整体一个ReLU激活函数,这里判断了是否使用1 * 1卷积,若使用,则底层映射加上恒等映射后在ReLU激活。

b1 = nn.Sequential(nn.Conv2d(1, 64, kernel_size=7, stride=2, padding=3),
                   nn.BatchNorm2d(64), nn.ReLU(),
                   nn.MaxPool2d(kernel_size=3, stride=2, padding=1))

定义一个模块函数,以实现后面的残差块。

def resnet_block(input_channels, num_channels, num_residuals,
                 first_block=False):
    blk = []
    for i in range(num_residuals):
        if i == 0 and not first_block:
            blk.append(Residual(input_channels, num_channels,
                                use_1x1conv=True, strides=2))
        else:
            blk.append(Residual(num_channels, num_channels))
    return blk
b2 = nn.Sequential(*resnet_block(64, 64, 2, first_block=True))
b3 = nn.Sequential(*resnet_block(64, 128, 2))
b4 = nn.Sequential(*resnet_block(128, 256, 2))
b5 = nn.Sequential(*resnet_block(256, 512, 2))
net = nn.Sequential(b1, b2, b3, b4, b5,
                    nn.AdaptiveAvgPool2d((1,1)),
                    nn.Flatten(), nn.Linear(512, 10))

每个模块有4个卷积层(不包括恒等映射的1 * 1卷积层)。加上第一个7 * 7卷积层和最后一个全连接层,共有18层。 因此,这种模型通常被称为ResNet-18。

标签:映射,nn,Image,ResNet,Deep,残差,channels,网络,self
From: https://www.cnblogs.com/kangkangk/p/18543524

相关文章

  • 深度剖析 DeepSeek V3 技术报告:架构创新与卓越性能表现
    随着人工智能(AI)技术的不断发展,各种大规模语言模型(LLM)层出不穷,DeepSeekV3作为其中的一员,凭借其出色的性能表现和创新的架构设计,吸引了广泛关注。本文将通过对官方发布的DeepSeekV3技术报告的深入解析,从多个维度剖析DeepSeekV3如何通过先进的技术手段,在保持性能卓越的......
  • 基于SpringBoot的DeepSeek-demo 深度求索-demo 支持流式输出、历史记录
    文章目录文件下载效果展示IdeaPythonPostman使用说明核心代码controllerService文件下载百度网盘提取码:jsfc蓝奏云密码:5kxz效果展示IdeaPythonPostman注:postman中只有websocket才有流式效果使用说明修改配置文件请求路径为/chat在请求体中传......
  • wx.canvasPutImageData
    wx.canvasPutImageData(Objectobject,Objectthis)基础库1.9.0开始支持,低版本需做兼容处理。以Promise风格调用:支持小程序插件:支持,需要小程序基础库版本不低于1.9.6微信鸿蒙OS版:支持相关文档:画布指南、canvas组件介绍功能描述将像素数据绘制到画布。在......
  • 接入 deepseek v3 教程--免费500百万token至25-2-1日
    接入deepseekv3教程--免费500百万token至25-2-1日注册接入接入deepseekv3教程–免费500百万token至25-2-1日注册在deepseek的官网进行注册,大陆手机号只需要用验证码登录即可https://www.deepseek.com/登录后会赠送500万的token额度有效期至25年1月2......
  • Exadata X6支持的最新image和19c数据库版本?
    如题,有客户咨询这个问题:ExadataX6支持的最新image和19c数据库版本?直观感觉,看到X6这个型号就觉得是很老的机器了,毕竟现在最新都X10M了。首先,去查MOS文档:ExadataDatabaseMachineandExadataStorageServerSupportedVersions(DocID888828.1)在ExadataSystemSoftwar......
  • opencv vector<vector<Point2f> > imagePoints[2]怎么解释
    在OpenCV中,vector<vector<Point2f>>imagePoints[2];通常用于存储图像中的特征点,尤其是在立体视觉或相机标定等应用中。下面是对这个数据结构的详细说明。结构解析vector<vector<Point2f>>:这是一个二维向量,表示一个向量的向量。Point2f是一个表示二维点的结构,包含x......
  • DeepSeek-V3 技术报告-学习
    打开读完觉得有意义记得关注及点赞!!!        我们介绍了DeepSeek-V3,这是一个强大的专家混合(MoE)语言模型,总共有671B个参数,每个令牌激活了37B。为了实现高效的推理和具有成本效益的训练,DeepSeek-V3采用了多头潜在注意力(MLA)和DeepSeekMoE架构,这些架构在DeepS......
  • 关于deeptools computeMatrix使用numpy报错
    $deeptools--versiondeeptools3.5.5在使用该版本deeptoolscomputeMatrix功能时遇见了如下报错computeMatrixreference-point--referencePointTSS\-b5000-a5000\-R/public/spst/home/fanxy2022/fxy/reference/GRCm38.p6/gencode.vM23.annotation.bed\-S*.b......
  • DeepSpeed训练得到checkpoint如何像Huggingface模型一样评测evaluation?zero_to_fp32.p
    DeepSpeed训练得到checkpoint如何像Huggingface模型一样评测evaluation?具体步骤首先看一个样例:这是我用open-instruct框架,使用DeepSpeed训练1728个steps得到的一个checkpoint。请注意,下文我演示用的例子是基于step_1152,主要方法和step_1728这个名字没有任何区别。在使......
  • IEDA 使用auto Dev编码助手配置Deep Seek V3
    文章目录APIKey的申请和创建autoDev的下载autoDev的安装DeepseekV3的连接配置和注意事项错误解决:YouLLMserverKeyisemptyAPIKey的申请和创建登陆DeepSeek开放平台,创建APIKey并复制autoDev的下载autoDev项目地址,发行版下载地址autoDev与Idea版本......