当前位置: 首页 > news >正文

【SNIP】《An Analysis of Scale Invariance in Object Detection – SNIP》

在这里插入图片描述

CVPR-2018

Singh B, Davis L S. An analysis of scale invariance in object detection snip[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 3578-3587.

https://github.com/bharatsingh430/snip?tab=readme-ov-file


文章目录

  • 1、Background and Motivation
  • 2、Related Work
  • 3、Advantages / Contributions
  • 4、Method
  • 4.1、Image Classification at Multiple Scales
    • 4.2 Data Variation or Correct Scale?
    • 5.3 Object Detection on an Image Pyramid
  • 5、Experiments
    • 5.1、Datasets
    • 5.2、Evaluation
  • 6、Conclusion(own) / Future work / Reference


1、Background and Motivation

CNN 在图像分类上已经超越了人类的水平,但是在目标检测上还有很长的路要走

large scale variation across object instances, and especially, the challenge of detecting very small objects stands out as one of the factors behind the difference in performance.

在这里插入图片描述
可以看到在 COCO 数据集上,大约 50% 的目标小于图片的 10%,

目标尺寸从小到大排序位于 10%~90% 的目标,尺寸相差高达 20 倍,尺度变化是非常大的

To alleviate the problems arising from scale variation and small object instances,有如下的解决思路

  • shallow(er) layers, are combined with deeper layers for detecting small object
  • dilated/deformable convolution for detecting 大目标
  • independent predictions at layers of different resolutions are used to capture object instances of different scales
  • context
  • multi-scale train
  • inference is performed on multiple scales,然后 NMS 合并

作者提出 Scale Normalization for Image Pyramids (SNIP),only back-propagate gradients for RoIs/anchors that have a resolution close to that of the pre-trained CNN

2、Related Work

围绕着解决尺度变化较大的解决思路展开

在这里插入图片描述

3、Advantages / Contributions

针对目标检测中的尺寸问题,提出了 SNIP 方法,缓解了小目标检出率(为了减少 Domain-Shift——pretrain Train和Train尺寸上的差异,在梯度回传的时候只将和预训练模型所基于的训练数据尺寸相对应的ROI的梯度进行回传,借鉴多尺度训练的思想,引入图像金字塔来处理数据集中不同尺寸的数据)

实现了 COCO 数据集上 SOTA

获得了 Best Student Entry in the COCO 2017 challenge.

4、Method

作者先来了几个小实验来论述他对尺度变化问题的理解

4.1、Image Classification at Multiple Scales

在这里插入图片描述

(1)Na¨ıve Multi-Scale Inference

inference 的时候图片先被下采样到 48x48, 64x64, 80x80, 96x96 and 128x128, 然后上采样到 224x224 送到网络中,如 CNN-B

这个实验模拟的就是训练数据的分辨率和验证数据的分辨率不一致的时候对模型效果的影响

在这里插入图片描述
在不同分辨率下测试

testing on resolutions on which the network was not trained is clearly sub-optimal

(2)Resolution Specific Classifiers

训 ImageNet 的网络输入 224x224,设计的时候一般 a stride of 2 followed by a max pooling layer of stride 2x2,降低计算量

输入尺寸变小的时候,网络结构也需要相应的改变,例如 48x48 和 96x96

作者 a stride of 1 and 3x3 convolutions in the first layer for 48x48 images,训练 CNN-S

在这里插入图片描述
对于 96 x 96 的输入分辨率的话,use a kernel of size 5x5 and stride of 2

相比于 CNN-B,在对应训练尺寸下测试,效果提升还是比较明显的(it is tempting to pre-train classification networks with different architectures for low resolution images and use them for object detection for low resolution objects

这个实验模拟的是训练数据和验证数据的分辨率一致的效果

(3)Fine-tuning High-Resolution Classifiers

CNN-B-FT 是用高分辨率的图片训练 224x224 的网络,训练好后,用低分辨率图片上采样到 224 进行 fine-tune,效果提升明显

instead of reducing the stride by 2, it is better to up-sample images 2 times and then fine-tune the network pre-trained on high-resolution images

基于高分辨率图像训练的模型也可以有效提取放大的低分辨率图像的特征

核心思路,怎么训怎么测,训练小目标多,测小目标,训练大目标多,测大目标

4.2 Data Variation or Correct Scale?

在这里插入图片描述
在这里插入图片描述

Table 1 的第一列对应图 5.2,第二列对应 5.1,第四列 MST 对应 5.3,验证集的尺寸都是 1400x2000

80 0 a l l 800_{all} 800all 代表训练尺寸是 800x1400

140 0 a l l 1400_{all} 1400all 代表训练尺寸是 1400x2000

(1)Training at different resolutions

table1 第三列针对小目标放大了输入分辨率为 1400,效果最好,符合上面 ImageNet 数据集上的实验结论,放大小目标的分辨率,然后测试效果比较好,但是只比第二列好一丢丢?

作者的解释

too big to be correctly classified,

blows up the medium-to-large objects which degrades performance

ps:单纯放大图片分辨率也不是办法,要更灵活

(2)Scale specific detectors

table1 第一列针对小目标放大了图片分辨率效果反而没有第二列好?

作者的解释

ignoring medium-to-large objects (about 30% of the total object instances) that hurt performance more than it helped by eliminating extreme scale objects.

有道理,小目标虽然多,但是难训练呀,提升的点有限,这么一操作,中大目标的精度夸夸的掉

(3)Multi-Scale Training (MST)

总体效果还行,但没有想象中的好

degraded by extremely small and large objects

it is important to train a detector with appropriately scaled objects while capturing as much variation across the objects as possible.


还是验证了提升分辨率解决小目标问题比较有效,有没有更有效的方法?

更好的实现 train for test

5.3 Object Detection on an Image Pyramid

Scale Normalization for Image Pyramids (SNIP)

在这里插入图片描述

与 invalid GT 的 overlap 过大的 anchor 将会被舍弃

Faster RCNN 的那套框架,backbone + RPN + RCN

those anchors which have an overlap greater than 0.3 with an invalid ground truth box are excluded during training (i.e. their gradients are set to zero).

不需要在高分辨率图像中对大型的目标进行反向传播,不需要在中分辨率图像中对中型目标进行反向传播,不需要在低分辨率图像中对小目标进行反向传播以更好的缓解预训练的尺寸空间中的Domain-Shift从而获得精度提升( reducing the domain-shift in the scale-space)

5、Experiments

5.1、Datasets

COCO

5.2、Evaluation

在这里插入图片描述

在这里插入图片描述

这个表 AR 和小目标的 AP 提升比较明显

我们知道 faster rcnn 中,GT 与 anchor 的 overlap 大于 0.7 的时候 anchor 才是 positive,

均小于 0.7 的时候,将分配最大 overlap 的 anchor 作为 正样本(If there does not exist a matching anchor, RPN assigns the anchor with the maximum overlap with ground truth bounding box as positive.)

统计发现

more than 40% of the ground truth boxes, an anchor which has an overlap less than 0.5 is assigned as a positive

换句话说,很多 GT 与 anchor 的 overlap 是小于 50%的,质量并不高

SNIP 的设计缓解了此现象(会有 invalid ground truth,规避掉了一些质量不高的 anchor,因为我连 GT 都摒弃,哈哈哈)

在这里插入图片描述
a stronger classification network like DPN-92

6、Conclusion(own) / Future work / Reference

  • 参考 在小目标检测上另辟蹊径的SNIP

  • training the detector on similar scale object instances as the pre-trained classification networks helps to reduce the domain shift for the pre-trained classification network.

  • 个人阅读感受:整个行文思路不是很清晰,重点的方法部分论述的不多,实验部分不够充实,细节东一句西一句,总的给人感觉思路不太顺畅,前后两句跳跃性比较大

  • 多尺寸训练的缺点,极大或者极小的目标会有干扰

相关文章:

【SNIP】《An Analysis of Scale Invariance in Object Detection – SNIP》

CVPR-2018 Singh B, Davis L S. An analysis of scale invariance in object detection snip[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 3578-3587. https://github.com/bharatsingh430/snip?tabreadme-ov-file 文章目录 …...

JAVA基础学习笔记_异常

文章目录 异常异常的作用处理异常的方式异常中的常见方法捕获异常自定义异常 异常 应该知道出了异常怎么处理 java.lang.Throwable Error(错误,硬件出错或内存不足,不是程序员能解决的) Exception(异常) RuntimeException(运行时异常),代码出错导致程序出现的问题 其他异…...

Modern Effective C++条款三十四:考虑lambda而非std::bind

C11中的std::bind是C98的std::bind1st和std::bind2nd的后续,C11 lambda几乎总是比std::bind更好的选择。 从C14开始,lambda的作用不仅强大,而且是完全值得使用的。与item32中一样,我们将从std::bind返回的函数对象称为bind对象(bi…...

lyapunov指数的绘制

有如下方程: %% 方程式 % x(n1)1y(n)-a*x(n)^2 % y(n1)b*x(n)绘制其对应的lyapunov指数。 MATLAB实现方式: clc; clearvars; close all;%% 方程式 % x(n1)1y(n)-a*x(n)^2 % y(n1)b*x(n)%% 代码 N 1000; a (0:0.001:1.4); b 0.3; na length(a…...

Ansible 运维工具

安装 apt install ansible /etc/ansible/hosts , 指定密码或密钥访问分组机器 [k8s_masters] master0.c0.k8s.sb[k8s_nodes] node0.c0.k8s.sb node1.c0.k8s.sb[k8s:children] k8s_masters k8s_nodes[k8s_masters:vars] ansible_ssh_usersbadmin ansible_ssh_pass"***&q…...

【AI系统】MobileNet 系列

MobileNet 系列 在本文会介绍 MobileNet 系列,重点在于其模型结构的轻量化设计,主要介绍详细的轻量化设计原则,基于这原则,MobileNetV1 是如何设计成一个小型,低延迟,低功耗的参数化模型,可以满…...

MATLAB在生态环境数据处理与分析中的应用

专题一 MATLAB编程入门 要点:介绍、案例演示、软件界面、语法基础、基本运算等 专题二(试听) MATLAB编程入门 要点:脚本编写、函数调用、循环控制、代码调试、文件读写等 专题三 MATLAB可视化与绘图 要点:交互式…...

tensorrt

engine /*tensorrt创建builder1. 创建builder2. 创建网络定义:builder-->network3. 配置参数:builder-->config4. 生成engine:builder-->engine()5. 序列化保存:engine-->serialize6. 释放资源:delete */ #include&l…...

利用Grounding DINO进行自动标注——目标检测任务——YOLO格式

关于Grounding DINO的环境搭建可以参考我的以前的博客,链接如下所示 如何在Linux上离线部署Grounding DINO-CSDN博客 这个博客主要来介绍如何利用Grounding DINO这个项目去进行目标检测的自动化标注。并且给出了相关的代码已经实验验证。 1.数据集准备 2. 开始实…...

网际协议(IP)与其三大配套协议(ARP、ICMP、IGMP)

网际协议(Internet Protocol,IP),又称互联网协议。是OSI中的网络层通信协议,用于跨网络边界分组交换。它的路由功能实现了互联互通,并从本质上建立了互联网。网际协议IP是 TCP/IP 体系中两个最主要的协议之…...

uniapp 添加loading

在uniapp中添加loading可以使用uni的API uni.showLoading 方法。以下是一个简单的示例代码 // 显示loading uni.showLoading({title: 加载中 });// 假设这里是异步操作,比如网络请求 setTimeout(function () {// 隐藏loadinguni.hideLoading(); }, 2000);...

cocotb pytest

打印python中的print , 应该使用 pytest -s pytest --junitxmltest_report.xml --htmlreport.html...

docker run 设置启动命令

在使用 docker run 命令时,你可以通过指定启动命令来覆盖 Docker 镜像中的默认入口点或命令。具体来说,你可以通过以下两种方式来设置启动命令: 覆盖 CMD: 你可以通过在 docker run 命令的最后部分提供命令来覆盖镜像的默认 CMD 指…...

docker入门 自记录

1.先自己下载离线bao .tar 或者 自己pull docker pull xxx 如果遇到网络问题就换源 2.之后run一个docker 后面是映射本地路径 sudo docker run -it --name ultralytics_241124 --gpus all --shm-size 8G -v /home/oppenheim/detect/train241204/docker:/home/docker ultralyti…...

css实现圆周运动效果

在CSS中可以通过 keyframes 动画 和 transform 属性实现元素的圆周运动。以下是一个示例代码&#xff1a; 示例代码 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content…...

【NoSQL数据库】MongoDB数据库——集合和文档的基本操作(创建、删除、更新、查询)

目录 一、MongoDB数据库原理 二、MongoDB数据库和集合基本操作&#xff08;增删改查&#xff09; 三、MongoDB数据库的文档基本操作&#xff08;增删改&#xff09; 四、学习笔记 往期文章&#xff1a;【NoSQL数据库】MongoDB数据库的安装与卸载-CSDN博客 一、MongoDB数据…...

Dart 学习笔记(一)

一、数据类型 数值类型 int&#xff1a;表示整数类型&#xff0c;例如&#xff1a;int num 10;。在 Dart 中&#xff0c;int 类型是有范围限制的&#xff0c;具体取决于平台&#xff0c;但通常在 -2^63 到 2^63 - 1 之间。double&#xff1a;表示双精度浮点数类型&#xff0c…...

安防视频监控平台Liveweb视频汇聚管理系统管理方案

智慧安防监控Liveweb视频管理平台能在复杂的网络环境中&#xff0c;将前端设备统一集中接入与汇聚管理。国标GB28181协议视频监控/视频汇聚Liveweb平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、…...

十八(GIT)、GIT基本命令、axios别名方法、黑马就业数据平台(axios基地址、轻提示函数、注册及登录功能)

1. GIT 1.1 Git配置用户信息 1. Git配置用户信息 git config --global user.name "用户名" git config --global user.email 邮箱地址 2. 查看配置 git config --list (信息太多使用 输入 q 退出) 1.2 本地初始化Git仓库 1. 通常有两种获取Git仓库的方式: 将 尚未进…...

Linux查看系统基本信息

执行命令 chmod x system_info.sh && ./system_info.sh文件名&#xff1a;system_info.sh #!/bin/bash# 获取系统版本 SYSTEM_VERSION$(cat /etc/os-release | grep ^PRETTY_NAME | cut -d -f 2 | xargs)# 获取CPU数量 CPU_COUNT$(grep -c ^processor /proc/cpuinfo…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施&#xff0c;由雇主和个人按一定比例缴纳保险费&#xff0c;建立社会医疗保险基金&#xff0c;支付雇员医疗费用的一种医疗保险制度&#xff0c; 它是促进社会文明和进步的…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

全志A40i android7.1 调试信息打印串口由uart0改为uart3

一&#xff0c;概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本&#xff1a;2014.07&#xff1b; Kernel版本&#xff1a;Linux-3.10&#xff1b; 二&#xff0c;Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01)&#xff0c;并让boo…...

JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案

JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停​​ 1. ​​安全点(Safepoint)阻塞​​ ​​现象​​:JVM暂停但无GC日志,日志显示No GCs detected。​​原因​​:JVM等待所有线程进入安全点(如…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、&#x1f44b;&#x1f3fb;前言 二、&#x1f608;sinx波动的基本原理 三、&#x1f608;波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、&#x1f30a;波动优化…...