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涉及以下操作

      仿射变换:使用仿射变换(如旋转、缩放和平移)来调整特征图的角度和位置,使其与地面平面的坐标系对齐。

      透视变换:应用透视变换将二维图像特征转换为三维空间中的点,这些点随后被投影到地面平面上。
  • 输出:
    • 投影到地面平面上的每个视角的特征。

投影单视角解码(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的更多相关文章

  1. 三维重建5:场景中语义分析/语义SLAM/DCNN-大尺度SLAM

    前言: 在实时/非实时大规模三维场景重建中,引入了语义SLAM这个概念,参考三维重建:SLAM的尺度和方法论问题和三维重建:SLAM的粒度和工程化问题 .大规模三维场景重建的尺度增大,因此相对于整个重 ...

  2. 【分布式】Zookeeper在大型分布式系统中的应用

    一.前言 上一篇博文讲解了Zookeeper的典型应用场景,在大数据时代,各种分布式系统层出不穷,其中,有很多系统都直接或间接使用了Zookeeper,用来解决诸如配置管理.分布式通知/协调.集群管理 ...

  3. 游戏开发之UE4添加角色到场景中

    接着上次继续学习,现在我们已经有了一个场景并且运行了,我们需要添加一个角色到场景中.要这样做,我们必须从UE4的GameFramework类继承它. 一. 创建一个从Character类继承的类 从基 ...

  4. 在WebGL场景中使用2DA*寻路

      这篇文章将讨论如何在一个自定义的地面网格上进行简单的2D寻路,以及确定路径后如何使用基于物理引擎的运动方式使物体沿路径到达目标地点.读者需要预先对WebGL和Babylonjs知识有一些了解,可以 ...

  5. [Unity工具]查找GameObject在场景中所有被引用的地方

    参考链接: https://blog.csdn.net/hjzyzr/article/details/53316919?utm_source=blogxgwz4 https://blog.csdn.n ...

  6. 3D UI场景中,把XY平面的尺寸映射为屏幕像素的数学模型推导

    概述及目录(版权所有,请勿转载,欢迎读者提出错误) 之前用kanzi的3D UI引擎和cocos-2d的时候都有遇到过这个问题,就如何把3D场景中的XY平面的尺寸映射为与屏幕像素一一对应的,即XY平面 ...

  7. 在WebGL场景中进行棋盘操作的实验

    这篇文章讨论如何在基于Babylon.js的WebGL场景中,建立棋盘状的地块和多个可选择的棋子对象,在点选棋子时显示棋子的移动范围,并且在点击移动范围内的空白地块时向目标地块移动棋子.在这一过程中要 ...

  8. 在WebGL场景中管理多个卡牌对象的实验

    这篇文章讨论如何在基于Babylon.js的WebGL场景中,实现多个简单卡牌类对象的显示.选择.分组.排序,同时建立一套实用的3D场景代码框架.由于作者美工能力有限,所以示例场景视觉效果可能欠佳,本 ...

  9. 原生WebGL场景中绘制多个圆锥圆柱

    前几天解决了原生WebGL开发中的一个问题,就是在一个场景中绘制多个几何网格特征不同的模型,比如本文所做的绘制多个圆锥和圆柱在同一个场景中,今天抽空把解决的办法记录下来,同时也附上代码.首先声明,圆柱 ...

  10. Egret的第三方库制作,以及在大型项目中的应用

    目录: 一 创建第三方库 二 TypeScript库 三 JavaScript库 四 第三方库制作在大型RPG中的实际应用 参考: 第三方库的使用方法 目标: 本文目的是将现有游戏的框架制作成第三方库 ...

随机推荐

  1. Netty笔记(5) - 编码解码机制 和 Protobuf技术

    介绍: 编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据时就需要编码,接收数据时就需要解码 codec(编解码器) 的组成部分有两个:decoder(解码器)和 encode ...

  2. Java 从键盘读入学生成绩 找出最高分 并输出学生等级成绩 * 成绩>=最高分-10 等级为’A‘ * 成绩>=最高分-20 等级为’B‘ * 成绩>=最高分-30 等级为'C' * 其余 等级为’D‘

    1 /* 2 * 从键盘读入学生成绩 找出最高分 并输出学生等级成绩 3 * 成绩>=最高分-10 等级为'A' 4 * 成绩>=最高分-20 等级为'B' 5 * 成绩>=最高分- ...

  3. JAVA 多线程---面经

    线程与进程 提到进程那就要说程序,程序有指令和数据,程序从磁盘加载到内存,cpu获得指令进行执行,其中还会用到各种资源如网络资源,磁盘等.一个程序从磁盘进入内存,就是进程实例的创建. 一个程序可以有多 ...

  4. 学习ASP.NET MVC 编程系列文章目录

    学习ASP.NET MVC(一)--我的第一个ASP.NET MVC应用程序 学习ASP.NET MVC(二)--我的第一个ASP.NET MVC 控制器 学习ASP.NET MVC(三)--我的第一 ...

  5. Git Flow 的正确使用姿势 - 分支 branch - master dev 使用方式

    Git Flow 的正确使用姿势 https://www.jianshu.com/p/41910dc6ef29

  6. Centos挂在U盘的时候无法挂载

    网上的教学视频大部分全是以centos为教材底子--没办法更换系统了,这样方便麻! 我参考的文章: https://blog.csdn.net/shengjie87/article/details/1 ...

  7. Python下使用串口发送十六进制数据

    import serial from time import sleep def recv(serial): while True: data = serial.read_all() if data ...

  8. python3 Crypto模块实例解析

    一 模块简介 1.简介 python的Crypto模块是安全hash函数(例如SHA256 和RIPEMD160)以及各种主流的加解密算法的((AES, DES, RSA, ElGamal等)的集合. ...

  9. Android 8.0 Only fullscreen activities can request orientation解决方法

    原文:Android 8.0 Only fullscreen activities can request orientation解决方法 | Stars-One的杂货小窝 公司的项目坑太多,现在适配 ...

  10. 【atcoder abc281_d】动态规划

    import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /** * @ ...