【论文阅读 + 核心代码定位解读】(2023 AAAI)HiCLR

news2025/1/16 5:40:01

Hierarchical Consistent Contrastive Learning for Skeleton-Based Action Recognition with Growing Augmentations

Contribution

  1. 直接使用 strong augmentations 会导致图片/骨架点序列的结构变形语义信息损失,从而导致训练过程的不稳定。于是本文提出了一种逐级融合(hierarchically integrates)strong augmentations 的设计,并提出逐级一致性对比学习的框架 hierarchical consistent contrastive learning framework, HiCLR
  2. 不对称的逐级学习方式(asymmetric hierarchical learning)来约束正样本对特征的一致性,将 “应用了 strong augmentations 的骨架点特征” 往 “应用了 weak augmentations 的骨架点特征” 方向拉近(单向),以此利用 strong augmentations 带来的丰富信息提升模型的表征能力。
  3. 提出了三种 strong augmentation: Random Mask, Drop/Add Edges, 和 SkeleAdaIN. 需要注意的是:直接在经典的对比学习框架中使用这些 strong augmentations 会起反效果,但这些 strong augmentations 配合本文提出的逐级一致性对比学习的框架(HiCLR)可以带来明显提升。

Method

本文的 HiCLR 是基于经典对比学习框架 MoCo v2(对应最下面的两个分支)。

Strong Augmentation for Skeleton

本文定义了三个 augmentation sets

1. Basic Augmentation Set(BA):spatial transformation Shear and a temporal transformation Crop.

2. Normal Augmentation Set(NA)Spatial Flip, Rotation, Gaussian Noise, Gaussian Blur, and Channel Mask

3. Strong Augmentation Set

  • Random Mask
    • A random mask for the spatial-temporal 3D coordinate data of the joints. It can be viewed as a random perturbation of the joint coordinates.
    • 代码实现:https://github.com/JHang2020/HiCLR/blob/49ffdf85231f19c1c7795ec63fb8d25ea96d37cf/processor/utils.py#L42-L57
  • Drop/Add Edges (DAE)
    • We randomly drop/add connections between different joints in each information aggregation layer. The target to be augmented is the predefined or learnable adjacency matrix for the graph convolution layer and the attention map for the transformer block.
    • 代码实现:https://github.com/JHang2020/HiCLR/blob/49ffdf85231f19c1c7795ec63fb8d25ea96d37cf/net/st_gcn.py#L71-L100
  • SkeleAdaIN
    • Inspired by the practice of style transfer (Huang and Belongie 2017; Karras, Laine, and Aila 2019), we exchange statistics of two skeleton samples on the spatial-temporal dimension, i.e., the mean and the variance of the style sample are transferred to the content sample, to generate the augmented views. Since this transformation does not change the relative order of joint coordinates, we maintain the semantics of skeleton sequences unchanged.
    • 代码实现:https://github.com/JHang2020/HiCLR/blob/49ffdf85231f19c1c7795ec63fb8d25ea96d37cf/net/skeletonAdaIN.py

Gradual growing augmentation

图中第三~第一个分支的数据增强操作在前一个分支的基础上进行增加。

核心代码如下:

https://github.com/JHang2020/HiCLR/blob/49ffdf85231f19c1c7795ec63fb8d25ea96d37cf/feeder/ntu_feeder.py#L82-L118

https://github.com/JHang2020/HiCLR/blob/main/processor/pretrain_hiclr.py#L100

https://github.com/JHang2020/HiCLR/blob/49ffdf85231f19c1c7795ec63fb8d25ea96d37cf/net/hiclr.py#L113-L117

Asymmetric hierarchical learning

单方向将 “应用了 strong augmentations 的骨架点特征” 往 “应用了 weak augmentations 的骨架点特征” 方向拉近

sim() 可以是任何衡量相似性的函数,本文用的是 KL Divergence

核心代码:https://github.com/JHang2020/HiCLR/blob/49ffdf85231f19c1c7795ec63fb8d25ea96d37cf/net/hiclr.py#L180-L187

Total Loss

其中,InfoNCE Loss 只应用在第三和四分支生成的 pairs 上

代码:https://github.com/JHang2020/HiCLR/blob/main/processor/pretrain_hiclr.py#L101-L109

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1281174.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【BLE基础知识】--Slave latency设置流程及空中包解析

1、Slave latency基本概念 当BLE从设备对耗电量要求较高时,若需要节省耗电量,则可以通过设置Slave Latency参数来减少BLE从设备的耗电。 Slave Latency:允许Slave(从设备)在没有数据要发的情况下,跳过一定…

SQL Server 数据库,分离和附加数据库

2.2.4分离和附加数据库 如果要将数据库更改到同一计算机或不同计算机的不同SOL Server实例中,或要移动数据库文 件存储的位置,分离和附加数据库会很有用。可以将数据库的数据文件和日志文件从所在实例分离 出来,然后将它们重新附加同一或其他…

SpringDataRedis 操作 Redis,并指定数据序列化器

文章目录 1. SpringDataRedis 概述2. 快速入门2.1 导入pom坐标2.2 配置文件2.3 测试代码2.4 数据序列化器2.5 StringRedisTemplate2.6 总结 1. SpringDataRedis 概述 SpringData 是Spring 中数据操作的模块,包含对各种数据库的集成,其中对Redis的集成模…

KDE环境文件夹user-dirs为英文

KDE环境文件夹user-dirs 修改KDE主页文件夹为英文 该文件路径 ~/.config/user-dirs.dirs打开后会发现里面的内容如下 # This file is written by xdg-user-dirs-update # If you want to change or add directories, just edit the line youre # interested in. All local …

STM32踩坑--串口发送乱码

一、发现问题 今天在STM32F407新板子上测试串口时,发现发送数据一直乱码。 二、解决问题 针对STM32F407系列校准PLLCLK时钟: ①由 时钟树 可以看出PLLCLKHSE(高速外部时钟)*N/(M*P)。因为SYSTICK一般取最高的时钟168M&#xff…

行为型剩余的模式

1.中介者模式 package com.jmj.pattern.mediator;public abstract class Mediator {public abstract void constact(String message,Person person); }package com.jmj.pattern.mediator;public class MediatorStructure extends Mediator{private HouseOwner houseOwner;priva…

Elasticsearch:什么是大语言模型(LLM)?

大语言模型定义 大语言模型 (LLM) 是一种深度学习算法,可以执行各种自然语言处理 (natural language processing - NLP) 任务。 大型语言模型使用 Transformer 模型,并使用大量数据集进行训练 —— 因此规模很大。 这使他们能够识别、翻译、预测或生成文…

PMP-01

考纲 需要看的书籍 学习计划

设计模式之原型模式(2)--深拷贝的实现图文讲解

目录 前言Clone方法复制值类型变量引用类型成员变量只复制引用浅拷贝变深拷贝 示例详解注意事项总结 前言 在上一篇原型模式博客的基础上,今天第二次写,会详细讲解一下从浅拷贝到深拷贝的实现,我也有专门写过一篇关于浅拷贝与深拷贝的文章&am…

【机器学习】简单认识监督学习

简单认识监督学习 ⭐️Supervised learning⭐️Examples⭐️Specific example⭐️两种类型的监督学习算法🌙回归算法🌙分类算法 ⭐️总结 Hi~大家好呀!经历了暑假期间短暂的接触机器学习的一些算法,之后又对深度学习、yolo系列有些…

C++二维数组名到底代表个啥

题目先导 int a[3][4]; 则对数组元素a[i][j]正确的引用是*(*(ai)j)先翻译一下这个*(*(ai)j),即a后移i解引用,再后移j再解引用,这么看来a就应该是个二维数组,第一层存储行向量,一次解引用获得行向量的地址,…

【Leetcode题单】(01 数组篇)刷题关键点总结03【数组的改变、移动】

【Leetcode题单】(01 数组篇)刷题关键点总结03【数组的改变、移动】(3题) 数组的改变、移动453. 最小操作次数使数组元素相等 Medium665. 非递减数列 Medium283. 移动零 Easy 大家好,这里是新开的LeetCode刷题系列&…

数据库-MySQL之数据库必知必会22-26章

第 22 章 使用视图 视图是虚拟的表。与包含数据的表不一样,视图只包含使用时动态检索数据的查询。 使用视图 视图用CREATE VIEW语句来创建。 使用SHOW CREATE VIEW viewname;来查看创建视图的语句。 用DROP删除视图,其语法为DROP VIEW view…

7.24 SpringBoot项目实战【审核评论】

文章目录 前言一、编写控制器二、编写服务层三、Postman测试前言 我们在 上文 7.23 已经实现了 评论 功能,本文我们继续SpringBoot项目实战 审核评论 功能。逻辑如下: 一是判断管理员权限,关于角色权限校验 在 7.5 和 7.6 分别基于 拦截器Interceptor 和 切面AOP 都实现过…

反序列化漏洞详解(三)

目录 一、wakeup绕过 二、引用 三、session反序列化漏洞 3.1 php方式存取session格式 3.2 php_serialize方式存取session格式 3.3 php_binary方式存取session格式 3.4 代码演示 3.5 session例题获取flag 四、phar反序列化漏洞 4.1 phar常识 4.2 代码演示 4.3 phar例…

TensorRT安装及使用教程(ubuntu系统部署yolov7)

1 什么是TensorRT 一般的深度学习项目,训练时为了加快速度,会使用多 GPU 分布式训练。但在部署推理时,为了降低成本,往往使用单个 GPU 机器甚至嵌入式平台(比如 NVIDIA Jetson)进行部署,部署端也…

【Springboot+vue】如何运行springboot+vue项目

从github 或者 gitee 下载源码后,解压,再从idea打开项目 后端代码处理 这是我在gitee下载下来的源码 打开之后,先处理后端代码 该配置的配置,该部署的部署 比如将sql文件导入数据库 然后去配置文件更改配置 然后启动项目 确保…

【开源】基于JAVA语言的桃花峪滑雪场租赁系统

项目编号: S 036 ,文末获取源码。 \color{red}{项目编号:S036,文末获取源码。} 项目编号:S036,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 游客服务2.2 雪场管理 三、数据库设…

Python、Stata、SPSS怎么学?推荐一波学习资料

1.Python学习推荐书目 关于Python机器学习,推荐学习杨维忠、张甜所著的,清华大学出版社出版的《Python机器学习原理与算法实现》,以及张甜、杨维忠所编著的,清华大学出版社出版的《Python数据科学应用从入门到精通》,…

【异常】捕获线程池执行任务时产生的异常

前言: 在编写程序时,我们为了充分利用多核CPU、加快接口响应速度,通常会使用线程池来处理请求,但线程池执行任务过程中难免会出现异常,导致请求失败。那如果我们想在任务发生异常后捕获异常,并做一些”善后…