Please enable JavaScript.
Coggle requires JavaScript to display documents.
CSPNet(2019) - Coggle Diagram
CSPNet(2019)
优点
加强CNN的学习能力
在使CNN轻量化后,仍保持足够的准确性
移除计算瓶颈
过高的计算瓶颈会导致预测时需要更多的循环,或者导致计算单元的空闲。CSP通过分散每一层的计算有效提高每一个计算单元的使用率从而减少不必要的资源消耗
减少内存消耗
通过使用cross-channel pooling,在特征金字塔生成的过程中压缩特征图,从而减少内存使用
实现
Cross Stage Partial
DenseNet
-
步骤
- 第i的输入(如第一层的紫色)经过卷积得出输出(如第一层的蓝色)
- 将第i层的输入和第i层的输出concat起来作为第i+1层的输入
- 每个stage循环实现1,2步,得出这个stage的Dense Block
公式
前向传播
-
$$x_k=w_k*[x_0,x_1,....x_{k-1}]$$
-
反向传播(论文公式)
-
-
$$w_3'=f(w_3,g_0,g_1,g_2)$$
$$w_k'=f(w_k,g_0,g_1,g_2,...,g_{k-1})$$
反向传播(我认为更好理解的公式)
$$w_{k-1}'=f(w_{k-1},g_k)$$
$$w_{k-2}'=f(w_{k-2},g_k, g_{k-1})$$
$$w_0'=f(w_0, g_k, g_{k-1},...,g_1)$$
说明
- xi是第i层的输出
- f 为权值更新函数
- gi为传播到第i个密集层的梯度
- 论文公式是传播到i层的公式,但是梯度时反向传播的,所以我把公式改成正向传播一样的顺序
CSPDenseNet
步骤
- 将stage的初始输入分割成两个部分[x_0', x_0'']
- 其中一部分放到Dense Block中运算,另一部分在最后和k层Dense Block的结果连接起来
- 放入Dense Block中预算的部分和普通Dense Block一样
公式
前向传播
$$x_k=w_k*[x_0'',x_1,...x_{k-1}]$$
$$x_T=w_T*[x_0'', x_1,...x_k]$$
-
反向传播(论文公式)
$$w_k'=f(w_k,g_0'',g_1,g_2,...g_{k-1})$$
$$w_T'=f(w_T,g_0'',g_1,g_2,...g_k)$$
-
反向传播(我认为更好理解的公式)
$$w_U'=f(w_U,g_{(n+1, 0)}',g_{(n+1,T)})$$
-
$$w_i'=f(w_i,g_i,...,g_k,g_T )$$
说明
- 以我的理解,w_U计算梯度时应该是用上层的x_0''和x_T计算的,因为梯度从上层传到下层,所以是n+1
- 因为x_0'和x_0''分割开来使用,不像残差的f(x)+x,到计算梯度时还是要等f(x)计算完才能知道准确梯度,所以这里从权重到梯度计算都开了一个快车道,使本层梯度只与g_T有关,下层和本层无关的梯度只与g_0''有关
- 因为x_0分为[x_0', x_0'']所以有一般的channel不用计算,稠密块从(c × m) + ((m2 + m) × d)/2,变成((c × m) + (m2 + m) × d)/2
Partial Transition Layer
概述
设计局部转换层的目的是最大化梯度组合的差异性。局部转换层是一个层次化的融合机制,它利用间断性的截断梯度流来防止不同的层学习重复的梯度信息
策略
Fusion First
概述
先将两部分生成的特征图进行拼接,然后再进行转换操作
-
-
Funsion Last
概述
来自稠密块的输出将经过过渡层,然后与来自第1部分的特征图进行连接
-
-
概述
通过在网络阶段的开始时分割,然后再结束时合并特征图来分割梯度流,使梯度从不同网络路径传播,最终实现20%计算消耗甚至增加准确率