MPN (Learning Normal Dynamics in Videos with Meta Prototype Network)代码阅读
Learning Normal Dynamics in Videos with Meta Prototype Network
Hui Lv1, Chen Chen2, Zhen Cui1*, Chunyan Xu1, Yong Li1, Jian Yang1
1PCALab, Nanjing University of Science and Technology, 2University of North Carolina at Charlotte
一、论文阅读
该论文通过在AE baseline上加入动态原型单元DPU,为不同的正常模式构建动态原型,每个常态原型编码场景的不同正常属性(diverse normal attributes)。该论文验证了动态原型建模正常模式分布的可行性。
关键词:对场景构建动态原型、注意力机制、端到端学习
解决了什么问题:记忆模块无法处理在测试数据中新出现的场景。
该论文的任务是:提取出正常模式的场景动态原型;视频异常检测。
其中每种原型代表一种被记忆的场景元素,如下图:
二、代码阅读
论文代码中表现出的总的结构如下所示
参数设定:
batch_size = 4
epochs = 1000
t_length = 5 # length of the frame sequences
segs = 32 # num of video segments
fdim, pdim = [128], [128] # features dim and prototype dim
1. 数据集加载
预设batch_size=4,_time_step=4,_num_pred=1,segs=32(图中的n),每个视频分为32段,随机选择4段,从中抽取出4+1个视频帧用于训练。每个图像被resize为256*256。最终作为模型输入的tensor的shape为[20, 3, 256, 256]。
核心代码
2. DPU(Dynamic Prototypes Units)
Attention 部分
进入Attention部分的输入是来自于解码器的特征向量。分为以下几步:
- 将keys输入multi-heads,得到一个多头注意力权重multi_head_weights[4, 65536,10, 1]。
- 此后对multi_head_weights作一个softmax操作,得到每个通道上每个像素点的受关注程度。
核心代码
Ensemble 部分
输入该部分的输入有:特征向量key和多头注意力权重multi_head_weights。
- 将reshape后的key[4, 65536, 1, 128]与多头注意力权重相乘得到新的multi_head_weights[4, 65536, 10, 128].
- 将新的multi_head_weights与原始输入key相乘得到原型向量protos。
- 然后将不同像素位置上的原型向量求和,可以将原型向量理解为对图像上的所有像素点的注意程度。
上面的步骤对应论文中的公式1:ptm=∑n=1Nωtn,m∑n′=1Nωtn′,mxtnp_t^m=\sum\limits_{n=1}^N\frac{\omega_t^{n,m}}{\sum_{n'=1}^N\omega_t^{n',m}}\text{x}_t^nptm=n=1∑N∑n′=1Nωtn′,mωtn,mxtn。
核心代码
Retriving 部分
该步骤的输入为:原型向量protos和解码器输出(特征向量)query。
- 将query与prots计算得到分数scores[4, 65536, 10],此处的分数即每个特征与各个原型的相似程度。
- 将分数与protos分别维度拓展后相乘得到new_query,即根据相似程度的比例组合protos构成新的特征向量new_query。
- 然后再将新特征向量与原特征向量相加,覆盖new_query。
对应论文中的公式2:x~tn=∑m=1Mβtn,mptm\tilde x_t^n=\sum\limits_{m=1}^M\beta_t^{n,m}p_t^mx~tn=m=1∑Mβtn,mptm。
核心思想是利用正常信息丰富自动编码器的输出编码,在抑制异常部分的同时提高对视频帧正常部分的预测。DPU的输出编码通过剩余自动编码器层用于后期帧预测。
核心代码
3. 损失函数
该论文的损失函数由三个部分组成:loss_pixel
——预测损失LfraL_{fra}Lfra;fea_loss
——重构损失的compact部分LcL_cLc;dis_loss
——重构损失的diversity部分LdL_dLd。
对应论文:
L=Lfra+λ1Lfea=Lfra+λ1(Lc+λ2Ld)\begin{aligned} L &= L_{fra}+\lambda_1L_{fea}\\ &=L_{fra}+\lambda_1(L_c+\lambda_2L_d) \end{aligned} L=Lfra+λ1Lfea=Lfra+λ1(Lc+λ2Ld)
3.1 Feature Reconstruction Loss
Lfea=Lc+λ2LdL_{fea}=L_c+\lambda_2L_dLfea=Lc+λ2Ld
3.1.1 dis_loss
对应LdL_dLd
关键代码如下,其中γ\gammaγ在代码中设置为1。此处的dis_loss体现的是每个原型之间要有足够的差异。
3.1.2 fea_loss
对应LcL_cLc
其中β\betaβ代表特征向量和原型之间的相关分数。
关键代码如下,步骤:
- 获得每个特征向量[4, 65536, 128]对应的两个最相似原型的索引。
- 将每个特征向量对应的原型[4, 10, 128]放入一个Tensor中[4, 65536, 128]。
- 计算每个特征向量与其对应原型向量的MSE损失。
该损失用于紧凑原型构建正常模式的编码。
3.2 Frame Prediction Loss
对应代码里的loss_pixel
首先将更新过后的特征向量通过输出头得到预测向量[4, 3, 256, 256],然后计算预测向量和原始帧通过编码后得到的图像之间的MSELoss。
原始输入为4个重构帧+1个预测帧,此处的输出便对应的是预测帧,通过计算原始预测帧yty_tyt和输出预测帧y^t\hat y_ty^t之间的L2距离来保证模型的预测效果。
4. 其他
这个loss函数并没有被用到。loss_D = args.loss_fra_reconstruct * loss_pixel + args.loss_fea_reconstruct * fea_loss + args.loss_distinguish * dis_loss
可见。
5. 代码测试
BUG1:ValueError: not enough values to unpack
修改为:
outputs, fea_loss = model.forward(imgs[:, :3 * 4], update_weights, False)
BUG2: IndexError: index 7 is out of bounds for axis 0 with size 0
在度量异常分数和AUC时遇到的bug:
定位问题发现:vdd = video_num if args.dataset_type != 'avenue' else 0
,发现vdd在测试数据集为avenue时不会改变,但代码中
会导致psnr_list只有第一个视频对应的列表会增加分数,但是测试时共有21个视频。
三、实验结果
最终结果:
在Avenue数据集上与其论文中的结果差距有点大。
MPN (Learning Normal Dynamics in Videos with Meta Prototype Network)代码阅读相关推荐
- 论文《Learning both Weights and Connections for Efficient Neural Network》阅读笔记
因为对深度压缩中的剪枝不太理解遂读了原文作者更早的这篇详细讲网络剪枝的文章点击打开链接 剪枝的过程为: 1.首先剪枝的前提是对已完成训练的网络 2.进行剪枝 要点:根据一个阈值去裁剪参数 a.阈值 ...
- 【ACMMM 2022】Learning Hierarchical Dynamics with Spatial Adjacency for Image Enhancement
[ACMMM 2022]Learning Hierarchical Dynamics with Spatial Adjacency for Image Enhancement 代码:https://g ...
- 视频分割--Learning to Segment Instances in Videos with Spatial Propagation Network
Learning to Segment Instances in Videos with Spatial Propagation Network CVPRW2017 https://github.co ...
- 视频中的运动特征--Learning Motion Patterns in Videos
Learning Motion Patterns in Videos CVPR2017 Torch code: http://thoth.inrialpes.fr/research/mpnet 本文要 ...
- Occupancy Flow: 4D Reconstruction by Learning Particle Dynamics(2)
Occupancy Flow: 4D Reconstruction by Learning Particle Dynamics(2) 一直在思考Lcorr和Lrecon的区别和各自的作用,下面用Lc和 ...
- 单目深度估计 | Learning Depth from Monocular Videos using Direct Methods 学习笔记
文章目录 摘要 1. 论文主要贡献: 2. 从视频中学习预测深度 2.1 尺度模糊 2.2 建模姿态估计预测器 3. 可微分直接视觉测距法 3.1 直接视觉测距法(DVO) 3.2 可微分的实现 4 ...
- 024_SSS_Occupancy Flow: 4D Reconstruction by Learning Particle Dynamics(ICCV2019)
Occupancy Flow: 4D Reconstruction by Learning Particle Dynamics(ICCV2019) 本文提出了一种利用Occupancy Flow,一种 ...
- 【Deep Learning 二】课程一(Neural Networks and Deep Learning),第二周(Basics of Neural Network programming)答案
课程一(Neural Networks and Deep Learning),第二周(Basics of Neural Network programming)答案 ----------------- ...
- Learning a Deep Single Image Contrast Enhancer from Multi-Exposure Images阅读札记
Learning a Deep Single Image Contrast Enhancer from Multi-Exposure Images阅读札记 论文发表于2018年的TIP. 1 Ab ...
最新文章
- 学习vue的双向数据绑定的原理
- IOS Animation-CAShapeLayer、UIBezierPath与Animation的结合
- 存在于实数域的微观粒子
- 请问如何把.net framework框架集成在安装程序里头?
- android自定义模态框,安卓开发自定义弹出框的简单方式(纯代码布局)
- 【Linux】一步一步学Linux——dnsdomainname命令(174)
- git远程仓库上传及本地仓库创建
- 如何用php查不同,php-MySql调查不同查询
- C++ string容器
- 截取网页中的Flash
- 大数据技术Spark详解
- 快速从B站下载视频到本地(无需安装软件)
- 视频网站ts流媒体服务器,流媒体服务器支持HLS,RTMP,RTSP,HTTP-FLV,HTTP-TS,HTTP-AAC输出...
- AR眼镜,离替代手机还有多远?
- 后缀.phobos勒索病毒解密成功恢复sql文件 数据恢复
- 唐宇迪学习笔记3:Python数据可视化库——Matplotlib
- ML之PDP:基于FIFA 2018 Statistics(2018年俄罗斯世界杯足球赛)球队比赛之星分类预测数据集利用DT决策树RF随机森林+PDP部分依赖图可视化实现模型可解释性之详细攻略
- SpringMVC一:概述、环境搭建及开发流程
- 小程序(创客+)一点一点搬家(解读)
- android-调用系统的ContentPrivder获取单张图片实现剪切做头像及源码下载
热门文章
- 【Linux入门学习之】Ubuntu常用软件
- 小爱(小米),天猫精灵(阿里),小度(百度),小艺(华为)智能家居系统选择
- 推荐几款公众号写作必备工具
- 芯片SA58672(功放芯片)
- mysql数据库下载、安装、使用
- 微信小程序接口文档PHP,微信小程序API 导航
- 隐藏在发表的宏基因组文章背后故事,如何发掘和学习
- 【自然语言处理】韩语基础与入门(1)
- ajax三种错误ie,ie下jquery ajax 80020101错误的解决方法
- 超过100w条数据表的分页查询优化