行人重识别优化:Pose-Guided Feature Alignment for Occluded Person Re-Identification

文章记录了ICCV2019的一篇优化遮挡行人重识别论文的知识点:Pose-Guided Feature Alignment for Occluded Person Re-Identification
论文地址:
https://yu-wu.net/pdf/ICCV2019_Occluded-reID.pdf
在这里插入图片描述

Partial Feature Branch分支:

PCB结构,将特征图F按照垂直方向水平划分为6个part,每个part引入一个分类损失。

从全局特征中提取局部(未遮挡)人体的特征。将input(输入图像的shape为3x384x128)经过Resnet50 之后的feature map直接做horizontal partition,再average pooling以及1*1 conv之后,将每一个part都预测一个id(id表示每个局部部分的身份标识。它用于将每个局部特征映射到相应的身份。

细节点:

1.代码中用的Resnet50模型去掉了中global average pooling及以后的部分。

2.将最后一层feature map 分成 p个horizontal stripes。分别对p个horizontal stripes做global average pooling就得到了p个局部特征。(horizontal stripes 的个数 p 取6。)

3.因为 Resnet50 最后一层feature map的通道数为2048,作者又用1x1 conv将其降到256维.

在这里插入图片描述

​ 图1

图1中是全局特征提取,代码如下所示:

def extract_global_feature(model,input_):output=model(input_)return output

在这里插入图片描述

​ 图2:partial特征

代码:

def extract_partial_feature(model,global_feature,part_num):partial_feature=nn.AdaptiveAvgPool2d((part_num,1))(global_feature)partial_feature=torch.squeeze(partial_feature,-1)partial_feature=partial_feature.permute(0,2,1)return partial_feature

partial_feature: torch.Size([32, 3, 2048]),表示一个批次中有32个样本,在每个样本中有3个局部部分(这里做说明,这个3就是part_num变量的值,源代码的权重中应该是设置为3了)的特征。每个局部部分的特征是一个长度为2048的向量。

在这里插入图片描述

​ 图3

这里用nn.Linear(线性层)将输入特征从 num_bottleneck (256维)维度映射到 class_num (应该是表示数据集中行人ID个数,源代码训练数据集中有702个ID)维度,线性层的输出可以被看作是一个概率分布,用于表示输入特征属于每个类别的可能性(这个输出并不是直接的概率分布,而是未经过归一化的原始分数)

具体代码:

# Defines the new fc layer and classification layer
# |--Linear--|--bn--|--relu--|--Linear--|
class ClassBlock(nn.Module):def __init__(self, input_dim, class_num, relu=True, num_bottleneck=512):super(ClassBlock, self).__init__()add_block = []add_block += [nn.Conv2d(input_dim, num_bottleneck, kernel_size=1, bias=False)]add_block += [nn.BatchNorm2d(num_bottleneck)]if relu:#add_block += [nn.LeakyReLU(0.1)]add_block += [nn.ReLU(inplace=True)]add_block = nn.Sequential(*add_block)add_block.apply(weights_init_kaiming)classifier = []classifier += [nn.Linear(num_bottleneck, class_num)]classifier = nn.Sequential(*classifier)classifier.apply(weights_init_classifier)self.add_block = add_blockself.classifier = classifierdef forward(self, x):x = self.add_block(x)x = torch.squeeze(x)x = self.classifier(x)return x

Pose-Guided Global Feature Branch:

当一张query图像输入网络时候,预训练好的姿态估计模型会给出一个key points预测结果。然后对每个key point都生成一个heatmap。姿态估计模型预测时除了返回关键点的坐标之外还会返回一个置信度,对于置信度较低的关键点,可以认为该部分是处于遮挡状态中的。因此最后返回的heatmap,对于置信度很低的点,该点的heatmap应该是置0的。

将所有的heatmap叠加之后做max-pooling得到的feature vector和input经过resnet之后再max-pooling的feature vector 做concatenate,最后得到的feature vector即为该Pose-Guided分支的表征结果。用这个feature vector会得到一个id预测结果。

该分支具体代码:

def extract_pg_global_feature(model,global_feature,masks):pg_global_feature_1=nn.AdaptiveAvgPool2d((1,1))(global_feature)pg_global_feature_1=pg_global_feature_1.view(-1,2048)pg_global_feature_2=[]for i in range(18):  mask=masks[:,i,:,:]mask= torch.unsqueeze(mask,1)mask=mask.expand_as(global_feature)pg_feature_=mask*global_featurepg_feature_=nn.AdaptiveAvgPool2d((1,1))(pg_feature_)pg_feature_=pg_feature_.view(-1,2048,1)pg_global_feature_2.append(pg_feature_)pg_global_feature_2=torch.cat((pg_global_feature_2),2)pg_global_feature_2=nn.AdaptiveMaxPool1d(1)(pg_global_feature_2)pg_global_feature_2=pg_global_feature_2.view(-1,2048)pg_global_feature=torch.cat((pg_global_feature_1,pg_global_feature_2),1)pg_global_feature=model(pg_global_feature)return pg_global_feature

global_feature: torch.Size([32, 2048, 24, 8])

参考文章:

行人被遮挡问题怎么破?百度提出PGFA新方法,发布Occluded-DukeMTMC大型数据集 | ICCV 2019

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

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

相关文章

精致旅游网ROXANDREA 网页设计 html模板

一、需求分析 旅游网站通常具有多种功能,以下是一些常见的旅游网站功能: 酒店预订:旅游网站可以提供酒店预订服务,让用户搜索并预订符合其需求和预算的酒店房间。 机票预订:用户可以通过旅游网站搜索、比较和预订机票…

JavaScript 工具库 | PrefixFree给CSS自动添加浏览器前缀

新版的CSS拥有多个新属性,而标准有没有统一,有的浏览器厂商为了吸引更多的开发者和用户,已经加入了最新的CSS属性支持,这其中包含了很多炫酷的功能,但是我们在使用的时候,不得不在属性前面添加这些浏览器的…

毕业设计之开题报告

终于轮到我来写开题报告了,呃呃呃呃呃,目前有点难产了。想做的东西是关于区块链的后端设计实现,但是因为是完全原创之前没有类似的项目能去参考,所以其实有点慌的。 框架梳理 这是我们开题报告的要求: 包括题目研究的…

Django框架:入门指南与常用命令

引言: 在当今的Web开发世界中,Django无疑是一个备受瞩目的框架。它以其强大的功能和易用性,吸引着越来越多的开发者。这篇博客将为你提供一个关于Django的概览,以及一些常用的命令,帮助你快速上手。 一、Django简介&…

GPT技术:人工智能的语言革命

在人工智能的领域中,自然语言处理(NLP)一直是一个极具挑战性的研究领域。随着技术的进步,一个名为GPT(Generative Pre-trained Transformer)的模型出现在了公众的视野中,它不仅改变了我们与机器…

Java项目:102SSM汽车租赁系统

博主主页:Java旅途 简介:分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 汽车租赁系统基于SpringSpringMVCMybatis开发,系统使用shiro框架做权限安全控制,超级管理员登录系统后可根据自己的实际需求配角色…

uniapp的css样式图片大小截图展示

目录 截取图片前截取图片后第一种方式&#xff1a;代码第二种方式&#xff1a;代码最后 截取图片前 截取图片后 第一种方式&#xff1a;代码 <view class"swiper-box-img"><image class"swiper-box-img-img" :src"item.file_path" mod…

我自己的Mac装机软件推荐!

我自己的Mac装机软件推荐&#xff01; 以下内容是我自己用着挺舒服的&#xff0c;使用频率很高的mac软件&#xff0c;写在这里留个印记。 之前好多mac破解软件网址没了&#xff0c;macbl现在还活着也还用起来不错&#xff5e; 首先还是推荐windows和mac双持用户看看我的这篇文…

Windows系统历史版本简介详细版

学习目标&#xff1a; 目录 学习目标&#xff1a; 学习内容&#xff1a; 学习产出&#xff1a; Windows 11的全新用户界面设计&#xff1a;学习新的任务栏、开始菜单、窗口管理等界面元素的使用与操作。 Windows 11的新功能和特点&#xff1a;学习新的虚拟桌面、Microsoft Team…

SLAM学习入门--什么是回环检测

文章目录 SLAM001 什么是回环检测?002 常用的回环检测方法有哪些?003 介绍一下Gauss-Netwon和LM算法004 介绍一下Ceres优化库,比如你使用过里面哪些内容?005 描述(扩展)卡尔曼滤波与粒子滤波,你自己在用卡尔曼滤波时遇到什么问题没有?006 除了视觉传感,还用过其他传感…

Ubuntu20.04 防火墙配置

ubuntu 系统中配置防火墙 ufw&#xff08;Uncomplicated Firewall&#xff09;是一个简化的、易于使用的Linux防火墙工具&#xff0c;旨在方便用户管理iptables防火墙规则。 特点 简化的防火墙管理&#xff1a;ufw提供了一个简洁的命令行界面&#xff0c;让您能够轻松地添加、…

2022-2023年度广东省职业院校学生专业技能大赛“软件测试”赛项性能测试题目-LoadRunner

性能测试-LR 1、脚本录制: (1)脚本一:脚本名称ProdAdd。 脚本内容:系统管理员登录、进行新增商品操作。 脚本具体要求如下:登录脚本存放在init,新增商品脚本存放在Action。商品名称前4位为固定值SPMC,固定值后面的字符可任意设置。对新增商品保存操作设置事务,事务…

Delphi6函数大全2-SysUtils.pas

Delphi6函数大全2-SysUtils.pas首部 function Languages: TLanguages; $[SysUtils.pas功能 返回系统语言对象说明 通过此函数可以得到系统的语言环境参考 type SysUtils.TLanguages例子///Begin Languagesprocedure TForm1.Button1Click(Sender: TObject);varI:…

【Latex错误:】Package fontspec: The font “SIMLI“ cannot be found. LaTex [行 37,列1]

【Latex错误&#xff1a;】Package fontspec: The font "SIMLI" cannot be found. LaTex [行 37&#xff0c;列1] 解决方案 错误详情如下图所示&#xff1a; 最近使用latex写毕业论文&#xff0c;效率是快&#xff0c;但是出些一些错误就难得搞了&#xff0c;上面的…

2023年终总结丨很苦,很酷!

文章目录 个人简介丨了解博主写在前面丨博主介绍年终总结丨博主成就年终总结丨博主想说年终总结丨学习芝士年终总结丨未来展望写在后面丨新年快乐 个人简介丨了解博主 主页地址&#xff1a;https://blog.csdn.net/m0_68111267 荣誉身份 ⭐2022年度CSDN 社区之星 Top6 ⭐2023年…

什么是SEO?

什么是SEO&#xff1f; SEO代表“搜索引擎优化”。这是通过非付费&#xff08;也称为“自然”&#xff09;搜索引擎结果来提高网站流量的质量和数量以及品牌曝光率的做法。 尽管有首字母缩略词&#xff0c;但 SEO 既关乎搜索引擎本身&#xff0c;也关乎人。这是关于了解人们在…

有了向量数据库,我们还需 SQL 数据库吗?

“除了向量数据库外&#xff0c;我是否还需要一个普通的 SQL 数据库&#xff1f;” 这是我们经常被问到的一个问题。如果除了向量数据以外&#xff0c;用户还有其他标量数据信息&#xff0c;那么其业务可能需要在进行语义相似性搜索前先根据某种条件过滤数据&#xff0c;例如&a…

文心一言 VS 讯飞星火 VS chatgpt (168)-- 算法导论13.2 1题

一、用go语言&#xff0c;写出 RIGHT-ROTATE 的伪代码。 文心一言&#xff1a; 在计算机科学中&#xff0c;右旋转&#xff08;RIGHT-ROTATE&#xff09;是一种常见的操作&#xff0c;通常用于数组或链表。以下是一个使用Go语言实现右旋转的伪代码&#xff1a; func rightRo…

【PHP】TP5.0及Fastadmin中将查询数据返回对象转为数组

目录 方法一&#xff1a;使用collection助手函数 方法二&#xff1a;设置返回数据集的对象名 在 ThinkPHP 5.0 中&#xff0c;对模型查询返回的对象进行了优化&#xff0c;默认情况下&#xff0c;使用 all 或 select 方法查询数据库将返回一个对象数组集合。这个集合是模型的…

计算机组成原理复习7

内存管理 文章目录 内存管理存储器概述存储器的分类按在计算机中的作用&#xff08;层次&#xff09;分类按存储介质分类按存取方式分类按信息的可保存性分类 存储器的性能指标存储容量单位成本存储速度&#xff1a;数据传输率数据的宽度/存储周期 存储器的层次化结构多级存储系…