FSAF-Feature Selective Anchor-Free

2023-10-24 11:08

本文主要是介绍FSAF-Feature Selective Anchor-Free,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《Feature Selective Anchor-Free Module for Single-Shot Object Detection》是由Carnegie Mellon大学Chenchen Zhu等提出的自动选择合适的尺度以及无anchor的目标检测方法。实验对比图如下
在这里插入图片描述
从上图可以看出,加了FSAF模块的RetinaNet,能把一些长宽比比较悬殊的目标检测出来。为什么加入了FSAF模块可以有这种效果?首先:
1、对比下加入FSAF模块前后的RetinaNet网络的结构:
在这里插入图片描述
在这里插入图片描述
相对于原始的RetinaNet网络,FSAF模块只是两个卷积层,一个嵌入到分类支路中,另一个嵌入到回归支路中。
为什么在两个支路中分别嵌入一个卷积层就可以实现特征选择,从而达到良好的检测效果?
2、损失函数
作者首先定义了一些变量:
1)标签为 k k k的实例的bounding box为 b = [ x , y , w , h ] b=[x, y, w, h] b=[x,y,w,h] ( x , y ) (x, y) (x,y)是矩形的中心, w , h w, h w,h分别是矩形的宽和高。
2)其在 P l P_l Pl特征层上的box坐标为 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
3)有效box(effective box): 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];可忽略box(ignoring box): 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]。这两个box大小分别和 b p l b_p^l bpl ϵ e \epsilon_e ϵe ϵ i \epsilon_i ϵi倍的关系。即 x e l = x p l , y e l = y p l , w e l = ϵ e w p l , h e l = ϵ e h p l x_e^l=x_p^l, y_e^l=y_p^l, w_e^l=\epsilon_ew_p^l, h_e^l=\epsilon_eh_p^l xel=xpl,yel=ypl,wel=ϵewpl,hel=ϵehpl x i l = x p l , y i l = y p l , w i l = ϵ i w p l , h i l = ϵ i h p l x_i^l=x_p^l, y_i^l=y_p^l, w_i^l=\epsilon_iw_p^l, h_i^l=\epsilon_ih_p^l xil=xpl,yil=ypl,wil=ϵiwpl,hil=ϵihpl
文章中的 ϵ e = 0.2 , ϵ i = 0.5 \epsilon_e=0.2, \epsilon_i=0.5 ϵe=0.2,ϵi=0.5

定义完这些参数,就可计算分类和回归的输出:
1)分类输出
分类输出层输出 K K K个maps,每个map对应一个类。一个样本以三种方式影响第 k k k层特征。第一,有效box区域: b e l b_e^l bel,这是一个正样本区域;第二,除去有效box的可忽略box区域: ( b i l − b e l ) (b_i^l-b_e^l) (bilbel),这部分区域的梯度不传回去;第三,相邻特征层的可忽略boxes ( b i l − 1 , b i l + 1 ) (b_i^{l-1}, b_i^{l+1}) (bil1,bil+1)也是可忽略的。其余的区域都是负样本区域。如果在一个特征层上,有两个相交的有效boxes,则较小的样本有较高的优先级。
loss计算采用 α = 0.25 , γ = 2.0 \alpha=0.25, \gamma=2.0 α=0.25,γ=2.0的Focal loss。
2)回归输出
回归支路只计算有效区域 b e l b_e^l bel内的点。对于区域内的每个点 ( i , j ) (i, j) (i,j),其对应的projected box是一个四维矢量 d i , j l = [ d t i , j l , d l i , j l , d b i , j l , d r i , j l ] \bold{d}_{i,j}^l=[d_{t_{i,j}}^l,d_{l_{i,j}}^l,d_{b_{i,j}}^l,d_{r_{i,j}}^l] di,jl=[dti,jl,dli,jl,dbi,jl,dri,jl],其各分量表示当前点 ( i , j ) (i, j) (i,j) b p l b_p^l bpl上、左、下、右边界的距离。用 S S S d i , j l \bold{d}_{i,j}^l di,jl进行归一化,即每个点 ( i , j ) (i, j) (i,j)的矢量为 d i , j l / S \bold{d}_{i,j}^l / S di,jl/S S S S取值为4。有效区域之外的区域都忽略。Loss采用IoU loss。
在这里插入图片描述
3)前向输出
对于点 ( i , j ) (i, j) (i,j),其前向网络输出为 [ o ^ t i , j , o ^ l i , j , o ^ b i , j , o ^ r i , j ] [\widehat{o}_{t_{i,j}}, \widehat{o}_{l_{i,j}}, \widehat{o}_{b_{i,j}}, \widehat{o}_{r_{i,j}}] [o ti,j,o li,j,o bi,j,o ri,j],则预测的距各边的距离为 [ S o ^ t i , j , S o ^ l i , j , S o ^ b i , j , S o ^ r i , j ] [S\widehat{o}_{t_{i,j}}, S\widehat{o}_{l_{i,j}}, S\widehat{o}_{b_{i,j}}, S\widehat{o}_{r_{i,j}}] [So ti,j,So li,j,So bi,j,So ri,j]。则输出的左上角和右下角分别为 ( i − S o ^ t i , j , j − S o ^ l i , j ) (i-S\widehat{o}_{t_{i,j}}, j-S\widehat{o}_{l_{i,j}}) (iSo ti,j,jSo li,j) ( i + S o ^ b i , j , j + S o ^ r i , j ) (i+S\widehat{o}_{b_{i,j}}, j+S\widehat{o}_{r_{i,j}}) (i+So bi,j,j+So ri,j)。将得到的点放大 2 l 2^l 2l倍就可以得到输出box在原图像上的位置。
输出box的置信度和类别由最大score以及对应的类别决定。
那如何选择合适的输出层得到结果呢?

3、在线特征选择
自动选择合适的特征层得到结果。
在训练阶段:设有一个样本 I I I,其在 P l P_l Pl层的分类损失和box回归损失分别为 L F L I ( l ) L_{FL}^I(l) LFLI(l) L I o U I ( l ) L_{IoU}^I(l) LIoUI(l)。选择最小损失的层为最优的层:
l ∗ = a r g m i n l L F L I ( l ) + L I o U I ( l ) l^* = arg \underset{l}{min} L_{FL}^I(l) + L_{IoU}^I(l) l=arglminLFLI(l)+LIoUI(l)
在训练时,将 l ∗ l^* l层的损失传递回去,进行学习。
在推理时,无需选择哪个层,只需要将置信度最高的层的预测结果输出即可。

4、结合使用去推理和训练
在使用中,anchor-based和FSAF模块时同时使用的
推理阶段
在FSAF模块中,每一层选取置信度最高的1k个输出,得到输出,与anchor-based模块的输出合并,然后采用NMS得到最终的输出结果
训练优化
整个网络的损失是FSAF和anchor-based的加权和。设anchor-based的损失为 L a b L^{ab} Lab,anchor-free模块的分类和回归损失分别为 L c l s a f L_{cls}^{af} Lclsaf L r e g a f L_{reg}^{af} Lregaf,则网络的总损失为 L = L a b + λ ( L c l s a f + L r e g a f ) L = L^{ab} + \lambda(L_{cls}^{af} + L_{reg}^{af}) L=Lab+λ(Lclsaf+Lregaf),其中 λ \lambda λ是anchor-based分支的权重,本章中的设置为 λ = 0.5 \lambda=0.5 λ=0.5
初始化
具体参照论文

从上面对FSAF模块分析可知,FSAF模块在目标检测时,没有像anchor-based方法那样对box长宽比有限制,从理论上看,任何长宽比都可以检测到,因此在第一张图上,加了FSAF模块的RetinaNet网络可以检测到细长的目标,并且FSAF能提升检测效果,单独的FSAF检测对比如下表
在这里插入图片描述

总结
这篇文章提出了FSAF的特征选择无anchor模块,应用于多尺度特征输出网络。在训练和推理阶段,同时使用anchor-based和anchor-free两个分支。FSAF模块其实一个卷积层,在训练中,这个模块学会选择合适的尺度,在推理阶段,可自动输出合理的结果。

这篇关于FSAF-Feature Selective Anchor-Free的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/274718

相关文章

HumanNeRF:Free-viewpoint Rendering of Moving People from Monocular Video 翻译

HumanNeRF:单目视频中运动人物的自由视点绘制 引言。我们介绍了一种自由视点渲染方法- HumanNeRF -它适用于一个给定的单眼视频ofa人类执行复杂的身体运动,例如,从YouTube的视频。我们的方法可以在任何帧暂停视频,并从任意新的摄像机视点或甚至针对该特定帧和身体姿势的完整360度摄像机路径渲染主体。这项任务特别具有挑战性,因为它需要合成身体的照片级真实感细节,如从输入视频中可能

【机器学习 sklearn】特征筛选feature_selection

特征筛选更加侧重于寻找那些对模型的性能提升较大的少量特征。 继续沿用Titannic数据集,这次试图通过特征刷选来寻找最佳的特征组合,并且达到提高预测准确性的目标。 #coding:utf-8from __future__ import divisionimport sysreload(sys)sys.setdefaultencoding('utf-8')import timest

Anchor Alignment Metric来优化目标检测的标签分配和损失函数。

文章目录 背景假设情况任务和目标TaskAligned方法的应用1. **计算Anchor Alignment Metric**2. **动态样本分配**3. **调整损失函数** 示例总结 背景 假设我们在进行目标检测任务,并且使用了YOLOv8模型。我们希望通过TaskAligned方法来优化Anchor与目标的匹配程度,从而提升检测效果。 假设情况 图像: 一张包含

delphi : 窗体的close,free,destroy的区别

一、我用application.create(TForm2,Form2)语句,创建了Form2,可是调用了Form2.close后,重新调用Form2.show. 刚才所创建的Form2仍然存在。问为了节约资源,应该怎样使用close,free,destroy. 三者的关系是什么? 1、Action:=caFree。 2、 with TForm1.Create(Application) do

C语言动态内存空间分配(malloc,calloc,realloc,free)

为了代码观感美观,我将代码部分的注释删了 malloc #include<stdio.h>#include<stdlib.h>#include<errno.h>//使用动态内存分配函数的注意事项://1.要判断指针是否为空指针,如果没有成功开辟动态内存空间,则不能继续使用该指针//2.分配的动态内存空间的数量要大于等于赋值的元素的数量,不能造成动态内存的越界访问//3.动态内存空间中

feature_column相关接口

在TensorFlow中,特征列(Feature column)是原始数据和 Estimator 之间的接口,它告诉Estimator如何使用数据。 原始数据集包含各种各样的特征,有的特征是数值,比如年龄,长度、速度;有的特征是文字,比如,地址、Email内容、数据库查询语句等 神经网络接受的输入,只能是数值,而且是整理好的数值 所以,原始数据 和 神经网络输入需求之间需要一个桥梁,这个

Detection简记2-DAFE-FD: Density Aware Feature Enrichment for Face Detection

创新点 1.使用密度估计模型增强检测中的特征图 总结 整个流程还是很清晰的。 conv1-3的特征图经过密度估计模块由检测器D1进行检测。 D2-4分别是四个检测器。 FFM是特征融合模块,将不同层不同大小的特征融合。 FFM网络结构如下: 首先使用1X1的卷积减少两组特征的厚度到128,然后使用双线性插值统一两组特征图的尺寸,然后相加。类似于cvpr2017的SSH。 多尺度检测器的网

【SPOJ】1825 Free tour II 点分治

传送门:【SPOJ】1825 Free tour II 题目分析:敲了两遍。。。 本题是论文题,具体见漆子超论文《分治算法在树的路径问题中的应用》。 在以root为根的第 i 棵子树上,我们用G[ i ,j ]表示root的第 i 棵子树的路径上严格有 j 个黑点的路径的最长长度。用F[ i ,j ]表示在root为根的第 i 棵子树的路径上不超过 j 个黑点的路径的最长长度。因

阅读笔记(五)多线程无锁的C++实现《Lock-Free Data Structures》

1. 前言   本文介绍使用C++实现多线程中无锁算法的实现和优化过程。 2. 无锁&CAS   在多线程程序中,加锁是一种必要的手段,由于保证数据操作的正确性(原子性)。但是这也在很多时候带来了性能的极度下降,因为所有共享数据的操作均需要加锁,有些时候会严重影响性能,比如当读键盘或者一些较慢的I/O操作时,锁会延误了其他线程的操作。更糟糕的是,不当操作可能会带来死锁。   首先介绍最经典

rust feature 简介

Rust 的 feature 是一种机制,用于在编译时选择性地启用或禁用代码的某些部分。通过 feature,你可以在 Cargo.toml 中定义哪些功能需要启用,并在代码中通过条件编译来控制代码的编译与否。下面是 feature 机制的详解: 1. 基本概念 Feature: 是一个编译时的标志,允许你有选择性地启用某些代码路径、依赖项或编译选项。Default Feature: 默认启用