# Pytorch_NetVLAD **Repository Path**: hu_jinsong/pytorch_-net-vlad ## Basic Information - **Project Name**: Pytorch_NetVLAD - **Description**: No description available - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 9 - **Forks**: 4 - **Created**: 2021-01-14 - **Last Updated**: 2024-03-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # NetVlAD_Pytorch ## 1. 项目简介 本项目是[NetVlAD](https://arxiv.org/abs/1511.07247)在PyTorch环境下的实现,包括在不同数据集上训练模型的代码,通过本项目能快速掌握NetVLAD的使用。 ![netvlad](image/vlad_cnn.png) NetVLAD是一个卷积神经网络(CNN)架构,它可以直接以端到端的方式进行位置识别任务的训练。该体系结构的主要组成部分NetVLAD是一个新的广义VLAD层,其灵感来自于图像检索中常用的“局部聚集描述符向量”图像表示。该层可以很容易地插入到任何CNN架构中,并且可以通过反向传播进行训练。 ## 2.安装依赖 1. [PyTorch](https://pytorch.org/get-started/locally/) (at least v0.4.0) 2. [Faiss](https://github.com/facebookresearch/faiss) 3. [scipy](https://www.scipy.org/) - [numpy](http://www.numpy.org/) - [sklearn](https://scikit-learn.org/stable/) - [h5py](https://www.h5py.org/) 4. [tensorboardX](https://github.com/lanpa/tensorboardX) 本程序最好在Conda环境下运行,Conda的运行环境安装见[InstallConda](https://gitee.com/pi-lab/pi-det/blob/master/doc/InstallConda.md) ## 3. 使用说明 ### 3.1 数据准备 *匹兹堡(Pitts250k)*包含从Google Street View下载的250k个数据库图像和从Street View生成的24k个测试查询,但拍摄时间不同,相隔数年。 *Tokyo247*包含76k个数据库图像和315个使用手机相机拍摄的查询图像。这是一个极具挑战性的数据集,其中查询图像是在白天、日落和晚上拍摄的,而数据库图像只在白天拍摄,因为它们来自Google Street View。 运行此代码需要 Pittsburgh 250k或Tokyo247位置识别数据集和对应数据集的数据集规范。 本项目所需数据可通过以下地址获取: - 内网数据路径 (/home/a409/users/hujinsong/my_data) - 百度网盘获取 链接: https://pan.baidu.com/s/1T_NuFlSKa3tSZxzVD2EYgg 密码: e38t ### 3.2 训练 以Pittsburgh数据集为例说明,Tokyo247数据集可类比实现。 `main.py` 包含大部分代码,有三种不同的模式(`train`,`test`,`cluster`),下面详细讨论这些模式。 为了初始化NetVlad层,首先必须使用正确的设置和“-mode=cluster”运行“main.py”。之后可以使用以下默认标示训练模型: ``` python main.py --mode=train --arch=vgg16 --pooling=netvlad --num_clusters=64 ``` 命令行参数、tensorboard数据和模型状态都将保存到“opt.runsPath”中,之后可以用于测试或恢复训练。 有关所有命令行参数的详细信息,请运行: ``` python main.py --help ``` ### 3.3 测试 在匹兹堡30k测试集上测试之前训练过的模型(请将目录替换为正确的路径,以适用于个人项目): python main.py --mode=test --resume=runsPath/Nov19_12-00-00_vgg16_netvlad --split=test 用于训练的命令行参数已保存,因此我们不需要为测试指定参数。 此外,为了获得“现成”的性能,可以省略简历目录: python main.py --mode=test ### 3.4 聚簇 为了初始化NetVlad层,首先需要从数据中采样,并获得`opt.num_clusters` 中心。此步骤对于网络的每个配置和每个数据集都是必需的。只需运行 python main.py --mode=cluster --arch=vgg16 --pooling=netvlad --num_clusters=64 ## 4. 参考资料 [论文原文](/doc) [原项目界面](https://www.di.ens.fr/willow/research/netvlad/) [原文代码实现(matlab)](https://github.com/Relja/netvlad) [Nanne/pytorch-NetVlad](https://github.com/Nanne/pytorch-NetVlad) [参考文献](/reference)