IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 经典的目标检测算法:CenterNet -> 正文阅读

[人工智能]经典的目标检测算法:CenterNet

本文首发于微信公众号【DeepDriving】,欢迎关注。

主要思想

将目标检测当做一个标准的关键点估计问题,将目标表示为一个在其bounding box中心位置的单独点,其他的一些属性比如目标尺寸、维度、朝向和姿态等则直接从这个中心点位置的图像特征中进行回归。该模型将图像输入到一个全卷积网络中用来生成热力图,热力图的峰值位置即为目标的中心,每个峰值位置的图像特征用来预测目标bounding box的宽度和高度。该模型训练过程采用标准的监督学习方法,推理过程则是简单的网络前向传播而不需要在后处理中做非极大值抑制。
本文提出的是一个通用的目标检测方法,只需要在中心点的预测中添加一些额外的内容就可以非常简单地扩展到其他任务中去,比如3D目标检测和人体姿态估计。对于3D目标检测任务,本文是通过回归目标的绝对深度、3D bounding box维度和目标的朝向来实现的;而对于人体姿态估计任务,则是将2D关节位置视为距中心点的偏移量,并且在中心点位置直接回归得到它们。

在这里插入图片描述

原理

输入一张宽高分别为W和H的3通道图像 I ∈ ? W × H × 3 I\in \Re^{W\times H\times 3} I?W×H×3,CenterNet模型会输出关键点的热点图 Y ^ ∈ [ 0 , 1 ] W R × H R × C \hat{Y} \in \left [ 0,1 \right ] ^{\frac{W}{R}\times \frac{H}{R} \times C} Y^[0,1]RW?×RH?×C,其中R表示热点图相对于输入图像的下采样因子,论文里默认为4;C表示关键点类别的数量,如果是用COCO数据集训练的2D目标检测任务那么C=80,如果是人体姿态估计任务那么C=17。在热点图中, Y ^ x , y , c = 1 \hat{Y}_{x,y,c}=1 Y^x,y,c?=1 表示在(x,y)坐标位置检测到一个类别为c的关键点;反之,如果 Y ^ x , y , c = 0 \hat{Y}_{x,y,c}=0 Y^x,y,c?=0 表示在该位置不存在类别为c的关键点。

作者采用ResNet、DLA、Hourglass等几种不同的编码-解码结构的全卷积神经网络从图像 I I I中预测关键点 Y ^ \hat{Y} Y^,训练方式沿用CornerNet的方法。对于ground truth中每个类别为c的关键点 p ∈ ? 2 p\in \Re^{2} p?2,需要在下采样R倍后的热点图上计算一个等效的关键点 p ~ = ? p R ? \tilde{p} =\left \lfloor \frac{p}{R} \right \rfloor p~?=?Rp??:通过一个高斯核函数 Y x y c = e x p ( ? ( x ? p x ~ ) 2 + ( y ? p y ~ ) 2 2 δ p 2 ) Y_{xyc} =exp(-\frac{(x-\tilde{p_{x}} )^{2}+(y-\tilde{p_{y}} )^{2}}{2\delta _{p}^{2} } ) Yxyc?=exp(?2δp2?(x?px?~?)2+(y?py?~?)2?),把ground truth中所有的关键点映射到热点图 Y ∈ [ 0 , 1 ] W R × H R × C Y \in \left [ 0,1 \right ] ^{\frac{W}{R}\times \frac{H}{R} \times C} Y[0,1]RW?×RH?×C中,其中 δ p \delta _{p} δp?是一个与目标尺寸有关的标准差。如果某个类别的两个高斯分布区域存在重叠,那么就直接取元素值最大的就可以。

对于一个类别为 c k c_{k} ck?的目标 k k k,我们通常会用一个坐标为 ( x 1 ( k ) , y 1 ( k ) , x 2 ( k ) , y 2 ( k ) ) (x_{1}^{(k)},y_{1}^{(k)},x_{2}^{(k)},y_{2}^{(k)}) (x1(k)?,y1(k)?,x2(k)?,y2(k)?)的bounding box来表示它在图像中的位置,那么它的中心点坐标为 p k = ( x 1 ( k ) + x 2 ( k ) 2 , y 1 ( k ) + y 2 ( k ) 2 ) p_{k}=(\frac{x_{1}^{(k)}+x_{2}^{(k)}}{2},\frac{y_{1}^{(k)}+y_{2}^{(k)}}{2}) pk?=(2x1(k)?+x2(k)??,2y1(k)?+y2(k)??)。通过前面的知识我们知道,CenterNet模型就是通过关键点估计的方式来预测所有目标的中心点,但是只有一个中心点还不足以表达一个bounding box,还需要预测出它的尺寸 s k = ( x 2 ( k ) ? x 1 ( k ) , y 2 ( k ) ? y 1 ( k ) ) s_{k}=(x_{2}^{(k)}-x_{1}^{(k)},y_{2}^{(k)}-y_{1}^{(k)}) sk?=(x2(k)??x1(k)?,y2(k)??y1(k)?),所以CenterNet用了一个分支 S ^ ∈ ? W R × H R × 2 \hat{S} \in \Re^{\frac{W}{R}\times \frac{H}{R} \times 2} S^?RW?×RH?×2来预测目标的宽度和高度。为了减少因为下采样带来的中心点坐标精度误差,作者还添加了一个中心点坐标偏置预测分支 O ^ ∈ ? W R × H R × 2 \hat{O} \in \Re^{\frac{W}{R}\times \frac{H}{R} \times 2} O^?RW?×RH?×2来进行补偿。

在这里插入图片描述

在推理阶段,首先从每个类别的热点图中提取峰值点,如果一个点的值大于等于它的8邻域内点的值,那么就认为这个点是一个峰值点,然后从这些候选的峰值点中选取前100个点作为检测到的中心点。对于n个检测到的中心点集合 P ^ = { ( x ^ i , y ^ i ) } i = 1 n \hat{P}=\left \{ (\hat{x}_i,\hat{y}_i) \right \}_{i=1}^{n} P^={(x^i?,y^?i?)}i=1n?中类别为c的中心点 P ^ c \hat{P}_{c} P^c?,它的置信度为 Y ^ x i y i c \hat{Y}_{x_{i}y_{i}c} Y^xi?yi?c?,它的位置则用整型坐标值 ( x i , y i ) (x_{i},y_{i}) (xi?,yi?)来表示,以它为中心点的一个目标的bounding box可以通过下面的公式计算出来:

( x ^ i + δ x ^ i ? w ^ i / 2 , y ^ i + δ y ^ i ? h ^ i / 2 , x ^ i + δ x ^ i + w ^ i / 2 , y ^ i + δ y ^ i + h ^ i / 2 ) (\hat{x}_{i}+\delta\hat{x}_{i}-\hat{w}_{i}/2,\hat{y}_{i}+\delta\hat{y}_{i}-\hat{h}_{i}/2,\hat{x}_{i}+\delta\hat{x}_{i}+\hat{w}_{i}/2,\hat{y}_{i}+\delta\hat{y}_{i}+\hat{h}_{i}/2) (x^i?+δx^i??w^i?/2,y^?i?+δy^?i??h^i?/2,x^i?+δx^i?+w^i?/2,y^?i?+δy^?i?+h^i?/2)

其中, ( δ x ^ i , δ y ^ i ) = O ^ x ^ i , y ^ i (\delta\hat{x}_{i},\delta\hat{y}_{i})=\hat{O}_{\hat{x}_{i},\hat{y}_{i}} (δx^i?,δy^?i?)=O^x^i?,y^?i??是预测的中心点偏置值, ( w ^ i , h ^ i ) = S ^ x ^ i , y ^ i (\hat{w}_{i},\hat{h}_{i})=\hat{S}_{\hat{x}_{i},\hat{y}_{i}} (w^i?,h^i?)=S^x^i?,y^?i??是预测的宽度和高度值。需要注意的是,这里得到的bounding box的坐标只是相对于热点图尺寸的坐标,如果要得到相对于原始图像尺寸的坐标,还需要乘以前面提到的下采样系数 R R R。最终所有的目标信息都是直接通过上述关键点估计的方式得到而不需要基于IoU的非极大值抑制(NMS)或者其他后处理操作,因为峰值关键点选取的过程就是一次充分的NMS操作,这可以通过一个3x3的MaxPooling操作来实现。

损失函数

CenterNet的损失函数分为3个部分:

L d e t = L k + λ s i z e L s i z e + λ o f f L o f f L_{det}=L_{k}+\lambda_{size}L_{size}+ \lambda_{off}L_{off} Ldet?=Lk?+λsize?Lsize?+λoff?Loff?

其中 L k , L s i z e , L o f f L_{k},L_{size},L_{off} Lk?,Lsize?,Loff?分别为中心点预测分支损失函数、尺寸预测分支损失函数和中心点偏置预测分支损失函数,设置 λ s i z e = 0.1 , λ o f f = 1 \lambda_{size}=0.1, \lambda_{off}=1 λsize?=0.1,λoff?=1

中心点预测分支损失函数

该分支损失函数采用focal loss损失函数:

L k = ? 1 N ∑ x y c { ( 1 ? Y ^ x y c ) α log ? ( Y ^ x y c ) i f ? Y x y c = 1 ( 1 ? Y x y c ) β ( Y ^ x y c ) α log ? ( 1 ? Y ^ x y c ) otherwise L_{k}=\frac{-1}{N} \sum_{xyc} \begin{cases} (1-\hat{Y}_{xyc})^{\alpha }\log_{}{(\hat{Y}_{xyc})} & if \, Y_{xyc}=1 \\ (1-Y_{xyc})^{\beta }(\hat{Y}_{xyc})^{\alpha }\log_{}{(1-\hat{Y}_{xyc})} & \text{otherwise} \end{cases} Lk?=N?1?xyc?{(1?Y^xyc?)αlog?(Y^xyc?)(1?Yxyc?)β(Y^xyc?)αlog?(1?Y^xyc?)?ifYxyc?=1otherwise?

其中, α \alpha α β \beta β是focal loss的超参数,分别设置为2和4; N N N是输入图像 I I I中关键点的数量,用于将所有的positive focal loss实例标准化为1。

尺寸预测分支损失函数

该分支的损失函数采用L1损失:

L s i z e = 1 N ∑ k = 1 N ∣ S ^ p k ? s k ∣ L_{size}=\frac{1}{N}\sum_{k=1}^{N}\left |\hat{S}_{p_{k}}-s_{k} \right | Lsize?=N1?k=1N? ?S^pk???sk? ?

中心点偏置预测分支损失函数

该分支的损失函数同样采用L1损失:

L o f f = 1 N ∑ p ∣ O ^ p ~ ? ( p R ? p ~ ) ∣ L_{off}=\frac{1}{N}\sum_{p}\left |\hat{O}_{\tilde{p}} -(\frac{p}{R}-\tilde{p}) \right | Loff?=N1?p? ?O^p~???(Rp??p~?) ?

扩展任务

  • 3D目标检测

3D目标检测就是给每个目标去估计一个3维的bounding box,这需要为每个关键点估计3个额外的属性:深度、3D维度和朝向,这3个属性通过3个独立的分支进行预测。

在这里插入图片描述

  • 人体姿态估计

人体姿态估计的目的是去估计图像中的 k k k个人体实例的关节位置(COCO数据集 k = 17 k=17 k=17)。可以将姿态视为是包含 k × 2 k \times 2 k×2维属性的中心点,并且通过到中心点的偏移量对每个关键点进行参数化,另外还使用一个热点图预测分支用于对关键点进行提纯。

在这里插入图片描述

检测结果

以下是用官方的代码和模型跑出来的一些结果。

2D目标检测

用COCO数据集训练的2D目标检测的结果如下:

在这里插入图片描述

在这里插入图片描述

3D目标检测

用KITTI数据集训练的3D目标检测的结果如下:

在这里插入图片描述

在这里插入图片描述

人体姿态估计

用COCO数据集训练的人体姿态估计的结果如下:

在这里插入图片描述

在这里插入图片描述

总结

读完《Objects as Points》这篇文章,我的感觉是文如其名,简单而又优雅。本文提出的目标检测算法CenterNet,模型结构简单,速度快效果好,而且还方便扩展,实在是佩服作者!

欢迎关注我的公众号【DeepDriving】,我会不定期分享计算机视觉、机器学习、深度学习、无人驾驶等领域的文章。

在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:23:46  更:2022-07-17 16:25:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:22:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码