论文:Rethinking Counting and Localization in Crowds:A Purely Point-Based Framework

代码:https://github.com/TencentYoutuResearch/CrowdCounting-P2PNet

获取:在公众号CV技术指南中回复关键字“0007”可下载此论文

欢迎关注公众号 CV技术指南 ,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读。

前言:

在人群中定位个体更符合后续高级人群分析任务的实际需求,而不是简单地计数。然而,现有的基于定位的方法依赖于作为学习目标的中间表示(即密度图或伪框)是违反直觉和容易出错的。

论文提出了一个纯粹基于点的框架,用于联合人群计数和个体定位。对于这个框架,论文提出了一个新的度量标准,称为密度归一化平均精度 (density Normalized Average Precision --nAP),而不是仅仅报告图像级别的绝对计数误差,以提供更全面和更精确的性能评估。

此外,论文在这个框架下设计了一个直观的解决方案,称为点对点网络(P2PNet)。P2PNet 丢弃了多余的步骤,直接预测一组point proposals来表示图像中的头部,与人类标注结果一致。通过彻底的分析,论文揭示了实现这种新颖想法的关键步骤是为这些proposals分配最佳学习目标。

P2PNet 不仅在流行的计数基准上显着超越了SOTA方法,而且还实现了有前途的定位精度。

出发点

  1. 在人群分析的所有相关具体任务中,人群计数是一个基本支柱,旨在估计人群中的个体数量。 然而,简单地给出一个数字显然远远不能支持后续更高层次的人群分析任务的实际需求,如人群跟踪、活动识别、异常检测、流量/行为预测等。

  2. 事实上,这个领域有一个明显的趋势,即除了简单的计数之外,更具有挑战性的细粒度估计(即个体的位置)。 具体来说,一些方法将人群计数视为头部检测问题,但在对小尺度头部进行劳动密集型注释上留下了更多的努力。 其他方法试图生成仅提供点注释的头部伪边界框,但这至少看起来很棘手或不准确。 同样试图直接定位个体,有几种方法在抑制或分裂过近的候选实例时陷入困境,由于头部尺度的极端变化,特别是对于高度拥挤的区域,它们容易出错。

  3. 在评估指标方面,一些有远见的工作鼓励采用补丁级别的指标进行细粒度评估,但它们仅提供了对定位的粗略衡量标准。 其他现有的定位感知指标要么忽略了人群中的显着密度变化,要么缺乏对重复预测的惩罚。

创新思路

  1. 为了解决上述问题,论文提出了一个纯粹基于点的框架,用于联合计数和定位人群中的个人。 该框架直接使用点标注作为学习目标,同时输出点来定位个体,受益于点表示的高精度定位特性和相对便宜的标注成本。

  2. 论文提出了一种称为密度归一化平均精度 (density Normalized Average Precision --nAP) 的新指标,为定位和计数错误提供综合评估指标。nAP 指标支持框和点表示作为输入(即预测或注释),没有上述缺陷。

  3. 作为这个新框架下的直观解决方案,论文开发了一种新方法来直接预测一组具有图像中头部坐标及其置信度的point proposals。具体来说,论文提出了一个点对点网络 (P2PNet) 来直接接收一组带标注的头部点用于训练,并在推理过程中预测点。

    为了使这样的想法正确工作,论文深入研究了ground truth target分配过程,以揭示这种关联的关键。结论是,无论是多个proposals 与单个ground truth匹配的情况,还是相反的情况,都会使模型在训练期间混淆,导致高估或低估计数。

    因此,论文建议通过匈牙利算法进行一对一匹配,将point proposals与其ground truth target相关联,未匹配的proposals 应归类为负样本。凭经验表明,这种匹配有利于改进 nAP 指标,作为论文在新框架下解决方案的关键组成部分。这种简单、直观和高效的设计产生了SOTA的计数性能和有前途的定位精度。

Methods

Purely Point-based Framework

这里简要说明这种新框架的思路。给定一个有N个个体的图像,用N个点来表示个体的头部中心点。网络输出两个东西,一个是预测头部的中心点P,一个是该中心点的置信度C。目标是使预测点与ground truth尽可能地接近,并有足够高的置信度。

与传统的计数方法相比,该框架提供的个体位置有助于那些基于运动的人群分析任务,如人群跟踪、活动识别、异常检测等 此外,该框架不依赖于劳动密集型标注、不准确的伪框或棘手的后处理,受益于原始点表示的高精度定位特性,特别是对于人群中高度拥挤的区域。

因此,这个新框架由于其相对于传统人群计数的优势和实用价值而值得更多关注。 然而,由于存在严重的遮挡、密度变化和标注错误,处理这样的任务是非常具有挑战性的 ,这在 [13] 中甚至被认为是理想的但不可行的。

Density Normalized Average Precision

一个预测点 pˆj 只有在它可以匹配到某个ground truth pi 时才被归类为 TP。 匹配过程由基于像素级欧几里德距离的准则 (ˆpj , pi) 指导。 然而,直接使用像素距离来测量亲和度忽略了人群之间大密度变化的副作用。 因此,为此匹配标准引入了密度归一化,以缓解密度变化问题。

简单说来就是引入最近邻K(取3)个点,将它们的距离归一化。

用公式表示如下:

预测与ground truth匹配方案

(a) 在为每个ground truth点选择最近的提议时,多个ground truth点可能与同一个提议匹配,这会导致计数低估。 (b) 在为每个提案选择最近的ground truth时,多个提案可能会与相同的地面实况点匹配,这会导致高估计数。 (c) 论文通过匈牙利算法进行一对一匹配没有以上两个缺陷,因此适合直接点预测。

 P2PNet

P2PNet 的整体架构

建立在 VGG16 之上,它首先引入了一个上采样路径来获得细粒度的深度特征图。 然后它利用两个分支同时预测一组点提议及其置信度分数。pipeline中的关键步骤是确保point proposals和ground truth点之间的一对一匹配,这决定了这些proposals的学习目标。

loss function如下:

Conclusion

 本文来源于公众号 CV技术指南 的论文分享系列。

欢迎关注公众号 CV技术指南 ,专注于计算机视觉的技术总结、最新技术跟踪、经典论文解读。

在公众号中回复关键字 “技术总结” 可获取以下文章的汇总pdf。

其它文章

CV技术指南--精华文章汇总分类

计算机视觉中的自注意力

综述专栏 | 姿态估计综述

漫谈CUDA优化

为什么GEMM是深度学习的核心

使用深度神经网络为什么8位足够?

经典论文系列--胶囊网络:新的深度学习网络

经典论文系列 | 目标检测--CornerNet & 又名 anchor boxes的缺陷

如何看待人工智能的泡沫

使用Dice loss实现清晰的边界检测

PVT--无卷积密集预测的多功能backbone

CVPR2021 | 开放世界的目标检测

Siamese network总结

视觉目标检测和识别之过去,现在及可能

在做算法工程师的道路上,你掌握了什么概念或技术使你感觉自我提升突飞猛进?

计算机视觉专业术语总结(一)构建计算机视觉的知识体系

欠拟合与过拟合技术总结

归一化方法总结

论文创新的常见思路总结

CV方向的高效阅读英文文献方法总结

计算机视觉中的小样本学习综述

知识蒸馏的简要概述

优化OpenCV视频的读取速度

NMS总结

损失函数技术总结

注意力机制技术总结

特征金字塔技术总结

池化技术总结

数据增强方法总结

CNN结构演变总结(一)经典模型

CNN结构演变总结(二)轻量化模型

CNN结构演变总结(三)设计原则

如何看待计算机视觉未来的走向

CNN可视化技术总结(一)特征图可视化

CNN可视化技术总结(二)卷积核可视化

CNN可视化技术总结(三)类可视化

CNN可视化技术总结(四)可视化工具与项目

ICCV2021 |重新思考人群中的计数和定位:一个纯粹基于点的框架的更多相关文章

  1. CVPR2021 | 重新思考BatchNorm中的Batch

    ​ 前言 公众号在前面发过三篇分别对BatchNorm解读.分析和总结的文章(文章链接在文末),阅读过这三篇文章的读者对BatchNorm和归一化方法应该已经有了较深的认识和理解.在本文将介绍一篇关于 ...

  2. iOS中引用计数内存管理机制分析

    在 iOS 中引用计数是内存的管理方式,虽然在 iOS5 版本中,已经支持了自动引用计数管理模式,但理解它的运行方式有助于我们了解程序的运行原理,有助于 debug 程序. 操作系统的内存管理分成堆和 ...

  3. SqlHelper——只因为在人群中多看了你一眼

    对SQLHelper,还是有一点陌生的,但是大多数人都在使用,我就有一种想了解并使用的意愿,于是查了很多资料,发现一片不错的博客,放在下面,作为自己或读者使用的材料. 一.SqlHelper 出场 不 ...

  4. SqlHelper——仅仅由于在人群中多看了你一眼

    一.SqlHelper 出场 不是由于大家都在用SqlHelper所以才用,是由于连接数据库关闭数据库查询数据库的多了也就加上了SqlHelper.当你的非常多需求都有一个同样的方法的时候我们没有必要 ...

  5. 从cocos2d-html5中提取出来的,用做前端开发的框架——cc.js

    从cocos2d-html5中提取出来的,用做前端开发的框架——cc.js /************************************************************* ...

  6. 如何在Visual Studio 2017中使用C# 7+语法 构建NetCore应用框架之实战篇(二):BitAdminCore框架定位及架构 构建NetCore应用框架之实战篇系列 构建NetCore应用框架之实战篇(一):什么是框架,如何设计一个框架 NetCore入门篇:(十二)在IIS中部署Net Core程序

    如何在Visual Studio 2017中使用C# 7+语法   前言 之前不知看过哪位前辈的博文有点印象C# 7控制台开始支持执行异步方法,然后闲来无事,搞着,搞着没搞出来,然后就写了这篇博文,不 ...

  7. css中的大小、定位、轮廓相关属性

    css中的大小.定位.轮廓相关属性 1.通过height.width属性控制组件大小 height:高度,可以设置任何有效的距离值: width:宽度,可以设置任何有效的属性值: max-height ...

  8. CSS中的浮动和定位

    在了解CSS中的浮动和定位之前有必要先了解清楚标准流和脱离标准流的特性 标准流的默认特性 1.分行.块级元素,并且能够dispay转换. 2.块级元素(block):默认独占一行,不能并列显示,能够设 ...

  9. System.getProperty()引起的悲剧--您的主机中的软件中止了一个已建立的连接

    我已无法形容此刻我的心情.. 本来是已经写好的netty5的demo程序,server和client之间创建tcp长连接的..然后随便传点数据的简单demo..然后今天试了一下tcp粘包的例子,用到了 ...

随机推荐

  1. 29、windows下通过zip包方式安装mysql

    29.1.下载mysql: 1. www.mysql.com 2. 3. https://dev.mysql.com/downloads/mysql/ 4. 29.2.安装mysql数据库: 1.把下 ...

  2. nginx访问fastdfs文件 报错400 Bad Request

    1.修改vi /etc/fdfs/mod_fastdfs.conf 2.将url_have_group_name = false 改为 url_have_group_name = true 3.重启 ...

  3. Vue 动态参数

    v-on和v-bind可以动态绑定一个参数,用[]来绑定一个可以改变的值. <li v-on:[event]="print"></li> <scrip ...

  4. Java运算中的类型转换

    类型转换 运算中,不同类型的数据先转化为同一类型,然后进行运算 public class Dome04 { public static void main(String[] args) { //int ...

  5. 万字长文肝Git--全流程知识点包您满意【建议收藏】

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本文将首先介绍在本地搭建GitLab服务,然后重点介绍Git的常用命令,Git的核心概念以及冲突处理,最后介绍Git与SVN的区别 干货满满,建议 ...

  6. buu [MRCTF2020]EasyCpp

    上次没写出,这次认真分析了一下,发现自己的调试水平也有了上涨,也看了一些C++逆向的文章,尤其是stl,发现C++的oop还是挺复杂,这题还没考啥虚函数的还行了. 一.拖入ida,找到主函数,还是挺容 ...

  7. CentOS 8 已经不再支持,Rocky Linux 才是未来

    2020年12月8日,红帽公司宣布,他们将停止开发CentOS,而在此之前CentOS一直作为红帽企业Linux的生产型分支及下游版本,此后他们将转而开发该操作系统的一个更新的上游开发变种,即 &qu ...

  8. python 动态指定header获取网页源代码的函数

    import random import requests def get_htmla(url): aui=0 while aui==0: try: header={'User-Agent':'Moz ...

  9. C语言:读写TXT

    fopen() 改为: if((fp=fopen("1s.txt","w+"))==NULL) fputc(p,fp); 改为:fprintf(fp," ...

  10. PYTHON UNRAR

    下载安装VINRAR 安装上面的下载文件 安装位置:32位具体位置 C:\Program Files (x86)\UnrarDLL      64位具体位置:C:\Program Files (x86 ...