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成员变量的隐藏
一.如果子类与父类中有一个相同名称的成员变量,那么子类的成员变量会不会覆盖父类的成员变量?我们看下在的例子: public class A { public int x=10; } public cl ...
- 新项目找不到Angular-cli.json文件
新项目找不到Angular-cli.json文件 Angular-cli.json文件是Angular5中cli的相关配置信息. 今天创建了新Angular项目后突然发现Angular-cli.jso ...
- cf444E. DZY Loves Planting(并查集)
题意 题目链接 Sol 神仙题啊Orzzzzzz 考场上的时候直接把树扔了对着式子想,想1h都没得到啥有用的结论. 然后cf正解居然是网络流??出给NOIP模拟赛T1???¥%--&((--% ...
- ul制作导航菜单
首先上图,最终效果: HTML代码: <!DOCTYPE html><html> <head> <meta charset="utf-8" ...
- ios移动端禁止双指缩放功能
在实际开发中,我们禁止缩放的实现方式: 1.meta设置: <meta name="viewport" content="width=device-width,h ...
- 网络I/O模型--07Netty基础
Netty 是由 JBOSS 提供的一个 Java 开源框架. Netty 提供异步的.事件驱动的网络应用程序框架和工具 ,用以快速开发高性能 . 高可靠性的网络服务器和客户端程序. Net ...
- stm32f103各个型号芯片之间程序移植(stm32的兼容问题)
1.stm32f103系列的各个型号的芯片差别一般不大,都是一些flash大小不一样,一般是向下兼容(大容量芯片兼容中容量芯片)还有晶振大小不一样. ...
- redis list 查询、下标查询、删除、裁剪、压入弹出、队列实现
查询 lrange list 0 1 // 注意0和1之间是空格:这个命令和pop命令不一样,不会删除里面的值lrange list 0 -1 // 所有的 下标查询 lpush person zs ...
- linux 命令格式、ls命令、du命令
命令格式:命令 [-选项] [参数] ls -la /etc1.个别命令不遵循此格式2.当有多个选项时,可以写在一起,大多数顺序可以随意3.简化选项与完整选项 -a 等于 --all ls命令:ls ...
- maven 编译插件指定jdk版本的两种方式
第一种方式: <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration&g ...