目录
主要改动
1.更新Block
2.重新设计了耗时层结构
3.重新设计激活函数
4.使用NAS搜索参数(略)
Block
先回顾一下v2的bottleneck
v3在做完逐通道卷积后,不是直接进入逐点卷积,添加了一步给每个通道计算注意力的操作。
得到Dwise conv的输出后,对每一个通道做avgpool,将其缩小成1*1*channel大小的向量
再对得到的向量做两次全连接层,计算每个节点,也就是每个channel对应的注意力大小
第一次fc将channel缩小到1/4,第二次fc还原通道数
将输出的1*1*channel大小的向量中每个节点的值作为每个channel的注意力权重,将其乘回原矩阵便得到输出。再对输出做逐点卷积。
上述添加注意力过程的操作示例:
以黄蓝两个通道为例,计算两个通道的注意力权重并乘回原矩阵
重新设计了耗时层结构
1. 第一个卷积层的卷积核个数从32减少到16(对比v1v2模型可参考前一篇文章)
2.简化Last Stage
在不损失精度的情况下减少三个层的计算量
Original Last Stage对应v2的最后几层
重新设计激活函数
swish
先采用了swish激活函数,也就是让x乘sigmoid(x),效果还不错能够提高网络精度。
但是sigmoid计算和求导比较复杂,对量化过程不友好,所以进行了重构
hard-swish
relu6跟v1 v2中使用的一样
用x乘relu6的六分之一来模拟swish激活,同时减少计算难度
sigmoid
h-sigmoid
sigmoid h-sigmoid swish h-swish的比较
v3整体结构
SE表示是否使用注意力机制,也就是开头对block的改动
NL表示非线性激活,HS-->Hard-Swish RE-->relu
最后两层NBN表示不使用BN层
exp size表示通过1*1卷积升到多少维
large版本
、
small版本
本文含有隐藏内容,请 开通VIP 后查看