Blitznet网络理解笔记
1 resnet的理解
https://blog.csdn.net/lanran2/article/details/79057994
2 DSSD的理解
https://www.cnblogs.com/xuanyuyt/p/7447111.html
https://blog.csdn.net/jesse_mx/article/details/55212179
3 Bliznet网络
https://blog.csdn.net/yaoqi_isee/article/details/77195029
https://blog.csdn.net/zhangjunhit/article/details/77577076
https://blog.csdn.net/shenxiaolu1984/article/details/51428392
4 Non-Maximum Suppression,NMS
https://www.cnblogs.com/makefile/p/nms.html
5 mAP理解
https://blog.csdn.net/zdh2010xyz/article/details/54293298
一、Introduction
BlitzNet: A Real-Time Deep Network for Scene Understanding
目标是做到实时的目标检测和语义分割,通过的简单的全卷积网络解决两个任务.在论文中作者表示两个任务的大部分权值是共享的.最终可以证明两个任务是一种相互促进的关系.
论文中作者给出的结果:
推理硬件:Titan X(Maxwell)
在Pascal Voc数据集上表现如下,300表示推理时的图片尺寸是300*300
| model | FPS | mIoU | mAp |
|---|---|---|---|
| BlitzNet300 | 24 | 72.8 | 80.0 |
在COCOc数据集上表现如下,512表示推理时的图片尺寸是512512,作者在论文中贴处的结果并没有给出在COCO上的推理效率.但是给出了对512512的voc图片的推理效率FPS为19.5,且mAP为83.8(24),第一名的91.1%.
| model | FPS | mIoU | mAp |
|---|---|---|---|
| BlitzNet512 | 53.5 | 34.1 |
二、BlitzNet
ResNet-50:ResNet without Connected Layer,feature maps
downscale-stream:SSD-layers,Multi-scale feature maps
upscale-stream:context
deconvolutuoin layers : classification of bounding boxes & segmentation maps
1) ResNet
https://blog.csdn.net/lanran2/article/details/79057994
2) SSD
提出的SSD算法是一种直接预测目标类别和bounding box的多目标检测算法。与faster rcnn相比,该算法没有生成 proposal 的过程,这就极大提高了检测速度。针对不同大小的目标检测,传统的做法是先将图像转换成不同大小(图像金字塔),然后分别检测,最后将结果综合起来(NMS)。而SSD算法则利用不同卷积层的 feature map 进行综合也能达到同样的效果。算法的主网络结构是VGG16,将最后两个全连接层改成卷积层,并随后增加了4个卷积层来构造网络结构。对其中5种不同的卷积层的输出(feature map)分别用两个不同的 3×3 的卷积核进行卷积,一个输出分类用的confidence,每个default box 生成21个类别confidence;一个输出回归用的 localization,每个 default box 生成4个坐标值$ (x, y, w, h)$。此外,这5个feature map还经过 PriorBox 层生成 prior box(生成的是坐标)。上述5个feature map中每一层的default box的数量是给定的(8732个)。最后将前面三个计算结果分别合并然后传给loss层。
voc2007上测试的mAP为80.6%.(512,512).
feature map cell 即图中小格子
default box 即图中虚线所形成的一系列 boxes
这种default box在不同的feature层有不同的scale,在同一个feature层又有不同的aspect ratio(default box的纵横比),因此基本上可以覆盖输入图像中的各种形状和大小的object!
38*38*3+(19*19+10*10+5*5+3×3+1*1)×6=7038
后面四层为在VGG-16-Atrous基础网络上填加的特征提取层.检测过程不仅在填加特征图(conv8_2, conv9_2, conv_10_2, pool_11)上进行,为了保证网络对小目标有很好检测效果,检测过程也在基础网络特征图(conv4_3, conv_7)上进行。
损失函数:
3) DSSD网络
SSD方法用的基准网络是VGGNet,要是换成Resnet-101的话就能提升精度,这就更好的特征提取网络。在目标检测研究之外,有一种编码-解码(encoder-decoder )网络,其中网络中间层加入了输入图像的编码部分,后面再进行解码(就是卷积和反卷积),这样形成的宽-窄-宽的网络结构很像沙漏,FCN就是类似结构,本文就利用反卷积层实现了上下文信息的扩充。
首先,把SSD的基准网络从VGG换成了Resnet-101,增强了特征提取能力;然后使用反卷积层(deconvolution layer )增加了大量上下文信息,最终提升了目标检测精度,尤其是小物体的检测精度.voc2007测试的mAP为81.5%(512,512)
如何利用上下文信:就是把红色层做反卷积操作,使其和上一级蓝色层尺度相同,再把二者融合在一起,得到的新的红色层用来做预测。如此反复,仍然形成多尺度检测框架。在图中越往后的红色层分辨率越高,而且包含的上下文信息越丰富,综合在一起,使得检测精度得以提升。
4)stacked hourglass network
堆积沙漏网络论文阅读.
https://blog.csdn.net/zziahgf/article/details/72732220
第一行为卷积路,由三个核尺度不同的卷积层(白色)串联而成,间插有Batch Normalization(浅蓝)和ReLU(浅紫);
第二行为跳级路,只包含一个核尺度为1的卷积层;如果跳级路的输入输出通道数相同,则这一路为单位映射。
所有卷积层的步长为1,pading为1,不改变数据尺寸,只对数据深度(channel)进行变更。
Residual Module由两个参数控制:输入深度M和输出深度N。可以对任意尺寸图像操作。
作用:Residual模块提取了较高层次的特征(卷积路),同时保留了原有层次的信息(跳级路)。
不改变数据尺寸,只改变数据深度。可以把它看做一个保尺寸的高级“卷积”层。
Blitznet中的resskip
First, incoming feature maps are upsampled to the size of corresponding skip connection via bilinear interpolation.
Then both skip connection feature maps and upsampled maps are concatenated and passed through a block (1 × 1 convolution, 3 × 3 convolution, 1 × 1 convolution) and summed with the upsampled input through a residual connection.
通过线性插值法上采样到与跳跃连接的特征层一样大,然后聚合为一个更深的特征maps,再进入(1 × 1 convolution, 3 × 3 convolution, 1 × 1 convolution)在通过residual
connection将结果与上采样输入相加
细节图
第一行为卷积路,由三个核尺度不同的卷积层(白色)串联而成,间插有Batch Normalization(浅蓝)和ReLU(浅紫);
第二行为跳级路,只包含一个核尺度为1的卷积层;如果跳级路的输入输出通道数相同,则这一路为单位映射。
所有卷积层的步长为1,pading为1,不改变数据尺寸,只对数据深度(channel)进行变更。
Residual Module由两个参数控制:输入深度M和输出深度N。可以对任意尺寸图像操作。
5)Multiscale Detection and Segmentation
detect:跳跃结构, 通过两个卷积核分别产生conf和loc,再输入softmax
segment:几倍上采样串联为一个更深的feature maps,通过跳跃结构连接.最后通过1*1的卷积核产生深度为21的特征图
6)non-maximum suppression
目的就是要去除冗余的检测框,保留最好的一个
7)mAP
其中,selected elements是按confidence score 排序的TOPK
某一类的AP的计算:
ASCAL VOC CHALLENGE的计算方法。首先设定一组阈值,[0, 0.1, 0.2, …, 1]。然后对于recall大于每一个阈值(比如recall>0.3),我们都会得到一个对应的最大precision。这样,我们就计算出了11个precision。AP即为这11个precision的平均值。这种方法英文叫做11-point interpolated average precision。
新的计算方法假设这N个样本中有M个正例,那么我们会得到M个recall值(1/M, 2/M, …, M/M),对于每个recall值r,我们可以计算出对应(r’ > r)的最大precision,然后对这M个precision值取平均即得到最后的AP值
mAP即所有AP的平均值
loss function:
seg_loss:交叉熵损失 cross-entropy loss.
该目标函数计算的是每个像素的预测概率分布和其真实概率分布间的距离.
tensorflow中关于交叉熵损失函数的计算有四种,参考:
https://blog.csdn.net/QW_sunny/article/details/72885403?utm_source=blogxgwz0
本文用的是tf.nn.sparse_softmax_cross_entropy_with_logits(_sentinel=None,labels=None,logits=None, name=None)
它对于输入的logits先通过softmax函数计算,再计算它们的交叉熵,但是它对交叉熵的计算方式进行了优化,使得结果不至于溢出
它适用于每个类别相互独立且排斥的情况,一幅图只能属于一类,而不能同时包含一条狗和一只大象
output不是一个数,而是一个batch中每个样本的loss,所以一般配合tf.reduce_mean(loss)使用
det_loss:
本文中的具体loss如何把检测和分割的loss协同起来,作者没有在论文中做详细说明,在作者个给出的开源代码中可以看出只是对两中loss做了相加的操作.
tf.GraphKeys.REGULARIZATION_LOSSES是weights的正则化损失
三、实验结果
输出结果:
mean absolute percentage
[INFO]: Eval results:
| Category | mAP (all) |
|------------+-------------|
| road | 1.000 |
| line | 0.960 |
| lane | 0.872 |
| car | 0.897 |
| man | 0.334 |
| bman | 0.000 |
| barrier | 0.419 |
| AVERAGE | 0.640 |
0.5014037
[INFO]:
Mean IoU is 0.501404
map的计算有问题,目前未解决
四、思考
1、损失函数只是简单的相加,不能充分体现二者协同.在实验中,推理结果发现有的对象检测可以检测到,但是分割任务不能将其分出;有的分割可以分出确检测不到.在智能驾驶处场景中,希望能道路只用分割标签,其他的用检测和分割两个标签,鉴于上述的实验结果观察,考虑可以在两个损失函数之间,添加惩罚项,如果道路之外的分类出现上述问题,加强对此类问题的学习.
上下问信息的利用,是否可以通过空洞卷积的形式.

BlitzNet是一种实时场景理解的深度网络,结合ResNet、SSD、DSSD等,实现目标检测和语义分割。通过多尺度检测和上下文信息增强,提高小目标检测精度。论文在Pascal Voc和COCO数据集上表现出色,但mAP计算存在争议。实验结果显示,检测和分割任务之间可能存在协同优化的空间。
461





