
1. 跨模态行人重识别基础概念想象一下这样的场景白天用普通摄像头拍到一个人晚上用红外摄像头再拍同一个人系统能否认出这是同一个人这就是跨模态行人重识别要解决的问题。简单来说它要处理的是不同成像模态如可见光RGB和红外IR下的行人匹配问题。传统行人重识别主要解决同一模态下的匹配比如不同摄像头拍到的可见光图像。而跨模态场景下最大的挑战是模态差异——同一物体在不同成像方式下呈现的视觉特征完全不同。就像你穿同一件衣服白天看是蓝色红外成像可能就变成白色了。AGWAlignment-Guided Wavelet是当前较先进的跨模态方法它在ResNet50基础上增加了Non-local Attention模块。这个1x1卷积核的注意力机制能捕捉跨模态的共享特征就像老师批改作业时用红笔圈出重点让模型知道该关注哪些关键区域。2. 实战环境搭建2.1 云服务器选择推荐使用AutoDL的GPU实例实测RTX 4090训练速度比3060快2-3倍。创建实例时选择Ubuntu 20.04系统CUDA 11.7版本。登录后先更新基础环境apt-get update apt-get install -y git wget unzip conda create -n agw python3.8 -y conda activate agw2.2 依赖安装从GitHub克隆官方代码库git clone https://github.com/mangye16/Cross-Modal-Re-ID-baseline cd Cross-Modal-Re-ID-baseline pip install -r requirements.txt特别注意两个易错点PyTorch版本要匹配CUDA建议用pip install torch1.12.1cu117安装torchreid时可能报错需要先装cythonpip install cython pip install torchreid1.4.03. 数据集处理3.1 SYSU-MM01数据集这个数据集包含491个行人的30万图像其中cam1/2/4/5可见光摄像头cam3/6红外摄像头预处理步骤从官网下载原始数据后运行预处理脚本python pre_processing_sysu.py --dataset_path /your/SYSU-MM01/path脚本会生成.npy文件这是为了加速后续数据加载。处理完的目录结构应该是SYSU-MM01/ ├── cam1/ # 可见光 ├── cam3/ # 红外 ├── ... └── exp/ # 预处理生成的npy文件3.2 RegDB数据集较小但更均衡的数据集包含412人各10张可见光和10张红外图像。需要手动解压后放在data/RegDB目录下。特别要注意文件名格式可见光图像person_001_visible_1.jpg红外图像person_001_thermal_1.jpg4. 模型训练配置4.1 参数调整修改train.py中的关键参数parser.add_argument(--dataset, defaultsysu, choices[sysu, regdb]) parser.add_argument(--lr, typefloat, default0.1) # 学习率 parser.add_argument(--method, defaultagw) # 基线方法 parser.add_argument(--batch-size, typeint, default8) parser.add_argument(--epochs, typeint, default80)对于SYSU-MM01数据集建议all-search模式用所有摄像头数据indoor-search模式仅用室内摄像头4.2 数据加载器在data_manager.py中修改数据路径if dataset sysu: data_path /your/SYSU-MM01/path elif dataset regdb: data_path /your/RegDB/path5. 训练与测试5.1 启动训练可见光到红外模式适用于夜间安防场景python train.py --dataset sysu --lr 0.1 --method agw --gpu 0 --trial 1红外到可见光模式适用于日间检索python train.py --dataset regdb --lr 0.01 --method agw --gpu 0 --trial 1训练过程会输出loss和准确率正常情况前10个epoch的rank-1准确率应该在20%左右逐步上升。5.2 模型测试测试时需指定模型路径和模式python test.py --mode all --resume log/sysu_agw/checkpoint_ep80.pth --gpu 0 --dataset sysu关键指标解读Rank-1最相似结果就是正确匹配的概率mAP平均精度均值考虑所有匹配结果6. 性能优化技巧6.1 数据增强在data_loader.py中添加更多增强策略transform_train T.Compose([ T.RandomCrop((256, 128), padding10), T.RandomHorizontalFlip(), T.ColorJitter(brightness0.3, contrast0.3, saturation0.3), # 对可见光有效 T.ToTensor(), T.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]) ])6.2 模型微调修改AGW的Non-local模块参数# 在model.py中 self.non_local nn.Sequential( nn.Conv2d(2048, 1024, kernel_size1, stride1, biasFalse), nn.BatchNorm2d(1024), nn.ReLU(), NonLocalBlock(1024) # 可调整内部维度 )7. 常见问题排查问题1CUDA out of memory降低batch size到4添加梯度累积optimizer.zero_grad() for i in range(4): # 累积4次 loss.backward(retain_graphTrue) optimizer.step()问题2准确率不升检查数据路径是否正确尝试更小的学习率0.01可视化特征分布from torchreid import tools tools.visualize_ranked_results( distmat, dataset, save_dirvis, topk20 )在实际项目中我发现红外图像的亮度标准化很重要。可以修改预处理代码对红外图像单独做归一化if thermal in img_path: img (img - img.min()) / (img.max() - img.min()) * 255