菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
198
0

ssd

原创
05/13 14:22
阅读数 53900

https://www.sohu.com/a/168738025_717210

1.vgg16的模型:https://github.com/davidgengenbach/vgg-caffe/blob/master/model/VGG_ILSVRC_16_layers_deploy.prototxt

pool5之后接了3个全连接层,faster的vgg16模型只使用了pool5之前的层,也就是14层;ssd不一样,ssd用了fc6、fc7,但不是直接使用,而是改成了卷积层(具体是改成什么,不同版本的不一样,去看看liuwei的源代码)

2.有300*300、512*512两种尺寸的ssd

但看到这个代码https://github.com/sfzhang15/RefineDet/tree/master/examples/refinedet 他这只有320,没有300

为什么选择512?

我个人觉得是因为可以被64或者128或者256这些数整除。选300我个人感觉可能是能缩小能满足缩小那么多倍,依然有值。

3.ssd在conv4_3检测小物体,所以检测小物体性能不够好。

4.原论文的ssd的框架结构,新添加的层一直添加到conv11_2,但是https://github.com/sfzhang15/RefineDet/tree/master/examples/refinedet和https://github.com/intel/caffe/blob/master/models/intel_optimized_models/ssd/VGGNet/coco/SSD_300x300/train.prototxt都是只添加到conv9_2,包括源代码中https://github.com/weiliu89/caffe/blob/ssd/examples/ssd/ssd_pascal.py也只添加到了conv9_2

不过后来发现两者好像是一样的,只是改变了名字而已

总的来说就是在1/8、1/16、1/32、1/64、1/128、1/256上做预测

这个pool5和fc6,fc7做了一下改动,相当于只缩小了1次,原论文说change pool5 from 2 × 2 − s2 to 3 × 3 − s1, and use the a trous ` algorithm [18] to fill the ”holes”.

这样整体上还是保证了6个尺度进行预测

5.For conv4 3, conv10 2 and conv11 2, we only associate 4 default boxes at each feature map location – omitting aspect ratios of 1 3 and 3. For all other layers, we put 6 default boxes

6.We set default box with scale 0.1 on conv4_3

7.https://www.cnblogs.com/hansjorn/p/7445411.html  anchor怎么做

8.ssd自带了一个permute层,就是改变数据维度的顺序https://blog.csdn.net/liu1152239/article/details/81478313

9.ssd是先让prior-box和gt匹配,然后确定训练的正负样本,也就是确定具体哪些做正样本、负样本,然后再把这些prior-box对应的score和bounding box的得分全拿出来做loss计算

10.ssd prior-box的设计:

从后面新增的卷积层中提取Conv7,Conv8_2,Conv9_2,Conv10_2,Conv11_2作为检测所用的特征图,加上Conv4_3层,共提取了6个特征图,其大小分别是 (38, 38), (19, 19), (10, 10), (5, 5), (3, 3), (1, 1) ,但是不同特征图设置的先验框数目不同(同一个特征图上每个单元设置的先验框是相同的,这里的数目指的是一个单元的先验框数目)。先验框的设置,包括尺度(或者说大小)和长宽比两个方面。对于先验框的尺度,其遵守一个线性递增规则:随着特征图大小降低,先验框尺度线性增加:s_k = s_{min} + \frac{s_{max} - s_{min}}{m-1}(k-1), k\in[1,m]其中 m 指的特征图个数,但却是 5 ,因为第一层(Conv4_3层)是单独设置的, s_k 表示先验框大小相对于图片的比例,而 s_{min} 和 s_{max} 表示比例的最小值与最大值,paper里面取0.2和0.9。对于第一个特征图,其先验框的尺度比例一般设置为 s_{min}/2=0.1 ,那么尺度为 300\times 0.1=30 。对于后面的特征图,先验框尺度按照上面公式线性增加,但是先将尺度比例先扩大100倍,此时增长步长为 \lfloor \frac{\lfloor s_{max}\times 100\rfloor - \lfloor s_{min}\times 100\rfloor}{m-1}\rfloor=17 ,这样各个特征图的 s_k为 20, 37, 54, 71, 88 ,将这些比例除以100,然后再乘以图片大小,可以得到各个特征图的尺度为 60,111, 162,213,264 ,这种计算方式是参考SSD的Caffe源码。综上,可以得到各个特征图的先验框尺度 30,60,111, 162,213,264 。对于长宽比,一般选取 a_r\in \{1,2,3,\frac{1}{2},\frac{1}{3}\} ,对于特定的长宽比,按如下公式计算先验框的宽度与高度(后面的 s_k 均指的是先验框实际尺度,而不是尺度比例):

w^a_{k}=s_k\sqrt{a_r},\space h^a_{k}=s_k/\sqrt{a_r}

默认情况下,每个特征图会有一个 a_r=1 且尺度为 s_k 的先验框,除此之外,还会设置一个尺度为 s'_{k}=\sqrt{s_k s_{k+1}} 且 a_r=1 的先验框,这样每个特征图都设置了两个长宽比为1但大小不同的正方形先验框。注意最后一个特征图需要参考一个虚拟 s_{m+1}=300\times105/100=315 来计算 s'_{m} 。因此,每个特征图一共有 6 个先验框 \{1,2,3,\frac{1}{2},\frac{1}{3},1'\} ,但是在实现时,Conv4_3,Conv10_2和Conv11_2层仅使用4个先验框,它们不使用长宽比为 3,\frac{1}{3} 的先验框。每个单元的先验框的中心点分布在各个单元的中心,即 (\frac{i+0.5}{|f_k|},\frac{j+0.5}{|f_k|}),i,j\in[0, |f_k|) ,其中 |f_k| 为特征图的大小。

得到了特征图之后,需要对特征图进行卷积得到检测结果,图7给出了一个 5\times5 大小的特征图的检测过程。其中Priorbox是得到先验框,前面已经介绍了生成规则。检测值包含两个部分:类别置信度和边界框位置,各采用一次 3\times3 卷积来进行完成。令 n_k 为该特征图所采用的先验框数目,那么类别置信度需要的卷积核数量为 n_k\times c ,而边界框位置需要的卷积核数量为 n_k\times 4。由于每个先验框都会预测一个边界框,所以SSD300一共可以预测 38\times38\times4+19\times19\times6+10\times10\times6+5\times5\times6+3\times3\times4+1\times1\times4=8732个边界框,这是一个相当庞大的数字,所以说SSD本质上是密集采样

anchor的个数:4,6,6,6,4,4

 

11.ssd训练样本的策略:ohem+正负比例1:3。也就是说按loss的大小排序,选loss大的,并且保证正负比例1:3

12.ssd预测的是score和bouding box的offset,yolo1预测则是score和bouding box的4个坐标的直接值。目前个人的理解,ssd=rpn网络从2类变成多类 + multistage预测。ssd的预测在ap0.5时与faster差不多,但是换成ap0.7就差很多,可以把结果输出出来看,faster的性能明显好于ssd。如果从cascade-rcnn的角度看,其实faster相当于多一个回归,进一步走向高精度。

 

https://zhuanlan.zhihu.com/p/33544892

发表评论

0/200
198 点赞
0 评论
收藏