Loading [MathJax]/jax/element/mml/optable/SuppMathOperators.js

简介

图像分类对网络结构的要求,一个是精度,另一个是速度。这两个需求推动了网络结构的发展。

  • resneXt:分组卷积,降低了网络参数个数。
  • densenet:密集的跳连接。
  • mobilenet:标准卷积分解成深度卷积和逐点卷积,即深度分离卷积。
  • SENet:注意力机制。

简单起见,使用了[1]的代码,注释掉 layer4,作为基本框架resnet14。然后改变局部结构,验证分类效果。

实验结果

GPU:gtx1070
超参数:epochs=80,lr=0.001,optim=Adam
数据集:cifar10,batch_size=100

分组卷积

# 3x3 convolution with grouping
def conv3x3(in_channels, out_channels, stride=1, groups=1):
    return nn.Conv2d(in_channels, out_channels, kernel_size=3,
                     stride=stride, padding=1, bias=False,groups=groups)
_ 参数个数(k) GPU内存(M) 训练时间(s) 测试时间(s) 精度(%)
resnet14 195 617 665 0.34 87
分组=2 99 615 727 0.40 85
分组=4 50 615 834 0.50 81

结论:卷积分组降低了参数个数,同时也降低了速度和精度。

密集连接

    def forward(self, x): # basic block
        residual = x
        if self.downsample:
            residual = self.downsample(x)
        out = self.layer1(x)
        out = self.relu(out)
        out2 = self.layer2(out)
        out2 = self.relu(out2)
        out3 = torch.cat([out,out2],1)
        out = self.layer3(out3)
        out4 = self.relu(out)
        out5 = torch.cat([out3,out4],1)
        out = self.layer4(out5) # back to the specified channels
        return out
_ 参数个数(k) GPU内存(M) 训练时间(s) 测试时间(s) 精度(%)
resnet14 195 617 665 0.34 87
密集连接 341 679 703 0.43 88

结论:参数个数和精度有所增加,速度下降一点点。

深度分离卷积

def Conv2d(in_channels, out_channels,kernel_size=1,padding=0,stride=1):
    return nn.Sequential(*[
            nn.Conv2d(in_channels, in_channels,kernel_size,stride=stride,padding=padding,groups=in_channels,bias=False),
            nn.Conv2d(in_channels, out_channels,1,bias=False),
        ])
_ 参数个数(k) GPU内存(M) 训练时间(s) 测试时间(s) 精度(%)
resnet14 195 617 665 0.34 87
分组=2 99 615 727 0.40 85
分组=4 50 615 834 0.50 81
深度分离卷积 27 665 788 0.40 84

结论:深度分离卷积降低了参数个数,同时也降低了速度和精度。与分组卷积(分组=4)相比,精度要高一点。

注意力机制

利用[2]的代码,修正通道个数

    def forward(self, x): # BasicBlock
        residual = x
        out = self.conv1(x)
        out = self.bn1(out)
        out = self.relu(out)
        out = self.conv2(out)
        out = self.bn2(out)
        if self.downsample:
            residual = self.downsample(x)
        # attention
        original_out = out
        out = F.avg_pool2d(out,out.size()[2:])
        out = out.view(out.size(0), -1)
        out = self.fc1(out)
        out = self.relu(out)
        out = self.fc2(out)
        out = self.sigmoid(out)
        out = out.view(out.size(0), out.size(1), 1, 1)
        out = out * original_out
        out += residual
        out = self.relu(out)
        return out
_ 参数个数(k) GPU内存(M) 训练时间(s) 测试时间(s) 精度(%)
resnet14 195 617 665 0.34 87
注意力 201 641 838 0.51 87

结论:参数个数和精度变动不大,速度降低比较明显。

引用

[1] https://github.com/yunjey/pytorch-tutorial/tree/master/tutorials/02-intermediate/deep_residual_network/main.py
[2] https://github.com/miraclewkf/SENet-PyTorch/blob/master/se_resnet.py

参考文献

  • Chollet, François. Xception: Deep Learning with Depthwise Separable Convolutions[J]. 2016.
  • Xie S , Girshick R , Dollár, Piotr, et al. Aggregated Residual Transformations for Deep Neural Networks[J]. 2016.
  • Huang G, Liu Z, Laurens V D M, et al. Densely Connected Convolutional Networks[J]. 2016.
  • Howard A G , Zhu M , Chen B , et al. MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications[J]. 2017.
  • Hu J , Shen L , Albanie S , et al. Squeeze-and-Excitation Networks[J]. 2017.
  • https://www.cnblogs.com/liaohuiqiang/p/9691458.html
posted @ 2019-03-23 19:54 yunfeng_net 阅读(1423) 评论(0) 推荐(0) 编辑
摘要: 简介 语义分割:给图像的每个像素点标注类别。通常认为这个类别与邻近像素类别有关,同时也和这个像素点归属的整体类别有关。利用图像分类的网络结构,可以利用不同层次的特征向量来满足判定需求。现有算法的主要区别是如何提高这些向量的分辨率,以及如何组合这些向量。 几种结构 全卷积网络FCN:上采样提高分割精度 阅读全文
posted @ 2019-03-10 17:26 yunfeng_net 阅读(15180) 评论(0) 推荐(0) 编辑
摘要: 简介 VGG, resnet和inception是3种典型的卷积神经网络结构。 VGG采用了3 3的卷积核,逐步扩大通道数量 resnet中,每两层卷积增加一个旁路 inception实现了卷积核的并联,然后把各自通道拼接到一起 简单起见,直接使用了[1]的代码来测试 resnet,然后用[2],[ 阅读全文
posted @ 2019-02-24 20:58 yunfeng_net 阅读(7010) 评论(0) 推荐(1) 编辑
摘要: 强化学习 基本概念 强化学习需要学习一个从环境状态到智能体行动的映射,称为智能体的一个策略,使得环境回报最大化。 其环境通常采用 MDP 来定义。 马尔可夫决策过程:MDP={S,A,P,R} 状态转移的回报函数R:S×A×SREAL 阅读全文
posted @ 2018-09-17 02:34 yunfeng_net 阅读(522) 评论(0) 推荐(0) 编辑
摘要: 前馈网络 定义 神经网络:<V,E,σ,w>,EV×V,w:V×VR,σ:V×RR, 输出函数f(v)递归定义为$$\begin{aligned}f(v)&=x(v)&,if\,\nexists 阅读全文
posted @ 2018-07-29 12:26 yunfeng_net 阅读(459) 评论(0) 推荐(0) 编辑
摘要: 基本概念 卷积运算 定义:f(i,j,k)=m,ng(im,jn,k)h(m,n),y(i,j)=kwkf(i,j,k) 平移不变、深度线性叠加。特别在1*1核的时候,为深度的线性变换。 稀疏交互(sparse interactions):核的大小(m,n的范围 阅读全文
posted @ 2018-07-22 13:12 yunfeng_net 阅读(843) 评论(0) 推荐(0) 编辑
摘要: 要点 熵:H(X)=EXP[I(X)]=EXP[logP(x)] 相对熵:Dp||g=E[logp(x)g(x)]。 互信息:$I(X;Y)=\sum_{x,y} P(x,y) \log \frac {P( 阅读全文
posted @ 2018-01-29 15:58 yunfeng_net 阅读(1500) 评论(0) 推荐(1) 编辑
摘要: 简介 可学习理论针对于监督学习,从问题空间X\times Y中采样,输出一个预测函数h:X\to Y,来判定X与Y之间的对应关系。 主要难点在于: 因此学习问题定义为一个三元组(S,H,L)。未知数据分布(x,y)\sim D的情况下,可学习理论给出了得到预测函数集合中最优函数,需要 阅读全文
posted @ 2018-01-25 19:25 yunfeng_net 阅读(426) 评论(0) 推荐(0) 编辑
摘要: 内容 形式语言与自动机:正则语言、上下文无关语言、图灵机 可计算性:可判定、可归约 计算复杂性:时间、空间、难解性 正则语言 确定有穷自动机DFA:M=<Q,\Sigma,\delta,q_0,F>,\delta:Q\times\Sigma\rightarrow Q M 接受字符串:$w=w_1 阅读全文
posted @ 2017-12-28 10:47 yunfeng_net 阅读(1685) 评论(0) 推荐(0) 编辑
摘要: 概率图模型分类 有向图:静态贝叶斯、动态贝叶斯(隐马尔可夫模型) 无向图:马尔可夫网络(条件随机场、玻尔兹曼机) 隐马尔可夫模型 评估问题 HMM<S,O,\Theta>, \Theta=<\pi ,A, B> 隐藏状态S,观测状态O,初始状态的概率分布\pi,隐藏状态转移概率A,观测状态转 阅读全文
posted @ 2017-12-22 14:11 yunfeng_net 阅读(332) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示