PaddleDetection中一些特色模型介绍

2023-11-11

CBNet

论文题目:CBNet: A Novel Composite Backbone Network Architecture for Object Detection
论文地址:https://arxiv.org/abs/1909.03625
骨干网络对于检测网络的模型性能至关重要,但是大部分的骨干网络设计完成之后都需要首先在imagenet数据集上训练,得到的模型作为检测网络的预训练模型,该论文中,作者基于已有的骨干网络进行组合,最终实现一种新的骨干网络,同时验证了它在目标检测任务中的性能,在coco test-dev测试集上基于多尺度测试,达到了53.3%的精度指标。
论文提出的检测网络结构如下,其中用K个相同的结构进行联结,生成新的骨干网络,以ResNet结构为例,K=2时,为Dual-ResNet,K=3时,为Triple-ResNet。

在这里插入图片描述

论文中验证了骨干网络的不同的联结方式及其对应的检测精度指标,如下所示。

在这里插入图片描述

不同结构对应的精度指标如下。最终AHLC这种连接方式在CBNet被验证最为有效,通过和上图©中的ALLC的对比,也验证了单纯地通过添加网络参数并不能提升模型性能,和(d)中的ADLC对比,验证了特征图之间的信息融合方式也很重要。

在这里插入图片描述

论文中也验证了骨干网络权重共享、快速版CBNet、骨干网络的数量K对检测性能的影响,主要得到了以下结论

  1. 即使使用骨干网络权重不共享的方式,使用CBNet也能带来1%的绝对精度提升,这也验证了CBNet带来的精度提升更多地是因为网络结构而非参数量。
  2. 减少AHLC的连接数量,仅将C4和C5引入到下一个ResNet的骨干网络中,仍然可以带来1.4%的精度提升,这比C2~C5全部全部引入低0.2%,但是速度却快了约20%。
  3. 骨干网络堆叠的数量K在K>=3时,带来的收益逐渐减小,因此建议K=2或3,可以在速度和精度方面做比较好的权衡。

更加详细的实验与结论可以参考论文中的实验部分。目前Paddle已经开源基于ResNet的CBNet模型,实现代码可以参考:https://github.com/PaddlePaddle/PaddleDetection/blob/master/ppdet/modeling/backbones/cb_resnet.py

此外,基于CBNet,PaddleDetection也开源了coco val2017验证集53.3%的单模型单尺度检测模型:https://github.com/PaddlePaddle/PaddleDetection/blob/master/configs/dcn/cascade_rcnn_cbr200_vd_fpn_dcnv2_nonlocal_softnms.yml

IOU loss之GIOU/DIOU/CIOU loss

GIOU loss

论文题目:Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression
论文地址:https://arxiv.org/abs/1902.09630

IOU是论文中十分常用的指标,它对于物体的尺度并不敏感,在之前的检测任务中,常使用smooth l1 loss计算边框loss,但是该种方法计算出来的loss一方面无法与最终的IOU指标直接对应,同时也对检测框的尺度较为敏感,因此有学者提出将IOU loss作为回归的loss;但是如果IOU为0,则loss为0,同时IOU loss也没有考虑物体方向没有对齐时的loss,该论文基于此进行改进,计算GIOU的方法如下。

在这里插入图片描述

最终GIOU loss为1-GIOU所得的值。具体来看,IOU可以直接反映边框与真值之间的交并比,C为能够包含A和B的最小封闭凸物体,因此即使A和B的交并比为0,GIOU也会随着A和B的相对距离而不断变化,因此模型参数可以继续得到优化。在A和B的长宽保持恒定的情况下,两者距离越远,GIOU越小,GIOU loss越大。
使用GIOU loss计算边框损失的流程图如下。

在这里插入图片描述

PaddleDetection也开源了基于faster rcnn的GIOU loss实现。使用GIOU loss替换传统的smooth l1 loss,基于faster rcnn的resnet50-vd-fpn 1x实验,coco val mAP能由38.3%提升到39.4%(没有带来任何预测耗时的损失):https://github.com/PaddlePaddle/PaddleDetection/blob/master/configs/iou_loss/README.md

论文题目:Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression

论文地址:https://arxiv.org/abs/1911.08287

GIOU loss解决了IOU loss中预测边框A与真值B的交并比为0时,模型无法给出优化方向的问题,但是仍然有2种情况难以解决,

  1. 当边框A和边框B处于包含关系的时候,GIOU loss退化为IOU loss,此时模型收敛较慢。
  2. 当A与B相交,若A和B的的x1与x2均相等或者y1与y2均相等,GIOU loss仍然会退化为IOU loss,收敛很慢。

基于此,论文提出了DIOU loss与CIOU loss,解决收敛速度慢以及部分条件下无法收敛的问题。
为加速收敛,论文在改进的loss中引入距离的概念,具体地,边框loss可以定义为如下形式:

在这里插入图片描述

其中在这里插入图片描述是惩罚项,考虑预测边框与真值的距离损失时,惩罚项可以定义为

在这里插入图片描述

其中在这里插入图片描述表示预测框与真值边框中心点的欧式距离,c表示预测框与真值边框的最小外包边框的对角长度。因此DIOU loss可以写为

在这里插入图片描述

相对于GIOU loss,DIOU loss不仅考虑了IOU,也考虑边框之间的距离,从而加快了模型收敛的速度。但是使用DIOU loss作为边框损失函数时,只考虑了边框的交并比以及中心点的距离,没有考虑到预测边框与真值的长宽比差异的情况,因此论文中提出了CIOU loss,惩罚项添加关于长宽比的约束。具体地,惩罚项定义如下

在这里插入图片描述

其中v为惩罚项,α为惩罚系数,定义分别如下

在这里插入图片描述

CIOU loss使得在边框回归时,与目标框有重叠甚至包含时能够更快更准确地收敛。
在NMS阶段,一般的阈值计算为IOU,论文使用了DIOU修正后的阈值,检测框得分的更新方法如下。

在这里插入图片描述

这使得模型效果有进一步的提升。
PaddleDetection已经开源了基于faster rcnn的GIOU loss、DIOU/CIOU loss实现代码以及相关模型,具体可以参考:https://github.com/PaddlePaddle/PaddleDetection/tree/master/configs/iou_loss

Nonlocal

论文名称:Non-local Neural Networks
论文地址:https://arxiv.org/abs/1711.07971
卷积操作的感受野一般即为卷积核大小,它们只考虑局部区域,这减少了网络的计算量,但是却使得网络难以获取全局特征图信息。论文中设计了一个模块,很好地解决了局部卷积操作无法看清全局的问题,为后面的卷积计算引入更丰富的特征信息,并在视频分类与目标检测等任务中验证了其性能。
按照非局部均值的定义,卷积网络中的CNN定义如下

在这里插入图片描述

其中x与y表示输入与输出,f用于计算x_i与x_j的相似度,g则为点的特征计算函数,C(x)为归一化因子。为了保证Nonlocal可以作为一个组件方便地放入神经网络中,输入输出的形状是相同的。
Nonlocal结构如下图所示。

在这里插入图片描述

给定输入的特征图x,生成θ, ψ用于嵌入,使用1*1的卷积用于特征计算。为加快模型收敛,使Nonlocal模块参数更容易学习,在这里使用了残差块的形式,使得Nonlocal只需要去学习残差项;Nonlocal的计算量很大,为减少计算量,这里在生成θ, ψ与g时,可以进行通过减少通道数,减小Nonlocal计算量(图中是将中间层计算的通道数减少为输入输出通道数的一半)。

PaddleDetection开源了Nonlocal模块,并在ResNet骨干网络以及LibraRCNN中验证了其性能。基于PaddlePaddle的Nonlocal实现具体可以参考:https://github.com/PaddlePaddle/PaddleDetection/blob/master/ppdet/modeling/backbones/nonlocal_helper.py

在这里插入图片描述

SNL的网络输出计算如下

在这里插入图片描述

为进一步减少计算量,将W_v提取到attention pooling计算的外面,表示为

在这里插入图片描述

对应结构如下所示。通过共享attention map,计算量减少为之前的1/WH。

在这里插入图片描述

SNL模块可以抽象为上下文建模、特征转换和特征聚合三个部分,特征转化部分有大量参数,因此在这里参考SE的结构,最终GC block的结构如下所示。使用两层降维的1*1卷积降低计算量,由于两层卷积参数较难优化,在这里加入layer normalization的正则化层降低优化难度。

在这里插入图片描述

该模块可以很方便地插入到骨干网络中,提升模型的全局上下文表达能力,可以提升检测和分割任务的模型性能,PaddleDetection实现并开源了该模块,具体的模型性能与配置可以参考:https://github.com/PaddlePaddle/PaddleDetection/blob/master/configs/gcnet

Libra RCNN

论文名称:Libra R-CNN: Towards Balanced Learning for Object Detection
论文地址:https://arxiv.org/abs/1904.02701

检测模型训练大多包含3个步骤:候选区域生成与选择、特征提取、类别分类和检测框回归多任务的训练与收敛。
论文主要分析了在检测任务中,三个层面的不均衡现象限制了模型的性能,分别是样本(sample level)、特征(feature level)以及目标级别(objective level)的不均衡,提出了3种方案,用于解决上述三个不均衡的现象。三个解决方法如下。

IoU-balanced Sampling

Faster RCNN中生成许多候选框之后,使用随机的方法挑选正负样本,但是这导致了一个问题:负样本中有70%的候选框与真值的IOU都在0~0.05之间,分布如下图所示。使用在线难负样本挖掘(OHEM)的方法可以缓解这种情况,但是不同IOU区间的采样样本仍然差距仍然比较大,而且流程复杂。作者提出了均衡的负样本采样策略,即将IOU阈值区间分为K份,在每个子区间都采样相同数量的负样本(如果达不到平均数量,则取所有在该子区间的样本),最终可以保证采样得到的负样本在不同的IOU子区间达到尽量均衡的状态。这种方法思路简单,效果也比OHEM要更好一些。

在这里插入图片描述

Balanced Feature Pyramid(BFP)

之前的FPN结构中使用横向连接的操作融合骨干网络的特征,论文中提出了一个如下图,主要包括rescaling, integrating, refining and strengthening,共4个部分。首先将不同层级的特征图缩放到同一尺度,之后对特征图进行加权平均,使用Nonlocal模块进一步提炼特征,最终将提炼后的特征图进行缩放,作为残差项与不同层级的特征图相加,得到最终输出的特征图。这种平衡的特征图金字塔结构相对于标准的FPN在coco数据集上可以带来0.8%左右的精度提升。

在这里插入图片描述

Balanced L1 Loss

物体检测任务中,需要同时优化分类loss与边框的回归loss,当分类得分很高时,即使回归效果很差,也会使得模型有比较高的精度,因此可以考虑增加回归loss的权重。假设bbox loss<=1的边框为inliers(可以被视为简单的样本),bbox loss>1的边框为outliers(可以被视为难样本),假设直接调整所有边框的回归loss,这会导致模型对outliers更加敏感,而且基于smooth l1 loss的边框loss计算方法有以下缺点,当边框为inliers时,其梯度很小,当边框为outliers时,梯度幅值为1。smooth l1 loss的梯度计算方法定义如下。

在这里插入图片描述

因此论文考虑增加inliers的梯度值,尽量平衡inliers与outliers的loss梯度比例。最终Libra loss的梯度计算方法如下所示。

在这里插入图片描述

在不同的超参数下,梯度可视化如下图所示。

在这里插入图片描述

可以看出Libra loss与smooth l1 loss对于outliers的梯度是相同的,但是在inliers中,Libra loss的梯度更大一些,从而增大了不同情况下的边框回归loss,平衡了难易边框学习的loss,同时也提升了边框回归效果对检测模型性能的影响。
论文将3个部分融合在一起,在coco两阶段目标检测任务中有1.1%~2.5%的绝对精度提升,效果十分明显。PaddleDetection也实现并开源了Libra RCNN,配置与相关模型可以参考:https://github.com/PaddlePaddle/PaddleDetection/tree/master/configs/libra_rcnn

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PaddleDetection中一些特色模型介绍 的相关文章

  • msys2使用QT的mingw编译器编译ffmpeg

    使用的时候最好关闭杀毒软件 否则configure和make会很慢 window编译ffmpeg mingw 要在windows搭建一个模拟linux环境 下载安装MSYS2 64 网址 https www msys2 org 我这里安装在
  • linux中git安装步骤,linux配置安装 git 详细教程

    Git是目前流行的非常好用的版本控制工具 这里介绍两种安装方式 1 yum安装 2 从github上下载最新的源码编译后安装 一 环境介绍 系统 linux 镜像 CentOS 7 x86 64 DVD 1804 iso 二 源码安装 1
  • linux中命令du -sm,Linux中的Du命令

    du命令是 disk usage 的缩写 展示文件或目录使用的估计磁盘空间量 这对于查找占用大量磁盘空间的文件和目录很有用 如何使用du命令 du命令的常规语法如下 du OPTIONS FILE 如果给定的FILE是目录 du则将汇总该目
  • hibernate 根据实体类自动生成表

    常规的思路是 设计好数据库 建好表 借助MyEclipse 也可以是其他IDE 自动生成映射 或者自己写映射 早就听说hibernate中可以自动生成表 但是一直没有试验 今天首先介绍其中的一个属性hbm2ddl auto 这个就是这个方案

随机推荐

  • 与老范对谈:ChatGPT等AIGC技术对内容产业的影响和趋势判断

    昨日 我和老范线下面基 用一下午的时间深入探讨了AIGC对内容产业影响的话题 这次聊天收获满满 我迫不及待将这次讨论的内容整理成了文章 但在这之前 请让我先介绍一下老范 老范曾就职于盛大创新院 猎豹移动 是Tiktok的早期投资人 是一名互
  • 手里有几万块能做什么副业?一万块钱搞什么副业

    最近几年来 兼职 副业已经成为大家的刚需了 否则上班的收入已经满足不了开支了 我相信很多人手上都有1万元或者2万元左右甚至更多的闲钱 那么 有闲钱可以干什么 手上有一万元能投资做什么 1 做微商 微商可以说是近些年最热门的职业之一了 你既可
  • IDEA常用配置之代码自动格式化删除无用导入

    文章目录 IDEA常用配置之代码自动格式化删除无用导入 配置步骤 安装google java format 安装Save Actions 自动优化导包选项 检查行分隔符 缩进大小 IDEA常用配置之代码自动格式化删除无用导入 配置步骤 安装
  • Mac安装brew

    终极方法 不需要代理 百分百成功运行 bin zsh c curl fsSL https gitee com cunkai HomebrewCN raw master Homebrew sh 运行结果如下
  • AD 多边形 圆形 快速覆铜

    1 先确认你的板框 如下图 在Keep Out Layer 层 使用shift S键隐藏其他的层 2 全选板框 按T G M 输入法英文状态下 或手动选择 工具 多边形填充 多边形管理器 进入下图状态 选择图上标志的地方 选择板外形 如下图
  • 机器学习 day35(决策树)

    决策树 上图的数据集是一个特征值X采用分类值 即只取几个离散值 同时也是一个二元分类任务 即标签Y只有两个值 上图为之前数据集对应的决策树 最顶层的节点称为根节点 椭圆形节点称为决策节点 矩形节点称为叶子节点 决策树学习算法的工作是 在所有
  • Jetson Nano 40 pin 功能介绍

    40 根引脚主要分成GPIO General Purpose I O 通用功能与SFIO Special Function I O 特定功能 一 SFIO 18根 1 5V 直流电输入 输出 脚位 2 4 在排针脚塑料使用 红色 标识 2根
  • Java SE 16 record 类型说明与使用

    Java SE 16 record 类型说明与使用 作者 Grey 原文地址 博客园 Java SE 16 record 类型说明与使用 CSDN Java SE 16 record 类型说明与使用 说明 record 是 Java SE
  • Python3 爬取PAT个人乙级题所有答案代码

    Python3 爬取PAT个人乙级题所有答案 进入PAT乙级题题目页面 下面是链接 https pintia cn problem sets 994805260223102976 problems type 7 点开两个题目 观察两个链接有
  • 实验吧——认真一点!

    coding utf8 import requests import urllib 设置代理 用于调试过程中抓包分析 proxies http http localhost 9008 https http localhost 9008 he
  • 使用eclipse快速全局替换指定字符串

    1 按住 Ctrl H 调出全局搜索框 选择 File Search 文件搜索栏 2 输入需要搜索的字段和文件类型 点击下方的 Replace 按钮 如果搜索到对应的结果 则会弹出替换界面 此时输入需要替换的字段即可 具体操作如下图所示
  • Vue2 新手上路无处不在的特殊符号,让人傻傻分不清 “:”、“.”、“@”、“#” 、“{{}}“ 、“$“,‘$bus‘,‘$event‘

    背景 刚刚学vue没多久 经常分不清情况什么时候用什么符号 是指令 v bind 的缩写 是修饰符 是指令 v on 的缩写 它用于监听 DOM 事件 是v slot的缩写 插值语法 Vue 实例还暴露了一些有用的实例属性与方法 它们都有前
  • SG-Former:具有进化Token重新分配的自引导Transformer

    文章目录 摘要 1 简介 2 相关研究 3 方法 3 1 概述 3 2 自引导注意力 3 3 混合尺度注意力 3 4 Transformer块 3 5 Transformer架构变体 4 实验 4 1 ImageNet 1K的分类 4 2
  • TensorRT C++ 序列化serialize / 反序列化deserialize

    序列化Engine serialize the engine then close everything down const std string engine file tensorrt mnist trt nvinfer1 IHost
  • [数据结构复习]广义表

    1 形式 类似于 A B C D E F 2 广义表的存储 链表 每个节点的结构为 type 0表示附加头节点 1表示原子节点 2表示子表节点 data type 0时存放引用计数 1时存放data 2时存放指向子表表头的指针 link t
  • laravel middleware 中间件原码分析 之array_reduce getSlice

  • Linux下Git与GitHub的零基础快速入门(一)

    一 写在前面 Git 是一个开源的分布式版本控制系统 用于敏捷高效地处理任何或小或大的项目 GitHub是一个面向开源及私有软件项目的托管平台 因为只支持Git作为唯一的版本库格式进行托管 故名GitHub 基本功能作为开源代码库以及版本控
  • Win10 DNS解析失败解决方法

    概要 最近在使用win10系统的过程中 无法获取dns报错 上不了网 经过一番折腾 最终在用下面 的方法 解决了问题 第二步很关键 完成步一下步骤重启电脑应该就可以上网了 第一步 使用 ipconfig flushdns 命令刷新DNS解析
  • mysql的事务

    事务是什么 事务将数据库从一种一致性状态转换为另一种一致性状态 事务可由一条非常简单的SQL语句组成 也可以由一组复杂的SQL语句组成 在数据库提交事务时 可以确保要么所有修改都已经保存 要么所有修改都不保存 事务是访问并更新数据库各种数据
  • PaddleDetection中一些特色模型介绍

    CBNet 论文题目 CBNet A Novel Composite Backbone Network Architecture for Object Detection 论文地址 https arxiv org abs 1909 0362