TransReID | 首次将transformer应用于行人重识别

news/2024/7/19 9:14:32 标签: transformer, 深度学习

0x00 什么是Transformer

Transformer由Attention is all you need论文提出。

摘要

优势的序列转换模型基于复杂的递归或卷积神经网络,包括一个编码器和一个解码器。性能最好的模型还通过注意力机制连接编码器和解码器。我们提出了一种新的简单网络架构,即Transformer,它完全基于注意力机制,完全省去了递归和卷积。在两个机器翻译任务上的实验表明,这些模型在质量上优越,同时更具并行性,并且需要更少的训练时间。

结构

每个子层都存在残差连接
在这里插入图片描述
编码组件部分由一堆编码器(encoder)构成,解码组件部分也是由相同数量(与编码器对应)的解码器(decoder)组成的。所有的编码器在结构上都是相同的,但它们没有共享参数。每个解码器都可以分解成两个子层。解码器中也有编码器的自注意力(self-attention)层和前馈(feed-forward)层。除此之外,这两个层之间还有一个注意力层,用来关注输入句子的相关部分。

quoted from 小白看得懂的Transformer

所以,模型的主要部分👇堆叠
在这里插入图片描述
将输入序列进行词嵌入之后,每个单词都会流经encoder中的两个子层。
多头注意力层:

在这里插入图片描述 A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V Attention(Q,K,V)=softmax(dk QKT)V

线性变换和Softmax层:
在这里插入图片描述


0x01 TransReID: Transformer-based Object Re-Identification, ICCV2021

在这里插入图片描述Paper
Code

导读

WHY: CNN处理范围小(缺乏长距离依赖)而且偏向关注局部信息,并且,由卷积和下采样等算子会造成细粒度信息丢失的问题。

WHAT: 首先提出以Transformer为基础的baseline来解决CNN网络存在的缺点

  1. 多头注意力机制,使得网络关注整个行人的身体;
  2. 没有卷积和下采样,不会丢失细节信息。

再基于此进行优化得到更强的baseline:

  1. 提出了jigsaw patch module(JPM):通过移位和混洗操作来重新排列patch embeddings,能提取全局不变性的特征;
  2. 引入side information embeddings(SIE):通过可学习的embedding融进一些非视觉信息(相机/视角),消除不同相机间的匹配差异。

HOW: TransReID在MSMT17、Market1501、DukeMTMC-reID、OccludedDuke、VeRi-776和VehicleID数据集上分别达到行人重识别和车辆重识别基准的SOTA性能。在这里插入图片描述


Methodology

基于transformer的强基线框架:
在这里插入图片描述
总体结构继承ViT,可学习的position embedding,最后输出有所不同(比如BN层)。
Overlapping Patches:区别于纯transformer的模型(e.g. ViT, DeiT)将图像分割成不重叠的补丁,从而丢失补丁周围的局部相邻结构。作者使用滑动窗口生成具有重叠像素的patch。
有监督学习:全局特征的triplet loss和ID loss

改进后,TransReID的框架:
在这里插入图片描述

JPM

由于遮挡和错位等挑战,我们可能只能部分观察到一个物体。学习细粒度的局部特征(如条纹特征)已被广泛用于基于CNN的方法来应对这些挑战。
ShuffleNet启发,如上图,将最后一层的输入打乱顺序然后分组,
推理过程中,最后的损失是全局损失+打乱的每组损失。

SIE

将相机和角度联合编码为S(C,V)
最终输入为原始输入+超参处理过的相机信息

Ablation study

Baseline:ViT-B/16

  • JPM
    在这里插入图片描述
  • SIE
    在这里插入图片描述
  • TransReID
    在这里插入图片描述

http://www.niftyadmin.cn/n/5037038.html

相关文章

国外发达国家码农是真混得好么?

来看看花旗工作十多年的码农怎么说吧! 美国最大的论坛 Reddit,之前有一个热帖: 一个程序员说自己喝醉了,软件工程师已经当了10年,心里有 好多话想说,“我可能会后悔今天说了这些话。”他洋洋洒洒写了 一大堆&#xff…

小程序 BUG 记录

小程序 BUG 记录 1. TypeError: Cannot read properties of undefined (reading xxxxxx)" 1. TypeError: Cannot read properties of undefined (reading ‘xxxxxx’)" 原因:这里的xxx undefined ,实际是yyy.xxx yyy找不到,不是xxx找不到; 其实网页渲染是解释性语言…

zaabix实现对nginx监控

本文使用监控模板net.tcp.listen[port]实现监听端口 实验环境: 首先搭建好zabbix-server ,zabbix-agenthttps://mp.csdn.net/mp_blog/creation/editor/132622769?spm1001.2014.3001.9457 而后在zabbix-agent主机上下载一个nginx 登录zabbix网站创建主…

java集合 list转map一些常用的方式(Stream流,,,)

Java 集合之间的转换 java集合 list转map一些常用的方式&#xff08;Stream流&#xff0c;&#xff0c;&#xff0c;&#xff09; 提示&#xff1a;帮助文档 文章目录 Java 集合之间的转换前言一、List转换为Map&#xff1f;1.1、**List**<**Object**>**转化为Map<Int…

go语言常用标准库(Time)

go语言常用标准库(Time) 1、Time 时间和日期是我们编程中经常会用到的&#xff0c;本文主要介绍了Go语言内置的time包的基本用法。 1.1.1. time包 time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。 1.1.2. 时间类型 time.Time类型表示时间。我们可以通过…

windows常见的命令行操作

1.查看网络 ipconfig 2.根据任务id关闭进程 1.模糊搜索服务 tasklist | findstr QQ 2.根据模糊搜索结果&#xff0c;获取对应的pid taskkill /F /PID 5128 其他常见命令 若不清楚参数&#xff0c;使用&#xff08;命令 /?&#xff09;即可查看help

WhatsOnChain中的sCrypt合约验证插件

我们很高兴地宣布在 WhatsOnChain 上集成了 sCrypt 智能合约验证插件。该插件允许任何人为已部署的智能合约提交和验证 sCrypt 代码。 智能合约验证 在与智能合约交互之前&#xff0c;用户需要确保智能合约按照其声称的方式行事。理论上&#xff0c;每个人都可以查看合约并验…

RPC框架学习

一、设计目标 RPC 框架的目标就是让远程服务调用更加简单、透明&#xff0c;RPC 框架负责屏蔽底层的传输方式&#xff08;TCP 或者 UDP&#xff09;、序列化方式&#xff08;XML/Json/ 二进制&#xff09;和通信细节。服务调用者可以像调用本地接口一样调用远程的服务提供者&a…