05目标检测-区域推荐(Anchor机制详解)
目录
一、问题的引入
二、解决方案-设定的anchor boxes
1.高宽比(aspect ratio)的确定
2.尺度(scale)的确定
3.anchor boxes数量的确定
三、Anchor 的在目标检测中是怎么用的
1、anchor boxes对真值bounding box编码的步骤
2、为什么要回归偏移量而不是绝对坐标
3、输出特征图和锚框有什么关系
四、 Anchor 的本质
在了解RPN网络前我们先了解一些相关概念区域推荐(Anchor机制)。
一、问题的引入
往往,图片上的每一处位置都有可能出现目标物体,并且目标的大小是不确定的。那有什么办法能检出所有的物体呢?最容易想到的办法就是,以一个像素为中心截取很多个不同宽高比和大小的小块,每个小块都检测一下包不包含物体,如果包含物体,该物体的位置就是刚刚截取的这个小块的位置,同时再预测一下它的类别是什么。这样就可以做到不漏掉当前这个像素上的任何宽高比和大小的物体了;那刚刚截取的这个小块就是一个anchor box。
为了检出图像中不同位置的物体,使用滑动窗口的方式,从左到右,从上到下,把图像扫描一遍,每个像素点上都取很多小块进行检测,这样就可以保证不同位置、不同大小的物体都不漏掉了。Fig. 1是一个扫描检查的示例。
这种方法容易理解并且确实有效,但是缺点也是突出的----计算量太大了。假如一张图片的特征图大小为640*640,在图像中每一个像素上取10个不同宽高比不同大小的框做检测,则需要检测的框就会有640 x 640 x 10 = 4096000,太多了,如下图。那怎么改进呢?
其实,对于上面的问题有两个明显可以改善的点:
- 一是4096000个扫描框重叠(overlap)太多了
- 一是这些框里有很多框是背景,不包含物体,没有检测的必要。
所以,设法在保证覆盖整张图的基础上,略去重叠太严重的框,避开背景框,找高质量的、可能包含目标物体的候选框进行检测就显得尤为重要,可以以此来降低运算量,提高检测速度。
anchor boxes就是我们在检测之前确定的一系列候选框。我们默认,图片上会出现的所有物体,都会被我们设定的anchor boxes所覆盖。anchor box选择的好坏直接关系到两个方面:
- 一是能不能很好的覆盖整张图
- 一是能不能框住图片中可能出现的每个物体
所以anchor box的设定非常重要,既关系到精度的好坏,又关系到速度的快慢(速度仅就以上所说的扫描法而言)。
二、解决方案-设定的anchor boxes
使用设定的anchor boxes进行降低运算量,提高检测速度。anchor boxes如何设定呢?我们通过以下步骤完成:
- 高宽比(aspect ratio)的确定
- 尺度(scale)的确定
- anchor boxes数量的确定
举例来说明:假如要在一个数据集上做物体检测, 该数据集的图片分辨率均为256 x 256 , 数据集里绝大多数数目标物体的尺寸为 40 x 40或80 x 40。
1.高宽比(aspect ratio)的确定
因为绝大多数 数据集里目标物体的尺寸为 40 *40或80* 40,这说明数据集中绝大多数物体的真值边框的高宽比为1:1和2:1。 根据这个信息就可以确定锚框的高宽比信息,为这个数据集设计anchor boxes时其高宽比至少需要包括1:1和2:1。 这里举例为方便就只取1:1和2:1。
2.尺度(scale)的确定
尺度是指物体的高或宽与图片的高或宽之间的比值。例如图片的宽为256px,图片中物体的宽为40px,则该物体的尺度为40/256=0.15625,也就是说该物体占了图片15.62%的宽度。
为了选一组能更好的代表数据集里目标的尺度,我们应该以数据集中目标物体的最大尺度值和最小尺度值为上下限。如,数据集中物体的尺度的最小值和最大值分别为0.15625和0.3125,我们准备在这个范围内设置3种scale,则可以选择 {0.15625, 0.234375, 0.3125}。
3.anchor boxes数量的确定
我们的scales(尺度)为 {0.15625, 0.234375, 0.3125},高宽比 aspect ratios为{1:1, 2:1}, 则每一个锚点上的一组锚框的数量为3x2 = 6个。如下图所示,即有3种{0.15625, 0.234375, 0.3125}大小,每一种大小都有两种高宽比{1:1, 2:1}。
按照以上方法所说,锚点是指256x256图像中的每一个像素,按基于anchor的神经网络目标检测来讲,锚点为网络最终输出特征图上的每一个点。
三、Anchor 的在目标检测中是怎么用的
在网络中anchor boxes是被用来编码目标物体的位置。目标检测一般是不会直接检测物体边框的绝对坐标的,而是检测其相对某一个锚框的偏移量,如下图中绿色真值框对蓝色边框的偏移。数据集中所有的目标均会被编码成对anchor boxes的偏移。如1.1问题引入中的图片, 锚框有非常多个,对一张图片来说,可能包含多个物体,有非常多个anchor boxes, 那怎么用anchor boxes对真值进行编码呢?
1、anchor boxes对真值bounding box编码的步骤
- a. 对每一个anchor box,算出其和哪一个真值bounding box的交并比(intersection over union score)最大
- b. 如果交并比>50%,则当前anchor box负责当前真值bounding box对应物体的检测,求真值bounding box对该anchor box的偏移
- c. 如果交并比介于40%与50%之间,不能确定该anchor是不是包含该物体,属于含糊框。
- d. 如果交并比<40%,则认为该anchor框到的都是背景,将该anchor划分为背景类。
- 除了被分配物体的锚框外,对只含背景的锚框和含糊框,偏移赋0,分类赋背景。
编码之后,物体检测类网络的回归目标变成回归编码好的偏移量了。
图片作为网络(神经网络)的输入,中间经过特征提取, 得到特征图。假设网络输出的特征图分辨率为7*7,而特征图上的每一个像素都有一组锚框。假如一组锚框的数量为2x3=6个(宽高比为2:1和1:1, 尺度为{0.15625, 0.234375, 0.3125}),则该特征图对应的回归网络中的锚框总数为7x7x2x3=296个,即296个anchor box。这个296个anchor box分别与真实值即目标物体bounding box(含分类信息和是否是背景类型信息)进行编码,得到每个anchor box到目标物体bounding box的偏移量(如果anchor box是含糊框或背景框,则偏移量为0),最总得到296个框的偏移量和分类信息。因此物体检测类网络的回归目标变成回归编码好的偏移量了。
对一个训练好的网络,其输出中,只包含背景的锚框的分类为背景,偏移为0;包含物体的锚框,其分类为物体的类别,偏移为锚框与物体真实边框之间的偏移。
2、为什么要回归偏移量而不是绝对坐标
神经网络的特性之一是位移不变性。例如对一张包含树的照片,不管树在这张图片的左上角还是右下角,网络输出的分类都是树,分类结果不会因为树在照片中位置的变化而变化。所以,对于一棵树,不管它在图片中的位置是什么,回归网络都偏向于为它输出相同的位置坐标,可见位移不变性和我们需要的位置坐标变化是冲突的,这显然是不行的。转而回归偏移的话,不管树在图像中的什么位置,其对它所在的锚框的偏移量基本是一致的,更加适合神经网络回归。
3、输出特征图和锚框有什么关系
锚框不是应该放在输入图上吗,为什么说输出特征图上的每一个点一组锚框?
如图所示,输出特征图(最右边3 x 3的小特征图)上的任何一个点都可以映射到输入图片上(感受野的意思),也就是说按照比例和网络的下采样,对输出特征图上的任意一点,在输入图片上都可以成比例找到它的对应位置。例如,在输出特征图上(0, 0)的点在输入图片上的对应位置为(2, 2)。
其次,假如检测的类别为10个类别,每个锚框的偏移量是4((x,y,w,h)4个位置的偏移量),则每个anchor box是10+4=14,假如每个锚点对应6个锚框,则是6x14,此时输出的3x3特征图的维度是 3x3x6x14 = 3 x3 x84 ( = 3 x3 x6 x14)。则输出特征图上点(0, 0)处的84个通道对应的值是 输入图(2, 2)位置上6个锚框的偏移量和分类值。
3 x3 x84 = 3x3x6x14中,6表示6个anchor box, 14表示偏移量和类别数,14中4为(x,y,w,h)的4个位置的偏移量,14中的10为类别数。
通过这样的隐式映射关系,将所有的anchor box都放在了输入图片上。
四、 Anchor 的本质
Anchor 的本质是 SPP(spatial pyramid pooling) 思想的逆向。而SPP本身是将不同尺寸的输入 resize 成为相同尺寸的输出,所以SPP的逆向就是,将相同尺寸的输出,倒推得到不同尺寸的输入。
区域推荐:
- 称为Anchor机制,即n*c*w*h ,其中n代表样本数,c代表通道数,w和h代表图像高度和宽度
- 将w*h区域内的每个1个点作为候选区域中心点,进行提取候选区域,这样的每个点都称为Anchor。
- 以某个点为候选区域中心点进行提取候选区域时候,通常会按照一定的比例来提取。例如fastRCN中每个中心点提取9个候选区域。因此1个w*h的区域需要提取候选区域为 w*h*9个。
- 针对这些候选区域和真值(GT),利用真值来对这些后续区域进行筛选,经过筛选后得到正负样本,
- 其中正样本就是包含了候选目标的区域,而是否包含则通常是通过IOU进行判断,即真值与候选区域的重叠的覆盖面积判断,
- 如果真值和后续区域重叠的面积超过70%,就是正样本。如果小于30%就是负样本。
- 这里的0.7和0.3都是超参,可自行设定。
相关文章:
05目标检测-区域推荐(Anchor机制详解)
目录 一、问题的引入 二、解决方案-设定的anchor boxes 1.高宽比(aspect ratio)的确定 2.尺度(scale)的确定 3.anchor boxes数量的确定 三、Anchor 的在目标检测中是怎么用的 1、anchor boxes对真值bounding box编码的步骤 2、为什么要回归偏移量…...
SpringBoot如何保证接口安全?
对于互联网来说,只要你系统的接口暴露在外网,就避免不了接口安全问题。如果你的接口在外网裸奔,只要让黑客知道接口的地址和参数就可以调用,那简直就是灾难。 举个例子:你的网站用户注册的时候,需要填写手…...
构建可扩展的应用:六边形架构详解与实践
面试题分享 云数据解决事务回滚问题 点我直达 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java、python面试题 项目实战:AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮…...
error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 解决方案
error: RPC failed; HTTP 413 curl 22 The requested URL returned error: 413 解决方案 使用Git提交时报错,代码如下: $ git push -u origin "master" Counting objects: 100% (95/95), done. Delta compression using up to 12 threads Compressing ob…...
基于ssm智能停车场031
大家好✌!我是CZ淡陌。一名专注以理论为基础实战为主的技术博主,将再这里为大家分享优质的实战项目,本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目,希望你能有所收获,少走一些弯路…...
【Git】万字git与gitHub
🎄欢迎来到边境矢梦的csdn博文🎄 🎄本文主要梳理在git和GitHub时的笔记与感言 🎄 🌈我是边境矢梦,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关注一下🫰&…...
C++版本的OpenCV实现二维图像的卷积定理(通过傅里叶变换实现二维图像的卷积过程,附代码!!)
C版本的OpenCV库实现二维图像的卷积定理过程详解 前言一、卷积定理简单介绍二、不同卷积过程对应的傅里叶变换过程1、“Same”卷积2、“Full”卷积3、“Valid”卷积 三、基于OpenCV库实现的二维图像卷积定理四、基于FFTW库实现的二维图像卷积定理五、总结与讨论 前言 工作中用…...
打开深度学习的锁:(1)入门神经网络
打开深度学习的锁 导言PS:神经网络的训练过程一、导入的包和说明二、数据的预处理2.1 数据集说明2.2 数据集降维度并且转置2.3 数据预处理完整代码 三、逻辑回归3.1 线性回归函数公式3.2 sigmoid函数公式 四、初始化函数五、构建逻辑回归的前向传播和后向传播5.1 损…...
02- pytorch 实现 RNN
一 导包 import torch from torch import nn from torch.nn import functional as F import dltools 1.1 导入训练数据 batch_size, num_steps 32, 35 # 更改了默认的文件下载方式,需要将 article 文件放入该文件夹 train_iter, vocab dltools.load_data_time_…...
算法课作业1
https://vjudge.net/contest/581138 A - Humidex 模拟题 题目大意 给三个类型数字通过公式来回转化 思路 求e的对数有log函数,不懂为什么不会出精度错误,很迷,给的三个数字也没有顺序,需要多判断。 #include<cstdio>…...
linux文本处理 两行变一行
linux简单文本处理 [rootkvm ~]# cat test 1.1.1.1 test1 2.2.2.2 test2 3.3.3.3 test3 192.168.1.2 test4 10.23.9.19 test5 cat test | awk /^[0-9]/{T$1;next;}{print T,$1}1.1.1.1 test1 2.2.2.2 test2 3.3.3.3 test3 192.168.1.2 test4 10.23.9.19 test5 cat test | …...
第二次面试 9.15
首先就是自我介绍 项目拷打 总体介绍一下项目 谈一下对socket的理解 在数据接收阶段,如何实现一个异步的数据处理 谈一谈对qt信号槽的理解 有想过如何去编写一个信号槽吗 你是如何使用CMAKE编译文件的 C11特性了解些啥 shared_ptr 和 unique_ptr 的运用场景 …...
基于matlab实现的平面波展开法二维声子晶体能带计算程序
Matlab 平面波展开法计算二维声子晶体二维声子晶体带结构计算,材料是铅柱在橡胶基体中周期排列,格子为正方形。采用PWE方法计算 完整程序: %%%%%%%%%%%%%%%%%%%%%%%%% clear;clc;tic;epssys1.0e-6; %设定一个最小量,避免系统截断误差或除零错…...
Minio入门系列【2】纠删码
1 纠删码 Minio使用纠删码erasure code和校验和checksum来保护数据免受硬件故障和无声数据损坏。 即便丢失一半数量(N/2)的硬盘,仍然可以恢复数据 1.1 什么叫纠删码 纠删码是一种用于重建丢失或损坏数据的数学算法。 纠删码(e…...
基于永磁同步发电机的风力发电系统研究(Simulink实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
5.后端·新建子模块与开发(自动模式)
文章目录 学习资料自动生成模式创建后端三层 学习资料 https://www.bilibili.com/video/BV13g411Y7GS?p11&spm_id_frompageDriver&vd_sourceed09a620bf87401694f763818a31c91e 自动生成模式创建后端三层 首先,运行起来若依的前后端整个项目,…...
vue的data为什么要写成data(return{})这样而不是data:{}这样?
在Vue.js中,为什么要将data写成一个返回对象的函数data()而不是一个普通的对象data: {} 为什么? 因为Vue.js的组件实例是可复用的,而且它们可以在应用中多次实例化。通过将data定义为一个返回对象的函数,可以确保每个组件实例都…...
MySQL基础运维知识点大全
一. MySQL基本知识 1. 目录的功能 通用 Unix/Linux 二进制包的 MySQL 安装下目录的相关功能 目录目录目录binMySQLd服务器,客户端和实用程序docs信息格式的 MySQL 手册manUnix 手册页include包括(头)文件lib图书馆share用于数据库安装的错…...
javascript获取样式表的规则及读取与写入
CSSStyleSheet是继承了StyleSheet的接口属性,它是用于找当前文档中的<link rel“” href“”…>这样文件的,有以下属性:lenght,cssRules,title,href,type,deleteRule,insertRule等 CSSStyleRule是继承于CSSRule,它是用于找<link re…...
什么是promise?
是JavaScript中用于处理异步操作的一种机制。 异步操作,例如从服务器获取数据、读取文件、执行数据库查询等等。 经典使用:Axios 是一个基于Promise的HTTP客户端 Promise具有三个状态: Pending(待定):Pr…...
从零开始学习软件测试-第45天笔记
monkey事件 事件:对app进行的操作,比如触摸事件,滑动事件...动作:构成一个事件所需要的步骤。 调整事件的百分比 adb shell monkey -p 包名 -v -v --pct-xxx 百分比 次数>输出文件的路径 分析日志有没有报错 到日志中去找…...
visual studio常用快捷键
CtrlM、CtrlO 折叠到定义 CtrlM、CtrlM 折叠当前定义 CtrlM、CtrlA 折叠全部 CtrlK、CtrlD 自动编排代码格式 F12 转到定义 ShiftF12 查看所有定义 ctrl] 转到定义首部或尾部 ctrlX 未选中文本时,剪切/删除光标所在行。ctrlV 未选中文本时,粘贴到…...
数据变换:数据挖掘的准备工作之一
⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作,主要擅长领域有:爬虫、后端、大数据…...
Go语言实践案例之简单字典
一、程序要实现效果: 在命令行调用程序的时候,可以在命令行的后面查询一个单词,然后会输出单词的音标和注释。 二、思路分析: 定义一个结构体 DictRequest,用于表示翻译请求的数据结构。其中包含了 TransType&#…...
笔试面试相关记录(3)
(1)String String和String.append()的底层实现 C中string append函数的使用与字符串拼接「建议收藏」-腾讯云开发者社区-腾讯云 (tencent.com) String String 在 第二个String中遇到\0就截止,append()的方法则是所有字符都会加在后面。 &…...
第6章_瑞萨MCU零基础入门系列教程之串行通信接口(SCI)
本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…...
开源免费的流程图软件draw.io
2023年9月16日,周六上午 想买微软的visio,但发现不是很值得,因为我平时也不是经常需要画图。 所以我最后还是决定使用开源免费的draw.io来画图 draw.io网页版的网址: Flowchart Maker & Online Diagram Software draw.io的…...
Python绘图系统19:添加时间轴以实现动态绘图
文章目录 时间轴单帧跳转源代码 Python绘图系统: 📈从0开始的3D绘图系统📉一套3D坐标,多个函数📊散点图、极坐标和子图自定义控件:绘图风格📉风格控件📊定制绘图风格坐标设置进阶&a…...
深度解析shell脚本的命令的原理之rm
rm 是 Unix/Linux 系统中的一个基本命令,用于删除文件或目录。以下是对这个命令的深度分析: 基本操作:rm 命令删除一个或多个文件或目录。这是通过从文件系统中移除链接来完成的。在 Unix/Linux 中,文件是通过链接(可以…...
RPA机器人流程自动化专题培训大纲(供大家参考使用)
一、RPA机器人流程自动化概述 RPA的定义和发展历程RPA的应用场景和优势RPA与人工智能的关系 二、RPA机器人流程自动化基础知识 RPA的基本原理和技术架构RPA的常用技术和工具RPA的编程语言和开发环境 三、RPA机器人流程自动化实战应用 如何进行业务流程分析与优化如何利用R…...
广州越秀区天气预报15天查询/乐陵seo优化
在前面随笔《基于Metronic的Bootstrap开发框架--工作流模块功能介绍》和《基于Metronic的Bootstrap开发框架--工作流模块功能介绍(2)》中介绍了Bootstrap开发框架的工作模块功能,前面文章也提及,通过代码生成工具直接生成对应的Cr…...
百度地图嵌入公司网站/写软文能赚钱吗
1、启动 使用 service 启动:service mysqld start 2、停止 使用 service 启动:service mysqld stop 3、重启 使用 service 启动:service mysqld restart...
网站建设方案策划书/北京推广平台
nginx证书制作以及配置https并设置访问http自动跳转https 默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖于OpenSSL库和一些引用文件,通常这些文件并不在同一个软件包中。通常这个…...
包头网站公司/宁波网站制作与推广价格
大数据分析与数据分析这几年一直都是个高频词,很多人都开始纷纷转行到这个领域,也有不少人开始跃跃欲试,想找准时机进到大数据或数据分析领域。如今大数据分析和数据分析火爆,要说时机,可谓处处都是时机,关…...
家电网站建设/免费b站推广网站入口202
x4bx2c0有四个根a1,a2,a3,a4x^4bx^2c0有四个根a_1,a_2,a_3,a_4x4bx2c0有四个根a1,a2,a3,a4 Q条件or关系FQ(a,b){a1a20a3a40\begin{cases}a_1a_20& \text{}\\a_3a_40& \text{}\end{cases}{a1a20a3a40保持上述关系不变的置换有8个F1F(b2−4c)F1F(\s…...
网站建设外包被骗/百度推广怎么开户
jQuery实现倒计时效果-杨秀徐 本实例效果:剩余368天22小时39分57秒结束 代码简单易懂,适用各种倒计时; http://www.cnblogs.com/sntetwt/category/287335.html 12345678910111213141516171819202122232425262728293031323334353637383940414…...