基于 ResNet50 + GeM + BatchHard TripletLoss 的昼夜跨域视觉位置识别项目。使用 GardensPoint 数据集,白天(day_left / day_right)作为参考图库,夜晚(night_right)作为查询图,实现昼夜场景匹配。(当然还有其他的db与q组合)
若上传test和train文件超出了bb上2560mb的限制,所以本文件夹中已删除,可以通过prepocess_data.py复现
该目录下的代码是最稳定的训练/评估管线,使用 随机切分 的 demonstrate/train/ 和 demonstrate/test/ 数据集(由 preprocess_data.py 以 seed=42, 70/30 划分生成)。
| 文件 | 说明 |
|---|---|
train_cnn_resnet50_ultimate.py |
最终成功训练出0.75以上的模型,请以这个的算法为主----------------------- |
| --------------------------------------------------- | |
preprocess_data.py |
数据预处理:从 images/GardensPoint 按 70/30 随机划分训练/测试集 |
train_cnn_resnet50_stable_version.py |
ResNet50 + GeM + BatchHardTripletLoss 稳定训练版(已验证 R@1 ≈ 0.767~0.786) |
train_cnn_good1_demo_try.py |
good1 的优化版:+RandomRotation +Dropout +梯度裁剪 +早停 |
| #但是实际结果也是停留在0.7附近 | |
train_cnn_resNet101_demo.py |
ResNet101 版本尝试(仅在 backbone 上做单变量改动) |
| #感觉101参数量比较大,小数据集效果不是很好 | |
train_cosplace_demo.py |
CosPlace 预训练模型在 demonstrate 数据集上的微调(两阶段策略) |
evaluate_model.py |
模型评估展示:计算 Recall@1 / Recall@5,可视化成功/失败匹配案例 |
vpr_resnet50_0.833.pth |
综合最优优模型权重(R@1 ≈ 0.833) |
该目录下的代码是最稳定的训练/评估管线,使用顺序切分前70/后30的 norland_code/train/ 和 norland_code/test/ 数据集(由 preprocess_data.py 70/30 划分生成)。
| 文件 | 说明 |
|---|---|
[train_nordland.py] |
task2使用的主要代码,请以这个的算法为主----------------------- |
| --------------------------------------------------- | |
[preprocess_data.py] |
数据预处理 |
[evaluta_nordland_topk] |
模仿外层的evalute写的评估recall以及匹配率的测试文件 |
[nordland_match_123.png] |
任务要求的匹配图,3/3 |
[nordland.pth] |
训练出来的参数权重,recall1=0.69,更多version在https://huggingface.co/ye999/train_vpr_form_resnet/ |
| 文件 | 尝试方向 |
|---|---|
train_cnn_explain.py |
早期版本,使用物理文件夹划分(train_img/test_img),420张图训练 |
train_cnn_explain_good1.py |
good1 经典配置:R@1 > 0.75 的基准版,超参数经充分调优,但是也是随机切分数据集版本 |
train_cnn_explain_fair.py |
公平版:仅用 day_right + night_right训练,(不含 day_left)但是按顺序划分数据集,使用物理文件夹划分 |
tritrain_cnn.py |
三元组训练第一第二次尝试,在小数据集(420图)上遇到过拟合 / R@1 卡在 0.30 |
tritrain_cnn_fixed.py |
三元组AI加强版:更强数据增强 + 辅助分类损失 + 平均模式 TripletLoss |
train_cosplace_vpr.py |
CosPlace 微调的简化版(单阶段,仅训练分类头,使用 train_img/test_img 数据) |
| 文件 | 尝试方向 |
|---|---|
baseline_resnet50.py |
ImageNet 预训练 ResNet50 零训练基线(含三重诊断:对齐检查 → 特征质量 → 可视化) |
baseline_cosplace.py |
CosPlace 预训练模型 zero-shot 基线(无微调) |
baseline_eigenplaces.py |
EigenPlaces 预训练模型 zero-shot 基线) |
baseline_netvlad.py |
NetVLAD 基线 |
| 文件 | 尝试方向 |
|---|---|
check_data_alignment.py |
检查 train_img / test_img 中 day_right 与 night_right 文件名是否一一对应 |
quick_check.py |
超快速数据对齐检查 |
diagnose_offset.py |
用 CosPlace 做全库匹配,诊断昼夜图片间是否存在系统性的索引偏移 |
adjacent_sampler.py |
相邻位置采样器:滑动窗口策略让 Triplet Loss 聚焦于 Hard Negative(相邻位置) |
check_cosplace_arch.py |
快速诊断本地 CosPlace 模型结构 |
| 文件 | 尝试方向 |
|---|---|
test_model.py |
加载训练好的 .pth 模型,输出前 10 张 night_right 的匹配结果(作业第 4 问) |
test_cosplace_model.py |
快速测试 CosPlace_VPR_CNN 模型结构及冻结策略 |
test_seq_search.py |
测试 CosPlace + 序列搜索(滑动窗口),模拟实际 VPR 的序列匹配 |
evaluate_model.py |
评估模型性能,特色是可视化成功/失败匹配案例,可以看dayleft-nightright,dayright-nightright分别的泛化情况 |
| 文件 | 说明 |
|---|---|
offset_analysis_训练集.png |
训练集偏移分析图 |
offset_analysis_测试集.png |
测试集偏移分析图 |
offset_analysis_全部.png |
全部数据偏移分析图 |
loss_curve_fair.png |
公平版训练损失曲线 |
| 路径 | 说明 |
|---|---|
evaluation/ |
评估指标(recallAtK)及匹配可视化工具 |
models/cosplace/ |
CosPlace 网络架构定义 + 预训练权重 |
models/eigenplaces/ |
EigenPlaces 网络架构定义 + 预训练权重 |
| 路径 | 说明 |
|---|---|
train_img/ |
物理划分的训练集(day_left / day_right / night_right,不同位置) |
test_img/ |
物理划分的测试集(day_left / day_right / night_right,完全未见过的位置) |
images/ |
GardensPoint 原始完整数据集 |
norland_images/ |
Norland 数据集(备用) |
[norland_images/][images/] |
这两个目前在文件夹中没有 |
| 是因为划分了训练集和测试集后我删了,完整在 | |
| https://huggingface.co/ye999/train_vpr_form_resnet/ |
- demonstrate 版:R@1 稳定在 0.783-0.833(使用随机切分数据集,
seed=42) - 模型架构:ResNet50 + GeM 池化 + BatchHard TripletLoss + 余弦退火
- 训练数据:
demonstrate/train/(day_left + day_right + night_right,每个位置 3 张) - 测试数据:
demonstrate/test/(同上,30% 未见过位置)