Learning to Hash Naturally Sorts发表在IJCAI 2022(CCFA)。NSH是一种无监督深度哈希学习方法,旨在解决数据相似性排序中的非可微问题。它采用SoftSort方法,通过对样本哈希码的汉明距离进行排序,并利用排序噪声对比估计(SortedNCE)损失,动态优化数据的排序检索候选列表。NSH在端到端训练中有效利用数据的语义信息,在提升检索性能的同时显著提高哈希码的质量和排序准确性。
本人尝试对NSH模型进行复现,但代码有问题,模型并未收敛。
在论文中NSH的测试效果如下:
cifar10有三种不同的配置
- config[“dataset”]=“cifar10”将使用1000个图像(每个类100个图像)作为查询集,5000个图像(每类500个图像)用作训练集,其余54000个图像用作数据库。
- config[“dataset”]=“cifar10-1”将使用1000个图像(每个类100个图像)作为查询集,其余59000个图像用作数据库,5000个图像(每类500个图像)从数据库中随机采样作为训练集。
- config[“dataset”]=“cifar10-2”将使用10000个图像(每个类1000个图像)作为查询集,50000个图像(每类5000个图像)用作训练集和数据库。
你可以在这里下载NUS-WIDE,它使用data/nus-wide/code.py进行划分,每个类随机选择100幅图像作为查询集(共2100幅图像)。剩余的图像被用作数据库集,我们从中每个类随机采样500个图像作为训练集(总共10500个图像)。
你可以在这里下载ImageNet、NUS-WIDE-m和COCO数据集,或者使用百度云盘(密码:hash)。NUS-WIDE中有269648个图像,其中195834个图像分为21个常见类别。NUS-WIDE-m有223496个图像。
你可以在这里下载mirflickr,然后使用data/mirflickr/code.py划分,随机选择1000个图像作为测试查询集和4000个图像作为训练集。
-
在自己所使用的环境中安装依赖库。
pip install requirements.txt
-
若使用CIFAR数据集,则无需自己下载,若使用其他数据集,则将下载的数据集放置在dataset文件夹下。
-
在train.py文件中修改运行参数。
configs = { "device": torch.device("cuda:0" if torch.cuda.is_available() else "cpu"), "optimizer": {"type": optim.Adam, "optim_params": {"lr": 1e-5}}, "info": "NSH", "dataset": "mirflickr", "net": HashingModel, "resize_size": 224, "crop_size": 224, "batch_size": 50, "epoch": 200, "bit_list": [16, 32, 64], "positive_num": 2, "tau": 0.1, "num_workers": 4, "test_map": 1, "logs_path": "results", }
-
在终端输入命令:
python train.py