snip
首先明确物体太小太大都不好检测(都从roi的角度来分析): 1.小物体: a.本身像素点少,如果从anchor的点在gt像素内来说,能提取出来的正样本少
b.小物体会出现iou过低。具体来说,假设a是一个框,b是一个小框(gt),就算a的框和b的框重叠的部分占到了b的90%,但是如果a的框比较大,iou还是会低,正样本也就少了,并且容易错判成负样本
2.大物体:大物体也容易出现iou过低。同理,假设a是一个大框(gt),b是一个框,就算a的框和b的框重叠的部分占到了b的90%,但是如果b的框比较小,iou还是会低,正样本也就少了,并且容易错判成负样本
naiyan说过过小和过大的性能都会下降,https://zhuanlan.zhihu.com/p/36431183 这个的评论里面说的
snip从scale的角度解决小物体问题和scale invariance
网络设计:
整个网络有3个scale,从大到小依次是(480,800)、(800,1200)、(1400,2000),每个scale对应的像素范围为:[0,80]、[40,160]、[120,正无穷]。
[0,80]对应(1400,2000),也就是说大约是把小物体在大像素的图片上检测,中物体在中像素的图片上检测,大物体在小像素的图片上检测。为什么说大约,因为[0,80]、[40,160]都包含了[40,80]这个范围,相当于这个范围的gt同时会在两种resolution上进行识别检测。
原论文中是说roi不在这个范围内就不选择,一般小像素的定义是32,如果原始的定义就是小物体在大尺寸图片检测,那范围的设定应该是[0,32]、[32,96]、[96,正无穷],但如果这样去设定,就会忽略掉很多gt框,因为有些gt框的尺寸可能比32大,比如35、45这种,但这些roi却是对训练有帮助的。所以作者这种范围存在交集的方式,比较有效的解决这个问题,但也会出现一个问题,有些gt会在多个网络训练。
如果是单纯为了达到,小的就在大的尺寸上,大的就在小的尺寸上,其实这个可以把gt的范围设置成[0,32]、[32,96]、[96,正无穷]这种无交集的,roi的范围设置成[0,80]、[40,160]、[120,正无穷]这种有交集的。但是不知道是不是这种单纯在一个尺度上训练会带来更好的效果。
但作者设计这个交集的目的却是:We have an overlap of 40 pixels over adjacent ranges. These ranges were design decisions made during training, based on the consideration that after re-scaling, the resolution of the valid RoIs does not significantly differ from the resolution on which the backbone CNN was trained.
1.train阶段:1.ground_truth: ground_truth在尺寸范围内,标记为有效,超过标记为无效。
2.roi:roi在尺寸范围内,标记为有效,超过标记为无效。
3.anchor:anchor与invalid ground_truth的iou大于0.3的不进行反向传播。
ground_truth、roi与anchor有些不同:ground_truth的框如果不在范围内就不会选取,也就是不会与anchor和roi进行assign;roi如果不在范围内,在proposal阶段不会选取作为训练;原论文中说不符合的anchor不进行反向传播,rpn阶段anchor也是选取一定数目并标记正负样本,那这些不符合的anchor是选进了训练里面然后不反传?还是直接不选取?
这样设计,肯定也会带来每个scale的图片训练的时候,roi个数减少的问题
Since in RPN even a one pixel feature map can generate a proposal we use a validity range of [0,160] at (800,1200) for valid ground truths for RPN.这个有点没理解到
2.test(inference)阶段:
测试阶段anchor和roi都不过滤,而是在每个scale生成框之后,如果框的尺寸不在范围内就过滤掉,最后把所有尺寸有效的框一起用nms。
第二个实验:
1.第一组对比:800和1400
论文中说: training at higher resolutions scales up small objects for better classification, but blows up the medium-to-large objects which degrades performance.作者觉得小物体的性能在放大后应该是提升了,性能提升不明显是因为中等和大的物体的性能下降
2.第二组对比:1400只检测80像素以下,1400检测all
首先我会觉得会不会是过拟合,因为数量减少太多?这个不确定;再者,像论文所说的,可能就是因为scale减少,导致检测性能降低,比如测试集中有两个物体是差不多的,但是尺寸不一样;还有可能就是像naiyan说的大物体可以增加语义信息,但这个点我没想通,是指同一种label吗?还是说其他的label也可以?个人更倾向于同一种label。
延伸问题:为什么大物体可以增加语义信息?
3.第三组对比:mst和之前3个比
论文中说:It ensures training instances are observed at many different resolutions, but it also degraded by extremely small and large objects.
个人感觉这句话的比较对象应该是和1400all比较的,他说的extremely small and large确实可能会比1400all下降,我自己做image pyramid,特别小的物体,你如果用了很小的scale,确实会下降。个人感觉可能特别大的物体放大特别多也可能下降(这个没做实验)。所以他做出来性能没有原尺寸好,是不是因为他自己的image pyramid的尺寸设计的不好,这个不确定。但是他确实给了一些特别重要的点:a.用image pyramid的时候,用哪些scale其实是有讲究的,并不是越放大或者越放小就好 b.大物体可能放大之后性能下降,也就是说过大的物体可能也不好检测。一个点:image pyramid调的合适,是不是能超过snip呢?个人觉得第三个实验如果好好调参数应该是比1400all性能好的,但是不一定赶得上snip。作者其实是想用这种方式表达,image pyramid可以修改,他的snip其实就是在改image pyramid。
本质上,snip就是在改进image pyramid,相当于还是在不同scale上训练,不同scale共享一个网络、共享参数,但是每个scale不是把所有的gt都拿来训练,而是在每种scale图片上选择相应适合的gt(尺寸适合的gt)进行训练(这个scale适合不是说大的gt用大scale的图片,而是小的gt用大的scale图片,因为小物体需要放大提升性能,大物体需要缩小提高性能),并且roi也只训练一个范围的scale,anchor也选择一定尺寸范围(只是实现的方式不同)。如果你只选一定范围的gt,不去修改roi阶段的范围,是有问题的。为什么这么说?因为每个scale的gt虽然都在一定范围内,但是roi阶段是3个scale共享的,其实提取出来的roi的size应该是一样的,如果你不这样去过滤,本质上和image pyramid没区别,其实会造成问题,正样本。同理可以推导到rpn的anchor阶段。
待解决:
1.既然实验2说了大小物体一起训练比单独训练小物体好,为什么要在大scale上只用小物体,不加大物体或者中型物体??
2.anchor阶段为什么不直接用范围去过滤,而要通过这种跟invalid的方式?
3.延伸问题:为什么大物体可以增加语义信息?
4.第一组实验为什么放大了对性能提升不明显?大中型物体检测性能为什么还下降?
目前的detector没有很好解决多尺度的问题,所以每个尺度单独训练
论文到底在讲诉什么问题?
为什么要这样设计能解决问题?
snip类似于图像金字塔,但不同的是他让一定scale的框单独在一个scale的detector上训练和测试,也就是说一个检测器只负责一个尺寸,跟adaboost有点像,而image pyramid是每个检测器都负责所有尺寸。原始的无论是image pyramid还是faster,都是一个检测器训练许多scale,测试的时候,其实也是一个网路检测多个scale,这也就说明,其实目前的检测器并不能很好学习scale这个变量。如果你原本是在大scale上训练的网络,但是要检测小scale的东西可能性能就不好,最有效的方式还是这个网络在训练和测试的时候都处理scale差不多大的物体。
通过这样的一个对比实验,SNIP非常solid地证明了就算是数据相对充足的情况下,CNN仍然很难使用所有scale的物体。个人猜测由于CNN中没有对于scale invariant的结构,CNN能检测不同scale的“假象”,更多是通过CNN来通过capacity来强行memorize不同scale的物体来达到的,这其实浪费了大量的capacity,而SNIP这样只学习同样的scale可以保障有限的capacity用于学习语义信息。
https://blog.csdn.net/qq416261970/article/details/79774909
https://zhuanlan.zhihu.com/p/43579317
https://zhuanlan.zhihu.com/p/35956039
https://zhuanlan.zhihu.com/p/36431183
https://www.imuo.com/a/b9667dec518c3355270e677207a850460ce9ba335dd76ce9dd613115f12c12ed
snip的更多相关文章
- Typora + Mathpix Snip,相见恨晚的神器
word 文档虽然很好,但当我需要输入一大堆公式的时候,word 公式让我疯狂. Why markdown?首先,GitHub 上都在用,那我也得会吧,不然 README.md 怎么写:其次,mark ...
- MacOS下好用的截图软件snip
1 官网下载,腾讯出的 https://snip.qq.com/ 2 下一步下一步安装就好,然后设置一下自己喜欢的快捷键,我的是command + control+J,选择自己喜欢的或者默认都可以 3 ...
- Snip for Mac(桌面截图工具)安装
1.软件简介 Snip 一款用于桌面截图的工具. 2.资源列表 链接 提取密码 系统要求 软件语言 Snip for Mac v2.0 (5771) fgab macOS 10.6.8 及以上 ...
- 【尺度不变性】An Analysis of Scale Invariance in Object Detection – SNIP 论文解读
前言 本来想按照惯例来一个overview的,结果看到1篇十分不错而且详细的介绍,因此copy过来,自己在前面大体总结一下论文,细节不做赘述,引用文章讲得很详细,另外这篇paper引用十分详细,如果做 ...
- mac --snip 滚动截屏
1.snip 下载配置:https://jingyan.baidu.com/article/fec4bce2458d03f2618d8b8e.html 2.mac的火狐浏览器好像不支持,必须在sofa ...
- 文档公式编辑神器-Snip
最近在重新学习统计学的一些基础知识,整理笔记的时候需要输入一些数学公式.从学校毕业之后,就没有在文档中插入过公式了.按照以前的经验,我把输入公式的方式分成两类. 所见即所得的方式,常见的就是微软wor ...
- 将公式直接转化为Latex代码的神器-snip
经常用latex写论文,免不了要敲各种公式,今天和大家分享一个神器-snip,它可以直接将公式转化为代码,不需要我们自己编写公式代码,方便快捷,准确率极高.该神器的下载地址为:https://math ...
- [论文理解] An Analysis of Scale Invariance in Object Detection – SNIP
An Analysis of Scale Invariance in Object Detection – SNIP 简介 小目标问题一直是目标检测领域一个比较难解决的问题,因为小目标提供的信息比较少 ...
- CSS code snip enjoy.
<!-- information-total得是动态获取吧. --> <div class="information-mod"> <div class ...
随机推荐
- 区分IE8/IE7/IE6及其他浏览器-CSS “\9″
区分IE8/IE7/IE6及其他浏览器-CSS “\9″ 原创文章,转载请注明来自张鑫旭-鑫空间-鑫生活[http://www.zhangxinxu.com] by zhangxinxu from h ...
- Review——JS的异步与同步
一.概念 同步(synchronous):指在js的主线程上,所有任务被依次执行: 异步(asynchronous):指任务不进入主线程,进入任务队列(task):当“任务队列”通知主线程,异步任务才 ...
- vue.js 项目打包
vuejs是个前端框架,npm run dev的目的在于前端开发的时候可以实时调试.所以npm run dev 只是开发时期会用到,在生产环境中我们应该使用nginx,apahce tomcat等应用 ...
- CSS 的介绍
第一章 的介绍 1.CSS:“层叠样式表”,它是cascading style sheets的缩写,作用就是给HTML标签加表现形式(样式-显示),如:字体,图片,列表,位置等. 在浏览器中可以看到部 ...
- 全功能开发团队(FSD)
- hadoop HA集群搭建步骤
NameNode DataNode Zookeeper ZKFC JournalNode ResourceManager NodeManager node1 √ √ √ √ node2 ...
- Android Studio 使用Intent实现页面的跳转(带参数)
不管是在APP,还是在网站中,页面之间的跳转都是很常见的,本文主要讲一下在APP中,如何通过Intent实现页面的跳转. 不带参数: 写在MainActivity页面的代码: Intent inten ...
- is_palindrome 回文递归
# coding=utf-8def is_palindrome(n,start,end): if start>end: return 1 else: return is_palindrome(n ...
- sql 去重关键字 distinct
单列去重: mysql: drop table test;create table test(id int(4));insert into test values(1),(2),(3),(4),(1) ...
- Django基本设置
Dango设置流程图片示例: 设置路由时需要注意的一个点是:Django中定义路由时,通常习惯以斜线 / 结尾 其他常用命令: python manage.py runserver 0.0.0.0:8 ...