视频自监督一. STCR: 一个基于数据增强的简单有效正则项 (降低静态信息的影响)

今天介绍一个我们近期做的关于视频自监督的简单工作:

Self-supervised learning using consistency regularization of spatio-temporal data augmentation for action recognition,相关代码也update到后续工作对应的github上。

https://arxiv.org/abs/2008.02086​arxiv.orgFingerRec/Self-Supervised-Temporal-Discriminative-Representation-Learning-for-Video-Action-Recognition​github.com

1. Overview

本文针对视频自监督任务基于Consistency Regularization设定了一个通用/简单有效的正则项, 和其它已有的模型可以互补,也可以单独优化transfer到down-stream任务(如action recognition, video retervial)。

2. Motivation

对于Action Recognition这个task, 对比Image, Video包含的额外Temporal information扮演很重要的角色, 进年来如何从无标数据里面学习到temporal信息是这个领域的核心问题。 常见的做法就是预设一种与时序相关的Pretext task, 模型想要解决这些task必须学习某种temporal representation,代表性的有从Shuffle&Learn 到 SpeedNet。与之相反,我们的方法是我们观察到现有的强模型存在的问题,去设计self supervised 的方式去缓解标记数据及模型本身带来的不足。

具体而言,我们注意到当前的全监督模型存在两个显著的问题:

(1). 如上图,action中direction information 很大程度上决定了运动的语义,同一个视频时序翻转后会出现两种完全相反的语义 (对应不同的action label)。然而现有的3D CNN在feature encoding 的过程中部分丧失了direction information. 通过confusion matrix我们观察到, 在 benchmark上表现最强力的强监督I3D/SF Net等模型仍然关于Sit/Stand Up等反向信息完全相反的动作会有很严重的混淆;

(2). 如上图,由于真实的video不可避免的存在显著的implicit bias[1] (比如通过看到水识别游泳,看到马识别骑马), 现有的模型很容易遇到 object 或者 background的影响, 从而损害时序信息的学习, 使得在类似场景或者有同样物体存在的时候泛化性很差。

因此,我们想让模型用自监督的方法去缓解3D Backbone存在的这两个问题。

针对问题1,我们的想法是构造逆序的video, 让3D CNN对应的输入保持一致。

针对问题2,一个直观的想法就是能不能完全remove掉background, 如下图,

然而Segmentation很耗时且效果在low-resolution上效果很差,因此最后考虑通过Data Augmentation 把static frame当成noise.

3. 从Consistency Regularization 讲起

Consistency Regularization[1] 是在semi-supervised learning 里面非常典型的方法; 想法是对同一个样本

, 经过不同的 Augmentation之后模型的预测结果应该保持不变;

通常,这一项对于半监督中的无标数据进行计算,直观来看,这个约束本身就是unsupervised的。很自然的,我们考虑把上面的两个motivation通过video generate的形式构造。具体实现如下:

4. Method

Pipeline

整个pipeline如上图,延续着Consistency Regularzation[2] 的思路,我们分为两个Branch, 一路Clean表示普通的Video,另一路表示引入Noise之后的, 2路不同的输入经过3D Backbone之后,我们希望feature 在 temporal-level和feature-level保持consistency。

其中

的具体实现如下:

Spatio-temporal Transformation

Transformation由简单的矩阵Flip和Rotation实现。共4(rotation) x 4(flip)=16 type.

Intra-video Mixup

Mixup[3] 是 Image Classification 里面常见的增强范式。其核心思想是对已有有标数据,通过Mix的操作去生成多样的新样本,让决策边界更加光滑。

其中

是不同的样本以及其对应的标签
.

由于是在自监督的场景下,没有对应的label, 因此我们直接把一个静态帧当成noise和视频内的其它帧进行线性插值。最终的Intra-Video Mixup的实现如下:

其中

是从Beta分布采样的结果,不过我们发现均匀分布和Beta分布的结果基本一致。

如何避免trivial solution

如果STCR单独优化,很容易陷入到trivial solution, 因此在单独优化的时候把spatiao-temporal transformation对应的Inverse当作类别, 去掉逆变换变为分类任务。如果是和已有的Pretext, 则按照Pipeline计算。

5.Experiment & Discussion

STCR可以单独训练也可以作为正则项引入到已有的模型里面。在两个数据集上都有比较大的增益

Spatio-temporal Transformation可视化:

可视化3D Backbone提出的特征, 从时序维度上来看,我们的模型对inverse之后的video提出的特征比backbone模型更具对称性。

Intra-video Mixup可视化

从热图来看,在有Intrai-videoMixup 之后的模型对运动区域更敏感,一定程度上降低了background的影响。

把经过t-sne可视化之后,我们发现经过IV Mixup之后的样本在特征空间更加分散,经过finetune之后取得了更好的效果。

有意思的是,当我们把增益最大的5个类别和负增益最大的5个类别的视频拿出来观察发现,带来负向增益的都是如骑马,骑自行车,打球这种 Spatial-related class (通过单个图像就可以分类出)

6. 总结

Implicit Bias是在主流的Video数据集里都显式存在的问题,我们从去年开始都在关注解决这个问题。 此前的方法都在关注使用一个尽可能大的DataSet去构造一个尽可能强力的分类模型,而没有探索Data Augmentation带来的增益。 受启发于Consistency Regularization, 我们期望把这种Bias当成一种noise去让网络对static的信息不敏感, 最终落实到了两个简单的实现上。后续我们把这种Augmentation的思想继续深入了一下,详细见 视频自监督二:

很遗憾,最终提出的方法非常简单, 没有做出特别有意思的工作~

引用

[1]. Girdhar R, Ramanan D. Cater: A diagnostic dataset for compositional actions and temporal reasoning[J]. ICLR, 2020.

[2]. Laine S, Aila T. Temporal ensembling for semi-supervised learning[J]. arXiv preprint arXiv:1610.02242, 2016.

[3]. Zhang H, Cisse M, Dauphin Y N, et al. mixup: Beyond empirical risk minimization[J]. arXiv preprint arXiv:1710.09412, 2017.

把一个dataset的表放在另一个dataset里面_视频自监督一. STCR: 一个基于数据增强的简单有效正则项 (降低静态信息的影响)...相关推荐

  1. 把一个dataset的表放在另一个dataset里面_现在开始:用你的Mac训练和部署一个图像分类模型...

    可能有些同学学习机器学习的时候比较迷茫,不知道该怎么上手,看了很多经典书籍介绍的各种算法,但还是不知道怎么用它来解决问题,就算知道了,又发现需要准备环境.准备训练和部署的机器,啊,好麻烦. 今天,我来 ...

  2. 一个页面区分管理者和普通用户如何设计_产品经理要做的操作权限/数据权限设计...

    产品经理在工作中还需要知道一个:用户权限设计能力.权限设计理念贯穿于后台产品.以及用户前端产品. 权限能力包括两类:数据权限.系统操作权限 有的人会好奇,为什么前端产品会有有权限管理的要求?接下来我将 ...

  3. 把一个dataset的表放在另一个dataset里面_使用中文维基百科语料库训练一个word2vec模型并使用说明...

    ​本篇主要介绍如何通过中文维基百科语料库来训练一个word2vec模型. 相关资料下载: 中文维基百科下载地址:https://dumps.wikimedia.org/zhwiki/ WikiExtr ...

  4. java封装一个类MyStock存放在cn.com.my包中。

    封装一个类MyStock存放在cn.com.my包中.这个类包括:(1)一个名为id的int数据字段表示股票代码. (2)一个名为name的字符串数据字段表示股票名称. (3)一个名为previous ...

  5. 写一个 iOS 复杂表单的正确姿势

    前言 这几天项目的新需求中有个复杂的表单界面,在做的过程中发现要比想象中复杂很多,有好多问题需要处理.有很多东西值得写下来好好梳理下. 需求分析: 6创建网店1.png 上图便是UI根据需求给的高保真 ...

  6. 内存只有100G,要全表扫描一个200G大表,会不会把内存用完?

    主机内存只有100G,现在要全表扫描一个200G大表,会不会把DB主机的内存用光? 逻辑备份时,可不就是做整库扫描吗?若这样就会把内存吃光,逻辑备份不是早就挂了? 所以大表全表扫描,看起来应该没问题. ...

  7. 写出一个美观的表单页

    如何写出一个美观的表单页 前言 最近做项目总能遇到各种各样,千奇百怪的需求.用bootstrap等ui框架不能满足客户需求.只能开动自己脑筋,自己写一些样式. 如何调整input样式(包括placeh ...

  8. php中自己写的类放哪里,class类 - ThinkPHP 3.2.3,我有一个class,应该放在哪里?

    我有一个class,class的名字叫get_user_info,这个class里有很多function,我应该把这个class放在哪里,才能在Controller中调用到这个class里的funct ...

  9. psfaddtable - 添加一个Unicode字符表到控制台字体中

    总览 psfaddtable 字体文件 表文件 [输出文件] 描述 Psfaddtable 命令融合了 字体文件 提供的 .psf 格式的控制台字体和 表文件 提供的Unicode字符表, 生成一个带 ...

最新文章

  1. R语言使用pwr包的pwr.f2.test函数对线性回归模型进行效用分析(power analysis)、在已知效应量(effect size)、显著性水平、效用值的情况下计算需要的样本量
  2. reactjs Context的使用:一种组件间的通信方式
  3. JAVA费罗切测评_暴力美学的终极形态 JAVA Feroce 2评测
  4. Eclipse如何新建TOMCAT并配置Server Locations和Publishing属性
  5. 微软补丁星期二:修复多个严重 RCE 和IE 0day
  6. cgi进程设置多少 宝塔_Python Multiprocessing 多进程、进程守护、锁、队列使用介绍...
  7. html菜鸟教程选项卡,jQuery EasyUI 布局插件 – Tabs 标签页/选项卡 | 菜鸟教程
  8. 在WordPress中重新排序博客文章的4种简单方法(循序渐进)
  9. ROS2 C++ Subscriber Publisher 订阅发布例子
  10. 南京信息工程大学计算机博士点,南京信息工程大学2021年招收攻读博士学位研究生专业及考试科目...
  11. 微信支付查询订单V2 接口
  12. Android 9.0 去除锁屏界面及SystemUI无sim卡拨打紧急电话控件显示功能实现
  13. RT-Thread Studio学习 驱动攀藤PMS5003ST PM2.5传感器
  14. Button 点击没有反应
  15. GDI+绘图轻松入门[5]-绘图坐标的理解和应用
  16. 【人工智能】作业1: Bait游戏 实验报告
  17. 第一章计算机网络体系结构(二)
  18. 腾讯《QQ堂》上线17年,将于2022年4月20日停服
  19. 台州银行笔试考什么_台州银行历年真题笔试题面试题大全
  20. 树 ( 树形结构 + 数学 )

热门文章

  1. python 图像数据类型及颜色空间转换
  2. OpenCL与异构并行计算
  3. 61 Celery Beat 任务调度
  4. linux系统的通讯工具,Linux下即时通讯工具:Pidgin 2.5.0正式发布了
  5. 三种平摊分析的方法分别为_[2020.Vol.188]表征城市树木滞尘:一种景观分析方法...
  6. python arp脚本_Python scapy 实现一个简易 arp 攻击脚本
  7. linux suse最新版本,查看SUSE LINUX版本
  8. python自定义类如何定义向量的模_gensim的word2vec如何得出词向量(python)
  9. SpringCloud中Feign服务调用请求方式及参数总结
  10. Git回滚代码到某个commit