Anchor Free目标检测方法

news2024/12/23 0:23:35

faster rcnn anchor:尺寸比例固定
yolo anchor尺寸确定:通过聚类

Anchor Free方法

anchor的简单理解:在特征图上的模板,含有的信息为检测框的大小尺度

Anchor based 方法小结

 

  • Faster rcnn(左上)

  • yolo v3(右上)

  • ssd (中)

  • retinaNet(下)

虽然Anchor based的方法取得了大量成功,但依然存在一些不足:

  • anchor box的参数需要手动调整

  • anchor box的采样数量太多,降低效率

  • anchor box的样本不均衡(负样本过多)

如何绕开anchor框?

Anchor free类方法

anchor free的方法大致可以分成两种:

  • 以中心点为基准点的方法(center net)

优点:快

缺点:1)当目标重叠时,只能检测出一个;

           2)大目标中的小目标难以检测出

  • 以左上+右下为基准点的方法 (corner net)

 CornerNet

核心思想:对于一个目标,构建一个目标框只需要得知其左上角与右下角两个关键点即可。

要达到这个目标,需要解决什么问题?

  1. 为每个目标都到两个点(找点

  2. 分类点(左上还是右下)

  3. 为得到的点进行匹配匹配点)匹配同个物体一对点

总体框架

  1. 图像输入convNet,提取特征

  2. 特征分为两路,分别送入两个支路(分类

    • 上路由heatmap(热力图:找点)+embedding(匹配)组成,预测左上点
    • 下路组成与上路相同,预测右下点
  3. 结合上下路的预测结果,得到目标检测结果

每个模块的内容

  • hourglass net (沙漏网络)

hourglass net用于姿态检测,基本结构如下

 很显然,这是一种有多尺度特征融合的网络

考虑到hourglass net是组合模块,corner中采用了两个hourglass net组成模型的convnet部分

  • 二分输出

从hourglass net输出后,特征经过不同3*3卷积后,得到两路输出,分别送到top-left和bottom-right中。

tl:top left     br:bottom right 

  • 特征进入分支后,面临以下问题:
  1. 如何检测点?

  2. 如何确定检测的点是左上还是右下?

  3. 如何将同一个物体的左上角和右下角联系起来?

将一个特征图可视化后,我们希望关键点的位置应当比其他位置有着更高的响应。 

 也就是说,特征图中响应最大的点(相当于进行了一次nms)作,即关键点。

那么问题在于:如何判断所检测的关键点是左上角还是右下角?

 如果一个点是左上角的话,那么他右下方应当是目标;

反之,右下角的左上方应当是目标。

考虑到上述问题,则可以设计一个不同方向的池化层,目的在于保留预期区域的特征,删除非预期区域的特征。

corner pooling

右面最大的值和下面最大的值导致左上角响应最高==>相当于将右下的内容转移到左上点:

计算时,反方向求一遍,求完之后加起来。 

三个支路是并行的 

如何将左上点和右下点联系起来?

在取得两个关键点位置的同时,为两个关键点提取特征。

特征越接近的,即说明他们是同一个物体。

因此,在上下两个支路中,lt支路进入lt的corner pooling的模块,分别输出:

- heatmaps (位置)
- embedings (目标)
- offsets (位置纠偏)

综上,corner net的整体结构图如图所示

损失函数

  1. heatmaps输出损失(尺寸: batch_size(bs)×128×128(feature map尺寸)×80(类别数)×2(有的网络输出1和0,有的没有)) 

ycij:第c张热力图(i,j)位置为第c类的角度

focal loss(交叉熵损失多了一个a次方)

Focal Loss 是一种用于解决类别不平衡问题的损失函数,由Lin et al.在论文"Focal Loss for Dense Object Detection"中提出。它通过减少易分类的样本对损失函数的贡献,来提高难分类样本的权重,从而改善模型在类别不平衡情况下的性能。

Focal Loss的公式如下:(热力图的损失)

FL(p_t) = -α_t(1-p_t)^γ * log(p_t)

其中,p_t为模型预测的概率值,α_t为类别权重,γ为调节难易样本权重的因子。当γ=0时,Focal Loss等价于交叉熵损失;当γ>0时,Focal Loss会降低易分类样本的权重,提高难分类样本的权重。

  1. offset损失 (尺寸: bs×128×128×80×2(deta x,deta y))

pull:令相同的物体的两个点尽可能相近

push:令不同物体的两个点尽可能相远

  1. offsets损失 (尺寸: bs×128×128×2) 

总体损失

center net

center net在速度和精度上超越了yolo v3

 首先,图像输入bottel net进行下采样,得到feature map

其次,分三个支路进行预测。

与corner net不同,特征图不需要进行corner pooling

支路1: 预测中心点,根据feature map得到大致坐标

支路2: 估计出一个偏置,应对池化和padding等过程造成的位置偏移

支路3: 估计出一个框的尺寸,得到目标框。

 相比于之前的anchor based方法,对待有不同的ground truth方式。

anchor based 方法: 计算iou,IOU重合超过0.7的框即为正例,否则为负例

anchor free方法:中心点按高斯分布,逐渐降低权重向外扩散。

损失函数

 

姿态检测

更进一步地,center net可以用于姿态检测。

也就是说预测人体的N个关键点,并对其进行合并识别,可以得到人体上的多个位置,从而得到姿态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/584458.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python爬虫学习简记(更新中)

页面结构的简单认识 如图是我们在pycharm中创建一个HEML文件后所看到的内容 这里我们需要认识的是上图的代码结构,即html标签包含了head标签与body标签 table标签 table标签代表了一个网页页面中的表格,其包含了行和列,其中行标签我们使用tr标…

1.场景设计题

系统设计 文章目录 系统设计一、缓存设计1、Redis 缓存Key回收策略?1.1、Redis缓存Key过期策略1.2、Redis缓存Key回收策略 2、Redis缓存击穿如何解决?2.1、导致Redis缓存穿透原因有那些? 3、Redis缓存雪崩如何解决?4、Redis缓存击…

笛卡尔心形线

目录 一、前言 二、使用 EasyX 绘制笛卡尔心形线 一、前言 "谁能告诉我,这是什么?" "爱心呗" "哼,爱心,我们叫它心形线。关于心形线呢,还有一个美丽的故事,是跟笛卡尔有关。…

RabbitMQ六种工作模式01

01: Work Queue工作队列模式 //接口所有的属性都是静态常量属性 public interface RabbitContent {//队列String QEUEU_HELLO "hello";String QUEUE_WORKING "working";String QUEUE_BAIDU "baidu";String QUEUE_SINA "sina";//交换机…

【操作系统笔记】南京大学jyy老师

系列综述: 💞目的:本系列是个人整理为了操作系统学习,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于南京大学操作系统jyy老师课程进行的,每个知识点的修正…

Windows系统内核溢出漏洞提权

目录 Windows内核溢出漏洞原理 溢出漏洞简介 什么是缓冲区 缓冲区溢出 缓冲区溢出目的 Windows内核溢出漏洞利用流程 提权实战思路 手工提权测试 辅助提权 EXP如何寻找 使用MSF提权 关于提权时可能遇到的问题 如果提权的时候发现无法执行命令的话,可以上…

零售EDI:如何与Transgourmet 建立EDI连接?

Transgourmet是一家总部位于法国的批发和供应商公司,为酒店、餐馆和快餐行业提供食品和非食品产品。在欧洲拥有广泛的市场覆盖,经营范围涵盖法国、德国、奥地利、波兰、罗马尼亚和瑞士等国家。 Transgourmet EDI 需求分析 1.传输协议 Transgourmet选择…

一文看懂企业性能测试,指标解析+代码演示,简洁易懂!

目录 前言: 一、性能测试流程简介 二、性能测试指标分析 三、性能测试代码演示 四、性能测试结论 五、总结 前言: 性能测试在企业应用中是非常重要的一环,它可以帮助企业对自身的应用和系统进行全面评估,提高其性能、稳定性…

simbertmilvus实现相似句检索

朋友们,simbert模型是一个较好的相似句检索模型,但是在大规模检索中,需要实现快速检索,这个时候离不开milvus等向量检索库,下面用实际代码来讲一下simbert之milvus应用。 import numpy as np from bert4keras.backen…

addr2line 使用,定位kernel panic 代码位置

在kernel崩溃时,方便定位代码。 需要打开kernel配置CONFIG_DEBUG_INFO。 需要有System.map和vmlinux文件,一般在out目录。 一般panic的时候会有给出panic的指针,如下down_write。 el1_data说明发生异常了,进入和entry.S文件&a…

视频转换、视频压缩、录屏等工具合集:迅捷视频工具箱

这是一款功能强大的视频处理软件,提供了多种视频处理功能。可以使用该软件进行视频剪辑、视频转换、音频转换、视频录像、视频压缩、字幕贴图等多种操作。软件界面简洁易用,操作方便,可以满足各种视频处理需求。 基本功能 视频压缩&#xff…

华为设备这14个广域网命令,值得网工收藏

华为设备广域网命令是网络管理员在运维过程中常用的一类命令。该命令集涵盖了DCC配置命令、PPP配置命令、MP配置命令、PPPoE命令、ATM配置命令、帧中继配置命令、HDLC配置命令、LAPB配置命令、X.25配置命令、IP-Trunk配置命令、ISDN配置命令、Modem配置命令、RTC终端接入配置命…

商场楼层索引图怎么做?商场内部地图导航怎么做?

商场内部地图导航怎么做?最近,某论坛上有一个帖子,主题是谈谈“逛商场中最糗的事情”,网友们纷纷跟帖回应,讲述自己在商场里遇到的尴尬,从在停车场找车如何困难,还有在商场里“迷路”的经历………

解决Ubuntu系统/usr/lib/xorg/Xorg占用显卡内存问题

问题描述: 服务器新安装的Ubuntu系统,开机默认/usr/lib/xorg/Xorg线程会占用显卡内存,占用内存大小为4Mb,虽然占用量不大,但是对于强迫症患者来说实在太不友好! 解决方法:将xorg的线程移动到集…

为什么我们需要API接口?API接口的核心又是什么?

API(Application Programming Interface)是一种连接不同软件之间的标准化的接口,可以让不同软件间进行数据交互和通信。API接口的作用很多,以下是几个主要的原因: 1.提高软件系统的灵活性和可扩展性。API接口可以将不…

大数据 | Hadoop HA高可用搭建保姆级教程(大二学长的万字笔记)

知识目录 一、写在前面🎈二、集群准备🍟2.1 集群规划2.2 集群解释 三、说明🔑3.1 主机名说明3.2 用户名说明3.3 操作目录说明3.3 必要工具说明 四、上传资料🌵4.1 资料准备4.2 脚本准备4.3 配置文件准备 五、解压与修改文件&#…

华为OD机试真题 Java 实现【递增字符串】【2023Q1 200分】,附详细解题思路

一、题目描述 定义字符串完全由“A’和B"组成,当然也可以全是"A"或全是"B。如果字符串从前往后都是以字典序排列的,那么我们称之为严格递增字符串。 给出一个字符串5,允许修改字符串中的任意字符,即可以将任…

色彩空间转换 HSV,GRAY

RGB色彩空间是一种比较常见的色彩空间,除此之外比较常见的色彩空间还包括GRAY色彩空间(灰度图像)、YCrCb色彩空间、HSV色彩空间、HLS色彩空间、CIEL*a*b*色彩空间、CIEL*u*v&#xf…

租售keysight E8257D 50G模拟信号发生器 销售/回收

是德(Keysight) E8257D 模拟信号发生器 Keysight E8257D (Agilent) PSG 模拟信号发生器提供业界领先的输出功率、电平精度和高达 67 GHz 的相位噪声性能(工作频率可达 70 GHz)。Agilent PSG 模拟信号发生器的高输出功率和卓越的电…

SpringBoot + MyBatis报错:Invalid bound statement (not found)解决

背景:XML配置文件规范 使用Mybatis的注解方式,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中。 在Mybatis中使用XML映射文件方式开发&#xff0c…