深度学习整理:detection 学习(2)——detection细节知识入门
偶然间看到了去年在做毕设期间随笔的深度学习整理:detection 学习(1),怀念当时毕设自由自在的学术氛围。如今已经研一,现在开始入手目标检测相关工作,学习继续。这篇博文致力于将目标检测的一些小点进行总结,并且以章节形式呈现。(新生入门,非大佬)
目录
- 1. 非极大值抑制 NMS
- 1.1 Intersection over Union (IOU)
- 1.2 NMS 算法流程
- 1.3 NMS效果
- 2. Smooth L1 loss
- 3. ROI pooling 与 ROI align
- 4. Regression 坐标
- 5. Multi-scale training/network
- Reference
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)/Pwvy=(Gy−Py)/Phvw=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/2018/03/11/object-detection-and-classification-using-r-cnns/
- https://www.cnblogs.com/wangguchangqing/p/10384058.html
Reference
- https://zhuanlan.zhihu.com/p/54709759
- https://github.com/fusimeng/MaskRCNN/blob/master/notes/roi_align.md
- https://zhuanlan.zhihu.com/p/61317964
- https://www.cnblogs.com/wangguchangqing/p/10393934.html
深度学习整理:detection 学习(2)——detection细节知识入门相关推荐
- PPT学习整理(八)PPT动画全入门
学习来源:B站资源https://www.bilibili.com/video/BV1w54y1Q7cZ?p=13&spm_id_from=pageDriver 动画:元素动画.组合动画.切换 ...
- 压测学习总结(2)——Jmeter 基本知识入门
Jmeter的简介: Jmeter是一款基于纯JAVA语言开发的开源的性能测试工具. jmeter启动界面 Jmeter的下载: ·最新版: http://jmeter.apache.org/down ...
- [caffe]深度学习之CNN检测object detection方法摘要介绍
[caffe]深度学习之CNN检测object detection方法摘要介绍 2015-08-17 17:44 3276人阅读 评论(1) 收藏 举报 一两年cnn在检测这块的发展突飞猛进,下面详 ...
- Vanishing Point Detection 消影点/消失点/灭点检测代码学习整理笔记
VanishingPointDetection 代码学习整理 main.cpp VPDetection.h VPDetection.cpp run() getVPHypVia2Lines getSph ...
- AI火爆干货最全整理!五套深度学习和算法学习教程和三套Python学习视频!!!限时无套路免费领取!...
点击蓝色"AI专栏"关注我哟 选择"星标",重磅干货,第一时间送达 这是站长第 31 期免费送丰富宝贵的干货资源与教程 本期绝对是满满的干货! 获取更多资源请关 ...
- 深度学习-机器学习-联邦学习-可视化等最全python软件整理分享
本资源整理了数据科学场景中常用的精选python软件资源,涉及机器学习,深度学习,联邦学习,机器学习可视化,可解释性等,分享给大家. 资源整理自网络,源地址:https://github.com/kr ...
- Spring源码深度解析(郝佳)-学习-源码解析-基于注解切面解析(一)
我们知道,使用面积对象编程(OOP) 有一些弊端,当需要为多个不具有继承关系的对象引入同一个公共的行为时,例如日志,安全检测等,我们只有在每个对象引用公共的行为,这样程序中能产生大量的重复代码,程序就 ...
- [译]深度神经网络的多任务学习概览(An Overview of Multi-task Learning in Deep Neural Networks)...
译自:http://sebastianruder.com/multi-task/ 1. 前言 在机器学习中,我们通常关心优化某一特定指标,不管这个指标是一个标准值,还是企业KPI.为了达到这个目标,我 ...
- 自学机器学习、深度学习、人工智能学习资源推大聚合
想要解决如何自学机器学习.深度学习和人工智能这一问题,首先要了解三个概念以及它们之间的关系. 人工智能:人工智能英文缩写为AI,它是研究.开发用于模拟.延伸和扩展人的智能的理论.方法.技术及应用系统的 ...
- 深度学习之迁移学习介绍与使用
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 转载自:OpenCV学堂 迁移学习概述 在深度学习领域,通过预训练 ...
最新文章
- 第五章 业务架构,5.3 千亿访问量下的开放平台技术揭秘(作者:风胜)
- shell实例第4讲:批量创建用户
- java同步关键词解释、synchronized、线程锁(Lock)
- 【题意分析】1044 Shopping in Mars (25 分)【滑动窗口】
- canvas生成二维码(2)
- Git和GitHub快速入门
- android开发方法数,Android减少App方法数
- java 基本数据类型的自动拆箱与装箱
- linux7ip路由,Centos7源地址访问路由(双IP双网关配置)
- 数据库身份证号用什么类型_互联网企业数据库安全的现状与对策
- 【LeetCode】217. Contains Duplicate (2 solutions)
- linux samba
- byte数组转字符串_字符串性能优化不容小觑
- 年度最强浏览器插件来袭,打造个人完美生产力
- matlab模拟静电场边值,静电场边值问题有限差分法的仿真分析
- java web web.xml配置_web.xml配置详解
- Win Server 2003搭建Sql注入环境
- springcloud之服务发现笔记
- OpenCV 角度计算
- Volatility2.6用法
热门文章
- Java中守护线程和本地线程区别,这特么太重要了!
- QT 获取键盘组合键
- Shiny server: application failed to start
- 电视android怎么连接手机助手下载,手机怎么连到电视上?
- java tld tag_jsp中引用的tag和tld文件
- Unix/Linux编程:Xinu中的进程
- 怎样解决问题 《how to slove it》 《在代码大全里》
- [rust学习笔记]错误处理
- 【ZT】记住这些,或许可以救你一命!!【强力推荐帖!】
- 【实践案例分享】58的商业DMP数据管理平台的架构与实践