精华内容
下载资源
问答
  • 时空检测
    千次阅读
    2021-07-16 16:16:42


    以下代码可以在我的github找到
    欢迎访问个人主页博客

    AVA系列

    AVA数据集官方网站,需要科学上网,AVA提供4类数据集:

    • AVA-Kinetics(v1.0)):时空动作检测,包含来自 AVA v2.2 的原始 430 个视频,以及来自Kinetics-700 数据集的238k 个视频 。

    • AVA-Actions(v2.2):时空动作检测,包含 430 个视频,其中235 个用于训练、64 个用于验证和 131 个用于测试。每个视频有 15 分钟的注释,间隔为 1 秒。

    • AVA Active Speaker(v1.0):说话人检测。

    • AVA Speech(v1.0)

    Task介绍:http://activity-net.org/challenges/2019/tasks/guest_ava.html

    AVA-Actions

    包含 430 个视频,其中235 个用于训练、64 个用于验证和 131 个用于测试。每个视频有 15 分钟的注释,间隔为 1 秒。

    AVA-Actions(v2.2)数据集下载,下载后会得到以下文件。

    行为类别文件

    • ava_action_list_v2.2_for_activitynet_2019.pbtxt:60类行为,Evaluate时使用。
    • ava_action_list_v2.2.pbtxt:80类行为。

    行为标签文件

    • ava_train_v2.2.csv、ava_val_v2.2.csv、ava_test_v2.2.txt

    其他文件

    • 每个视频要检测的位置,即第902到1798秒。
      • ava_included_timestamps_v2.2.txt
    • 不需要进行检测的timestamp,即 train/val/test 数据集中每个视频不需要进行检测的timestamp。
      • ava_test_excluded_timestamps_v2.2.csv
      • ava_train_excluded_timestamps_v2.2.csv
      • ava_val_excluded_timestamps_v2.2.csv

    AVA-Kinetics

    包含来自 AVA v2.2 的原始 430 个视频,以及来自Kinetics-700 数据集的238k 个视频 。

    AVA-Kinetics(v1.0)数据集下载,下载后会得到以下文件。

    行为类别文件

    • ava_action_list_v2.2.pbtxt:80类行为。
    • ava_action_list_v2.2_for_activitynet.pbtxt:60类行为,Evaluate时使用。

    行为标签文件

    • AVA数据集:ava_test_v2.2.csv,ava_train_v2.2.csv,ava_val_v2.2.csv
    • kinetics数据集:kinetics_test_v1.0.csv,kinetics_train_v1.0.csv,kinetics_val_v1.0.csv

    AVA标注规范

    标签类别

    AVA提供80 个原子动作的注释:

    id英文标签中文标签id英文标签中文标签id英文标签中文标签
    1bend/bow (at the waist)弯/弓腰2crawl爬行3crouch/kneel蹲下/跪下
    4dance舞蹈5fall down摔倒6get up起床
    7jump/leap跳跃/跳跃8lie/sleep说谎/睡觉9martial art武术
    10run/jog跑步/慢跑11sit12stand站立
    13swim游泳14walk15answer phone接电话
    16brush teeth刷牙17carry/hold
    (an object)
    拿/保持
    (物体)
    18catch
    (an object)
    捕捉(物体)
    19chop20climb
    (e.g., a mountain)
    攀登
    (山)
    21clink glass碰杯
    22close
    (e.g., a door, a box)
    关闭(门、盒子)23cook厨师24cut
    25dig26dress/put on clothing穿衣27drink
    28drive
    (e.g., a car, a truck)
    驾驶29eat30enter进入
    31exit出口32extract提炼33fishing钓鱼
    34hit (an object)击中(物体)35kick (an object)36lift/pick up举起/捡起
    37listen
    (e.g., to music)
    38open (e.g., a window, a car door)打开
    (窗户、车门)
    39paint
    40play board game玩棋盘游戏41play musical instrument演奏乐器42play with pets和宠物一起玩
    43point to (an object)指向(一个物体)44press45pull (an object)拉(物体)
    46push (an object)推(一个物体)47put down放下48read
    49ride (e.g., a bike, a car, a horse)50row boat划艇51sail boat帆船
    52shoot射击53shovel54smoke抽烟
    55stir搅拌56take a photo拍照57text on/look at a cellphone发短信/看手机
    58throw59touch (an object)触摸60turn (e.g., a screwdriver)转动(螺丝刀)
    61watch (e.g., TV)看(电视)62work on a computer在电脑上工作63write
    64fight/hit (a person)打架/击打(人)65give/serve (an object) to (a person)把物给人66grab (a person)抢(一个人)
    67hand clap拍手68hand shake握手69hand wave挥手
    70hug (a person)拥抱71kick (a person)踢(一个人)72kiss (a person)吻(人)
    73lift (a person)抬(人)74listen to (a person)听(一个人)75play with kids和孩子们一起玩
    76push
    (another person)
    推(人)77sing to (e.g., self, a person, a group)唱歌(人,团体)78take (an object) from (a person)从(人)取(物)
    79talk to (e.g., self, a person, a group)与(人、团体)交谈80watch (a person)看(一个人)

    标注方式

    • 要标记的内容包括人物bbox,以及每个人的行为类别,同一时间同一人可能有多个行为
    • 每行标注一个人在一个时间段内在某个位置的一个行为。
    • 标记的内容还有还有每个实体编号,即相邻关键帧中的人物如果是同一个人,则拥有相同的实体编号。换句话说,“实体编号”其实就是目标跟踪的标签。
    • 并不是对视频中的每一帧进行标记,而只是对关键帧进行标记,即每秒取1帧作为关键帧,对该帧进行标记。

    CSV格式

    一行的格式如下:video_id、middle_frame_timestamp、person_box、action_id、person_id。

    • video_id:YouTube 标识符。
    • middle_frame_timestamp:从视频开始的秒数。
    • person_box:左上角 (x1, y1) 和右下角 (x2,y2) ,其中 (0.0, 0.0) 对应于左上角,而 (1.0, 1.0) 对应于右下角。
    • action_id:动作类标识符,见 ava_action_list_v2.2.pbtxt
    • person_id:一个唯一的整数,允许此框链接到在此视频的相邻帧中描绘同一个人的其他框。

    旧版

    AVA v2.2 在两个方面与 v2.1 不同。首先人工加入缺失的标签,将注释数量增加了 2.5%。其次,对宽高比远大于 16:9 的少量视频进行了框位置校正。

    AVA v2.1 与 v2.0 的不同之处仅在于删除了少量被确定为重复的电影。类列表和标签映射与 v1.0 保持不变。

    以前版本的 AVA 的文件可以在这里下载:

    视频下载

    以下代码可以在我的github找到

    AVA-Actions

    cd ava-actions

    .
    ├── download.py
    ├── trainval_src.txt
    ├── test_src.txt
    ├── readme.md
    
    • trainval_url.txttest_url.txt:训练集验证集、测试集可以直接下载的url文件,在win下可以直接使用迅雷,IDM批量下载;ubuntu下直接wget即可。

    • download.py:如果不采用上述方法下载,亦可用download.py下载。

      python download.py --url_txt <urlfile> --output_dir <output_dir>
      

    https://github.com/cvdfoundation/ava-dataset

    下载AVA-Kinetics视频

    cd ava-kinetics

    .
    ├── download.py
    ├── all.csv
    ├── test.csv
    ├── test.csv
    ├── train.csv
    ├── readme.md
    
    • all.csvtrain.csvtest.csvval.csv:训练集、验证集、测试集、所有数据集的Youtube ID,包括起止时间。

    • download.py:使用download.py下载。

      python download.py  --input_csv <csvfile> --output_dir <output_dir>
      

    https://github.com/gurkirt/kinetics-download-prep

    更多相关内容
  • 人体姿态的时空动作检测源码。应用场景比如说,我国农村的空巢老人子女常年在外打工。而目前的监控属于被动式的监控,我们仅仅只能查看并且回放监控,不能对监控里面的某种信息作出判断和预警。该课题利用Matlab对...
  • 针对公共场合人群异常行为检测准确率不高和训练样本缺乏的问题,提出一种基于深度时空卷积神经网络的人群异常行为检测和定位的方法。首先针对监控视频中人群行为的特点,综合利用静态图像的空间特征和前后帧的时间...
  • 识别

    slowfast 介绍

    目前使用mmaction2开发时空动作识别的算法,检测识别出项目视频中人是否有“打架”、“扔垃圾”、“抽烟”,“打电话”等行为动作。故写了对视频识别网络slowfast的一些理解和笔记。

    论文地址:链接: https://arxiv.org/pdf/1812.03982.pdf

    一、SlowFast Networks for Video Recognition是怎么来的?
    在图片处理中人们习惯将xy两个维度对称的对待(symmetrically),当然由于各向异性和移位不变性(shift-invariant)这是可以的,但是,如果对于视频(x,y,t)呢?因为光流孔径问题,我们不能将时间维度与空间维度对称的处理(而这正是时空卷积的视频方法所默认的《learning spatiotemporal features with 3D convolutional networks》),在我们一般所见的世界中的某一个特定时刻,世界一般是静止的,空间的语义信息一般是不变的,或者是及其缓慢的(slow)但是在对于一些动作,比如“拍手”,“跑步”,他们渴望的是更加迅速(fast)的帧数(更高的时间分辨率)去有效的建模快速运动的状态改变(ues fast refreshing frames(high temproal resolution) to effectively model the potentialy fast chaning motion).

    基于这个想法,论文作者设计出了一种基于双通道的SlowFast model来做动作检测,用来提取视频信息

    二、是怎么实现的?
    在图片中,I(x,y)I(x,y)I(x,y) 有各向同性 (isotropic), 那么视频信号中是否有呢?

    空域和时域显然是不具备向同性的。所以想法就是将空域和时域分开来处理,分别通过低采样和高采样来实现。
    基于这种想法就构建了两条通路, 一条用来检测图片语义,使用低帧率。另一条用来检测移动,动作(motion)通过高帧率。
    这两条路径我们根据处理时间速度(temporal speed)的差异,将它们命名为slow和fast路径。他们通过侧向连接融合。
    SlowFast与我们传统的视频处理模型——双流结构(two-stream)最大的区别在于,双流结构没有探索不同的时间速度(different temporal speeds),并且对两个流而言,它们的采用完全相同的骨干网络(Bone net), 然而Fast路径更加快,更加轻量,因为没有计算光流等等(potical flow), 并且还是端到端(end-to-end from raw data)

    *低采样:提取空间语义(spacial sematics)*
    
    *高采样:提取时域上的运动*
    

    在这里插入图片描述

    Slow Pathway:
    Slow pathway 可以使任何一种可以在一段剪辑过得视频上工作的时空卷积模型,重点在于 T,γ
    γ是采样步长,即将原始视频按照该步长取样,一般取16, 即16帧取一张关键帧,
    T是采样次数,即一共采样多少次。
    所以慢通道的一次输入总帧数为 T × γ

    Fast Pathway:

    与之平行的Fast pathway拥有以下属性:

    1. 高帧率(High frams rate)
    2. 高时间分辨率特征(High temporal resolution)
    3. 较低的通道容量(low channel capacity)

    第一点:
    α 是 帧 采 样 倍 数 , β 是 通 道 倍 数
    对于快通道来说,他的采样步长是γ/α ,采样次数是 α T
    第二点:
    除了输入是时间高分辨的输入,对于时间特征我们也是使用的高分辨。
    从始至终在fast中,我们使用的都是不降低时间采样率的层(而不是时间池化或者时域跨度卷积)
    第三点:
    fast的卷积核个数是慢通道的 1/ β​ 倍,较小的卷积核降低了其在空间语义上的表达能力,但是却提高了它在时域上的表达能力,这正是Fast通道所要做的,同时它在论文中也提到了根据实验的进行,使用各种方式减少fast通道中空间语义的表达也能带来准确率的提升:

    侧向链接

    侧向链接主要是用来融合不同通路的时间与空间的语义信息的,他经常被用于上面所提到的基于双流和光流的结构。

    它被应用于两条通路的每一层上,尤其是Resnets的pool1, res2, res3, and res4.这些链接紧随其后。

    链接是单向的,从fast流融合进Slow流,测试过双流结构,但是效果差不多

    最后,来自两条通路的信息池化成为特征向量之后通过同通过一个全连接分类层

    在这里插入图片描述
    上面是一个实例对象,T代表采样的次数,S代表空间的分辨率

    stride 16 1^2 代表{时间步长,空间步长}

    对于卷积核来说 {T×S^2, C} ,代表时空卷积核大小,以及数量

    对于Slow通道来说,在较早的层中使用时间卷积会降低准确性。我们认为这是因为当对象快速移动且时间步长很大时,除非空间感受野足够大),否则非时间感受野内几乎没有相关性。

    对于fast通道来说,每个块都有非退化的时间卷积。

    对于侧向链接:
    特征图的形状可以写作:
    Slow pathway as{T,S2,C},
    Fast pathway is{αT,S2,βC}.

    他们采用了一下三种方案:

    1、将所有的a帧打包到一帧中
    2、从每个a帧中随机采样一帧
    3、使用 2βC 输出通道和 stride=α 执行5×1^2 核的 3D 卷积

    最后发现,是第三种方法最好。

    三、实现了什么目标?

    在动作识别以及检测都有很显著提升
    
    测试集:Kinetics, Charades, AVA
    

    在这里插入图片描述

    在AVA2.1和2.2上都进行了实验验证
    1.结果在最佳的3d卷积上sf有3.0%的提升。

    2.同时确定了三个有可能的改进方向或者说问题:
    削弱Fast 路径的空间输入,半空间输入,更大的 β (FLOPS 几乎一致),灰度处理。
    “时间差帧”,通过用前一帧减去当前帧来计算。
    输入光流。

    3.Fast通道的低通道容量
    表现最好的 β 值是 1/6 和 1/8(默认值)。然而,令人惊讶的是,我们的 SlowFast 模型中从 β=1/32 到 1/4 的所有值都可以改进仅慢速模型。特别是,当 β=1/32 时,Fast 通路仅增加了 1.3 GFLOPs(相对 ∼5%),但导致了 1.6% 的改进

    有趣的是,仅仅只有Fast路径的话只有51.7左右的acc,但是他却可以为Slow路径带来3.0%的提升,说明由Fast路径建模的底层表征在很大程度上是互补的。

    在AVA的训练中,使用了kinetic的权重作为初始化,采用的学习率调整策略是warm-up(是一种学习率调整策略,简单来说就是在一开始使用较小的学习率,然后慢慢变大),但验证集损失变化趋于饱和的时候就10倍的减少学习率。

    在这里插入图片描述

    将SO基线与其 SlowFast 对应物进行了比较,每个类别的 AP 显示在图 3 中。SF从 19.0 到 24.2 大幅提高了 5.2mAP(相对 28%)。。在类别方面(图 3),我们的 SlowFast 模型在 60 个类别中的 57 个类别中有所改进,与它的仅慢速对应物。 “拍手”(+27.7AP)、“游泳”(+27.4 AP)、“跑步/慢跑”(+18.8 AP)、“跳舞”(+15.9 AP)和“吃”( +12.5 接入点)。我们还观察到“跳跃/跳跃”、“挥手”、“放下”、“投掷”、“命中”或“切入”的较大相对增加。这些是建模动力学至关重要的类别。 SlowFast 模型仅在“接听电话”(-0.1 AP)、“谎言/睡眠”(-0.2 AP)、“射击”(-0.4 AP) 3 个类别中较差,并且它们的减少相对于其他人的增加较小。

    展开全文
  • 时空动作检测有两个目标,一个是识别视频中所有的动作实例,另一个是在时间以及空间上定位动作。 2.相关方法 之前的方法有基于frame-level,也就是基于每一帧先进行检测,然后通过一定的方法将基于每一帧的检测结果...

    1.概念
    时空动作检测有两个目标,一个是识别视频中所有的动作实例,另一个是在时间以及空间上定位动作。

    2.相关方法
    之前的方法有基于frame-level,也就是基于每一帧先进行检测,然后通过一定的方法将基于每一帧的检测结果在时间上进行融合,但是这种方法将时间与空间的信息割裂开来处理,最终效果并不好。
    基于clip-level的方法将一个视频片段作为输入,通过检测器检测出人物框,然后再通过3D网络等进行特征提取进而进行识别,这种方法要分为两个阶段进行,检测器在空间上给出动作实例的框,然后再进行动作识别的处理,这种方法对检测器的性能要求很高,并且计算量大,不利于应用。
    针对以上的问题,MOC-detector基于centernet无锚框的架构设计了单阶段的检测器,这使得训练更加容易同时效果也更好。

    3.MOC-detector简介
    MOC-detector采用全卷积的one-stage框架,将动作实例看作一系列移动的点,并在每一帧中点的位置回归出人的位置框,如下图

    在这里插入图片描述

    MOC-detector将任务分解为三个子任务
    1.中心检测 :检测动作实例的中心以及类别
    2.偏移估计:估计当前帧动作实例对于中心的偏移
    3.框回归:再每一帧的中心预测框大小
    首先,通过2D网络对每一帧进行特征提取,其次三个分支依据特征产生结果。

    1.Center Branch: Detect Center at Key Frame
    时序信息对于动作检测十分重要,该分支利用了时序的信息,通过一个全卷积的结构实现,该分支的输入为每一帧的特征在时序上的拼接。
    将2D Backbone输出的特征矩阵直接在时间上进行拼接,采用2D卷积来进行处理

    2.Movement Branch: Move Center Temporally
    这个分支通过关联相邻的帧在时间维度上来预测动作实例的中心,它利用时序信息来预测关于关键帧的中心偏移。输入与CenterBranch的输入相同

    3.Box Branch: Determine Spatial Extent
    与前两个分支不同,该分支没有利用时序信息,它基于当前帧进行框的预测.
    该分支的输入为每一帧的特征值,在每一帧上预测框。

    展开全文
  • 时空行为检测 Webcam Demo 分析

    千次阅读 热门讨论 2021-04-08 21:27:05
    MMAction2 中的时空行为检测模型1.1 模型构建源码1.2 数据构建源码1.3 demo_spatiotemporal_det.py 分析2. SlowFast 中的时空行为检测 Webcam Demo2.1 SlowFast Webcam 源码概述2.2 ThreadVideoManager2.3 run_demo...

    0. 前言

    • 最近打算基于 MMAction2 实现一个基于webcam的时空行为检测Demo,已提交 PR
    • 为了实现上面的功能,需要研究两个方面:
      • 如何使用 MMAction2 中时空行为检测模型,主要就是过一遍 demo_spatiotemporal_det 的源码
      • 时空行为检测 Webcam Demo 应该怎么写,主要就是过一遍 SlowFast 中 demo_net.py

    1. MMAction2 中的时空行为检测模型

    • 网上时空行为检测的源码分析比较少,作为 MMAction2 的 contribuer,既然写到这里了,那就稍微介绍一下这部分功能把。

    1.1 模型构建源码

    • MMAction2 中模型构建都是基于配置文件搭积木。
      • 每个模型由多个组件构成,每个组件可以看成是一个类型的积木。
      • 每一类模型(如2D行为识别、3D行为识别、时序行为检测、时空行为检测)都对应一个 meta architecture
        • meta architecture 这个词来自TensorFlow Object Detection,因为我也找不到更合适的词来形容。
        • meta architecture 定义了一类模型的基本结构,即这一类模型一般包含哪几个组件,前向过程一般是什么。
        • meta architecture 就是一类积木。
        • meta architecture 中的每一类组件也代表一类积木。
      • 从这个角度来说,Recognizer2D 就是2D行为识别模型的 architecture。
      • 那么,时空行为检测模型的 meta architecture 是什么呢?
        • mmdetection 中的 FastRCNN
        • 从源码层面非常漂亮,毕竟代码复用,不用写太多代码。
        • 从新手学习角度,就非常难受了,毕竟找不到这个类在哪里。
        • 源码可以参考 这里
    • 时空行为检测模型的主要组件:
      • FastRCNN:meta architecture,定义了整体模型流程以及组成部分。
        • 即,模型包括 backboneroi_head
      • backbone 就是一些3D特征提取结构,如SlowFast、SlowOnly等
        • 换句话说,模型的输入就是 SlowFast、SlowOnly 等backbone的输入
        • 输出传入 roi head
      • roi_head 就是将目标检测中的 roi 操作扩展到3维。
        • 模型的输出就是 roi head 的输出
        • 传入的参数就是 backbone 的结果以及 proposals(我们是fast rcnn,所以proposals是外部传入,而不是时空行为检测模型生成的)
    • 总而言之,MMAction2 中行为识别模型
      • 输入是图像以及proposals
      • 输出是一个长度为num_classes的list,list中每个元素是一个 num_proposals, 5 的ndarray对象。5维分别是bbox + score。

    1.2 数据构建源码

    • 本节进一步介绍一下MMAction2中时空行为检测模型的输入数据(只关心test,不关心train)。
    • 整体流程就是 val_pipeline,主要就是:
      • 获取从连续帧中按照一定规则提取若干帧,作为后续模型输入。主要就是每隔 frame_interval 提取一帧,一共提取 clip_len 帧图像。
      • 对图像进行预处理,包括短边resize以及norm操作。
      • 改变输入数据的格式为 NCTHW。
    • 模型的输入是一个dict,测试时模型输入主要需要 img, proposals 两个key。
      • 其中,img的就是经过预处理的图像。目前,test时bacth size必须是1,所以batch size可能是 1, 1, 3, 32, 256, 256,这个其实就是Recotnizer3D 模型的输入了。
      • proposals 就是人物的bbox,格式为 xmin, ymin, xmax, ymax,浮点数,数值范围是像素值(而不是0 -1之间)

    1.3 demo_spatiotemporal_det.py 分析

    • 这个Demo处理的是一个视频文件(而不是实时视频流)。
    • 基本流程就是:
      • 读取视频文件,将视频帧保存在 内存中 以及 本地文件 中。。。。。第一次看到的时候,吓到了。
      • 读取 label map,即一个 class id 到 class name 的字典
      • 将对内存中的视频帧进行短边resize到256
      • 读取 val_pipeline 中的 SampleAVAFrames,获取 clip_len/frame_interval信息,根据这两个信息以及命令行输入的 predict_stepsize 获取所有中间帧id。
        • 时空行为检测模型的一个输入可以看做一个clip,每个clip都对应了一个中间帧。
      • 使用 mmdet 获取所有中间帧的检测结果。
        • 这里就会用到保存在本地的视频帧
        • 要求使用的模型必须是 COCO 的,因为选择人物类别的时候,就按照COCO的格式,选择了 class 0
        • 最终得到的 bbox 是基于内存中的视频帧,即短边resize256后的视频帧,格式为 xmin, ymin, xmax, ymax,浮点数,数值范围是像素值(而不是0 -1之间),可直接作为时空行为检测模型的输入。
      • 构建时空行为检测模型,导入权重。
      • 遍历所有中间帧(以及对应的bbox),换句话说,就是遍历所有 clip,获取推理结果
        • 获取每个clip对应的视频帧下标,根据下标读取内存中的视频帧
        • 获取新对象(而不是直接改变内存中的视频帧),并进行处理,包括norm操作+改变格式为 1, 3, clip_len, height, width(不添加 batch size)+存入显存
        • 执行时空行为检测模型推理,获取推理结果
      • 融合 human detection 结果以及上一部的预测结果
        • 结果格式是一个长度为 num_clips 的 list
        • 每个元素代表一个clip的预测结果,通过一个元组表示,元组包含三个 bboxes, class names, class scores 三个部分
        • bboxes 是一个 ndarray 对象,shape是[num_proposals, 4],格式是 normed xmin, ymin, xmax, ymax
        • class names 和 class scores 都是长度为 num_proposals 的数组,数组的元素也是数组(因为一个proposal可能有多个class name 和 class score)
      • 展示结果
        • 这一步用到了上一部的结果,以及本地的视频帧
        • 将整体视频分为 num_clips 份,每一份使用相同的结果进行画框+展示。
        • 关于显示的参数有两个 predict_stepsize 以及 output_stepsize
        • 前者表示时空行为检测模型推理的频率,即每 predict_stepsize 帧预测一次行为标签。
        • 后者表示展示过程跳过多少针,即每 output_stepsize 帧展示一帧。比如原先fps是20,output_stepsize是4,那最终展示的视频就是5fps

    2. SlowFast 中的时空行为检测 Webcam Demo

    • 现在提供时空行为检测 Webcam Demo 的开源代码有:
      • YOWO:人体检测+行为识别于一体,与 MMAction2 的模型差别较大,没有太大参考价值。
      • Alphaction:模型差距较大,可能有一定参考价值,但代码太多还没细看。
      • SlowFast:多线程版,很大参考价值。
    • 其实按照前面的内容,写一个基于 MMAction2 的单线程版 Webcam SpatioTemporal Demo 已经没问题了。但总还是要看看大佬是怎么写的。

    2.1 SlowFast Webcam 源码概述

    • 功能包括了行为识别与时空行为检测。由于本文只关注时空行为检测,所以精简了一下。
    • 入口函数在demo_net.py中,精简后是:
    frame_provider = ThreadVideoManager(cfg)
    for task in tqdm.tqdm(run_demo(cfg, frame_provider)):
    	frame_provider.display(task)
    
    frame_provider.join()
    frame_provider.clean()
    
    • 因此,主要源码就是:
      • ThreadVideoManager
      • run_demo

    2.2 ThreadVideoManager

    • 功能:

      • 读取视频流数据是一个线程。
      • 展示导出结果是另外一个线程。
      • 还有一个主线程,为模型提供输入。
    • 首先,Demo中数据传输是通过 TaskInfo

      • 每个 TaskInfo 可以理解为一个clip的输入数据,主要内容包括 frames 以及其他一些元信息。
      • 另外,TaskInfo 是有 id 的按创建顺序从小到大开始编号。
    • 其次,对于这个类,一共有3个线程

      • 主线程,就是通过上面的 run_demo(cfg, frame_provider) 调用,调用的方法就是 __next__
        • 从 read queue中读取task。
        • run_demo 函数将读取的task作为model输入,获取预测结果、更新task,添加到 write queue 中。
      • put thread,从视频流中读取数据,构建task,更新 put_id,向 read queue 或 write queue 添加 task。
      • read thread,从 write queue 中读取task,更新 get_id,并输出(本地视频或cv2.imshow)当前clip还没有显示过的若干帧。
    • 有一堆线程安全的操作:

      • 读取/写入 put_id
      • 读取/写入 get_id
      • 读取/写入 write queue
      • 读取/写入 read queue

    2.3 run_demo

    • 定义了整体Demo的流程,精简后的代码如下
      • 数据读取类,前一节已经介绍,下面就是 frame_provider
      • 模型推理使用 ActionPredictor,是单GPU版本。
        • 多GPU版本的也有AsyncDemo,由于我不关注,所以相关代码取消了。
        • 后面就是使用 model.put(task)model.get() 来使用模型推理并获取结果。
    video_vis = VideoVisualizer(
        num_classes=cfg.MODEL.NUM_CLASSES,
        class_names_path=cfg.DEMO.LABEL_FILE_PATH,
        top_k=cfg.TENSORBOARD.MODEL_VIS.TOPK_PREDS,
        thres=cfg.DEMO.COMMON_CLASS_THRES,
        lower_thres=cfg.DEMO.UNCOMMON_CLASS_THRES,
        common_class_names=common_classes,
        colormap=cfg.TENSORBOARD.MODEL_VIS.COLORMAP,
        mode=cfg.DEMO.VIS_MODE,
    )
    
    async_vis = AsyncVis(video_vis, n_workers=cfg.DEMO.NUM_VIS_INSTANCES)
    model = ActionPredictor(cfg=cfg, async_vis=async_vis)
    
    seq_len = cfg.DATA.NUM_FRAMES * cfg.DATA.SAMPLING_RATE
    
    
    num_task = 0
    # Start reading frames.
    frame_provider.start()
    for able_to_read, task in frame_provider:
        if not able_to_read:
        	break
        if task is None:
        	time.sleep(0.02)
        	continue
        num_task += 1
    
        model.put(task)
        try:
        	task = model.get()
        	num_task -= 1
            yield task
        except IndexError:
        	continue
    
    while num_task != 0:
        try:
        	task = model.get()
        	num_task -= 1
        	yield task
        except IndexError:
        	continue
    

    2.4 ActionPredictor

    • 这个是同步版(单GPU)的模型推理与可视化工具。

      • 有异步版(多GPU版),即AsyncDemo
    • 主要包括两个对象

      • Predictor:包括构建模型、导入权重、数据预处理(resize/crop/norm等)、模型推理,其中还包括一个 detectron2 的目标检测模型。
      • AsyncVis:后面会单独介绍。
    • 主要函数就是:

      • put:执行模型推理,并可视化数据
      • get:获取推理结果(保存在一个task对象中),返回task对象
    • AsyncVis

      • 本质就是一个多进程的生产者、消费者模式类。
      • 生产者就是调用 AsynVis 对象的 put 方法,向进程安全的task_queue队列中放入数据。同时,也会向 get_indices_ls 数组添加 task.id
      • 消费者,就是通过一个 VideoVisualizer 对象作为输入,构建 num_workders 个进程。
        • 消费者会从 task_queue 中读取数据,并将结果放入线程安全的 result_queue 中。
        • 消费者也会将 result_queue 中的数据转换为线程不安全的 result_data 中。
        • 每个进程的实际操作就是 draw_predictions 函数,即对指定的task画图。
      • put操作就是向task_queue 中添加数据,get 操作就是向 result_queue 中获取数据。

    2.5 结果可视化

    • 入口函数:即上面提到的 draw_predictions,主要用到的就是 task 对象以及 VideoVisualizer 对象。
    • draw_predictions 方法主要就是一些数据预处理,构建 VideoVisualizer.draw_clip_range 所需的输入数据,并调用该函数,不关心细节。
    展开全文
  • 时空行为检测数据集现状2 MultiSports 介绍3 现有时空行为检测数据集统计与对比4 实验结果 0. 前言 相关资料 官方资料:论文,官网,竞赛链接(2021.9.1) 发布时间:ICCV 2021 发布机构:南京大学 一句话总结:...
  • 针对入侵检测系统使用单个事件作为攻击检测的特征会导致较高误报率的问题,提出了利用贝叶斯网络模型进行跨空间的事件关联和利用卡尔曼滤波器线性模型进行跨时间的事件关联的内网攻击检测方法。基于该方法实现了一个...
  • 针对这个问题,本文提出了一种基于时空图夜间车流量检测的有效方法。该方法首先将道路交通监控视频拍摄到的的图像,利用时空图转换为时间-空间坐标连续图。然后通过时空图提取到的车灯信息,采用车灯配对的方法来...
  • 时空特征的深度学习异常事件检测
  • 视频行为识别与轻量化网络的前沿论文、代码等 ...CVPR 2020 行为识别/视频理解论文汇总 ...CVPR 2020 论文大盘点-动作识别篇 ...CVPR 2020 论文大盘点-动作检测与动作分割篇 https://www.sohu.com/
  • 针对多传感器系统中目标检测检测精度与...最后给出了基于动态时空特性软硬协作决策的目标检测及其传感器头结构设计方案。实验表明,所提目标检测方案在检测精度、检测效率、资源利用率和覆盖率等方面具有明显优势。
  • 人工智能-目标检测-基于时空切片的运动目标检测与跟踪方法研究.pdf
  • 提出一种基于贝叶斯惊奇计算的视频异常检测方法。用块匹配运动估计方法提取运动特征(如运动幅度、方向),得到多尺度运动矢量直方图。使用空间维度与时间维度上惊奇计算相结合的度量方法,既可以检测“个体异常行为”...
  • 从时序行为检测时空行为检测 2 个方面对相关文献做了细致地分类,综合分析了每一类别中不同研究方法的思路和优缺点,并阐述了基于弱监督学习、图卷积神经网络、注意力机制等新兴研究话题的相关方法; 介绍了行为...
  • 人工智能-目标检测-时空非平稳强杂波抑制与微弱运动目标检测技术.pdf
  • 它是本文的实现:一种基于时空注意力的方法和一种用于遥感影像变化检测的新数据集。 在这里,我们提供了时空注意力神经网络(STANet)的pytorch实现,用于遥感图像变化检测。 变更记录 20210112: 添加PAM的预训练...
  • 基于时空融合图网络学习的视频异常事件检测.docx
  • 一种基于时空相关性和异常检测的改进WSN节能策略
  • 互联网环境中大规模的视频拷贝检测面临拷贝变化多样性问题和数据量大...在标准数据集上的对比实验证明:提出的算法在各种常见的拷贝变化下可以得到较高的检测精度,特征匹配的时空消耗低,对大规模的视频拷贝检测行之有效.
  • 本文提出了基于时空特性的运动目标检测算法.由背景减法检测到运动目标的位置、形状、大小信息,然后采用以彩色梯度为外部能量的活动轮廓(snake)算法获得准确的运动对象轮廓.实验证明,本算法能够很好地提取出运动...
  • 为实现海量新闻视频的有效索引和检索,提出了一种基于时空切片(spatio-temprol slice,STS)特性的新闻主播检测方法。通过对时空切片的模式分析,聚类和信息融合,实现了新闻主播镜头的自动检测。该方法完全通过对新闻...
  • 通过对视频帧序列时空特性的分析,采用“局部趋同,全局异化”的策略,提出了一种联合时域和空域SIFT点特征的特征提取方法。实验表明,基于该特征的同源视频检测方法对于一定的视频变化具有较好的鲁棒性和检测精度。
  • 提出一种基于超像素时空特征的视频显著性检测方法。所提方法可对图像进行超像素分割, 提取颜色梯度和运动梯度特征, 以构建超像素级时空梯度图。用平均加权测地距离来衡量时空梯度图上每一个超像素相对于其邻域的时空...
  • 基于局部像素的快速时空特征点检测方法
  • 提出了一种新的时空图计算方法,并且利用时空图对车流量进行实时检测。该方法中,首先使用时空图将交通监控的视频转换成空间信息与时间信息都包含在内的连续图像,然后对时空图进行边缘提取、图像分割等处理,利用...
  • 针对现有的依赖数据时空相关性的异常检测技术中对邻节点数据及其本身可靠性的忽略,建立了一种基于历史数据及可靠邻居协作的两步节点异常数据检测算法NADST。实验结果表明,该算法能在实现高检测精度的同时将虚警率...
  • 传统的视频显著区域检测方法运算量大且难以处理包含复杂运动的视频,本文提出一种基于时空模型的快速显著区域检测方法。该方法用一种新的模糊聚类算法对特征点的运动轨迹进行无监督聚类,对不同运动类型进行分类。在...
  • 本文受到版权保护,未经允许,不得以任何方式引用和转载 Survey of Spatial Temporal Anomaly detectionProblemsOutlier trajactory detectionEvent detectionPattern detection..To be continuedMethodsDistance-...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,301
精华内容 5,720
关键字:

时空检测