大型场景中通过监督视图贡献加权进行多视图人物检测 Multi-View People Detection in Large Scenes via Supervised View-Wise Contribution Weighting
Multi-View People Detection in Large Scenes via Supervised View-Wise Contribution Weighting 大型场景中通过监督视图贡献加权进行多视图人物检测
论文url https://ojs.aaai.org/index.php/AAAI/article/view/28553
论文简述:
这篇论文提出了一个用于大型场景中多视角人体检测的网络框架结构,该框架通过监督视角贡献加权方法来更好地融合多摄像头信息。
总体框架图:

输入:
- 不同视角下多个摄像头的同步图像数据
特征提取(Feature Extraction):
- 使用CNN网络提取不同视角下图像的特征(论文中未提及具体是什么网络可以采用ResNet或VGG)
- 将提取的特征送入投影层,这个层使用空间变换网络(Spatial Transformer Network, STN)来调整特征图,使其与场景的地面平面坐标系对齐。STN可以看作是一个可学习的变换模块,它能够动态地调整输入特征图的空间位置。
- STN涉及以下操作
仿射变换:使用仿射变换(如旋转、缩放和平移)来调整特征图的角度和位置,使其与地面平面的坐标系对齐。
透视变换:应用透视变换将二维图像特征转换为三维空间中的点,这些点随后被投影到地面平面上。
- STN涉及以下操作
- 输出:
- 投影到地面平面上的每个视角的特征。
投影单视角解码(Projected Single-View Decoding)

- 参数介绍:
- Ground-Truth $ V_{s}^{gt} $ 是实际的人体位置图,这个图表示了场景中所有人体的位置,而不考虑它们能被哪些视角观察到。它是评估整个场景人体检测模型性能的标准。
- $ V_{i} $ 是prediction中第 $ {i} $ 个视角的预测图,是指从特定视角观察时,场景地面平面上人体的占据图。这是一个二维图,其中的每个网格单元表示场景地面上的一个区域,如果该区域内有人,则标记为1,否则标记为0。这个占据图是从特定视角的"ground-truth"数据中得到的,它只包含了该视角能够观察到的人体信息。
- $ V_{i}^{gt} $ 是第 $ {i} $ 个视角的实际人体位置图。
- 单视角损失 $ {l}{v} $ 用于衡量每个视角的预测人体位置图 $ V $ 与该视角的真实人体位置图 $ V_{i}^{gt} $ 之间的差异。这个损失通常采用均方误差(Mean Squared Error, MSE)损失函数,它可以计算预测位置图和真实位置图之间的像素级差异。
- 输入:
- 第一阶段输出的投影到地面平面上的每个视角的特征。
- 操作:
- 将上述输入喂入投影单视角解码器(论文中未具体给出是什么解码器,应该包括一系列卷积层、上采样层(如转置卷积)和非线性激活函数),主要是在从投影到地面平面的特征图中恢复出每个视角下的人体位置信息。输出的prediction中的每个视角的预测人体位置图 $ V_{i} $ 可以与该视角的实际人体位置图 $ V_{i}^{gt} $ 做MSE_Loss : $ {l}{v} $ 计算进行优化,公式表示为 $ {l}=MSE({V}{i},V^{gt}) $ 。这个预测结果可以作为该视角对最终结果的贡献。同时,这个解码结果还为特征提取模块的训练提供了额外的约束,确保从多视角图像中提取的特征在投影后仍然有效。
- 输出:
- 每个视角的人体位置预测图。
监督视角贡献加权融合(Supervised View-Wise Contribution Weighted Fusion)
- 权重预测:将上述输出的每个视角的预测人体位置图输入到一个共享子网(shared subnet) $ {C} $ (论文中未详细介绍共享子网的设计),用来预测每个摄像头视角的权重图。
- 权重归一化:然后,所有视角的权重图被归一化,确保场景地面平面图上每个像素点的所有视角权重之和等于1。
- 视角掩码应用:在归一化过程中,那些不被任何视角看到的区域被赋予0权重。在归一化过程中,每个视角的初始权重图会与其对应的视角掩码相乘。视角掩码是一个二值图,表示该视角能够观测到的场景区域。这样做的目的是确保只有那些在视角fov(field of view)内的区域才会被赋予权重,而fov外的区域权重为0。

- 特征加权融合:最后,每个视角的特征图 $ {F}{i} $ 会与其对应的归一化权重图 $ {W} $ 相乘,然后将所有视角的结果求和,得到融合后的特征图 $ {F} $ 。这个过程可以表示为: $ {F}={∑}{i}{F} {⊙}{W}_{i} $ ,其中 $ {⊙} $ 表示元素级别的乘法操作。
多视角特征解码(Multi-View Feature Decoding)
- 融合后的特征图 $ {F} $ 送入一个解码器,用于预测整个场景的人体占据图。这个解码器与单视角解码器不同,因为它们针对的功能不同:单视角解码器用于解码每个视角的特征,而多视角解码器用于整个场景的特征表示。(原文中没有详细介绍该解码器的具体设计)输出结果可以作为整个场景的预测人体位置图 $ {V}_{s} $ 。
- 输出后的整个场景的预测人体位置图 $ {V}{s} $ 会与实际的人体位置图 $ V^{gt} $ 进行loss计算,该loss也是采用的均方误差MSE_Loss,用公式可以表示为 $ {l}{s}=MSE({V},V_{s}^{gt}) $ 。
- 在计算出 $ {l}{s} $ 之后,会将将单视角损失 $ {l} $ 和场景级损失 $ {l}{s} $ 通过权重系数 $ {λ} $ 行组合,形成最终的损失函数 $ {l} $ , 公式表示为 $ {l}={l}+{λ}{l}_{v} $ 。
泛化到新场景(Generalization to New Scenes)

输入:
- 源域数据的特征表示:这些是从模型在训练阶段已经学习到的数据中提取的特征。
- 目标域数据的特征表示:这些是从新场景中提取的特征,可能只有少量标注或者完全没有标注。
作者通过轻微的微调模型来适应新场景。由上图可知,作者为了提高模型在新场景中的泛化能力,添加了一个判别器(discriminator)(论文没有提供该判别器具体层设计细节,可能类似于GAN的结构,来判别是源域数据还是目标域数据),用于进一步减少训练场景与测试新场景之间的大领域差异,他们使用新场景训练集的5%图像来训练模型,然后同时将训练中的合成图像和测试中的新场景图像输入到提出的模型中。最后,判别器对这两种特征进行分类。微调中的损失包括新场景多视角检测损失、合成多视角检测损失和判别器分类损失。
效果图

后记:
- 公式的格式会有一些问题,可能是博客园的markdown编码有问题,我在本地VScode看是没有问题的。
大型场景中通过监督视图贡献加权进行多视图人物检测 Multi-View People Detection in Large Scenes via Supervised View-Wise Contribution Weighting的更多相关文章
- 三维重建5:场景中语义分析/语义SLAM/DCNN-大尺度SLAM
前言: 在实时/非实时大规模三维场景重建中,引入了语义SLAM这个概念,参考三维重建:SLAM的尺度和方法论问题和三维重建:SLAM的粒度和工程化问题 .大规模三维场景重建的尺度增大,因此相对于整个重 ...
- 【分布式】Zookeeper在大型分布式系统中的应用
一.前言 上一篇博文讲解了Zookeeper的典型应用场景,在大数据时代,各种分布式系统层出不穷,其中,有很多系统都直接或间接使用了Zookeeper,用来解决诸如配置管理.分布式通知/协调.集群管理 ...
- 游戏开发之UE4添加角色到场景中
接着上次继续学习,现在我们已经有了一个场景并且运行了,我们需要添加一个角色到场景中.要这样做,我们必须从UE4的GameFramework类继承它. 一. 创建一个从Character类继承的类 从基 ...
- 在WebGL场景中使用2DA*寻路
这篇文章将讨论如何在一个自定义的地面网格上进行简单的2D寻路,以及确定路径后如何使用基于物理引擎的运动方式使物体沿路径到达目标地点.读者需要预先对WebGL和Babylonjs知识有一些了解,可以 ...
- [Unity工具]查找GameObject在场景中所有被引用的地方
参考链接: https://blog.csdn.net/hjzyzr/article/details/53316919?utm_source=blogxgwz4 https://blog.csdn.n ...
- 3D UI场景中,把XY平面的尺寸映射为屏幕像素的数学模型推导
概述及目录(版权所有,请勿转载,欢迎读者提出错误) 之前用kanzi的3D UI引擎和cocos-2d的时候都有遇到过这个问题,就如何把3D场景中的XY平面的尺寸映射为与屏幕像素一一对应的,即XY平面 ...
- 在WebGL场景中进行棋盘操作的实验
这篇文章讨论如何在基于Babylon.js的WebGL场景中,建立棋盘状的地块和多个可选择的棋子对象,在点选棋子时显示棋子的移动范围,并且在点击移动范围内的空白地块时向目标地块移动棋子.在这一过程中要 ...
- 在WebGL场景中管理多个卡牌对象的实验
这篇文章讨论如何在基于Babylon.js的WebGL场景中,实现多个简单卡牌类对象的显示.选择.分组.排序,同时建立一套实用的3D场景代码框架.由于作者美工能力有限,所以示例场景视觉效果可能欠佳,本 ...
- 原生WebGL场景中绘制多个圆锥圆柱
前几天解决了原生WebGL开发中的一个问题,就是在一个场景中绘制多个几何网格特征不同的模型,比如本文所做的绘制多个圆锥和圆柱在同一个场景中,今天抽空把解决的办法记录下来,同时也附上代码.首先声明,圆柱 ...
- Egret的第三方库制作,以及在大型项目中的应用
目录: 一 创建第三方库 二 TypeScript库 三 JavaScript库 四 第三方库制作在大型RPG中的实际应用 参考: 第三方库的使用方法 目标: 本文目的是将现有游戏的框架制作成第三方库 ...
随机推荐
- Java 练习题 看起来很简单 写起来却有点难度
1 import java.io.PrintStream; 2 3 /* 4 * 5 * public class ValueTransferTest4 6 *{ 7 * public static ...
- Codeforces Round 734 (Div. 3)B2. Wonderful Coloring - 2(贪心构造实现)
思路: 分类讨论: 当一个数字出现的次数大于等于k,那么最多有k个能被染色, 当一个数字出现的次数小于k,南那么这些数字都可能被染色 还有一个条件就是需要满足每个颜色的数字个数一样多,这里记出现次数小 ...
- SQLmap 爆破
1.Sqlmap -u "http://114.67.246.176:11055/index.php?" --data="id=1" (这里 --dat ...
- 探索Git内部原理
Git是一个开源的分布式版本控制系统,是目前主流的版本控制系统,很多软件项目都会用它做源代码管理.Git的常用操作想必很多人都会,但是可能了解Git内部原理的人并不多.了解一些底层的东西,可以更好的帮 ...
- Springboot K8s Job 一次性任务 如何禁用端口监听
问题:SpringBoot一次性任务执行时,也会默认监听服务端口,当使用k8s job运行时,可能多个pod执行存在端口冲突 解决办法:命令行禁用SpringBoot一次性任务启动时端口占用 java ...
- arch安装xfce4的时候,出现无法设置开机启动的问题
sudo systemctl enable lightdm Failed to enable unit: File /etc/systemd/system/display-manager.serv ...
- 基于BES2500芯片的方案开发总结和反思
前记 虽然蓝牙芯片现在非常多,可是一旦想做一些差异化的产品时候,能用的非常少.在和客户的反复斟酌中,最终选择了BES2500来开发这款新的产品.这里面是基于自身的实力,产品定位和芯片诉求多重考量的 ...
- 前后端分离之jQuery入门
jQuery入门 基本概念:jQuery是一个快速,小型且功能丰富的JavaScript库.借助易于使用的API(可在多种浏览器中使用),使HTML文档的遍历和操作,事件处理,动画和Ajax等事情变得 ...
- 短小精悍的npm入门级保姆教程,一篇包会
npm是什么? npm是一个强大的包管理工具,它使开发人员能够轻松地安装.更新和管理项目依赖的包.通过初始化一个package.json 文件,我们可以描述你的项目并记录其依赖关系.使用npm ins ...
- 游戏引擎中的实时渲染和在V-Ray中渲染有什么区别 2022-11-25
游戏引擎中的实时渲染和在V-Ray中渲染有什么区别,下面我们一起来分析一下,从2个方面来具体分析实时渲染和在V-Ray中渲染种的不一样的区别. 原理区别 VRay等渲染器原理上叫做离线渲染(Offli ...