MAI(二):图像分类&常用深度预测编码器backbone解析

RocheL
Aug 5, 2022
Last edited: 2022-8-19
type
Post
status
Published
date
Aug 5, 2022
slug
depth-backbone
summary
常用深度预测编码器backbone解析
tags
AI
Course
category
技术分享
icon
password
Property
Aug 5, 2022 01:41 AM
URL
主要是深度预测挑战赛试了一些backbone,写下来备忘
深度预测领域,通常使用图像分类任务中较好的模型作为自身编码器backbone,本文主要解析mobilenet,resnet,efficientnet等网络结构细节
 

MobileNet

MobileNet-V1

  • Depthwise Convolution
  • 增加了超参数
notion image
notion image
DW卷积、PW卷积连用代替传统卷积,称为深度可分离卷积(Depthwise Separable Conv),理论计算量是普通卷积的(卷积核大小3*3)。 超参可控制所有层的卷积核个数(filter or output_channel),超参控制开始时的下采样倍率
notion image
优化过程中舍弃了部分通道,导致DW卷积的卷积核参数归零,V2对此有改善。
 

MobileNet-V2

notion image
  • Inverted Residual(倒残差结构)
  • Linear Bottlenecks
Inverted Residual(倒残差结构)
Inverted Residual(倒残差结构)
RELU6激活函数,改进版还有leaky,SE-relu等
RELU6激活函数,改进版还有leaky,SE-relu等
以前的通道数是两头大中间小的瓶颈结构,倒残差结构反过来,变成两头小中间大,同时激活函数改为RELU6,中间卷积改为DW。动机是作者发现RELU激活函数作用于低维(低通道数)的特征图会损失掉很多信息。(做了一个featuremap矩阵乘到低维或高维,relu后再广义逆矩阵乘回来看是否保持不变的实验)
notion image
stage中两种stride不同的bottleneck结构
stage中两种stride不同的bottleneck结构
notion image
V2网络结构图如右,一个block由多个bottleneck构成,t是bottleneck中第一次1*1卷积升维之后的通道个数,n是block中bottleneck的重复次数,首尾特征图相同时做shortcut,性能:
notion image
实测确实有时候搭配decoder做任务时还不如v1,大道至简吧((
 

MobileNet-V3

notion image
  • 更新block(bottleneck)结构,命名为bneck
  • NAS搜索超参(Neural Architecture Search)
  • 重新设计了部分耗时结构
notion image
notion image
notion image
SE模块即下图下方的俩FC的部分,DW之后的结果不再直接过1*1输出,而是先过一个针对通道的平均池化,变成一个长为通道数的向量,然后过一个全连接(神经元是通道数的),然后再过一个全连接(神经元等于通道数),得到一个长为通道数的向量,我们认为这个向量每个值都代表对对应通道赋的权值,用这个权值跟原featuremap的对应层相乘后得到SE的输出
激活函数,swish函数性能很好,但是计算求导复杂,并且对移动端量化部署不友好,因此设计了h(hard)-swish激活函数优化近似,简称为HS.
重新设计耗时结构如右图,对NAS结果优化
notion image
notion image
notion image
notion image
exp size(expand size)指第一个1*1卷积升维后的通道数,#out指最后一个1*1输出的通道,RE指用RELU激活,HS指用Hard-Swish激活;第一个bneck不升维,也不降维,所以没有首尾两个1*1卷积。
 

EfficientNet

EfficientNet-V1

看懂了mobilenetv3再看efficientnetv1很简单,开摆了xdm(
EfficientNet网络详解_太阳花的小绿豆的博客-CSDN博客_efficientnet
原论文名称: EfficientNet: Rethinking Model Scaling for Convolutional Neural Networks 论文下载地址: https://arxiv.org/abs/1905.11946 原论文提供代码: https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet 自己使用Pytorch实现的代码: pytorch_classification/Test9_efficientNet 自己使用Tensorflow实现的代码: tensorflow_classification/Test9_efficientNet 不想看文章的可以看下我在bilibili上录制的视频: https://www.bilibili.com/video/BV1XK4y1U7PX 在之前的一些手工设计网络中(AlexNet,VGG,ResNet等等)经常有人问,为什么输入图像分辨率要固定为224,为什么卷积的个数要设置为这个值,为什么网络的深度设为这么深?这些问题你要问设计作者的话,估计回复就四个字--工程经验。而这篇论文主要是用NAS(Neural Architecture Search)技术来搜索网络的图像输入分辨率,网络的深度以及 channel的宽度三个参数的合理化配置。在之前的一些论文中,基本都是通过改变上述3个参数中的一个来提升网络的性能,而这篇论文就是同时来探索这三个参数的影响。在论文中提到,本文提出的 EfficientNet-B7在 Imagenet top-1上达到了当年最高准确率 84.3%,与之前准确率最高的 GPipe相比,参数数量(Params)仅为其 1/8.4,推理速度提升了 6.1倍(看上去又快又轻量,但个人实际使用起来发现很吃显存)。下图是EfficientNet与其他网络的对比( 注意,参数数量少并不意味推理速度就快 )。 在之前的一些论文中,有的会通过增加网络的 width即增加卷积核的个数(增加特征矩阵的 channels)来提升网络的性能如图(b)所示,有的会通过增加网络的深度即使用更多的层结构来提升网络的性能如图(c)所示,有的会通过增加输入网络的分辨率来提升网络的性能如图(d)所示。而在本篇论文中会同时增加网络的 width 、网络的深度以及输入网络的分辨率来提升网络的性能如图(e)所示: 根据以往的经验,增加网络的深度depth能够得到更加丰富、复杂的特征并且能够很好的应用到其它任务中。但网络的深度过深会面临梯度消失,训练困难的问题。 The intuition is that deeper ConvNet can capture richer and more complex features, and generalize well on new tasks.
EfficientNet网络详解_太阳花的小绿豆的博客-CSDN博客_efficientnet
 

EfficientNet-V2

 
 
MiDaS&DPTMAI(一):比赛环境