偶然间看到了去年在做毕设期间随笔的深度学习整理: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​)/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/2018/03/11/object-detection-and-classification-using-r-cnns/
  • https://www.cnblogs.com/wangguchangqing/p/10384058.html

Reference

  1. https://zhuanlan.zhihu.com/p/54709759
  2. https://github.com/fusimeng/MaskRCNN/blob/master/notes/roi_align.md
  3. https://zhuanlan.zhihu.com/p/61317964
  4. https://www.cnblogs.com/wangguchangqing/p/10393934.html

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

  1. PPT学习整理(八)PPT动画全入门

    学习来源:B站资源https://www.bilibili.com/video/BV1w54y1Q7cZ?p=13&spm_id_from=pageDriver 动画:元素动画.组合动画.切换 ...

  2. 压测学习总结(2)——Jmeter 基本知识入门

    Jmeter的简介: Jmeter是一款基于纯JAVA语言开发的开源的性能测试工具. jmeter启动界面 Jmeter的下载: ·最新版: http://jmeter.apache.org/down ...

  3. [caffe]深度学习之CNN检测object detection方法摘要介绍

    [caffe]深度学习之CNN检测object detection方法摘要介绍  2015-08-17 17:44 3276人阅读 评论(1) 收藏 举报 一两年cnn在检测这块的发展突飞猛进,下面详 ...

  4. Vanishing Point Detection 消影点/消失点/灭点检测代码学习整理笔记

    VanishingPointDetection 代码学习整理 main.cpp VPDetection.h VPDetection.cpp run() getVPHypVia2Lines getSph ...

  5. AI火爆干货最全整理!五套深度学习和算法学习教程和三套Python学习视频!!!限时无套路免费领取!...

    点击蓝色"AI专栏"关注我哟 选择"星标",重磅干货,第一时间送达 这是站长第 31 期免费送丰富宝贵的干货资源与教程 本期绝对是满满的干货! 获取更多资源请关 ...

  6. 深度学习-机器学习-联邦学习-可视化等最全python软件整理分享

    本资源整理了数据科学场景中常用的精选python软件资源,涉及机器学习,深度学习,联邦学习,机器学习可视化,可解释性等,分享给大家. 资源整理自网络,源地址:https://github.com/kr ...

  7. Spring源码深度解析(郝佳)-学习-源码解析-基于注解切面解析(一)

    我们知道,使用面积对象编程(OOP) 有一些弊端,当需要为多个不具有继承关系的对象引入同一个公共的行为时,例如日志,安全检测等,我们只有在每个对象引用公共的行为,这样程序中能产生大量的重复代码,程序就 ...

  8. [译]深度神经网络的多任务学习概览(An Overview of Multi-task Learning in Deep Neural Networks)...

    译自:http://sebastianruder.com/multi-task/ 1. 前言 在机器学习中,我们通常关心优化某一特定指标,不管这个指标是一个标准值,还是企业KPI.为了达到这个目标,我 ...

  9. 自学机器学习、深度学习、人工智能学习资源推大聚合

    想要解决如何自学机器学习.深度学习和人工智能这一问题,首先要了解三个概念以及它们之间的关系. 人工智能:人工智能英文缩写为AI,它是研究.开发用于模拟.延伸和扩展人的智能的理论.方法.技术及应用系统的 ...

  10. 深度学习之迁移学习介绍与使用

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 转载自:OpenCV学堂 迁移学习概述 在深度学习领域,通过预训练 ...

最新文章

  1. 第五章 业务架构,5.3 千亿访问量下的开放平台技术揭秘(作者:风胜)
  2. shell实例第4讲:批量创建用户
  3. java同步关键词解释、synchronized、线程锁(Lock)
  4. 【题意分析】1044 Shopping in Mars (25 分)【滑动窗口】
  5. canvas生成二维码(2)
  6. Git和GitHub快速入门
  7. android开发方法数,Android减少App方法数
  8. java 基本数据类型的自动拆箱与装箱
  9. linux7ip路由,Centos7源地址访问路由(双IP双网关配置)
  10. 数据库身份证号用什么类型_互联网企业数据库安全的现状与对策
  11. 【LeetCode】217. Contains Duplicate (2 solutions)
  12. linux samba
  13. byte数组转字符串_字符串性能优化不容小觑
  14. 年度最强浏览器插件来袭,打造个人完美生产力
  15. matlab模拟静电场边值,静电场边值问题有限差分法的仿真分析
  16. java web web.xml配置_web.xml配置详解
  17. Win Server 2003搭建Sql注入环境
  18. springcloud之服务发现笔记
  19. OpenCV 角度计算
  20. Volatility2.6用法

热门文章

  1. Java中守护线程和本地线程区别,这特么太重要了!
  2. QT 获取键盘组合键
  3. Shiny server: application failed to start
  4. 电视android怎么连接手机助手下载,手机怎么连到电视上?
  5. java tld tag_jsp中引用的tag和tld文件
  6. Unix/Linux编程:Xinu中的进程
  7. 怎样解决问题 《how to slove it》 《在代码大全里》
  8. [rust学习笔记]错误处理
  9. 【ZT】记住这些,或许可以救你一命!!【强力推荐帖!】
  10. 【实践案例分享】58的商业DMP数据管理平台的架构与实践