| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 【2D 目标检测】CornerNet: Detecting Objects as Paired Keypoints -> 正文阅读 |
|
[人工智能]【2D 目标检测】CornerNet: Detecting Objects as Paired Keypoints |
一 核心思想本篇文章提出非常新颖的检测方法,不同于以往的anchor-based的方法,CornerNet是基于一对关键点进行物体的检测的(文中讲的为2D检测方法,因此检测的为左上角和右下角两个点。)。除此之外,本文还提出corner?pooling层,以便更好提取特征。具体算法步骤如下图所示: ?二 核心步骤? 如上图所示,本文的创新点是提出使用一对关键点(也就是相对应的top-left?heatmap和bottom-right?heatmap)来检测出bounding?box,而不是采用anchor-based的方法,为了将两个heatmap图进行相同bounding?box的配对,给每个heatmap输出相应的embedding?vector,只有分别位于embedding?vector上的点的距离相同,才是对应的一对key?point,这对点也就是对应一个object。 当然,本文的创新点还有corner?pooling,不同的heatmap对应不同的corner?pooling。 2.1?Detecting?Corners?? 1、Heatmaps 本部分对应的结构如上图所示,每一个heatmap的维度为,其中C表示预测的类别的个数,heatmap预测的是label?scores。 不过需要注意的是,在训练过程中,作者不同于之前惩罚negative?position,而是在positive?position的半径内减少对negative?position的惩罚。这是因为对于一对false?corners?detection,如果它们接近各自的ground?truth位置,仍然可以产生一个足以重叠ground?truth的框(如下图所示)。 ?给定半径(这个半径的求法比较通用,也就不在此展开。)之后,使用Gaussian?kernel来给出半径内的得分情况(Gaussian kernel为,其中心为positive?location为给定的半径。)。 ?对于heatmap的loss?function,定义为: ?上述公式也就表示在location为(i,j)的第c个类别上,表示预测出的分数,表示该位置上的类别标签,N为一幅图像上的所有object的数量。也就是本文的改进之处,减少在半径内的negative的损失。 ? 2、Embeddings 图像中可能出现多个目标,因此可能检测到多个左上角和右下角。我们需要确定左上角和右下角是否有一对来自同一个边界框。于是又增加一个网络分支预测每个corner?point的嵌入向量,如果左上角和右下角属于同一个边界框,则对应的embeddings上的位置的值趋于相等(原文中说这个值为距离,也就变成了距离相等。维度为)。 然后,我们可以根据左上角和右下角嵌入之间的距离对这些corner?point进行分组。Embeddings上的值并不重要。不同Embeddings上的值只是被用来分类corner?point。 对于Embeddings的loss?function,作者分为pull呵push两个部分,pull对应的是相同组的点的距离要更近,push对应的是不同组的点的距离要更远。 ? ?其中,表示top-left corner of object?k,表示bottom-right?corner?of?object?k;。在反向传播时,只计算ground?truth?corner?location上的损失(也就是)。 ? 3、Offsets 由于下采样的缘故,图像中的位置(x,y)被映射到heatmap中的位置,其中n是下采样因子。这种映射肯定会有损失,因此作者给出的一个分支专门预测offset。对于positive?position处,标签为,反向传播时,loss?function依然只计算positive?position处。Loss?function?为: ? ?2.2 Corner Pooling? ?整个部分也就是上述图中的部分,具体结构见下图,也就是虚线框框起来的部分。 每一个heatmap有着不同的corner?pooling层。 对于top-left?corner?pooling?Module,首先有两个输入feature?map,其宽高分别为W和H。如下图所示,如果对红色点(坐标为(i,j))做corner?pooling的话,第一个feature?map计算(i,j)到(i,H)的最大值;第二个feature?map计算(i,j)到(i,W)的最大值,然后将二者相加得到这个红色点的初步特征。最后根据上述图进行特征的计算得到top-left?corner?pooling?Module的特征。 对于bottom-right?corner?pooling?Module,与上述相似,计算(0,j)到(i,j)的最大值和(i,0)到(i,j)的最大值,然后将二者相加得到这个红色点的初步特征。最后根据上述图进行特征的计算得到bottom-right?corner?pooling?Module的特征。 下图是上述top-left?corner?pooling?Module的一个例子。? ? ? 2.3?Hourglass?Networks这个地方暂时没有进行研究。 三 总结在测试过程中,首先会利用3×3的max?pooling层进行NMS操作,选择前100个top-left?corner和100个bottom-right?corner;计算top-left?corner和bottom-right?corner的embedding?vector时使用L1?distances;对于一对corner点,如果距离大于0.5或者属于不同类别的目标,则不能构成一对;使用0填充图像而不是resize;最后使用soft-nms保存前100个预测结果。 本文创新性使用corner来代替anchor-based的检测方法,提高效率并且效果更佳。 参考文献[1] Law H , ?Deng J . CornerNet: Detecting Objects as Paired Keypoints[J]. International Journal of Computer Vision, 2020, 128(3):642-656. |
|
|
上一篇文章 查看所有文章 |
|
开发:
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/27 10:41:15- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |