BlitzNet: A Real-Time Deep Network for Scene Understanding
ICCV2017

BlitzNet 是一种同时能够获取目标检测框以及语义分割的实时检测网络。其中检测网络基本上采用了 SSD 结构,特征提取网络采用了 ResNet50,下图为整个网络结构图。

整个网络利用了多级特征融合策略,采用了类似 FCN 网络的编码解码结构以及 Skip 结构。对于论文的相关介绍网上有很多资料,可以参考BlitzNet介绍。而本篇博客对BlitzNet一些细节进行了分析。这里参考了原作者源码,以及PyTorch部分结构,错误之处还望指出。

主干网络

主干网采用了 ResNet50 结构,如下图:

总共有4层(Layer1,Layer2,Layer3,Layer4)结构包含着 Bottleneck 层(依次通过1x1,3x3,1x1的卷积核)。其中64, 64, 256这些代表卷积后的output_channel, s1代表步长为1。其实,这就是ResNet的基本结构。

下采样层

下采样层就是网络结构图的蓝色部分,其中采取的卷积策略如下图:

其中 Layer5,Layer6,Layer7,Layer8 采用了相同的残差块操作,由于存在步长为2的卷积层,因此图像大小会依次减小。

上采样层

上采样层作者使用了所谓的ResSkip结构,如图

从图中看应该是 Upscale Stram 先上采样然后经过1X1卷积,然后和 Downscale Stream 进行特征concat,之后3X3,1X1卷积,之后将 Upscale Stram 上采样的特征 map 与进行卷积之后的特征 map 求和,但是论文描述却是:

相当于上采样后先concat,然后经过一个 block(1X1, 3X3, 1X1卷积操作), 然后和上采样的特征相加操作。 通过代码看出应当按照描述的结构来操作。代码中给出的上采样层结构应该如下:

左边为图像大小为300x300的操作,右边为512x512图像的操作,这里只显示Detection 的操作,Segmentation 操作仅仅是将sum的结果再次上采样,然后特征融合,类似 FCN 的上采样结构。可以看出整个上采样过程和系统的整体网络结构图还是有所区别。 Detection 的过程整体采用了 SSD 的相关思路,对特征图选取了一些先验框去做的。