最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

Win11+系统环境的GaitSet配置

业界 admin 6浏览 0评论

前言:

我在老师、学长的帮助下,浏览了很多CSDN博客配完了GaitSet,为了总结经验,同时也希望初学者少踩坑,便写下这篇博文。

注:博主刚大二,撰写的过程中难免会出现差错,望各位谅解

目录

一、配置硬件环境   驱动&CUDA&CUDNN

1.确定显卡型号

2.下载NVIDIA驱动程序

3.下载&安装CUDA

4.下载&安装CUDNN 

5.环境变量 

二、软件环境

1.数据集CASIA-B

2.代码

3.软件包

4.torch三件套(重点)

三、改动代码

1. triplet.py部分代码改动

2. pretreatment.py函数

3. config.py改动

四、代码运行

1.pretreatment函数

2.train函数

3.test函数


一、配置硬件环境   驱动&CUDA&CUDNN

1.确定显卡型号

按windows+r 并输入cmd打开Windows的运行对话框,如图

打开后输入 nvidia-smi(见红线部分) 可打开NVIDIA面板,如图

先不管绿线部分,其中蓝线部分是你的GPU型号,以我的电脑为例,型号为GeForce RTX 4060 Laptop GPU

2.下载NVIDIA驱动程序

前往NVIDIA GeForce 驱动程序 - N 卡驱动 | NVIDIA下载,还是以我的电脑为例,如图

3.下载&安装CUDA

之前的绿线部分表示显卡所支持的CUDA(最高)版本,在https://developer.nvidia/cuda-12-1-0-download-archive?target_os=Windows&target_arch=x86_64&target_version=11&target_type=exe_local进行下载,读者可根据需要自行选择,此处我选择CUDA12.1,如图

 之后开始安装,这里安装路径可以自定义,我选择在D盘创建一个CUDA空文件夹安装

 选择自定义安装

 这三个不要选,别急,还有

 CUDA中,这个别选

这俩位置其实也可以自定义,为了省事我就方放同一个文件夹了,这里我选D盘

这里有一败笔,前文的EXtraction路径与下面的两个路径不能相同,不然吞你文件

若真消失了,请看关于安装CUDA后文件夹消失的问题_cuda安装后文件夹不见了-CSDN博客

 然后安装完成后,在D:\CUDA12.1\bin 下找一个叫nvcc的应用程序,找到的话,CUDA就安装成功

接着,在 D:\CUDA12.1\extras\CUPTI\lib64 路径下,找cupti64_2023.1.0.dll这个应用程序拓展

能找到就算成功 

4.下载&安装CUDNN 

在https://developer.nvidia/rdp/cudnn-archive下载对应CUDA12.x版本的CUDNN,这里我选择的是v8.9.7

读者要根据自己的CUDA版本选择,若是CUDA11.x(建议装11.8)的就去找11.x对应的CDUNN

下载后进行解压,将对应的bin、lib、include与CUDA12.1对应的bin、lib、include进行合并。

CUDNN中bin文件的cudnn64_8.dll放入CUDA12.1的bin文件中

CUDNN中include文件的cudnn.h放入CUDA12.1 include文件中

CUDNN中lib\x64文件的cudnn.lib的放入CUDA12.1的lib\x64中 

5.环境变量 

打开设置界面,在“系统”中选择“系统信息”

然后点击“高级系统设置” ,进入系统属性界面,先点“高级”,再点“环境变量”

 一般来说CUDA12.1会自动加上去,如图

CUDA_PATH一样的设置

 

系统变量(S)中找到Path

给这俩加进去

点击确定后就行

然后Windows+r 再输入cmd,输入nvcc -V(现在知不知道让你找的那个nvcc文件是干什么的了?)

二、软件环境

1.数据集CASIA-B

在生物识别与安全技术研究中心中找到Dataset B (大概628M)并下载

CASIA-B是中国科学院自动化研究所提供的CASIA步态数据库其中之一。CASIA步态数据库有三个数据集:Dataset A(小规模库), Dataset B(多视角库)和Dataset C(红外库),本文采用的是Dataset B。若想了解更多关于CASIA-B的内容,请在其他文章中搜索

2.代码

                Python版本                             3.12
                Pycharm                          2024.1
                解释器                       system 3.12

有两种方法下代码

(A)点击GitHub - AbnerHqC/GaitSet: A flexible, effective and fast cross-view gait recognition network

 去下载源代码,如果打不开GitHub就去下一个watt toolkit加速器,加速GitHub

(B)用python终端下载,终端输入这些

git clone https://github/AbnerHqC/GaitSet.git

多添一句,我用github下载其他代码的时候有概率会弹出404界面,此时用终端是最好的选择

3.软件包

大概要下载这么多

除了torch torchaudio torchvision先别安装,别的包只要版本差不多就行,可以用解释器下载,如果网络抽风就用终端下载

 关于终端pip下载,有兴趣的可以看

【Python】pip超详细教程,pip的安装与使用,解决pip下载速度慢的问题-CSDN博客

4.torch三件套(重点)

现在是torch的问题,torch的版本与CUDA版本有对应关系,且torch三件套的版本严格对应,所以不要随意下载版本

这里我用的的torch版本是2.3.1,读者在选择自己的torch版本时要注意与CUDA的兼容性

先在Previous PyTorch Versions | PyTorch这个网站找到torch2.3.1的Windows部分,如图,找CUDA12.1的那一部分

 在pycharam终端输入这句

pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 --index-url https://download.pytorch/whl/cu121

 等个几分钟或十几分钟就可以,会给你下一堆东西

 有这些东西应该差不多了,然后创个python程序写下这些

import torch
print(torch.cuda.is_available())
print(torch.__version__)

如果输出这些

True
2.3.1+cu121

就可以了,第一个print是输出你的torch+GPU是否存在,第二个输出torch+GPU版本,切记,一定要GPU版本的torch,就是torch版本+cu版本的这种形式,不然你后续代码跑不了

三、改动代码

1. triplet.py部分代码改动

这一部分

 用下面这一部分代替

        # hard
        hard_hp_dist = torch.max(torch.masked_select(dist, hp_mask.to(torch.bool)).view(n, m, -1), 2)[0]
        hard_hn_dist = torch.min(torch.masked_select(dist, hn_mask.to(torch.bool)).view(n, m, -1), 2)[0]
        hard_loss_metric = F.relu(self.margin + hard_hp_dist - hard_hn_dist).view(n, -1)

        hard_loss_metric_mean = torch.mean(hard_loss_metric, 1)

        # non-zero full
        full_hp_dist = torch.masked_select(dist, hp_mask.to(torch.bool)).view(n, m, -1, 1)
        full_hn_dist = torch.masked_select(dist, hn_mask.to(torch.bool)).view(n, m, 1, -1)
        full_loss_metric = F.relu(self.margin + full_hp_dist - full_hn_dist).view(n, -1)

2. pretreatment.py函数

在两条黄线之间添加部分代码

添加这三行

wd = os.getcwd()
input_path = os.path.join(wd, 'input_data_path')
output_path = os.path.join(wd, 'output_data_path')

其中的input_data_path与output_data_path需要自行修改

再改一点

后面的部分这样改,不然报错,只创建文件夹,不输出图片

if __name__ == '__main__':
    pool = Pool(WORKERS)
    results = list()
    pid = 0

    print('Pretreatment Start.\n'
          'Input path: %s\n'
          'Output path: %s\n'
          'Log file: %s\n'
          'Worker num: %d' % (
              INPUT_PATH, OUTPUT_PATH, LOG_PATH, WORKERS))

    id_list = os.listdir(INPUT_PATH)
    id_list.sort()
    # Walk the input path
    for _id in id_list:
        seq_type = os.listdir(os.path.join(INPUT_PATH, _id))
        seq_type.sort()
        for _seq_type in seq_type:
            view = os.listdir(os.path.join(INPUT_PATH, _id, _seq_type))
            view.sort()
            for _view in view:
                seq_info = [_id, _seq_type, _view]
                out_dir = os.path.join(OUTPUT_PATH, *seq_info)
                os.makedirs(out_dir)
                results.append(
                    pool.apply_async(
                        cut_pickle,
                        args=(seq_info, pid)))
                sleep(0.02)
                pid += 1

    pool.close()
    unfinish = 1
    while unfinish > 0:
        unfinish = 0
        for i, res in enumerate(results):
            try:
                res.get(timeout=0.1)
            except Exception as e:
                if type(e) == MP_TimeoutError:
                    unfinish += 1
                    continue
                else:
                    print('\n\n\nERROR OCCUR: PID ##%d##, ERRORTYPE: %s\n\n\n',
                          i, type(e))
                    raise e
    pool.join()

input_data_path为CASIA-B数据集在本地文件的地址。(注意:你需要解压完全,数据集压缩包内的小数据集依旧是压缩包的形式,同样需要进行解压缩操作,直到图片出现为止)

 output_data_path为数据集预处理后存放的路径。此文件必须是一个空文件,否则会报错,下面是我的Path设置

wd = os.getcwd()
input_path = os.path.join(wd, 'E:\步态测试\GaitSet-master\GaitDatasetB-silh0\pretreatment')
output_path = os.path.join(wd, 'E:\步态测试\GaitSet-master\GaitDatasetB-silh0\output1')

这里有一大败笔,路径尽量或压根别带中文,不然到时候跑train.py或者test.py就惨了

3. config.py改动

必须要改的大概这三个

WORK_PATH路径:你代码里面的“work”,如图,给它路径写上去(斜杠前的点就代表当前路径)

CUDA_VISIBLE_DEVICES:使用的GPU编号,一般电脑只有一个GPU(比如我),所以只用“0”,想查看GPU个数请转到

Windows系统查询CPU、GPU、CUDA_cuda查询gpu数量和核心数量-CSDN博客

dataset_path:就是前面说的output_path(切记别带中文)

   "WORK_PATH": r"E:\Gait DataSet\work",
    "CUDA_VISIBLE_DEVICES": "0",
    "data": {
        # 'dataset_path': r"E:\Gait DataSet\test",
        'dataset_path': r'E:\Gait DataSet\CASIA-B\output1',

这是我的设置,其中的Gait DataSet是同样的数据集,因为前面用了中文路径所以顺带work复制到这来了,读者可不必这样操作

四、代码运行

1.pretreatment函数

作用是把输入图片进行裁剪,输入数据集是124个,输出数据集也是124个

切记,代码开始跑的时候就别动了,等它运行完会自行退出,博主曾经在它没跑完的时候就手动暂停了,导致output文件(也就是输出数据集)里从33号到124号都是空文件夹

跑完后去查看你的output文件夹

其中,./124/ nm-06/180是最后一小批文件,如果它们也被裁剪完,那么函数也就跑完了

2.train函数

在这之前先去config文件看看,确认前面说的三个路径配好了没,尤其是dataset_path ,也就是你的output_path路径千万别带中文,博主之前带了中文,结果跑train函数一堆错

'batch_size': (2, 16),

建议你的batch_size改成这样,不然训练的时候容易崩,我用(2,16)跑的时候,GPU占用率从0%直逼96%,如果读者的电脑强而有力的话,可以不改

如果没跑完突然卡停了,去修改这个

'restore_iter': 0,

打个比方,我当时跑到38100的时候由于不明原因卡退出去了,这时候把restore_iter改成38100,就能从38100开始继续跑,和pretreatment一样,跑完的时候会自己停,中途时间挺长,别乱动

3.test函数

在你跑完train的时候再跑,这个我没什么说的,如果你不想把train跑完就跑test,这样搞

还是我,当时train到38100的时候停了,直接跑test会报错,因为你的total_iter设置成了80000,把这个改成38100就行

 'total_iter': 80000,

不过test后的准确率必然大打折扣,还是强烈建议你跑完train

以上都是我遇到的问题,若仍无法解决,请看

【步态识别】GaitSet 算法学习+配置环境+代码调试运行《GaitSet: Regarding Gait as a Set for Cross-View Gait Recognition》_在哪里可以找步态识别的相关代码-CSDN博客

跑通GaitSet(跑不通你来揍我)_opengait 代码下载之后 如何运行-CSDN博客

GaitSet在Windows下配置到跑通的全过程记录_pycharm运行gaitset-CSDN博客

gaitset全代码实现问题总结_indexerror: caught indexerror in replica 0 on devi-CSDN博客

前言:

我在老师、学长的帮助下,浏览了很多CSDN博客配完了GaitSet,为了总结经验,同时也希望初学者少踩坑,便写下这篇博文。

注:博主刚大二,撰写的过程中难免会出现差错,望各位谅解

目录

一、配置硬件环境   驱动&CUDA&CUDNN

1.确定显卡型号

2.下载NVIDIA驱动程序

3.下载&安装CUDA

4.下载&安装CUDNN 

5.环境变量 

二、软件环境

1.数据集CASIA-B

2.代码

3.软件包

4.torch三件套(重点)

三、改动代码

1. triplet.py部分代码改动

2. pretreatment.py函数

3. config.py改动

四、代码运行

1.pretreatment函数

2.train函数

3.test函数


一、配置硬件环境   驱动&CUDA&CUDNN

1.确定显卡型号

按windows+r 并输入cmd打开Windows的运行对话框,如图

打开后输入 nvidia-smi(见红线部分) 可打开NVIDIA面板,如图

先不管绿线部分,其中蓝线部分是你的GPU型号,以我的电脑为例,型号为GeForce RTX 4060 Laptop GPU

2.下载NVIDIA驱动程序

前往NVIDIA GeForce 驱动程序 - N 卡驱动 | NVIDIA下载,还是以我的电脑为例,如图

3.下载&安装CUDA

之前的绿线部分表示显卡所支持的CUDA(最高)版本,在https://developer.nvidia/cuda-12-1-0-download-archive?target_os=Windows&target_arch=x86_64&target_version=11&target_type=exe_local进行下载,读者可根据需要自行选择,此处我选择CUDA12.1,如图

 之后开始安装,这里安装路径可以自定义,我选择在D盘创建一个CUDA空文件夹安装

 选择自定义安装

 这三个不要选,别急,还有

 CUDA中,这个别选

这俩位置其实也可以自定义,为了省事我就方放同一个文件夹了,这里我选D盘

这里有一败笔,前文的EXtraction路径与下面的两个路径不能相同,不然吞你文件

若真消失了,请看关于安装CUDA后文件夹消失的问题_cuda安装后文件夹不见了-CSDN博客

 然后安装完成后,在D:\CUDA12.1\bin 下找一个叫nvcc的应用程序,找到的话,CUDA就安装成功

接着,在 D:\CUDA12.1\extras\CUPTI\lib64 路径下,找cupti64_2023.1.0.dll这个应用程序拓展

能找到就算成功 

4.下载&安装CUDNN 

在https://developer.nvidia/rdp/cudnn-archive下载对应CUDA12.x版本的CUDNN,这里我选择的是v8.9.7

读者要根据自己的CUDA版本选择,若是CUDA11.x(建议装11.8)的就去找11.x对应的CDUNN

下载后进行解压,将对应的bin、lib、include与CUDA12.1对应的bin、lib、include进行合并。

CUDNN中bin文件的cudnn64_8.dll放入CUDA12.1的bin文件中

CUDNN中include文件的cudnn.h放入CUDA12.1 include文件中

CUDNN中lib\x64文件的cudnn.lib的放入CUDA12.1的lib\x64中 

5.环境变量 

打开设置界面,在“系统”中选择“系统信息”

然后点击“高级系统设置” ,进入系统属性界面,先点“高级”,再点“环境变量”

 一般来说CUDA12.1会自动加上去,如图

CUDA_PATH一样的设置

 

系统变量(S)中找到Path

给这俩加进去

点击确定后就行

然后Windows+r 再输入cmd,输入nvcc -V(现在知不知道让你找的那个nvcc文件是干什么的了?)

二、软件环境

1.数据集CASIA-B

在生物识别与安全技术研究中心中找到Dataset B (大概628M)并下载

CASIA-B是中国科学院自动化研究所提供的CASIA步态数据库其中之一。CASIA步态数据库有三个数据集:Dataset A(小规模库), Dataset B(多视角库)和Dataset C(红外库),本文采用的是Dataset B。若想了解更多关于CASIA-B的内容,请在其他文章中搜索

2.代码

                Python版本                             3.12
                Pycharm                          2024.1
                解释器                       system 3.12

有两种方法下代码

(A)点击GitHub - AbnerHqC/GaitSet: A flexible, effective and fast cross-view gait recognition network

 去下载源代码,如果打不开GitHub就去下一个watt toolkit加速器,加速GitHub

(B)用python终端下载,终端输入这些

git clone https://github/AbnerHqC/GaitSet.git

多添一句,我用github下载其他代码的时候有概率会弹出404界面,此时用终端是最好的选择

3.软件包

大概要下载这么多

除了torch torchaudio torchvision先别安装,别的包只要版本差不多就行,可以用解释器下载,如果网络抽风就用终端下载

 关于终端pip下载,有兴趣的可以看

【Python】pip超详细教程,pip的安装与使用,解决pip下载速度慢的问题-CSDN博客

4.torch三件套(重点)

现在是torch的问题,torch的版本与CUDA版本有对应关系,且torch三件套的版本严格对应,所以不要随意下载版本

这里我用的的torch版本是2.3.1,读者在选择自己的torch版本时要注意与CUDA的兼容性

先在Previous PyTorch Versions | PyTorch这个网站找到torch2.3.1的Windows部分,如图,找CUDA12.1的那一部分

 在pycharam终端输入这句

pip install torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 --index-url https://download.pytorch/whl/cu121

 等个几分钟或十几分钟就可以,会给你下一堆东西

 有这些东西应该差不多了,然后创个python程序写下这些

import torch
print(torch.cuda.is_available())
print(torch.__version__)

如果输出这些

True
2.3.1+cu121

就可以了,第一个print是输出你的torch+GPU是否存在,第二个输出torch+GPU版本,切记,一定要GPU版本的torch,就是torch版本+cu版本的这种形式,不然你后续代码跑不了

三、改动代码

1. triplet.py部分代码改动

这一部分

 用下面这一部分代替

        # hard
        hard_hp_dist = torch.max(torch.masked_select(dist, hp_mask.to(torch.bool)).view(n, m, -1), 2)[0]
        hard_hn_dist = torch.min(torch.masked_select(dist, hn_mask.to(torch.bool)).view(n, m, -1), 2)[0]
        hard_loss_metric = F.relu(self.margin + hard_hp_dist - hard_hn_dist).view(n, -1)

        hard_loss_metric_mean = torch.mean(hard_loss_metric, 1)

        # non-zero full
        full_hp_dist = torch.masked_select(dist, hp_mask.to(torch.bool)).view(n, m, -1, 1)
        full_hn_dist = torch.masked_select(dist, hn_mask.to(torch.bool)).view(n, m, 1, -1)
        full_loss_metric = F.relu(self.margin + full_hp_dist - full_hn_dist).view(n, -1)

2. pretreatment.py函数

在两条黄线之间添加部分代码

添加这三行

wd = os.getcwd()
input_path = os.path.join(wd, 'input_data_path')
output_path = os.path.join(wd, 'output_data_path')

其中的input_data_path与output_data_path需要自行修改

再改一点

后面的部分这样改,不然报错,只创建文件夹,不输出图片

if __name__ == '__main__':
    pool = Pool(WORKERS)
    results = list()
    pid = 0

    print('Pretreatment Start.\n'
          'Input path: %s\n'
          'Output path: %s\n'
          'Log file: %s\n'
          'Worker num: %d' % (
              INPUT_PATH, OUTPUT_PATH, LOG_PATH, WORKERS))

    id_list = os.listdir(INPUT_PATH)
    id_list.sort()
    # Walk the input path
    for _id in id_list:
        seq_type = os.listdir(os.path.join(INPUT_PATH, _id))
        seq_type.sort()
        for _seq_type in seq_type:
            view = os.listdir(os.path.join(INPUT_PATH, _id, _seq_type))
            view.sort()
            for _view in view:
                seq_info = [_id, _seq_type, _view]
                out_dir = os.path.join(OUTPUT_PATH, *seq_info)
                os.makedirs(out_dir)
                results.append(
                    pool.apply_async(
                        cut_pickle,
                        args=(seq_info, pid)))
                sleep(0.02)
                pid += 1

    pool.close()
    unfinish = 1
    while unfinish > 0:
        unfinish = 0
        for i, res in enumerate(results):
            try:
                res.get(timeout=0.1)
            except Exception as e:
                if type(e) == MP_TimeoutError:
                    unfinish += 1
                    continue
                else:
                    print('\n\n\nERROR OCCUR: PID ##%d##, ERRORTYPE: %s\n\n\n',
                          i, type(e))
                    raise e
    pool.join()

input_data_path为CASIA-B数据集在本地文件的地址。(注意:你需要解压完全,数据集压缩包内的小数据集依旧是压缩包的形式,同样需要进行解压缩操作,直到图片出现为止)

 output_data_path为数据集预处理后存放的路径。此文件必须是一个空文件,否则会报错,下面是我的Path设置

wd = os.getcwd()
input_path = os.path.join(wd, 'E:\步态测试\GaitSet-master\GaitDatasetB-silh0\pretreatment')
output_path = os.path.join(wd, 'E:\步态测试\GaitSet-master\GaitDatasetB-silh0\output1')

这里有一大败笔,路径尽量或压根别带中文,不然到时候跑train.py或者test.py就惨了

3. config.py改动

必须要改的大概这三个

WORK_PATH路径:你代码里面的“work”,如图,给它路径写上去(斜杠前的点就代表当前路径)

CUDA_VISIBLE_DEVICES:使用的GPU编号,一般电脑只有一个GPU(比如我),所以只用“0”,想查看GPU个数请转到

Windows系统查询CPU、GPU、CUDA_cuda查询gpu数量和核心数量-CSDN博客

dataset_path:就是前面说的output_path(切记别带中文)

   "WORK_PATH": r"E:\Gait DataSet\work",
    "CUDA_VISIBLE_DEVICES": "0",
    "data": {
        # 'dataset_path': r"E:\Gait DataSet\test",
        'dataset_path': r'E:\Gait DataSet\CASIA-B\output1',

这是我的设置,其中的Gait DataSet是同样的数据集,因为前面用了中文路径所以顺带work复制到这来了,读者可不必这样操作

四、代码运行

1.pretreatment函数

作用是把输入图片进行裁剪,输入数据集是124个,输出数据集也是124个

切记,代码开始跑的时候就别动了,等它运行完会自行退出,博主曾经在它没跑完的时候就手动暂停了,导致output文件(也就是输出数据集)里从33号到124号都是空文件夹

跑完后去查看你的output文件夹

其中,./124/ nm-06/180是最后一小批文件,如果它们也被裁剪完,那么函数也就跑完了

2.train函数

在这之前先去config文件看看,确认前面说的三个路径配好了没,尤其是dataset_path ,也就是你的output_path路径千万别带中文,博主之前带了中文,结果跑train函数一堆错

'batch_size': (2, 16),

建议你的batch_size改成这样,不然训练的时候容易崩,我用(2,16)跑的时候,GPU占用率从0%直逼96%,如果读者的电脑强而有力的话,可以不改

如果没跑完突然卡停了,去修改这个

'restore_iter': 0,

打个比方,我当时跑到38100的时候由于不明原因卡退出去了,这时候把restore_iter改成38100,就能从38100开始继续跑,和pretreatment一样,跑完的时候会自己停,中途时间挺长,别乱动

3.test函数

在你跑完train的时候再跑,这个我没什么说的,如果你不想把train跑完就跑test,这样搞

还是我,当时train到38100的时候停了,直接跑test会报错,因为你的total_iter设置成了80000,把这个改成38100就行

 'total_iter': 80000,

不过test后的准确率必然大打折扣,还是强烈建议你跑完train

以上都是我遇到的问题,若仍无法解决,请看

【步态识别】GaitSet 算法学习+配置环境+代码调试运行《GaitSet: Regarding Gait as a Set for Cross-View Gait Recognition》_在哪里可以找步态识别的相关代码-CSDN博客

跑通GaitSet(跑不通你来揍我)_opengait 代码下载之后 如何运行-CSDN博客

GaitSet在Windows下配置到跑通的全过程记录_pycharm运行gaitset-CSDN博客

gaitset全代码实现问题总结_indexerror: caught indexerror in replica 0 on devi-CSDN博客

发布评论

评论列表 (0)

  1. 暂无评论