热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《CornerNet:DetectingObjectsasPairedKeypoints》论文笔记

1.概述这篇文章提出了CornerNet的目标检测模型,该模型是一个直通检测检测模型,与FasterRCNN那种两阶段的检测模型不一样,
1. 概述

这篇文章提出了CornerNet的目标检测模型,该模型是一个直通检测检测模型,与Faster RCNN那种两阶段的检测模型不一样,更类似于SSD与YOLO。但是与SSD等模型不同的是其并不使用anchor boxes,而是提出了一种叫做corner pooling的操作帮助网络更好地定位目标。在COCO数据集上的表现性能超过了所有现有的检测网路。
anchor boxes机制在现有两阶段以及直通检测网络模型中被广泛使用,这些模型中也是通过anchor的检出来进行边界的回归。但是anchor也会带来其的缺点,该文章中大体给出了两点:
1)通常需要大量的anchor,在DSSD中需要40k,而在RetinaNet中则需要100k。这么大量的anchor就带来了正例anchor的数量与负例anchor的比例及其不成比例,从而降低了网络的训练速度。
2)anchor boxes的引入带来了许多的超参数,并且需要进行细致设计。包括anchor boxes的数量、尺寸、长宽比例。特别是在单一网络在多尺度进行预测的情况下会变得复杂,每个尺度都需要独立设计。
下图是这篇文章中使用的网络结构可以描述为:
在这里插入图片描述
在该方法中舍弃传统的anchor boxes思路,提出CornerNet模型预测目标边界框的左上角和右下角一对顶点。使用单一卷积模型生成热点图和连接矢量:所有目标的左上角和所有目标的右下角热点图,每个顶点的连接矢量(embedding vector)。也就是该方法在卷积的输出结果上,分别预测边界框的左上角与右下角,之后寻找它们之间的对应关系。

主要思路其实来源于一篇多人姿态估计的论文。基于CNN的2D多人姿态估计方法,通常有2个思路(Bottom-Up Approaches和Top-Down Approaches):
Top-Down framework:就是先进行行人检测,得到边界框,然后在每一个边界框中检测人体关键点,连接成每个人的姿态,缺点是受人体检测框影响较大,代表算法有RMPE;
Bottom-Up framework:就是先对整个图片进行每个人体关键点部件的检测,再将检测到的人体部位拼接成每个人的姿态,代表方法就是openpose。

在文章中给出了两个创新点:
1)文章将目标检测上升到方法论,基于多人姿态估计的Bottom-Up思想,首先同时预测定位框的顶点对(左上角和右下角)热点图和embedding vector,根据embedding vector对顶点进行分组,论文中提到分组的依据是同目标的两个角点距离是很小的。
2)文章提出了corner pooling用于定位顶点。自然界的大部分目标是没有边界框也不会有矩形的顶点,依top-left corner pooling 为例,对每个channel,分别提取特征图对应位置处的水平和垂直方向的最大值,然后求和。
在这里插入图片描述
3)文中提出的CornerNet模型基于hourglass架构,使用focal loss的变体训练神经网络。

为什么基于角点的检测要比基于anchor boxes的检测效果更好,这里假设了两个原因:
1)anchor boxes的中心是依赖于目标的四条边,但是角点却只需要两个边,而且还是使用了corner pooling,因而表现比anchor好。
2)采用了更加高效的空间检测框机制,这里只使用O(w∗h)O(w*h)O(wh)个角点就代表了O(W2∗h2)O(W^2*h^2)O(W2h2)的可能检测框。

2. CornerNet

CornerNet的整体结构:
在这里插入图片描述
上面的图中给出的是CornerNet的网络结构图,可以看出CornerNet模型架构包含三部分,Hourglass Network,Bottom-right corners&Top-left Corners Heatmaps和Prediction Module。
其中Hourglass Network是人体姿态估计的典型架构,论文堆叠两个Hourglass Network生成Top-left和Bottom-right corners,每一个corners都包括corners Pooling,以及对应的Heatmaps, Embeddings vector和offsets(为了提升框的精度)。embedding vector使相同目标的两个顶点(左上角和右下角)距离最短, offsets用于调整生成更加紧密的边界定位框。最后预测框也是在这三个生成的结果的基础上使用后处理算法进行实现的。

2.1 Detecting Corners

Paper模型生成的heatmaps包含C channels(C是目标的类别,没有background channel),每个channel是二进制掩膜,表示相应类别的顶点位置。
在这里插入图片描述
对于每个顶点,只有一个ground-truth,其他位置都是负样本。但是网络的输出并不会从开始就与上图标注的绿色虚线重合,因而是按照了一定的策略来进行组合的。具体来讲是这样的:在训练过程,模型减少负样本,在每个ground-truth顶点设定半径r区域内都是正样本,这是因为落在半径r区域内的顶点依然可以生成有效的边界定位框,论文中设置IoU=0.7IoU=0.7IoU=0.7。那么对于与实际的定位有偏移的网络输出论文使用了惩罚,是按照没有归一化的而为高斯函数e−x2+y22σ2e^{-\frac{x^2+y^2}{2\sigma^2}}e2σ2x2+y2设置的,其中σ=13\sigma=\frac{1}{3}σ=31,中心坐标是标注的角点定位。
pcijp_{cij}pcij表示类别为c,坐标是(i,j)(i,j)(i,j)的预测热点图,ycijy_{cij}ycij表示相应位置的ground-truth,其指融合了前面的提到的高斯半径。论文提出变体Focal loss表示检测目标的损失函数:
在这里插入图片描述
其中参数NNN是图片中目标的总数,参数α=2\alpha=2α=2β=4\beta=4β=4适用于控制每个部分的贡献程度。
在卷积神经网络中存在着下采样层,这样从原始的图像输入到最后的heatmap产生的这个过程会累计误差,特别是在对一些小目标的物体进行检测的时候,这样的误差就无法接受了,因而文章引入了偏移修正来修正它:
在这里插入图片描述
然后使用L1损失与原图标注的位置对其进行修正:
在这里插入图片描述
最后的网络损失函数是上面的几个相加的形式:
在这里插入图片描述
其中,α=β=0.1,γ=1\alpha=\beta=0.1,\gamma=1α=β=0.1,γ=1

2.2 Grouping Corners

输入图像会有多个目标,相应生成多个目标的左上角和右下角顶点。对顶点进行分组,论文引入Associative Embedding的思想,模型在训练阶段为每个corner预测相应的embedding vector,通过embedding vector使同一目标的顶点对距离最短,即是模型可以通过embedding vector为每个顶点分组。
模型训练Lpull损失函数L_{pull}损失函数Lpull使同一目标的顶点进行分组, Lpush损失函数L_{push}损失函数Lpush用于分离不同目标的顶点。etke_{tk}etk是左下角的顶点,ebke_{bk}ebk是右下角的顶点。
在这里插入图片描述

2.3 Corner Pooling


2.3.1 top-left corner

一般来说在heatmap上并不存在直观的选择依据,因而文章中采用了corner pooling的方法。对于在左上角的角点(顶点)使用其在水平与垂直方向上分分别使用max pooling,然后对其结果合并来实现角点的定位,其运算流程可以通过下面这幅图来进行说明
在这里插入图片描述
对于要判定点(x,y)(x,y)(x,y)是不是左上角的角点, 这里使用ftf_tftflf_lfl去代表这个左上角点pooling layer的特征图,使用fti,jf_{t_{i,j}}fti,jfli,jf_{l_{i,j}}fli,j来代表在位置(i,j)(i,j)(i,j)ftf_tftflf_lfl的特征向量。对于输入大小为W∗HW*HWH大小的特征图,计算位置(i,j)(i,j)(i,j)处到(i,H)(i,H)(i,H)ftf_tft的向量ti,jt_{i,j}ti,j,计算位置(i,j)(i,j)(i,j)处到(j,W)(j,W)(j,W)flf_lfl的向量li,jl_{i,j}li,j,最后再将两个加起来作为最后的输出。
在这里插入图片描述

2.3.2 bottom-right corner

bottom-right corner的计算与上面top-left的计算是类似的。它在(0,j)(0,j)(0,j)(i,j)(i,j)(i,j)的特征图与(i,0)(i,0)(i,0)(i,j)(i,j)(i,j)的特征图上进行最大池化操作之后再将两者得到的结果相加得到最后的结果。

2.3.3 预测模块

预测模块使用的结构使用ResNet与卷积组合的形式,其结构(top-left corner部分)如下。最后预测生成Heatmap、Embeddings、Offsset。
在这里插入图片描述

2.4 Hourglass Network

Hourglass Network同时包含了bottom-up(from high resolutions to low resolutions)和top-down (from low resolutions to high resolutions)。而且,整个网络有多个bottom-up和top-down过程。这样设计的目的是在各个尺度下抓取信息。针对目标检测任务,论文调整了Hourglass一些策略。

3. 论文效果

在这里插入图片描述
**PS:**在这篇文章涉及到了SHM(Stack Hourglass Model),不了解的小伙伴可以参考这篇文章快速了解:Stacked Hourglass Networks - 堆叠沙漏网络结构详解


推荐阅读
  • web页面报表js下载,web报表软件 ... [详细]
  • 本文探讨了数据结构与算法之间的关系,从基本概念入手,逐步解析二者如何相辅相成,共同构建高效的计算机程序。文中结合实际案例,对数据结构和算法进行了详细说明,并提出了一些思考问题。 ... [详细]
  • 本文探讨了SSD购买后是否需要进行4K对齐的问题,并详细解释了4K对齐的原理及其重要性。通过对比机械硬盘与固态硬盘的结构,文章深入分析了4K对齐对SSD性能的影响,并提供了具体的对齐方法。 ... [详细]
  • 【转】强大的矩阵奇异值分解(SVD)及其应用
    在工程实践中,经常要对大矩阵进行计算,除了使用分布式处理方法以外,就是通过理论方法,对矩阵降维。一下文章,我在 ... [详细]
  • 自动驾驶中的9种传感器融合算法
    来源丨AI修炼之路在自动驾驶汽车中,传感器融合是融合来自多个传感器数据的过程。该步骤在机器人技术中是强制性的,因为它提供了更高的可靠性、冗余性以及最终的 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • 高端存储技术演进与趋势
    本文探讨了高端存储技术的发展趋势,包括松耦合架构、虚拟化、高性能、高安全性和智能化等方面。同时,分析了全闪存阵列和中端存储集群对高端存储市场的冲击,以及高端存储在不同应用场景中的发展趋势。 ... [详细]
  • 本文介绍了如何处理在Xcode构建过程中出现的多个命令生成相同文件的问题,特别是当这些文件与Info.plist无关时。 ... [详细]
  • 非计算机专业的朋友如何拿下多个Offer
    大家好,我是归辰。秋招结束后,我已顺利入职,并应公子龙的邀请,分享一些秋招面试的心得体会,希望能帮助到学弟学妹们,让他们在未来的面试中更加顺利。 ... [详细]
  • 本文将带你快速了解 SpringMVC 框架的基本使用方法,通过实现一个简单的 Controller 并在浏览器中访问,展示 SpringMVC 的强大与简便。 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 优化后的标题:深入探讨网关安全:将微服务升级为OAuth2资源服务器的最佳实践
    本文深入探讨了如何将微服务升级为OAuth2资源服务器,以订单服务为例,详细介绍了在POM文件中添加 `spring-cloud-starter-oauth2` 依赖,并配置Spring Security以实现对微服务的保护。通过这一过程,不仅增强了系统的安全性,还提高了资源访问的可控性和灵活性。文章还讨论了最佳实践,包括如何配置OAuth2客户端和资源服务器,以及如何处理常见的安全问题和错误。 ... [详细]
author-avatar
歪歪Doris
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有