深度图结合RGB实现行为识别

深度图结合RGB实现行为识别

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档

深度图结合RGB实现行为识别

  • 深度图结合RGB实现行为识别
  • 前言
  • 1.实验环境
  • 2.具体实验流程
    • 1.引入库
    • 2.读入数据
  • 3.数据预处理
    • 数据集:NTU60
  • 4.网络模型结构


前言

提示:这里可以添加本文要记录的大概内容:

一个行为识别的论文,目标是脱敏,为了防止信息泄露。将两个模态进行融合,用RGB的视频辅助depth的视频。


提示:以下是本篇文章正文内容,下面案例可供参考

1.实验环境

实验室四块2080ti,11G
python、pytorch、i7

2.具体实验流程

1.引入库

代码如下(示例):

import torch
import torch.nn as nn

2.读入数据

代码如下(示例):

 # 前面的一小部分操作
        print("x",x.size())
        x = self.conv1(x)
        print("conv1", x.size())
        x = self.bn1(x)
        print("bn1", x.size())
        x = self.relu(x)
        print("relu", x.size())
        x = self.maxpool(x)
        print("maxpool", x.size())

        # 四个layer
        x = self.layer1(x)
        print("layer1", x.size())
        x = self.layer2(x)
        print("layer2", x.size())
        x = self.layer3(x)
        print("layer3", x.size())
        x = self.layer4(x)
        print("layer4", x.size())

        x = self.avgpool(x)
        print("avgpool", x.size())
        x = torch.flatten(x, 1)
        print("flatten", x.size())
        x = self.fc(x)
        print("fc", x.size())

        return x

该处使用的url网络请求的数据。


3.数据预处理

数据集:NTU60

大概有60种行为,后面10种为双人行为
NTU的两种评价指标
cs评价指标(有很多人,每个人做60个动作,每个动作是2个角度,前五个人的数据动作作为训练集,后五个人的动作作为测试集)
cv(10个人的第一个角度作为训练集,第二个角度作为测试集)
dogv:因为用单纯的depth进行行为识别,准确率太低
类似于光流的思路 将一个视频的连续帧抽取关键帧去识别 最大程度的过滤环境等无关因素

4.网络模型结构

R3D Resnet3D卷积
C3D -> I3D-> R3D(ImageNet的数据预训练)
网络结构
Resnet3D因为多了一个时间维度 所以训练起来难度较大 所以如果将Resnet2D的训练模型迁移到Resnet3D,训练难度会大大降低

1.参考对比Resnet
2.如何加载R3D模型
模型权重
(查看网络初始结构)

static_weight = model.state_dict()
for key,value in static_weight.items():
	print(key,value.size())

深度图结合RGB实现行为识别_第1张图片
pth文件也是一个种模型(字典) 一些权重的集合,里面有每一层的一些参数

 save_weight = torch.load("./***.pth")
 model. load_state_dict(save_weight )
 print("a") 

如何将2D卷积加载进3D卷积呢?

//这里是保存在本地的2D网络的权重
save_weight = torch.load("./**pth")
for key,value in static_weight.items():
	print(key,value.size())

把save_weight里面的tensor复制到state_weight里面的tensor,之后再加载state_weight

for key,value in state_weight.items:
    #把sava_weight里的tensor取出来
	if key in save_weight.keys():
		 value2 = save_weight[key]
		 if value.size() == value2.size():
		 	state_weight[key] = value2
		 else:  #改变尺寸
		 	num = value.size()[2]
		 	p = value2.unqueeze(2)/num
		 	n_tensor = torch.cat([p]*num,dim=2)
            
            state_weight[key] = n_tensor
model.load_state_dict(state_weight)

你可能感兴趣的:(python,深度学习,人工智能)