GaitSet论文复现中遇到的部分问题解决(CASIA-B数据集)

目录

  • 前言
  • 一、GaitSet模型简介
  • 二、数据集介绍(原文链接:[https://blog.csdn.net/qq_42191914/article/details/105473925](https://blog.csdn.net/qq_42191914/article/details/105473925))
  • 三.数据预处理
  • 四、测试
    • 1、config.py配置
    • 2、test.py运行


前言

本文是博主小学期作业一部分,尚未对模型结构吃透,对于深度学习也只是看了看门槛,请多担待。


以下是本篇文章正文内容,提供对于GaitDatasetB数据集的GaitSet论文的复现,下面案例可供参考

一、GaitSet模型简介

论文地址https://ieeexplore.ieee.org/document/9351667
github地址https://github.com/AbnerHqC/GaitSet

论文为复旦大学发表于 AAAI 2019 的工作。截至目前CASIA-B正确率最高的网络。
这是我参考的论文翻译https://blog.csdn.net/o0haidee0o/article/details/91381669

使用数据集:CASIA-B
数据集连接http://www.cbsr.ia.ac.cn/english/Gait%20Databases.asp

二、数据集介绍(原文链接:https://blog.csdn.net/qq_42191914/article/details/105473925)

CASIA-B是比较经典的步态识别数据集,包含124个目标(subjects),每个目标有3种步行情况(normal/‘NM’、bag/‘BG’、coat or jacket/‘CL’)和11个角度(0°、18°、…、180°)。其中每个目标有6段NM序列、2段BG序列、2段CL序列。因此,每个目标都有
11*(6+2+2)=110段序列。
 另外,该数据集没有官方的划分训练集和验证集,一般的做法是使用三种划分方法:
 (a)Small-sample training(ST):训练集24个目标,验证集100个目标;
 (b)Medium-sample training(MT):训练集62个目标,验证集62个目标;
 (c)Large-sample training(LT):训练集74个目标,验证集50个目标。

三.数据预处理

数据输入和输出路径:文件pretreatment.py

parser.add_argument('--input_path', default='E:\GaitSet-master\data\GaitDatasetB-silh\pretreatment', type=str,
                        help='Root path of raw dataset.') # 这是输入路径,按照自己解压路径自行修改
parser.add_argument('--output_path', default='E:\GaitSet-master\data\GaitDatasetB-silh\output', type=str,
                        help='Root path for output.') #这是预处理输出路径

线程数设置:这里我设置的线程数为10

parser.add_argument('--worker_num', default=10, type=int,
    				help='How many subprocesses to use for data pretreatment. '
                  	'Default: 0') # 线程数设置

开多线程需要在main函数中才能运行,所以我采取的解决办法是将所有函数包含在main中(即在原码中在import后写main,并将所有后面全部缩进):

from multiprocessing import TimeoutError as MP_TimeoutError

if __name__ == '__main__':

    START = "START"

在cut_pickle函数中保存图片是用:

scisc.imsave(save_path, img)

但是会出现错误,改正方法:将scisc.imsave改为cv2.imwrite

cv2.imwrite(save_path, img)

四、测试

1、config.py配置

conf = {
     
    "WORK_PATH": "./work",
    "CUDA_VISIBLE_DEVICES": "1",  # 所用GPU编号
    "data": {
     
        'dataset_path': "/local/pre-output/", # 数据加载路径(预处理时的输出路径)
        'resolution': '64', # 输出轮廓图的分辨率,不用更改
        'dataset': 'CASIA-B', # 数据集名称
        # In CASIA-B, data of subject #5 is incomplete.
        # Thus, we ignore it in training.
        # For more detail, please refer to
        # function: utils.data_loader.load_data
        'pid_num': 73,  # 训练集人数,73用于训练,其余用于测试
        'pid_shuffle': False, # 是否对数据集进行随机划分,如果为False,则直接选取1-74
    },
    "model": {
     
        'hidden_dim': 256,  # 最后一层全连接层的隐藏层数
        'lr': 1e-4,  # 学习率
        'hard_or_full_trip': 'full',  # 损失函数
        'batch_size': (8, 16),  # 批次p*k = 8*16,
        'restore_iter': 0,  # 第几步开始训练
        'total_iter': 80000,  # 训练次数
        'margin': 0.2,  # 损失函数的margin参数
        'num_workers': 3,  # 线程数
        'frame_num': 30,  # 每个批次的帧数
        'model_name': 'GaitSet',
    },
}

2、test.py运行

运行test.py会出现以下错误:
ValueError: Object arrays cannot be loaded when allow_pickle=False

报错原因:自Numpy 1.16.3版本发行之后,函数 numpy.load() 和 numpy.lib.format.read_array() 采用allow_pickle关键字,默认为False

解决方法:降级Numpy 或者在numpy.load()参数中加一个allow_pickle=True:
以下是第二种解决方法:文件更改位置model/utils/data_loader.py第42行:

pid_list = np.load(pid_fname)

改为:

pid_list = np.load(pid_fname, allow_pickle=True)

以下是test.py运行结果:

GaitSet论文复现中遇到的部分问题解决(CASIA-B数据集)_第1张图片

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