入门行人重识别 尝试跑(郑哲东 简单行人重识别代码到88%准确率)过程

本文分享了如何通过调整batch_size解决行人重识别代码中CUDA内存不足的问题,从prepare.py到train.py的实践步骤,以及test.py中cuda_error的调试过程,最终通过理解代码并调整GPU运算策略实现性能提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

运行代码和参考步骤

代码
简单行人重识别代码到88%准确率

具体步骤参考 从零开始行人重识别

下载Market-1501数据集和源代码

试运行-第一部分

prepare.py

输入指令

python3 prepare.py

运行顺利

model.py

train.py

输入指令

python train.py --gpu_ids 0 --name ft_ResNet50 --train_all --batchsize 32  --data_dir your_data_path

记得修改your_data_path

出现了以下报错

RuntimeError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 1.31 GiB total capacity; 1.04 GiB already allocated; 4.39 MiB free)
(这里的具体数据编了一下,大概是这样,因为之前没存)

解决办法
batch_size改小,我改成2以后就可以跑了,但是跑了15个小时才跑完。(又忘记截图了)
输入指令

python train.py --gpu_ids 0 --name ft_ResNet50 --train_all --batchsize 2  --data_dir your_data_path

试运行-第二部分

test.py

报错如下

File “/home/wuboqun/Downloads/Person_reID_baseline_pytorch/evaluate_gpu.py”, line 79, in (module)
query_feature = query_feature.cuda()RuntimeError: CUDA error: device-side assert triggered CUDA kernel errors might be asynchronously reported at some other API call,so the stacktrace below might be incorrect. For debugging consider passing CUDA_LAUNCH_BLOCKING=1

解决方法
在运行指令前加上 (我觉得可能不对,因为出现了下面新的报错)

CUDA_LAUNCH_BLOCKING=1

之后报错如下

File “/home/wuboqun/Downloads/Person_reID_baseline_pytorch/evaluate_gpu.py”, line 79, in (module)
query_feature = query_feature.cuda()
RuntimeError: CUDA error: out of memory

之后在网上查找了关于CUDA error: out of memory所有方法都没有用,一直报这个错,我一直在用nvidia-smi这个指令查看gpu的占用情况,每次运行占用量都在1500MiB左右,之后又单独运行了test.py里的这一句

 os.system('python evaluate_gpu.py | tee -a %s'%result)

因为这句运行了evaluate_gpu.py,而出错的语句就是这个里面的这句

query_feature = query_feature.cuda()

这个时候查看gpu的 占用量,大概是800MiB左右。
因为我的gpu内存容量是2048MiB,所以才一直有CUDA error: out of memory的报错
Alt
所以我把这两句

query_feature = query_feature.cuda()
gallery_feature = gallery_feature.cuda()

改成了

device = torch.device("cpu")
query_feature = query_feature.to(device)
gallery_feature = gallery_feature.to(device)

就是不在gpu跑而是在cpu上
是跑出来了,但是我不确定对不对。之后要仔细读一下代码。

更新:应该是不对的,不知道是我在自己电脑上跑batchsize太小了还是我改了这里,跑出来rank-1等数据都是0.00059这种,显然是不对的。所以我在网上找了租显卡的,然后好快,20分钟就训练完了,我自己电脑跑了15个小时…结果还不对
在租的上面跑了以后结果是对的。

batchsize = 64
Alt
在train的时候加上--cosface后得到的(batchsize = 128)
Alt
在train的时候加上--triplet后得到的(batchsize = 64)
alt
在train的时候加上--cosface后得到的(batchsize = 64)
alt

所以之后就是读一下代码

跨模态行人重识别是指通过使用不同的感知模态(如图像和视频)来进行行人身份识别的任务。这个问题涉及到计算机视觉和机器学习等领域。 入门跨模态行人重识别的一种方法是使用深度学习技术。下面是一些基本的步骤: 1. 数据收集:收集包含图像和视频的跨模态行人数据集。这些数据可以包括不同时间、场景和视角下的行人图像和视频。 2. 特征提取:使用预训练的深度学习模型(如ResNet、VGG等)来提取图像和视频的特征表示。对于图像,可以直接使用卷积层输出或全局平均池化层输出作为特征向量。对于视频,可以对每一帧进行特征提取,并结合这些特征来表示整个视频。 3. 跨模态融合:将图像和视频的特征向量进行融合,可以使用简单的方法,如将它们连接在一起或者对它们进行加权平均。这样可以得到一个综合的特征向量,表示跨模态的行人信息。 4. 重识别模型训练:使用带有标签的数据集来训练跨模态行人重识别模型。可以使用分类器或者度量学习方法(如三元组损失函数)来学习行人之间的相似性。 5. 测试和评估:使用未见过的数据集对训练好的模型进行测试和评估。可以使用准确率、精确率和召回率等指标来评估模型的性能。 需要注意的是,跨模态行人重识别是一个挑战性的任务,因为不同模态的数据之间存在一定的差异性。因此,还可以尝试使用领域自适应技术来解决这个问题,以提高模型的泛化能力。 希望这些基本步骤可以帮助你入门跨模态行人重识别任务!如果你有更具体的问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值