DenseNet论文地址:https://arxiv.org/pdf/1608.06993.pdf
<https://arxiv.org/pdf/1608.06993.pdf>

ResNet传送门:ResNet-cifar10
<https://blog.csdn.net/k87974/article/details/80325201>

SegNet传送门:semantic segmentation SegNet
<https://blog.csdn.net/k87974/article/details/79926014>

Inception v3传送门:inception v3
<https://blog.csdn.net/k87974/article/details/80221215>

    这篇文章为2017CVPR的论文,DenseNet描述了一个全新的卷积层与卷积层的连接方式。与inception
的加宽网络结构以及ResNet的加深网络结构不同,DenseNet着重于对每一层feature maps的重复利用。在一个Dense
block中,每一个卷积层的输入都是前几个卷积层输出的concatenation(拼接),这样即每一次都结合了前面所得到的特征,来得到后续的特征。因此,相比其他结构成百上千的filter,DenseNet的宽度(12,24,40)可谓是非常窄了。而每一层对前几层特征的利用并不需要额外的参数,因此在参数量上也是得到了极大的减少 。但是,其显存占用率高的缺点也比较明显(因为concatenation,不过好在后续有了解决方法:
efficien-densenet <https://arxiv.org/abs/1707.06990>)。

    与传统的层与层直接连接,L层一共有L个连接不同,DenseNet的连接在L层下,一共有L(L+1)/2的连接,其方式如下图:



其中growth rate(k)表示每一层的输出channels。其卷积过程用公式表示如下:




其中[x0,x1,...xl-1]表示在0层,...l-1层产生的feature-maps的concatenation(拼接)Hl(.)为一个有序的组合操作(BN-RELU-conv(3x3))。其详细图示如下:



文章中所述的结构除了ImageNet数据集,在cifar-SVHN等数据上使用的结构都是conv(3x3,16filters)-3xdense
blocks-global avgpool-fully
connection。在每一个block之间过度的降维操作使用的是:1x1conv-2x2avgpool。除此之外,文章中还给出了DenseNet-B和C,其中B版加入了Bottleneck
layers,即dense
blocks中的每一个3x3conv变成了1x1conv-3x3conv,在深层网络下有效减少了参数;C版加入了一个压缩因子θ,即在每一层transition
layer的输出feature-maps的数量m变成θm个。其结构具体如下:



本文实现原版densenet,代码实现起来也非常简单,几十行即可实现,下图为结构的总体部分,其相应函数功能见附件。



其结果如下,论文中训练了300个epoch,我这里只训练了20个epoch,batch size 为64,可见效果不错。



代码下载地址:denseNet-cifar10 <https://download.csdn.net/download/k87974/10422306>

 

如果你觉得有用,帮忙扫个红包支持一下吧:


友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
华为云优惠券
站点信息
问题反馈
邮箱:ixiaoyang8@qq.com
QQ群:637538335
关注微信