目标检测——理解Anchor box的作用_default box 和anchor box-程序员宅基地

技术标签: 卷积  网络  目标检测  深度学习  人工智能  

前言

最近重新看了遍经典的目标检测网络,对Anchor box 的作用有了更深入的了解。有不正确的地方还望指出,共同进步。

为了控制篇幅本文主要讲Anchor box,不针对网络细节展开,默认大家已经对经典网络有所了解,尤其是faster RCNN(下文会以faster RCNN为例讲解)带来不便,深表歉意。如果对faster RCNN比较熟悉的可以直接跳到训练与预测部分

Anchor box的发展

Anchor box最先由faster RCNN网络提出,后分别被SSD和YOLO2、YOLO3等经典网络借用,也出现了不同的称呼“prior box”、“default box ”等,但是本质终究没变,只不过各大网络将Anchor box应用在不同地方罢了。

最先使用Anchor box的faster RCNN属于两阶段检测网络,它在RPN网络中利用Anchor box找出可能存在物体的位置(框),即所谓的感兴趣区域,再由后续CNN“精修”这些感兴趣区域,“精修”操作包括位置和类别的精处理;而SSD以及YOLO系列都是单阶段网络,它们都是一步到位直接检测,因此它们利用Anchor box直接学习物体准确位置。Anchor box在不同的网络中“现象”不同,但其“本质”不变的,我们要的就是透过现象看本质。

Faster RCNN中的Anchor box

我就用faster RCNN为例讲解Anchor box的作用吧,以此类推。Anchor box这个名字我不太喜欢,刚开始听到这名字着实搞不懂它是干嘛用的,我倒是挺喜欢prior box(先验框)这个名字,先验顾名思义就是提供某种经验的框,来看看它如何提供经验,提供的又是什么经验。

先盗一张faster RCNN中用到先验框(后文代替Anchor box)的地方

faster RCNN的RPN网络

faster RCNN采用不同的backbone网络RPN网络将会得到不同的feature map。若以VGG作为backbone则feature map是50x38x512的,我们抛开这些维度不谈,就把feature map想象成平面图,图上画有50*38个格子,每个格子都“画”有9个尺寸不一的框,脑补一下画面。在faster RCNN中RPN分为两条支路,其中定位分支中每个格子的每个框输出四个数据,其实可以认为是这个格子在输出框的信息,分别是x,y,w,h的偏移量,至于为什么是偏移量呢?


其中带有下标a是先验框的参数,不带下标a是真实框(Ground truth)的参数,tx、ty、tw、th这个就是前面所说的每个先验框输出的偏移量的标签!注意是标签label,也就是网络要拟合、学习的目标值!根据公式不难发现这个标签其实就是真实框与先验框归一化后真实的偏移量。网络训练过程中就会迫使每个格子输出的先验框的偏移量不断向这个真实偏移量靠近。

训练与预测中的Anchor box机制

把先验框和训练预测结合起来!!!我会尽可能地用通俗的语言来描述。

上文说过faster RCNN的RPN网络中feature map有50x38个格子,这其实每个格子其实不是普通的格子,它是原图经过一层层卷积提取特征而来的,每一个格子都对应着原图的一部分区域(感受野)。换句话说每个格子都富含着原图中某一部分区域的许多信息,训练或者预测的输出都是建立在这些信息上的。

在这里插入图片描述

蓝色格子就是富含原图信息的一个格子(假设它是最准确的信息),红框是先验框,绿框是真实框(0.2,0.4,0.1,0.3)是真实的偏移量。训练阶段喂入一张图片,如果格子有负责的目标(绿框),让格子先根据前面的卷及操作回答偏移量,第一次肯定只能瞎蒙得到一个完美错误的答案。这时就要惩罚了,告诉格子你自己脑补一个红框,请记住你的答案是(0.2,0.4,0.1,0.3),脑补的红框要和答案联合记忆,然后回去改前面的卷及操作(反向传播修改网络权重)。下一次图片进来回答错了还要继续惩罚你,继续改卷积操作,直到与答案一样或者差不多(误差足够小)为止,改着改着前面的卷积操作日趋成熟,最终能提取到想要的信息(蓝色信息),每个格子的先验框也能较准确地回答出自己的偏移量。(loss收敛了)

如何判断哪个物体的真实框是哪个先验框负责的?训练前前分配任务,faster RCNN一张图上大大小小2000个先验框,通过设定IOU阈值,先验框与真实框超过这个阈值,该先验框就负责这个真实框,所以一个真实框可由多个先验框负责。

有人会问,那不用先验框也可以做到啊。确实,不过可能结果不那么完美。如果没有先验框的话,蒙大尺寸的真实框会引入比小尺寸更大的误差,惩罚也会加大,网络可能忽略了小尺寸真实框的损失,从而导致训练比较难收敛。因此,引入先验框训练拟合偏差量而不直接拟合真实框尺寸更有利于训练收敛。

预测阶段并不存在真实框了,等图片处理完一堆卷积之后会产生50x38个富含信息的格子,如果其中有一个格子的信息很像我们训练时遇到的蓝色信息,那就请格子再脑补一个红色那样尺寸的先验框,然后再猜一组偏移量(训练的时候红框和偏移量是联合记忆的,预测的时候也要联合两者来猜)。先验框的另一个好处就是,不用盲目地猜结果,我给你一个先验知识,你在这个基础上给我猜猜还差多少,总比没基础猜得容易得多吧。训练的时候你是在有一定基础的前提上教它(联合记忆),那么预测的时候也会在一定基础的前提上预测,这个基础就是先验框本身,也许这就是所谓的先验吧。

在这里插入图片描述

得到了偏移量再加上先验框的尺寸就能得到预测框的值啦!!!

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/L1778586311/article/details/111347071

智能推荐

Python文件内容的输出_python输出文件内容-程序员宅基地

文章浏览阅读279次。但是,如果程序在读取文件内容后发生异常,可能会导致文件没有被关闭,从而造成资源泄漏。通过该文件对象,我们可以执行读取操作以获取文件的内容。在Python中,我们可以使用多种方法来读取并输出文件的内容。通过逐行读取文件,我们可以对文件内容进行逐行处理,例如进行字符串操作、数据分析等。语句块后,无论是否发生异常,Python都会自动关闭文件,无需手动调用。除了一次性读取整个文件的内容,我们还可以逐行读取文件的内容。需要注意的是,在使用完文件之后,我们应当使用。语句块中,我们可以执行读取文件内容的操作。_python输出文件内容

Docker下载镜像太慢的解决方案_docker wsl update下载速度-程序员宅基地

文章浏览阅读4.4k次,点赞2次,收藏7次。找了网上很多方法,使用镜像中国也是下载卡死。最后一种成功了,下载速度很满意1.先再阿里云注册账号,不需要绑定什么,直接注册就可以了,有账号的直接登录就好。地址:https://cr.console.aliyun.com点击跳转搜索容器镜像服务2.创建镜像仓库3.创建好之后点到这个选项卡在终端输入vim /etc/docker/daemon.json将"registry-mirrors": ["https://......com"](对应自己的加速地址)复制到文件中这是我的格..._docker wsl update下载速度

UIView兼容阴影和圆角_uiview 设置圆角和阴影-程序员宅基地

文章浏览阅读2.1k次。由于设置阴影需要masksToBounds设置为NO,而设置圆角需要masksToBounds为YES,因此相互矛盾,不能用一般法解决。设原来要显示的view为exhibitView1.需要将当前要展示的UIView加在一个新的UIView,暂且叫做shadowView,将其设置阴影 初始化- (UIView *)shadowView{ if (_shadowViewForH..._uiview 设置圆角和阴影

POJ 1328:Radar Installation(贪心)_c++025:radar installation-程序员宅基地

文章浏览阅读305次。Radar InstallationTime limit:1000 ms Memory limit:10000 kB OS:Linux Problem DescriptionAssume the coasting is an infinite straight line. Land is in one side of coasting, sea in the other. Each small i_c++025:radar installation

mockito和powermock的doAnswer使用-第二篇_powermockito doanswer-程序员宅基地

文章浏览阅读8.4k次,点赞4次,收藏3次。序言通用的Answer总结序言我的上一篇文章mockito和powermock的doAnswer使用以及Fake思想,在那里,我介绍了Fake的基本思想,以及doAnswer的用法。但是,这里有个问题,上面文章里面我实现的answer是一个固定了类型的,如果这样的话,每种类型我们都需要构造这样的answer,这是没有必要的,这次我就在上次的基础上构造通用的answer类。..._powermockito doanswer

GitLabCI-Runner使用S3存储配置分布式缓存-程序员宅基地

文章浏览阅读2.3k次。今天我们主要讲解,minio存储服务的部署、GitLabCI Runner配置分部署缓存。MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊..._cache: ## general settings cachetype: s3

随便推点

IGH主站在配置PDO的时候,PDO entry 0x7010:02 does not byte-align in config 0:0错误_ecrt_slave_config_reg_pdo_entry-程序员宅基地

文章浏览阅读1.5k次。下边是IGH的 mail list。大意就是使用ecrt_slave_config_reg_pdo_entry()来代替ecrt_slave_config_pdos()来进行注册。Hi Christian!Instead of passing the structs to ecrt_slave_config_pdos(), you can use ecrt_slave_config_re..._ecrt_slave_config_reg_pdo_entry

Springboot 使用restTemplate 进行跨域请求 response reqeust中首字母大写的问题_resttemplate 跨域 解决-程序员宅基地

文章浏览阅读1k次。请求第三方系统,调用第三方API时可能会遇到双方协商定义的响应体中某个字段的首字母为大写的情况:响应体: { "PlannerId": test123, "Name": "testName", "operation": null, }使用大写字母的字段去接收响应体时,其实API请求的每一个返回值都是小写的。所以映射关系找不到导致该值为null。原因:spring使用HttpMessageConverter将返回实体转换为json解决方法: @Js._resttemplate 跨域 解决

阿里云ACP考试报名、复习、备考心得经验分享_阿里云acp考试 csdn 社区-程序员宅基地

文章浏览阅读705次。先说下阿里云的认证考试,大家通过下面的介绍简单了解下(部分摘自阿里云大学官网):考证意义证多不压身,证比项目经历更具有说服力,证是行业的标准认证。更多时候,是有证的人说,“证其实不重要”。acp 考试偏简单,考试也不算很高,相对于很多所谓的国际认证,性价比高。云计算+阿里云认证,对于以后从事任何行业,都是有益的,即使是传统企业也有趋势上云的需求。阿里云的认证体系:基于核心技术及岗位的..._阿里云acp考试 csdn 社区

半监督之数据增强_free lunch for few-shot learning: distribution cal-程序员宅基地

文章浏览阅读4.3k次,点赞8次,收藏59次。前言有许多场景,我们只有少量样本,而训练网络模型时是需要吃大量数据的,一种方法就是迁移学习,比如预训练模型等方法,但是这里我们从另外一个角度来看看,那就是数据增强,关于数据增强方法已有很多,这里说说一些常见的方法,尤其是最新的(当前时间是2021.1.28)一些方法。传统常见的比如对于文本数据来说,最容易的就是shuffle, drop, 同义词替换,回译,随机插入,等等,这些都是一些最基本的方法,依据token 在本身上面做些扰动改变来数据增加,更多的可以看一下nlpcda这个python包_free lunch for few-shot learning: distribution calibration

springboot+activiti 添加EnableScheduling注解时发生的bean名称冲突问题_taskschedulingautoconfiguration和taskexecutionautoc-程序员宅基地

文章浏览阅读3.8k次,点赞3次,收藏5次。当你想在这样一个项目里使用Scheduling注解来做定时任务时,你会需要在springboot的启动类上面加注解@EnableScheduling@SpringBootApplication(exclude = {SecurityAutoConfiguration.class})@EnableSchedulingpublic class ZdysGmpServerApplicati..._taskschedulingautoconfiguration和taskexecutionautoconfiguration冲突

MATLAB Signal Rrocessing(11)频谱测量_enbw()-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏25次。自学MATLAB通信系统与数字信号处理_enbw()

推荐文章

热门文章

相关标签