DenseNets网络架构与ResNet有点相像,都是把L-1层的输出作为L层的输入,同时DenseNets作为L+1,...,L+n的输入,这也就是dense含义的所在了,下面看一些大致的网络架构,如下图:
由上图的网络架构可以明显的看出,DenseNet是把第0,...,L-1层输出的feature maps(第0层表示输入图像)拼接层一个张量(tensor)feature maps,作为L层的输入。
那么我们就会有一个疑问,每个卷积层的输出的feature maps可能大小不同,如经过采样和pooling的输出,这样拼接的feature maps大小就会不一致,这该怎么办呢?有办法,DenseNet把该网络架构封装成DenseBlocks的形式(如下图),在每个DenseBlocks里进行拼接的feature maps大小都是一致的,尽管不同DenseBlocks内的feature maps的大小不一致。如下图所示:
官方Release Code(Torch)实现:DenseNet
Release Code(Keras)实现:DenseNet
Release Code(TensorFlow)实现:DenseNet
Release Code(PyTorch)实现:DenseNet