目标检测分块知识总结 2

2023-11-13

tags: 目标检测;

1. FSAF

论文题目《Feature Selective Anchor-Free Module for Single-Shot Object Detection》2019
文章主要解决在进行多尺度检测的时候,利用特征金字塔无法给目标分配确切的某一层特征层来进行检测,这个比较依赖经验,但是效果表现并不是很好。因此,这里在每一个特征层都使用了一种叫做anchor-free的模块,来使目标自动选择最合适的特征层进行预测,从而脱离事先定义anchor这个过程。

通常目标检测算法都会使用特征金字塔的方式进行多尺度检测。但是究竟每一层的特征该预测多大尺度的目标是一个难以断定的事情。比如有可能一个60*60大小的目标是在P1层检测,而50*50大小的目标和40*40大小的目标却都放在了P2层进行检测,这种不同尺度的检测框的定义是非常难以衡量的。所以这里作者提出了,直接让网络根据目标的内容自己决定在哪层进行检测,不需要干预。

特征层选择

特征层选择

FASF模块定义
FASF

FASF

在训练的时候,基于目标的内容去自动选择某一个特征层进行检测,而不仅仅是根据目标的尺寸大小去选择。

FASF实现细节

FASF实现细节

可以看到,FASF模块是在基于anchor的子网络上面引出来一支,用来进行anchor的判定。在原始的anchor-based分支上面,添加了anchor-free分支,这个分支是通过对特征图采用3*3*K的卷积核进行卷积的结果,然后采用sigmoid激活函数,最终得到的特征图W*H*K表示K个特征图对应K个类别,而每个特征图上的点表示该点属于该类别的概率。而W*H*4表示每个点都包含一个4维的坐标信息。

给定了一个图像的位置信息 b = [ x , y , w , h ] b=[x, y, w, h] b=[x,y,w,h], 那么其在 l l l次下采样之后,到达第P个特征层之后,位置信息会变成 b p l = [ x p l , y p l , w p l , h p l ] b_p^l=[x_p^l, y_p^l, w_p^l, h_p^l] bpl=[xpl,ypl,wpl,hpl],其中, b p l = b / 2 l b_p^l=b/2^l bpl=b/2l。定义有效区域 b e l = [ x e l , y e l , w e l , h e l ] b_e^l=[x_e^l, y_e^l, w_e^l, h_e^l] bel=[xel,yel,wel,hel]忽略区域 b i l = [ x i l , y i l , w i l , h i l ] b_i^l=[x_i^l, y_i^l, w_i^l, h_i^l] bil=[xil,yil,wil,hil],这两个区域的大小是根据 b p l b_p^l bpl计算求得的,其缩放系数分别为 ϵ e \epsilon_e ϵe, ϵ i \epsilon_i ϵi x i l = x e l = x p l x_i^l=x_e^l=x_p^l xil=xel=xpl y i l = y e l = y p l y_i^l=y_e^l=y_p^l yil=yel=ypl w i l ϵ = w e l ϵ = w p l w_i^l\epsilon=w_e^l\epsilon=w_p^l wilϵ=welϵ=wpl h i l ϵ = h e l ϵ = h p l h_i^l\epsilon=h_e^l\epsilon=h_p^l hilϵ=helϵ=hpl。也就是说中心点不变,长宽进行了缩放。

anchor-free模块的监督信息如下:

anchor-free的监督信息

anchor-free的监督信息

对于分类部分:有效区域为图中的白色区域,忽略区域为灰色中不包含白色部分,训练的时候,这部分梯度不进行回传。同时,如果灰色区域对应的相邻的特征图中的灰色区域也被视为忽视区域,不回传梯度。还有一点需要注意的是,如果有两个目标的有效区域在一个特征图上重叠了,那么该特征图倾向于预测两个目标中的小目标。剩下的黑色区域为负样本区域,表示不存在目标。训练的时候,使用focal loss去搜集所有除了忽视区域外所产生的损失。
对于回归部分:所产生的四个坐标是相对图像左上下右的距离,坐标经过归一化后映射回原图,但是如果某些坐标落到了灰色区域,那么这部分的梯度不会回传。这部分采用的损失为IOU 损失。

对于前向推测:当一个像素产生了结果 [ o t , o l , o b , o r ] [o_t, o_l, o_b,o_r] [ot,ol,ob,or],那么将其乘以归一化系数S为 [ S o t , S o l , S o b , S o r ] [So_t, So_l, So_b,So_r] [Sot,Sol,Sob,Sor],然后预测左上角为 [ i − S o t , j − S o l ] [i-So_t, j-So_l] [iSot,jSol],右下角为 [ i − S o b , j − S o r ] [i-So_b, j-So_r] [iSob,jSor]。然后乘以下采样系数 2 l 2^l 2l,映射回原图。

损失函数如下:

损失函数

损失函数

对于每个特征层,都是通过计算focal loss 和IOU loss,将两者结合起来一起优化。

算法的结果如下:

与RetinaNet对比

与RetinaNet对比

与各算法对比

与各算法对比/center>

2. DSSD

论文题目《DSSD: Deconvolutional Single Shot Detector》 2017
文章主要解决SSD中对于小目标检测时候缺乏语义信息导致检出率不够的问题。
大体上文章主要做了几方面工作:

  1. 使用了ResNet101代替原始SSD中的VGG网络,构成了类似SSD网络
  2. 在更改之后的网络后面增加了Deconvolution层,形成了hourglass的结构,用来进行检测
  3. 在进行检测的时候,增加了几个卷积层,可以提升准确率
  4. 对PASCAL VOC物体的纵横比进行了聚类,发现纵横比在1-3之间,所以在SSD中原始只使用2和3比例的特征层增加了1.6这个纵横比

SSD和DSSD结构

SSD和DSSD结构

可以看到,DSSD在原始的SSD后面增加了几个反卷积层,主要在反卷积层进行预测,这部分内容综合了低层次的细节信息和高层次的语义信息。

检测模块

检测模块

这里为了增加准确率,在进行预测的时候又添加了几个卷积层,最后进行预测。

反卷积模块结合方式

反卷积模块结合方式

这部分内容就是DSSD中特征层的结合方式。可以看到,最终两层之间进行特征融合的时候使用了点乘,作者也尝试了相加,但是发现点乘的方式对于结果准确率的提升还是很有帮助的。

纵横比聚类结果

纵横比聚类结果

VGG和ResNet101预测层的变化

VGG和ResNet101预测层的变化

在pascal VOC上的结果对比

在pascal VOC上的结果对比

另外一点需要注意的是作者在测试的时候使用了一个技巧来大大减少前向推理时间:
在测试的时候,将bn层去掉,而使用训练好的参数scale和shift去直接进行参数操作

测试时去掉bn层

测试时去掉bn层

前向推测对比

前向推测对比

通过SSD和DSSD的对比,可以看出,去掉bn层之后,速度提高了很多。但是SSD比DSSD的速度要快好多倍。这点作者解释说是由于ResNet101的层数深,同时在预测的时候增加了反卷积和多个卷积层进行预测;而且DSSD所生成的anchor的数量是SSD的2倍之多,所以可能导致速度下降。这点可能会在后面的研究中想法搞定,反正精度还是不错的。

3. GIOU

论文题目《Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression》
本文主要解决的问题是:传统的L范数损失对于尺度不具有不变性,虽然IOU损失对于尺度具有不变性,但是又对坐标比较敏感。在进行坐标回归的时候,预测框与gt之间如果没有交集的时候,他们之间的IOU为0,这样的话,在计算loss的时候就会出现是0的情况,gt无法引导预测框调整方向。或者当预测框与gt之间的IOU相同,但是预测框形状可以是任意形状的时候,gt也无法引导预测框如何调整。

主要原因在于,现在在进行坐标回归的时候,所使用的损失函数一般是基于L范数的,但是在衡量框的准确性的时候,是基于IOU的,而这两者之间并没有很强的关联性,从而导致很多算法虽然能够通过训练,将L范数降低,但是无法提高最终的预测准确性。如果使用IOU损失,如何才能够让其不受坐标的影响是个问题。
如下图所示:

L范数与IOU、GIOU

L范数与IOU、GIOU

图中的绿色框为gt,黑色框为预测框,可以发现,只要预测框右上角在图中的虚圆圈上,那么他们之间的L范数就会相同,但是相同的L范数并不意味着IOU就相同。也就说明了,在优化L范数的时候,并不能直接体现在IOU上,也就是预测框的准确性上。所以这里作者进行了改进。

而且,在使用IOU衡量的时候,也无法体现预测框的准确性,比如下图:

IOU相同但是GIOU不同

IOU相同但是GIOU不同

图中的IOU都是相同的,但是可以发现,两者之间的位置是不相同的,IOU本身不能够体现出来如何调整坐标位置才能够使得预测框更准确,所以有必要进行改进。

下图就是GIOU的算法原理与细节:

GIOU算法原理

GIOU算法原理

GIOU算法细节

GIOU算法细节

可以看到,作者的做法是首先计算预测框和gt之间的IOU,然后计算两者之间的一个最小的封闭集合,最终的GIOU是原始的IOU减去封闭集合去除两个框所占的面积后的归一化结果。说来有点太抽象,这里举个例子(根据算法2):

GIOU示例

GIOU示例

可以看到,所做的事情就是几个方面:

  1. 第四步,计算gt与预测框之间的IOU
  2. 第6步,计算最小封闭框的面积
  3. 计算IOU与GIOU

两者之间没有交集的时候,IOU是0,但是GIOU并非是0,所以可以继续优化。
在各种数据集上的表现如下:

Faster RCNN表现

Faster RCNN表现

YOLOv3表现

YOLOv3表现

参考文献

  1. Feature Selective Anchor-Free Module for Single-Shot Object Detection
  2. DSSD: Deconvolutional Single Shot Detector
  3. Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

目标检测分块知识总结 2 的相关文章

  • 如何更改Visual Studio 2019的语言

    第0步 开启Visual Studio 2019 第1步 工具 gt 获取工具和功能 第2步 下载语言包 等待下载 第3步 设置语言 工具 Tools gt 选项 Options 然后重启 VS 就可以看到变化了

随机推荐

  • MediaMetadataRetriever类取得媒体文件信息

    http blog csdn net ameyume article details 7849641 API说明 MediaMetadataRetriever class provides a unified interface for r
  • Java内存管理和面向对象

    Java内存管理 Java的内存管理是自动化的 通过垃圾回收器 Garbage Collector 简称GC 来管理内存分配和释放 在本教程中 我们将探讨Java中的内存管理概念 垃圾回收和一些内存管理相关的最佳实践 步骤1 Java的内存
  • 数据集【NO.10】天池布匹瑕疵检测

    写在前面 数据集对应应用场景 不同的应用场景有不同的检测难点以及对应改进方法 本系列整理汇总领域内的数据集 方便大家下载数据集 若无法下载可关注后私信领取 关注免费领取整理好的数据集资料 今天分享一个非常好的非常小众的研究方向 有应用创新
  • 分布式强一致算法 —— Raft算法

    背景 Paxos算法是最早的强一致性算法 1990年被Leslie Lamport提出 但是由于其难以理解和实现 导致没有被广泛使用 因此 2013年Raft算法被提出 功能与Paxos算法相同 更易于理解 实现简单 因此迅速被广泛推广使用
  • 嵌入式linux驱动之路19:U-Boot 移植(2)

    uboot 的最终目的就是启动 Linux 内核 所以需要通过启动 Linux 内核来判断 uboot 移植是否成功 在启动 Linux 内核之前我们先来学习两个重要的环境变量 bootcmd 和 bootargs bootcmd 环境变量
  • vue3+vite+ts 图标封装3种方案

    目录 一 使用 iconify 图标库 1 下载插件 2 配置 vite config ts 3 使用 3 1 方式 1 3 2 方式 2 二 使用 iconfont 图标库 1 下载 iconfont js 2 将 iconfont js
  • ElementUI 中 Tree 树形控件 添加自定义样式 虚线及图标样式

    修改前样式 修改后样式如图
  • MAC搭建M1环境的stable-diffusion

    MAC M1 搭建 stable diffusion 环境 文章目录 MAC M1 搭建 stable diffusion 环境 环境准备 1 硬件环境 2 系统环境 3 基础软件环境 主要参考资料 操作步骤 1 下载git 2 下载con
  • 量子信息-学习记录13

    ch 13 量子计算机的物理实现 续 量子计算机的基本事实 定义 Q tau Q Q 是量子系统在抵抗量子噪声 并维持自身的量子特性时所能够持续的最短时间
  • kettle使用常见问题解决-03

    kettle使用常见问题解决 03 一 kettle资源库总是断开 报的错误信息如下 An error occured loading the directory tree from the repository Error comitti
  • 如何在屏幕上打印

    这是本人发的第一个博客 我想用写博客来回顾和复习本人学习c语言的过程 我们学习计算机语言是为让计算机完成一定的任务 而任务的结果是在屏幕上显示出来的 因此 我们要学习如何在屏幕上打印内容 include
  • SAP之FIORI(1)-绪论

    SAP之FIORI 1 绪论 web IDE的下载地址 https tools hana ondemand com sapui5 下载好运行之后orion exe之后登录网址 http localhost 8080 webide index
  • 全面解析JavaScript中对于字符串子串的查询方法

    一 基本应用场景 Q1 给定字符串a xxx 给定字符串b xxxxxx 判定a是否为b的子串 基础手写实现方法 function checkHas longStr shortStr for let i 0 i lt longStr len
  • 基于遗传算法GA算法优化BP神经网络(Python代码实现)

    一 概述 BP GA算法的设计 基于遗传算法的BP神经网络算法 以下简称BP GA 就是在BP神经网络的学习过程中 将权重和阀值描述为染色体 并选取适宜的适应函数 然后进行GA迭代 直到某种意义上的收敛 与普通BP学习算法相比 算法 BP一
  • redis 主从配置

    转 https blog csdn net github 26672553 article details 69568259 redis主从配置初步 2个节点主从 如果我们redis的压力很大 如果我们的并发高到我们读数据和写数据都有了很大
  • 二维码的生意几乎革掉了钱包的命

    刷脸支付无需结账台 无需手机 如果说说二维码让手机成为了钱包 那刷脸支付则索性让钱包这个东西都直接革掉 而这也点燃了国内的新零售浪潮 二维码 革命的祸首在移动支付普及 线上线下建立联系这件事上 二维码其实功不可没 在此之前 线上的归线上 线
  • Cmake 官方中文教程

    CMake官方教程 2018年04月03日 22 00 21 SoftGit 阅读数 23072 很好的一个官方教程翻译文档 CMake简介 CMake是一个跨平台的 开源的构建工具 cmake是makefile的上层工具 它们的目的正是为
  • Node js 项目启动报错,错误码,events.js:141,throw er; //Unhandled 'error' event,解决办法

    Node js 项目启动报错 错误码 events js 141 throw er Unhandled error event 解决办法 当我遇到这个问题的时候 我纠结了好半天 找了好多资料 都说是端口占用 必须杀死端口重新启动 确实是这样
  • 上架发布应用市场资料填写规则限制

    应用名称填写时 名字长度有没有限制呢 1 名称 1 字数限制 iOS 30 Android 64 2 应用市场显示的名称 2 副标题 1 字数限制 iOS 30 2 应用市场显示的副标题 宣传文本填写时 可以编写多少个字 1 字数限制 iO
  • 目标检测分块知识总结 2

    tags 目标检测 1 FSAF 论文题目 Feature Selective Anchor Free Module for Single Shot Object Detection 2019 文章主要解决在进行多尺度检测的时候 利用特征金