CNN小红书 (从2021-3-2 永远不停的更新)

前言

最近在面试,每天会被考到很多知识点,这些知识点有些我已经看了十几遍,还是会反应慢或者记不住。回想我在学习过程中,也是学了忘忘了学,没有重复个几十遍根本难以形成永久记忆。这次我复习和整理面试知识点的时候决定把CNN里面的关键创新点、容易疏忽的点都记录下来,方便快速查找回顾,于是就有了这篇像词典一样的永久更新的文章。

一、轻量化网络

 

网络名称 记忆点 备注
MobileNetV1 深度可分离卷积替换传统卷积 计算量和参数量下降为原来的1/Dk^2(Dk为卷积核kernel size,一般为3,所以计算量约为1/9)
深度卷积的激活函数是Relu6 CNN小红书 (从2021-3-2 永远不停的更新)_第1张图片
下采样是通过3x3的深度卷积 stride=2
MobileNetV2 Linear Bottelneck

最后的Relu6换成了Linear

CNN小红书 (从2021-3-2 永远不停的更新)_第2张图片

Inverted Residuals

1.点卷积扩充通道,再做深度卷积,再通过点卷积压缩通道。这样的好处是3x3卷积在更深的通道上可以提取到更丰富的特征。

2.对于stride=1的Block加入Residual结构,stride=2的resoution变了,因此不添加。

CNN小红书 (从2021-3-2 永远不停的更新)_第3张图片

MobileNetV3 NAS

网络的架构基于NAS实现的MnasNet

platform-aware NAS + NetAdapt

SE squeeze and excitation 注意力机制
模型的后半段使用h-swish

swish(x) :f(x) = x * sigmoid(βx)

h-swish是因为sigmoid函数在端上计算耗时而提出的改进方案。

CNN小红书 (从2021-3-2 永远不停的更新)_第4张图片

 

CNN小红书 (从2021-3-2 永远不停的更新)_第5张图片

末端调整 Avg提前,好处是计算量减小。
ShuffleNetV1 1x1分组卷积

传统的深度可分离卷积的Flops: c1,c2表示输入输出通道。c1*c2 >> 9,所以深度可分离卷积的瓶颈在于1x1卷积。

对point-wise covolution分组之后的Flops:g表示分组数,可以看到明显改善了点卷积的瓶颈。

CNN小红书 (从2021-3-2 永远不停的更新)_第6张图片

但是这样会造成channle的信息流通不畅,精度下降。

channle shuffle

CNN小红书 (从2021-3-2 永远不停的更新)_第7张图片

打通channel之间的信息。

CNN小红书 (从2021-3-2 永远不停的更新)_第8张图片

可以看出实际上的shuffle是特征图展开后做了一个转置,操作很简单。

结构

 

CNN小红书 (从2021-3-2 永远不停的更新)_第9张图片 (a) MobileNet, (b) ShuffleNet v1,(c) ShuffleNet v1降采样情况

 

 

 

 

ShuffleNetV2

四大设计理念
  1. G1). 使用输入通道和输出通道相同的卷积操作(内存访问代价MAC最小)
  2. G2). 谨慎使用分组卷积;(MAC与分组数g成正比,因此应该避免使用过大的分组)
  3. G3). 减少网络分支数;
  4. G4). 减少element-wise操作。
结构
CNN小红书 (从2021-3-2 永远不停的更新)_第10张图片 (a) ShuffleNet v1 ,(b)ShuffleNet v1 降采样, (c)ShuffleNet v2,(d)ShuffleNet v2 降采样

 

  • ShuffleNet v2使用了一个通道分割(Channel Split)操作。这个操作非常简单,即将 channelc分为c'和c-c'两组。这种设计是为了尽量控制分支数,为了满足G3。
  • 在分割之后的两个分支,左侧是一个直接映射,右侧是一个输入通道数和输出通道数均相同的深度可分离卷积,为了满足G1。
  • 在右侧的卷积中,  卷积并没有使用分组卷积,为了满足G2。
  • 最后在合并的时候均是使用拼接操作,为了满足G4。
  • 在堆叠ShuffleNet v2的时候,通道拼接,通道洗牌和通道分割可以合并成1个element-wise操作,也是为了满足G4。

 

 

 

二.基础知识

2.1 BatchNorm/LayerNorm/InstanceNorm/GroupNorm

基础知识点 记忆点 备注
Batch Norm 达到的效果 BatchNorm就是在深度神经网络训练过程中使得每一层神经网络的输入保持相同分布。
出发点

解决covariate shift:如果ML系统实例集合中的输入值X的分布老是变,这不符合IID假设,网络模型很难稳定的学规律。

问题:分布变化=>非线性输出向两端移动=>梯度消失=>网络收敛慢

解决:BN=>将隐藏层的输入拉回到(0,1)正态分布=>使激活值落在非线性区域=>使得梯度变大=>加快网络收敛

保障非线性

BN为了保证非线性的获得,对变换后的满足均值为0方差为1的x又进行了scale加上shift操作(y=scale*x+shift)

核心思想应该是想找到一个线性和非线性的较好平衡点,既能享受非线性的较强表达能力的好处,又避免太靠非线性区两头使得网络收敛速度太慢。

推理时的参数 推理的参数scale和shift是在训练的时候记住每个batch内的参数,然后求出平均值和方差的期望,这样在全局上估计的这组参数更加准确。
正则化作用 在BN层中,每个batch计算得到的均值和标准差是对于全局均值和标准差的近似估计,这为我们最优解的搜索引入了随机性,从而起到了正则化的作用。
BN的缺陷 带有BN层的网络错误率会随着batch_size的减小而迅速增大,当我们硬件条件受限不得不使用较小的batch_size时,网络的效果会大打折扣。
BN/LN/IN/GN 示意图 CNN小红书 (从2021-3-2 永远不停的更新)_第11张图片
均值方差的作用位置
  • BN:固定C,对H,W和N求均值方差。
  • LN:固定N,对C和H,W求方差。
  • IN:固定C和N,对H,W求均值和方差。
  • GN:固定N,对C分组,每组内对C',H,W求均值和方差。
相比BN为什么好? LN/IN和GN都没有对batch作平均,所以当batch变化时,网络的错误率不会有明显变化
经验表现 LN和IN 在时间序列模型(RNN/LSTM)和生成模型(GAN)上有很好的效果,而GN在视觉模型上表现更好。

 

 

2.2 关于dropout

基础知识点 记忆点 备注
dropout 概念

在每个训练批次中,神经元的激活值以一定的概率p停止工作

目的 起到正则化作用,可以使模型泛化性更强,因为模型不会太依赖某些局部的特征。
示意图

CNN小红书 (从2021-3-2 永远不停的更新)_第12张图片

面试问到是冻结权重还是冻结神经元? 答冻结神经元。

为什么缓解过拟合?

为什么有人说dropout类似model ensemble的效果?

  1. dropout每次隐藏部分神经元,就像是在训练不同的模型,因为每次网络的结构都不同。整个dropout就像是在对多个模型进行了ensemble。不同模型可能产生不同的过拟合,互相之间进行ensemble,就会起到平均效果更好。
  2. dropout有可能减少密集的局部连接,迫使模型去学习更为全局更为robust的特征,而模型不应该因为局部的细节而产生大的变化。

 

三.常见loss函数

loss函数 记忆点 备注
CE  交叉熵的推理

1.信息量的表示

2.熵是信息量的期望

3.相对熵(KL散度)表示两个分布的差异

4.交叉熵是相对熵的数学变形

CNN小红书 (从2021-3-2 永远不停的更新)_第13张图片

前面是p(x)的熵,是一个常量。后面就是交叉熵。

loss的形式
分类loss为什么prefer交叉熵than MSE? MSE不能保证误差越大,梯度越大,学习越快。而交叉熵可以,因此收敛更好更快。
Focal  解决的问题

1.解决类别不平衡

2.难易样本分布不平衡

loss的形式 CNN小红书 (从2021-3-2 永远不停的更新)_第14张图片
loss的参数

基于交叉熵演变而来。

γ用来调节样本难易程度,一般取2。γ提升了预测与GT差距大的样本对loss的贡献比(困难样本)。

α用来调节样本类别的比例,默认α=0.25,将前景的loss放大而背景的loss缩小。

Dice 解决的问题 语义分割中正负样本不平衡
loss的形式

Dice系数:

Dice loss:

Laplace Smoothing:

Dice的优势劣势
  1. GIOU paper 提出给定优化指标本身与代理损失函数之间的选择,最优选择就是指标本身。所以Dice本身更贴合语义分割常用的评价指标iou。
  2. Dice的问题是求导在极端情况下会导致梯度陡增,使训练难以收敛震荡,不稳定。

 

四.常见衡量指标

指标名称 记忆点 备注
MAP(目标检测) TP、TN、FP、FN CNN小红书 (从2021-3-2 永远不停的更新)_第15张图片
Precision & Recall Precision = TP / (TP + FP)   Recall = TP / (TP + FN)
AP

按照模型给出的置信度,对每个类的所有预测框进行排序:

逐个计算Precision 和 Recall,绘制PR曲线,AP就是PR曲线上的Precision值求均值。

实际应用中就会对PR曲线最做平滑:

CNN小红书 (从2021-3-2 永远不停的更新)_第16张图片

MAP MAP就是对所有类的AP做平均值。
MIOU(语义分割)

 

IOU

IOU的定义:计算真实值和预测值两个集合的交集和并集之比

IOU=TP/(FP+FN+TP)

MIOU 对于不同类别的IOU求平均值
MIOU的数学表达

pij表示真实值为i,被预测为j的数量, K+1是类别个数(包含空类)。pii是真正的数量。pij、pji则分别表示假正和假负。

 

你可能感兴趣的:(计算机视觉,计算机视觉,CNN,卷积,深度学习)