1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 深度学习整理:detection 学习(2)——detection细节知识入门

深度学习整理:detection 学习(2)——detection细节知识入门

时间:2019-07-27 07:49:47

相关推荐

深度学习整理:detection 学习(2)——detection细节知识入门

偶然间看到了去年在做毕设期间随笔的深度学习整理:detection 学习(1),怀念当时毕设自由自在的学术氛围。如今已经研一,现在开始入手目标检测相关工作,学习继续。这篇博文致力于将目标检测的一些小点进行总结,并且以章节形式呈现。(新生入门,非大佬)

目录

1. 非极大值抑制 NMS1.1 Intersection over Union (IOU)1.2 NMS 算法流程1.3 NMS效果2. Smooth L1 loss3. ROI pooling 与 ROI align4. Regression 坐标5. Multi-scale training/networkReference

1. 非极大值抑制 NMS

本章节修改于 [1]^{[1]}[1]。

1.1 Intersection over Union (IOU)

1.2 NMS 算法流程

NMS算法一般是为了去掉模型预测后的多余框,其一般设有一个nms_threshold(0-1之间),现在假设为0.5,具体的实现思路如下:

1.选取这类box中scores最大的那一个,记为box_best。并保留它

计算box_best与其余的box的IOU

2.如果其IOU>0.5了,那么就舍弃这个box(由于可能这两个box表示同一目标,所以保留分数高的那一个)

3.从最后剩余的boxes中,再找出最大scores的哪一个,如此循环往复。

1.3 NMS效果

inference阶段按分最高的那个抑制的,然后算其他box跟它的IOU,大于某个值,就去掉了。

2. Smooth L1 loss

从统计学习角度出发,L1是希望解是稀疏的,可以代替L0。L2的正则化是岭回归,L1的正则化是脊回归。

由下图,当梯度值过大时(大于1),对应训练初期,Smooth L1有梯度剪裁的效果。而当梯度较小时(小于1),此时对应到训练中应该已经到了后期,loss较低,对比L1梯度始终是1,到了训练后期会一直震荡,无法进入“谷底”,而Smooth L1就可以利用L2平滑的过度掉进“谷底”。

3. ROI pooling 与 ROI align

我在processon上画了个图作为输入输出的讲解。假设backbone下采样了四倍,那么backbone输出的feature map就是 [1, 256, 200, 272],都是整数。

ROI Align如何运作那?首先结合ROIs的坐标,假设715个,5个维度分别表示图像id(batch中第几个),对应roi左上角的x,y坐标、roi右下角的x,y坐标。ROIs的坐标需要除以4,产生float格式坐标,比如是[0, 230.02, 69.24, 262.46, 80.5]

所以这个roi的宽度是,262.46-230.02=32.44,roi的高度是80.5-69.24=11.26。由于输出的长宽大小为7,因此这个roi要被分成7x7的小块,每个小块的高度是11.26/7=1.60,宽度是32.44/7=4.63。假设我们的采样率为2,那么在每个小块内,要采样2x2=4个点。四个采样点在ROI的四个中心(如下图)。而这四个点可以由周围四个整数坐标插值。最后,取四个像素值中最大值作为这个小区域(4.63x1.60)的像素值,7x7分的块就会产生7x7的feature。

ROI Align总结顺序就是:

ROIs的坐标(原本就是float) => 1/4的ROIs的坐标(float)

对于每一个ROI:ROI分成7x7的块 (float) => 取最大的采样点。

ROI Pooling总结顺序就是:

ROIs的坐标(原本就是float) => 1/4的ROIs的坐标(取整)

对于每一个ROI:ROI分成7x7的块 (取整) => 双线性插值计算每个ROI的四个采样点(float) => 取最大的采样点。

所以ROI Pooling与ROI Align区别是那两次取整 和 如何从块中取得代表像素value。

网上流传了一张找不到出处的图(ROI Pooling):可以可视化参考

计算方式参考

传送门——Github传送门——知乎

更多有趣的pooling方式参考

传送门——知乎

4. Regression 坐标

参考 [4]^{[4]}[4]。可以解释为什么offset构造是

vx=(Gx−Px)/Pwvy=(Gy−Py)/Phvw=log(Gw/Pw)vh=log(Gh/Ph)v_x = (G_x - P_x) / P_w \\ v_y = (G_y - P_y) / P_h \\ v_w = log(G_w / P_w) \\ v_h =log(G_h / P_h)vx​=(Gx​−Px​)/Pw​vy​=(Gy​−Py​)/Ph​vw​=log(Gw​/Pw​)vh​=log(Gh​/Ph​)

xy(中心坐标)是平移改变,而wh(宽长)是scale的改变,log是exe^xex的逆,好求。

5. Multi-scale training/network

其实对于Multi-scale training,我个人认为,这并不是一个算法,而是一种思想,我在很多论文中都有看到过,Multi-scale training并没有被任何一篇论文详细定义。

YOLO v2

由于 YOLO v2将样本降采样32倍,因此作者从以下32的倍数中提取:{320、352,…,608}。因此,最小的选项为320×320,最大的为608×608。作者没十个batch进行一次random select。SSD/FPN

这一系列是直接构建特征金字塔,不同的stage输出不同大小的feature,low-level feature对小物体检测较好,high-level feature 对大的objects效果较好(经验之谈)。我理解SSD 的detector太high-level了,300x300的图,开始检测都到了38x38这么大小的feature,而FPN就的结构很均匀,与backbone结合每一个stage出一个output,显然结构更好。

negatives and positives is

at most 3:1

持续更新。。。

突然发现两个非常良心的rcnn系列解读

http://www.telesens.co//03/11/object-detection-and-classification-using-r-cnns//wangguchangqing/p/10384058.html

Reference

/p/54709759/fusimeng/MaskRCNN/blob/master/notes/roi_align.md/p/61317964/wangguchangqing/p/10393934.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。