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 ...
随机推荐
- java设计模式-----17、中介者模式
概念: Mediator模式也叫中介者模式,是由GoF提出的23种软件设计模式的一种.Mediator模式是行为模式之一,在Mediator模式中,类之间的交互行为被统一放在Mediator的对象中, ...
- HDU3085(KB2-G 双向bfs)
Nightmare Ⅱ Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- vue-quill-editor 富文本集成quill-image-extend-module插件实例,以及UglifyJsPlugin打包抱错问题处理
官网 vue-quill-editor Toolbar Module - Quill vue-quill-image-upload 图片支持上传服务器并调整大小 1.在 package.json 中加 ...
- SQL索引的优缺点
--索引的优点 /* (1)创建唯一索引,保证数据库表中每一行数据的唯一性 (2)大大加速数据的检索速度,这也是创建索引的最主要的原因 (3)加速表和表至今的连接,特别是在实现数据的参考完整性特别有意 ...
- 网络I/O模型--05多路复用I/O
多路复用I/O模型在应用层工作效率比我们俗称的 BIO 模型快的本质原因是,前者不再使用操作系统级别的“同步 I/O”模型 . 在 Linux 操作系统环境下, 多路复用 I/O 模型就是技术人员通常 ...
- 分布式部署下的报表调用 API调用 权限问题以及性能方案
背景描述: 客户的实际情况是需要在具体系统构架前,通过与厂商讨论确定最终的系统架构方案. 需求是客户自己有管理系统,希望建立一个独立的报表服务器,该报表服务器可以对多个管理系统提供报表服务,不知 ...
- redis 命令行查看修改配置文件项、配置文件说明
命令行查看修改配置文件项 config get | config set | config rewrite config get requirepass // 获取密码config set requi ...
- SQL Server ->> 条件筛选做法之 -- IN(VALUE1,VALUE2,...)与INNER JOIN STRING_SPLIT()性能对比
在以逗号拼接而成的字符串,传入给IN字句的元素字符串中包涵了1400多个元素 两种做法分别为 AND e.ssPfCityId IN ( SELECT CAST(value AS INT) FROM ...
- 【MySQL】无法启动mysql服务(位于本地计算机上)错误1067,进程意外中止
好久没看MySQL了,今天启动起来找找感觉,尴尬了...发现服务启动不了.系统提示:无法启动mysql服务(位于本地计算机上)错误1067,进程意外中止. 解决过程: 1.在网上百度好久,看到一条解决 ...
- CompletionService和ExecutorCompletionService
CompletionService用于提交一组Callable任务,其take方法返回已完成的一个Callable任务对应的Future对象. 如果你向Executor提交了一个批处理任务,并且希 ...