无监督多视角行人检测 Unsupervised Multi-view Pedestrian Detection

论文urlhttps://arxiv.org/abs/2305.12457

论文简述

该论文提出了一种名为Unsupervised Multi-view Pedestrian Detection (UMPD)的新方法,旨在通过多视角视频监控数据准确地定位行人,而无需依赖于人工标注的视频帧和相机视角。

总体框架图



当我第一时间看到这个框架图,顿时感觉头发都掉了好几根,他这个设计确实有点复杂,并且和之前看的多视角检测方法很不一样,可能有些理解偏差,欢迎指正。

输入

  • 不同视角下多个摄像头的同步图像数据

语义感知迭代分割 Semantic-aware Iterative Segmentation(SIS)

PS: 该模块所在部分就是上图绿色框部分,该模块主要分为两个部分,一个是PCA主成分迭代分析生成前景掩码部分,一个是零样本分类视觉-语言模型CLIP部分生成 $ {S}^{human} $ 语意掩码选择PCA的前景掩码部分。

  • PCA主成分迭代分析:

    • 首先, 多个摄像头的同步图像数据通过无监督模型提取预训练特征,将所有图像的预训练特征向量集合并成一个更大的特征矩阵,在这个矩阵中,每一行代表一个图像的特征向量,每一列代表特征向量中的一个维度。(猜测具体操作应该是模型中的最后一个卷积层的特征图进行展平操作,变成一个一维特征向量。将所有的一维特征向量堆叠起来就形成了一个二维的特征矩阵。)
    • 然后将这个二维的特征矩阵进行PCA降维操作,PCA的目的是找到一个新的低维特征空间,其中第一个主成分捕捉原始高维特征中的最大方差。通过PCA,数据被投影到第一个主成分(即PCA向量)上,生成一个新的一维特征表示。这个一维表示是每个原始高维特征向量在PCA方向上的投影长度。
    • 根据一维PCA值为每个视角生成初步的行人掩膜(即二值图像,设定一个阈值,其中行人前景(大于阈值)被标记为1,背景(小于等于阈值)为0)。
  • 零样本分类视觉-语言模型CLIP:

    CLIP拥有两个模块

    • CLIP Visual Encoder

      输入的是多个摄像头的同步图像数据

      输出是视觉特征图
    • CLIP Text Encoder

      输入是与行人相关的文本描述

      生成语言特征向量
    • 将语言特征向量与视觉特征图进行余弦相似度计算,得出图 $ {S}^{human} $

  • 两模块结合操作:

    • 将CLIP生成的 $ {S}^{human} $ 与PCA生成的前景掩码进行重叠,来判断哪些前景掩码属于行人前景,然后将这些前景掩码继续用PCA进行迭代以及CLIP判断直到规定的迭代次数将前景掩码输入到下一部分作为伪标签。

几何感知体积探测器 Geometric-aware Volume-based Detector(GVD)

PS: 该模块所在部分就是第一张图红色框部分

  • 2D特征提取:每个视角拍摄的图都用ResNet Visual Encoder进行特征提取。
  • 2D到3D的几何投影:提取的特征随后被映射到3D空间中。这一步骤涉及到使用相机的内参和外参矩阵,将2D图像中的像素点映射到3D空间中的体素上。这个过程基于针孔相机模型,通过几何变换将2D图像中的信息转换为3D体积的一部分。

  • 3D体积融合:由于每个视角都会生成一个3D体积,GVD模块需要将这些体积融合成一个统一的3D体积。这通常通过一个Soft-Max Volume Feat. Fusion函数来实现,该函数可以对来自不同视角的3D体积进行加权和融合。

  • 3D卷积网络解码器:融合后的3D体积被送入一个3D卷积网络解码器,该解码器负责预测每个体素的密度和颜色。这个解码器通常由一系列3D卷积层组成,能够学习从2D图像到3D体积的复杂映射关系。(论文中没有给出该解码器具体是怎么设计的)
  • 3D渲染为2D:作者用PyTorch3D可微分渲染框架将预测的3D密度 $ {D} $ 渲染为2D掩码 \(\tilde{M}\) ,并且将预测的3D颜色 $ {C} $ 渲染为2D图像 \(\tilde{I}\) , $ {M} $ 为SIS输出的前景掩码, $ {I} $ 论文中说是根据前景掩码得出的颜色图像(猜测应该是前景图像中为1的部分才保留原图颜色)。

垂直感知BEV正则化 Vertical-aware BEV Regularization

  • 通过GVD得出的3D体积中的密度信息沿着Z轴(垂直轴)进行最大值投影,以生成BEV(Bird Eye View)表示。这样可以得到一个二维平面图,其中高密度区域表示行人的位置,得出结果。
  • 并且为了应对出现的行人躺着或者斜着的情况(在大多数情况下,行人的姿态是接近垂直的),论文提出了Vertical-aware BEV Regularization(VBR)方法。通过计算 $ {L}_{VBR} $ 损失函数来优化这个影响。

  • 损失函数



    运用了Huber Loss

效果图

后记

作者最后应该还做了些后处理,但是论文中没有提及具体内容。该篇内容细节很多,公式变换复杂,有些细节我做了一定的省略,建议结合着论文原文来看。

ps:终于干完这篇了,鼠鼠我要逝了

无监督多视角行人检测 Unsupervised Multi-view Pedestrian Detection的更多相关文章

  1. paper 87:行人检测资源(下)代码数据【转载,以后使用】

    这是行人检测相关资源的第二部分:源码和数据集.考虑到实际应用的实时性要求,源码主要是C/C++的.源码和数据集的网址,经过测试都可访问,并注明了这些网址最后更新的日期,供学习和研究进行参考.(欢迎补充 ...

  2. 解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法

    摘要:本文提出了两个用于无监督的具备可解释性和鲁棒性时间序列离群点检测的自动编码器框架. 本文分享自华为云社区<解读ICDE'22论文:基于鲁棒和可解释自编码器的无监督时间序列离群点检测算法&g ...

  3. kaggle信用卡欺诈看异常检测算法——无监督的方法包括: 基于统计的技术,如BACON *离群检测 多变量异常值检测 基于聚类的技术;监督方法: 神经网络 SVM 逻辑回归

    使用google翻译自:https://software.seek.intel.com/dealing-with-outliers 数据分析中的一项具有挑战性但非常重要的任务是处理异常值.我们通常将异 ...

  4. 使用GAN进行异常检测——可以进行网络流量的自学习哇,哥哥,人家是半监督,无监督的话,还是要VAE,SAE。

    实验了效果,下面的还是图像的异常检测居多. https://github.com/LeeDoYup/AnoGAN https://github.com/tkwoo/anogan-keras 看了下,本 ...

  5. 无监督︱异常、离群点检测 一分类——OneClassSVM

    OneClassSVM两个功能:异常值检测.解决极度不平衡数据 因为之前一直在做非平衡样本分类的问题,其中如果有一类比例严重失调,就可以直接用这个方式来做:OneClassSVM:OneClassSV ...

  6. 无监督异常检测之卷积AE和卷积VAE

    尝试用卷积AE和卷积VAE做无监督检测,思路如下: 1.先用正常样本训练AE或VAE 2.输入测试集给AE或VAE,获得重构的测试集数据. 3.计算重构的数据和原始数据的误差,如果误差大于某一个阈值, ...

  7. Approach for Unsupervised Bug Report Summarization 无监督bug报告汇总方法

    AUSUM: approach for unsupervised bug report summarization 1. Abstract 解决的bug被归类以便未来参考 缺点是还是需要手动的去细读很 ...

  8. 行人检测(Pedestrian Detection)资源整合

    一.纸 评论文章分类: [1] D. Geronimo, and A. M.Lopez. Vision-based Pedestrian Protection Systems for Intellig ...

  9. 行人检测(Pedestrian Detection)资源

    一.论文 综述类的文章 [1]P.Dollar, C. Wojek,B. Schiele, et al. Pedestrian detection: an evaluation of the stat ...

  10. 目标检测之行人检测(Pedestrian Detection)---行人检测之简介0

    一.论文 综述类的文章 [1]P.Dollar, C. Wojek,B. Schiele, et al. Pedestrian detection: an evaluation of the stat ...

随机推荐

  1. Big-Yellow的算法工程师进阶之路

    Big-Yellow的算法工程师进阶之路 一.基础算法 二.基础数据结构 2.1 链表[1] 2.1.1 基础理论 链表是一种以链的形式来存储数据的数据结构.链表的结构:每一个数据都与其后一个数据相连 ...

  2. Java 多态性的使用

    1 package com.bytezreo.duotai3; 2 3 /*** 4 * 5 * @Description 练习多态性的使用 6 * @author Bytezero·zhenglei ...

  3. Python魔法:20个让你编程事半功倍的奇淫技巧(建议收藏)

    Python作为一门灵活.充满技巧的语言,有着很多奇技淫巧,今天小编就跟大家分享一下在平时工作中所积累的技巧,这里面既有语法上的技巧,也有库函数的应用,可以帮助大家在平时的工作中提升效率,规避某些错误 ...

  4. 芯片公司Dialog产品调研简报

    一 公司简介: Dialog半导体有限公司的总部位于伦敦,设有一个全球销售.研发和营销部.2013年,公司实现了9.10亿美元的营业收入,是欧洲增长速度最快的公共半导体公司之一.   二 芯片型号: ...

  5. 定义pod的hosts文件(HostAliases)

    通过HostAliases 向 Pod /etc/hosts 文件添加条目 当 DNS 配置以及其它选项不合理的时候,通过向 Pod 的 /etc/hosts 文件中添加条目, 可以在 Pod 级别覆 ...

  6. JavaScript利用反射实现方法注入

    1. 引言 反射是一种能够在程序运行时动态访问.修改某个类(对象)中属性和方法的机制 JavaScript在ES6中提供了Reflect 这一个内置的对象,它提供拦截 JavaScript 操作的方法 ...

  7. 记录--前端项目中运行 npm run xxx 的时候发生了什么?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 npm 是 node 捆绑的依赖管理器,常用程度可想而知.那么你每天都在 npm/yarn run 的命令到底是如何运行项目的呢? 前端项 ...

  8. .NET Emit 入门教程:第四部分:构建类型(Type)

    前言: 在动态生成代码的过程中,构建类型(Type)是至关重要的一步. 通过使用 Emit 中的 TypeBuilder,我们可以定义和创建各种类型,包括类.结构体和接口. 本节将深入探讨如何使用 T ...

  9. vue初学核心基础

    一.初识vue 1.vue的使用 导入vue之后创建vue模块,el属性表示控制区域的id名称,data表示该区域内的数据 在vue中我们都是用表中模板的标准语法来传递数据 <head> ...

  10. JAVA 获取文件 MD5

    private static final char[] hexCode = "0123456789ABCDEF".toCharArray(); // 文件类取MD5 public ...