【Pytorch神经网络理论篇】 35 GaitSet模型:步态识别思路+水平金字塔池化+三元损失

同学你好!本文章于2021年末编写,获得广泛的好评!

故在2022年末对本系列进行填充与更新,欢迎大家订阅最新的专栏,获取基于Pytorch1.10版本的理论代码(2023版)实现,

Pytorch深度学习·理论篇(2023版)目录地址为:

CSDN独家 | 全网首发 | Pytorch深度学习·理论篇(2023版)目录本专栏将通过系统的深度学习实例,从可解释性的角度对深度学习的原理进行讲解与分析,通过将深度学习知识与Pytorch的高效结合,帮助各位新入门的读者理解深度学习各个模板之间的关系,这些均是在Pytorch上实现的,可以有效的结合当前各位研究生的研究方向,设计人工智能的各个领域,是经过一年时间打磨的精品专栏!https://v9999.blog.csdn.net/article/details/127587345欢迎大家订阅(2023版)理论篇

以下为2021版原文~~~~

 

代码:

【Pytorch神经网络实战案例】28 GitSet模型进行步态与身份识别(CASIA-B数据集)_LiBiGor的博客-CSDN博客1 CASIA-B数据集本例使用的是预处理后的CASIA-B数据集, 数据集下载网址如下。 http://www.cbsr.ia.ac.cn/china/Gait%20Databases%20cH.asp该数据集是一个大规模的、多视角的步态库。其中包括124个人,每个人有11个视角(0,18,36,...,180),在3种行走条件(普通、穿大衣、携带包裹)下采集。1.1 CASIA-B数据集的两种形式CASIA-B数据集有视频和轮廓两种形式。1.1.1 案例讲解本例直接..https://blog.csdn.net/qq_39237205/article/details/124141716

1 步态识别思路

1.1 步态识别的本质

步态特征的距离匹配,对人在多拍摄角度、多行走条件下进行特征提取,得到基于个体的步态特征,再用该特征与其他个体进行比较,从而识别出该个体的具体身份。

1.2 步态识别的主体思路

1.2.1 神经网络的角度看待步态识别的数据集

在步态识别中,需要将一组图片作为一个样本。

从神经网络的角度来看,步态识别的组图片也只是在代表图片[H,W,C]的基础之上,多出一个张数的维度而已。

1.2.2 步态识别模型的数据处理的三种方式

整体处理:将输入数据当作一个完整的3D图片数据,来计算输入数据在三维空间里所表现的整体特征。如对整体的输入数据做3D卷积。

分散处理:将输入数据当作由多张图片组成的序列数据,先对单张图片进行特征处理,再对序列数据特征进行处理。在分散处理的过程中,又可以分为重视序列顺序关系(如基于惯性的步态识别)和不重视序列顺序关系两种做法。

混合处理:先对单张图片进行基于人形特征的预处理(如提取人形轮廓数据、人的姿态数据),再将预处理后的数据当作原始输入,进行二次处理(可以使用整体处理或分散处理)。混合处理模式更为细致,也更为灵活。

1.2 CASIA-B数据集

CASIA-B是使用最广泛的步态数据集, 包含124人的RGB和轮廓形式的多视角步态数据。从11个不同的视角进行采集,范围从0到180度,增量为18度。该数据集考虑了三种不同的行走条件,即正常行走(NM)、穿外套行走(CL)和携包行走(BG),每个人每个视角分别有6、2和2个步态序列。

CASIA-B最常用的测试协议是受试者无关协议,该协议使用前74名受试者的数据进行训练,其余50名受试者进行测试。然后将测试数据拆分为一个注册集,其中包括NM步态数据中的前四个步态序列,验证集由其余序列组成,即每个受试者每个视角的剩余2个NM、2个CL和2个BG序列,结果主要针对所有视角报告。

2 GaitSet模型

GaitSet模型属于混合处理方式,该模型的二次处理部分使用了分散处理。

2.1 预处理

GaitSet模型的预处理部分,需要对视频中抽离的图片进行基于人物识别的语义分割,得到基于人形的黑白轮廓图,如图所示。

 2.1.1 轮廓图的优点

通过将轮廓图看作单通道图片,实现基于人的多帧图片被当作多通道图片进行处理,即其形状可以描述为[批次个数,帧数,高度,宽度] 与RGB状为[批次个数,通道数,高度,宽度]相似。

2.2 特征处理

2.2.1 GitSet模型分散处理

GitSet模型采用分散处理,对每一张图片计算特征,再对多个特征做聚合处理。

2.2.2 GitSet模型分散处理的核心部分

①多层全流程管线(Multlayer Global Pipeline,MGP)是一个类似FPN结构的网络模型,通过两个分支进行下采样处理,并在每次下采样之后进行特征融合。

②水平金字塔池化(HorizontalPyramid Matching,HPM)按照不同的水平尺度对特征数据进行池化,并将池化结果汇集起来,从而丰富数据的鉴别特征。

2.2.3 GitSet模型分散处理的训练

在训练时,将模型计算出的特征用三元损失(Triplet Loss)进行优化,使其计算出的特征与同类别特征距离更近,与非同类别特征距离更远。

在使用时,具体步骤如下。
(1)对人物视频进行抽帧采样。
(2)对采样数据进行处理,生成轮廓图。
(3)将多张轮廓图输入模型得到特征。
(4)将该特征与数据库中已有的特征进行比较,找到与其距离最近的特征,从而识别出人物身份。

3 完整GitSet模型流程图

4 多层全流程管线

主要分为两个分支:一个是主分支,另一个是辅助分支。

4.1 主分支

主分支用于对从视频分离出来的多帧数据,基于全部图片的特征进行处理。

采用两次卷积+一次下采样的操作进行特征计算与降维处理。

4.2 辅助分支

辅助分支用于对从视频分离出来的多帧数据,某于帧的特征进行处理。

辅助分支与主分支的处理同步,并对每次下采样后的数据讲行特征提取,将提取后的帧特征融合到主分支的特征处理结果里。

4.3 多层全流程管线处理流程图

(1)在主分支中,对每一帧数据进行卷积外理。
(2)在主分支中,对卷积处理的结果进行下采样处理。
(3)将下采样结果分为两份,一份用于主分支,另一份用干辅助分支。
(4)在主分支中,对下采样结果进行基于帖特征的提取。
(5)在主分支中,对第(4)步的结果做卷积损作。
(6)在辅助分支中,继续对下采样结果做卷积操作。
(7)在辅助分支的卷积操作之后,进行一次下采样,并对下采样结果讲行基于特征的提取。
(8)在主分支中,也同步做一次下采样。
(9)将第(6)和(7)步的结果融合起来。
(10)继续重复第(5)~(9)步的步骤。重复次数与网络规模和输入尺寸右关其中第(4) 和(7) 步基于帧的特征提取部分使用了多特征集合池化(Set Pool in a)方法。经过测试发现直接使用取最天值池化的方法效果更好,而且该方法更为简单。
第(9) 步融合特征的方式使用的是直接相加, 也可以用cat函数将其拼接在一起, 在本例中,使用的是简单相加。

卷积神经网络的不同层能够识别不同的特征,通过深层卷积的组合,可以增大模型在图片中的理解区域。同时在主管道中,融合了从不同层提取的帧级特征,使得模型计算的特征中含有更丰富的整体特征。 

5 水平金字塔池化

水平金字塔池化是来自行人再识别(Person Re-l dentification) 任务中的一种技术。它充分地利用了行人的不同局部空间信息,使得在重要部件丢失的情况下,仍能正确识别出候选行人, 增强了行人识别的健壮性(参见arXiv网站上编号为“1811.06186”的论文)。

5.1 行人再识别任务

行人再识别任务是从图片或者视频序列中找到特定行人的任务。

该任务属于图像检索任务中的一种,常常与行人检测、行人跟踪任务一起被应用在智能视频监控、智能安保等领域。

5.2 HPM模型的做法和原理

5.2.1 HPM模型的做法

将图片按照不同的水平尺度分成多个部分, 然后将每个部分的全局平均池化和全局最大池化特征融合到一起。

5.2.2 HPM模型的结构

这种做法相当于引入了多尺度的局部信息互助作用来缓解不对齐引起的离群值问题。其中每个局部的信息通过全局平均池化与全局最大池化策略结合得到的融合特征更具有判别能力。

全局平均池化:可以感知空间条的全局信息,并将背景上下文考虑进去。
全局最大池化:实现提取最具判别性的信息并忽略无关信息(如背景、衣服等)。  

5.2.3 HPM模型在步态识别实例的作用

使用HPM模型作为整个网络的最后部分, 对全连接层的特征进行优化,提升了特征的整体鉴别性。

6 三元损失

三元损失是根据3张图片组成的三元组计算而得的损失 ,常用于基于样本特征进行匹配的模型中,如人脸识别、步态识别、行人再识别等任务的模型中。

6.1 三元损失算法图解

在每次提取特征时,同步输入与该样本相同类别和不同类别的两个样本。利用监督学习使该样本特征与相同类别的样本特征间的差异越来越小,与不同类别的样本特征间的差异越来越大。

如上图所示,通过监督学习,可以让输入样本经过网络计算之后的特征与相同类别的样本特征距离更近,与不同类别的样本特征距离更远。

三元损失训练的模型,最终将使相同类别的特征会更加相似,解决样本特征指向不明确的问题。

6.2 三元损失的使用

在使用三元损失时,常会直接将一批次的输入数据进行内部两两交叉,并从中分出正向样本(类内距离)和负向样本(类间距离)。这种方式可以保证与其他损失计算的接口统一,而又不需要额处开发选取正/负样本的功能。

6.2.1 三元损失中的间隔margin

 6.2.2 三元损失的模式hard与full

full模式(默认): 对所有的正向样本和负向样本进行损失值的计算。

hard模式:只对最小的正向样本和最大的负向样本进行损失值的计算, 目的在于优化特征并使其指向偏离最大的样本,运算量会更小。

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

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

相关文章

win7分区软件_神奇的工作室win7旗舰版重装系统连不上网怎么解决

深度技术win7系统下载有的时刻我们的电脑安装、重装了win10操作系统之后有的小伙伴们就发现了自己的电脑连不上网了。对于这种问题小编以为可能是我们的电脑在安装系统的过程中泛起了一些内部组件的冲突或者是由于网卡驱动没有安装好导致的,可以通过重新安装、重装驱…

290. Word Pattern

题目: Given a pattern and a string str, find if str follows the same pattern. Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in str. Examples: pattern "abba", str "…

【Pytorch神经网络实战案例】28 GitSet模型进行步态与身份识别(CASIA-B数据集)

1 CASIA-B数据集 本例使用的是预处理后的CASIA-B数据集, 数据集下载网址如下。 http://www.cbsr.ia.ac.cn/china/Gait%20Databases%20cH.asp 该数据集是一个大规模的、多视角的步态库。其中包括124个人,每个人有11个视角(0,18&am…

Mtk camera driver

引用: http://blog.chinaunix.net/uid-26009923-id-3999723.html 1 kd_imgsensor.h 这个文件定义了camera节点的名字 /* CAMERA DRIVER NAME */ #define CAMERA_HW_DEVNAME "kd_camera_hw" 里面还有很多ioctl的幻数&#xff…

Android Camera调用流程

一个流程图画的非常好的文章 http://blog.csdn.net/lushengchu_luis/article/details/11033095 1、Packages/apps/到framework 打开Camera ./packages/apps/Camera/src/com/android/camera/Camera.java 进来第一个肯定是onCreate(Bundle icicle) { 这里是开始了一个Camera…

从输入 URL 到页面加载完成的过程中都发生了什么

根据 URL 请求页面过程过程概述浏览器查找域名对应的 IP 地址;浏览器根据 IP 地址与服务器建立 socket 连接;浏览器与服务器通信: 浏览器请求,服务器处理请求;浏览器与服务器断开连接。天啦撸,结束了&#…

【Pytorch神经网络实战案例】29 【代码汇总】GitSet模型进行步态与身份识别(CASIA-B数据集)

1 GaitSet_DataLoader.py import numpy as np # 引入基础库 import os import torch.utils.data as tordata from PIL import Image from tqdm import tqdm import random# 1.1定义函数,加载文件夹的文件名称# load_data函数, 分为3个步骤:…

linq from 多个sum_快手重拳打击劣质电商 7月以来封禁700多个团伙账号

何为劣质电商?炒作演戏?PK售卖劣质商品?私下交易?夸大其词?……在快手电商的定义里,有上述不良行为的,都可以定义为劣质电商。快手电商站内官方号“快手卖货助手”日前发布第 11 期“自售或PK销…

RuntimeError: Can‘t call numpy() on Variable that requires grad. Use var.detach().numpy()

1. 问题描述 如题,将PyTorch Tensor类型的变量转换成numpy时报错: RuntimeError: Cant call numpy() on Variable that requires grad. Use var.detach().numpy() instead. 2. 解决办法 出现这个现象的原因是:待转换类型的PyTorch Tensor变…

nrf51822添加UUID

问题 :添加一个自己的uuid I’m new to use nordic and I would like to add a new custom service (2320EE58-8654-4132-95F7-0A872AC0958F) with a custom characteristic(23200000-8654-4132-95F7-0A872AC0958F) I’m using nRF51 and mBed compiler. Thank’s …

表格下载

//数组组完后生成excelvendor(Excel.PHPExcel);$objExcel new PHPExcel();$objActSheet $objExcel->getSheet(0);//设置打印纸张A4$objActSheet->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);//设置参数 $objActSheet->getColumn…

win10怎么更改账户名称_Win10邮件功能如何查看邮件

win10的用户当中,一方面有说系统臃肿的,另外一方面有说功能多了不少,好用。不管是出于前者还是后者,win10功能确实多了不少,尤其是一些比较常用的功能,比如说邮箱功能,一般用户可能会选择登录网…

AttributeError: ‘set‘ object has no attribute ‘items‘

AttributeError: ‘set’ object has no attribute ‘items’ 出现这个问题,原因可能是定义的header有问题 正确如下: header{“key”:“value”} 如果是直接在请求数据中复制,很有可能会忽略键和值的冒号。

Error: file not found: arch/arm/boot/compressed/piggy.lzo

问题:在编译Android 系统kernel源码的时候出现错误 I am trying to build android projectGetting below error even after setting correct path for toolchains/bin/sh: lzop: not foundAS arch/arm/boot/compressed/piggy.lzo.o arch/arm/boot/compressed/p…

使用eclipse以及Juint进行测试

打开eclipse后,点击左上角的File,新建一个project,命名为testJunit,然后在src目录下新建两个包,分别命名为TestScore和Test(这是文件夹里没有文件所以是白色)。 在TestScore中新建一个class,命名为Score.ja…

9轴传感器学习

1、几个角度的解释 欧拉角:http://baike.baidu.com/link?urlvajuHz-lUawV7ZUa-67DiBb0jjwyyQqNwnQEeJdRComWDt1XRtjgQ2AnYojNgfRKfoo3T_1gCWPebbGp3npFZq有了欧拉角,才能确定下面的,横滚角,俯仰角和航向角一般定义载体的右、前、…

excel单元格下拉选项怎么设置_单元格下拉效果怎么实现?

单元格右边的下拉菜单怎么做的?感觉逼格略有提升啊上视频单元格下来效果https://www.zhihu.com/video/1249633577441800192

代码实现:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。...

import java.util.Scanner; //给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。 public class Test {public static void main(String[] args) {Scanner sc new Scanner(System.in);int num 0 ;String s "0&…