1.下载数据集,只用到human3.6m数据集中的2D数据集和3D数据集。将数据集划分为训练集和测试集。(直接将2D数据集输入进行训练,得出的prediction和3D的groundtruth做比较)
2.在数据集中提取数据,得相机参数,2D关键点和3D关键点。
cameras_valid, poses_valid, poses_valid_2d = fetch(subjects_test, action_filter, dataset, keypoints, args.downsample)
3.定义模型,UnchunkedGenerator等,将模型数据放入GPU。
主要看一下相对于videopose本程序做出了哪些改变。
首先就是引入了图卷积,所以对于输入的数据要增设他们的图矩阵,在网络设置的时候加上图卷积这一模块,与时间卷积共同构成,这就使得输入的参数多设置了adj。图卷积一共有两个模块,一个是local-attention,一个是global-attention。
local-attention中先定义SemCHGraphConv网络框架,具体网上可以查到公式。以这个框架为基础输入不同的矩阵adj_sym和adj_con得到local_attention的架构。adj_sym是对“左右对称的关节点”进行关联的矩阵,adj_con是邻接矩阵,一阶和二阶等体现在矩阵里。(论文中说对于手腕脚腕头等关节点只有一个连接点所以*****没仔细看,不太懂
相对比于SemGCN其实GAST并没有改变多少,将原本的locallayer和globallayer在网络中的顺序变换了,并且加上了注意力,将关联的节点以矩阵表达。
4.进行训练,while epoch < args.epochs,训练后求loss进行模型优化
5.最后进行测试,用测试集调用evaluate(),测试范化能力。