失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 真正意义的Anchor-Free FCOS目标检测算法了解一下

真正意义的Anchor-Free FCOS目标检测算法了解一下

时间:2020-10-21 19:03:46

相关推荐

真正意义的Anchor-Free FCOS目标检测算法了解一下

点击上方“AI搞事情”关注我们

目标检测领域比较火的一个方向就是Anchor-Free,比如:CornerNet、ExtremeNet、CenterNet、FoveaBox等方法,所谓Anchor-Free,就是去掉了原来来目标检测算法的Anchor机制,由region-level的视觉任务转变为了pixel-level的类似于语义分割的任务。

相关资源

论文:/pdf/1904.01355.pdf

开源:/tianzhi0549/FCOS

论文笔记

如网络结构图所示,FCOS由主干网(Backbone)+ 特征金字塔(Feature Pyramid)+ 预测三分支Classification + Center-ness + Regression)三部分组成。

(FCOS网络结构图)

01

全卷积单步检测器

网络前向同语义分割网络FCN类似,以像素点为训练样本,每个像素被标上类别或者背景标签,用以分类分支的训练。

由于没有了Anchor,回归分支便不能使用偏移量作为回归的目标,作者以目标框中每个像素点到目标框四条边的距离作为目标值进行边框回归分支的训练。

因此,网络的输出包含80维(COCO类别数)分类张量px,y和4维的回归张量tx,y,推理时,px,y>0.05判别为正样本,将tx,y逆处理得到目标边框。从以上结构图可以看出,作者在两个分支上分别使用4层CNN进行两个任务的学习。参照RetinaNet,作者运用多个二分类代替了多分类。

损失函数

分类损失Lcls采用Focal Loss,回归损失Lreg采用IOU Loss,Npos表示正样本数量,论文中,回归权重λ值为1。

回归目标

02

FPN多尺度预测

作者使用了基于FPN的多尺度策略,主要是为了解决由于大步长下采样导致的低召回率的问题。在Anchor-Based方法中,可以通过调整IOU的阈值做到召回率的平衡。

如结构图所示,FCOS算法使用了{P3, P4, P5, P6, P7}这五个尺度的特征映射进行了分类与回归。其中,P3、P4、 P5由backbone不同层特征图 C3、C4、C5经1 * 1卷积和反向链接而得,而P6、P7则是接着P5进行了步长为2的卷积操作得到的(相当于池化),最终P3, P4, P5, P6, P7的步长分别为:8, 16, 32, 64 和 128。

为了更好地利用多尺度特征,每一个尺度的特征层需要回归的边界框范围的都进行了限定,让每个尺度特征各司其职,不同特征层预测不同大小范围的目标。具体地:

a:计算所有层当前层级中的回归目标:l∗, t∗, r∗、b∗

b:判断是否满足条件:max(l∗, t∗, r∗, b∗) > mi 或者 max(l∗, t∗, r∗, b∗) < mi -1。

c:若满足,设为负样本,不对此边界框进行回归预测。

其中,mi是作为第i尺度特征层的最大回归距离,

{m2, m3, m4, m5, m6,m7} 分别对应: {0, 64, 128, 256, 512 , ∞}

通过多尺度预测策略还能够很好地解决不同大小目标重叠的情况,若一个像素点即使通过多尺度预测策略还是被分配到了多个目标框中(同一尺度上),选用区域面积最小的目标进行回归训练。

利用多尺度策略,不同的特征层需要回归不同的尺寸范围(例如:P3的尺寸范围为[0, 64],P4的尺寸范围为[64,128],因此,不同特征层使用相同的输出激活是不合理的,所以,作者将标准的exp(x)替换为了带有可训练标量si的exp(si,x),通过si来调整第i层指数函数的基数。

03

Center-ness

在分类的分支上引入了center-ness的概念,主要是用来衡量中心点位置的好坏,限制产生一些低质量(偏离目标)的检测框,提升定位的效果。

center-ness的值位于0~1之间,像素点越远离目标中心center-ness值越小,通过交叉熵损失进行训练。测试时,将center-ness得分与对应分类得分相乘,作为最后得分,这样每个位置便有了边框权重的得分,远离目标中心的边框就被削弱了,通过NMS就有效地过滤了低质量的定位边框。

04

实验

训练数据采用COCO数据集,主干网:ResNet-50(ImageNet预训练),超参数同RetinaNet一致:使用SGD迭代90K次,初始学习率:0.01,batch size为16,迭代60K和80K时,学习率除以10, 权重衰减(Weight decay):0.0001,动量(momentum):0.9,输入图像被缩放到最小边为800,最大边小于等于1333。

同其他模型对比,Anchor-Free思想对小目标仍是有效的。

(算法实验结果对比)

通过实验结果可以看出,FCOS在各类场景,包括拥挤、遮挡、重叠,大目标和小目标等都有很好的检测效果。

(可视化实验结果)

拿code搞事情

论文开源了pytorch代码,基于maskrcnn-benchmark进行改进,因此它的安装与原始的Mask R-CNN一致,源码仓库INSTALL.md有详细安装介绍。

配置环境:win10 + Anaconda3 + pytorch1.2.0pytorch1.1.0+ CUDA10.0

安装依赖库:

pip install ninja yacs cython matplotlib tqdm opencv-python

安装C++编译环境: cl.exe

安装cocoapi

cd $INSTALL_DIRgitclone /cocodataset/cocoapi.gitcd cocoapi/PythonAPIpython setup.py build_ext install # 需要编译# 失败的话,通过以下方式安装pip install git+/philferriere/cocoapi.git#subdirectory=PythonAPI

进入FCOS目录,编译fcos和fcos_core

python setup.py build develop --no-deps

出现以下错误

据说是不支持pytorch1.2.0

重新配置虚拟环境安装:

# 创建FCOS环境conda create --name FCOS python=3.6conda activate FCOS# 安装pytorch 1.1.0 &torchvisionpip install /whl/cu100/torch-1.1.0-cp36-cp36m-win_amd64.whlpip install torchvision==0.2.1# 重新上述步骤

下载模型,执行demo

# assume that you are under the root directory of this project,# and you have activated your virtual environment if needed.wget https://cloudstor.aarnet.edu.au/plus/s/ZSAqNJB96hA71Yf/download -O FCOS_imprv_R_50_FPN_1x.pthpython demo/fcos_demo.py

Bingo,demo检测结果如下:

接下来,就开始训练自己的数据吧……

长按二维码关注我们

有趣的灵魂在等你

留言请摁

如果觉得《真正意义的Anchor-Free FCOS目标检测算法了解一下》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。