基于DELF(DEep Local Features)深度局部特征的图像检索实践

本文记录利用官方源代码复现DELF图像检索算法的过程,希望能帮助有同样任务需求的小伙伴们避开一些坑,更快捷地完成实现!
注意:以下演示过程为Linux Ubuntu 下,且为GPU版本。
先决条件:
克隆TensorFlow Model Garden 存储库并移动到该models/research/delf/delf/python/training文件夹中。
https://github.com/tensorflow/models

git clone https://github.com/tensorflow/models.git
cd models/research/delf/delf/python/training

1安装DELF库

(1)Tensorflow2.3.0 python3.8

pip install tensorflow-gpu==2.3.0
pip install tensorflow-probability==0.11.0

(2)TF-Slim

git clone https://gitee.com/zhuxiucui/tf-slim.git
cd tf-slim
pip install .

(3)Protobuf

wget https://github.com/google/protobuf/releases/download/v3.3.0/protoc-3.3.0-linux-x86_64.zip 
unzip protoc-3.3.0-linux-x86_64.zip
PATH_TO_PROTOC=`pwd`

(4)Python dependencies

pip install matplotlib numpy scikit-image scipy
sudo apt-get install python3-tk

(5)tensorflow/models

连续 cd .. 进入research目录下
#From tensorflow/models/research/

export PYTHONPATH=$PYTHONPATH:`pwd`

然后 cd delf 进入delf目录下
#From tensorflow/models/research/delf/

${PATH_TO_PROTOC?}/bin/protoc delf/protos/*.proto --python_out=.
pip install -e .

最后可以执行

python -c 'import delf'

如果没有异常输出则DELF包加载成功。

2下载GLDv2训练数据

GLDv2由TRAIN INDEX和TEST 三部分组成,每部分中的图像被分组到 .tar文件中,并在.csv包含训练元数据和许可信息的文件中单独引用。*.tar每个数据集的文件数如下:
在这里插入图片描述
在training目录下可运行download_dataset.sh脚本下载数据
bash download_dataset.sh 500 100 20
该脚本按顺序采用以下参数:
要下载的 TRAIN 数据集中的图像文件数(最多 500 个)。
要下载的 INDEX 数据集中的图像文件数(最多 100 个)。
要下载的 TEST 数据集中的图像文件数(最多 20 个)。
由于 GLDv2 数据集很大,下载可能需要长达 12 小时和 1 TB 的磁盘空间。为了节省带宽和磁盘空间,可以先只下载训练所需的 TRAIN 数据集,从而节省大约 95 GB,相当于 INDEX 和 TEST 数据集。为了进一步节省磁盘空间, *.tar可以在下载和重新打包文件后将其删除。
本人在测试期间只下载很小的训练数据量:

bash download_dataset.sh 10

然后在https://www.kaggle.com/sai11fkaneko/gldv2-clean-dataset 下载tfrecord 并将tfrecord数据文件放入gldv2_dataset目录下:
在这里插入图片描述

3训练

在training目录下修改build_image_dataset.py文件,将以下4行注释掉即可。
在这里插入图片描述
运行

curl -Os http://storage.googleapis.com/delf/resnet50_imagenet_weights.tar.gz
tar -xzvf resnet50_imagenet_weights.tar.gz

然后可以使用局部特征进行训练:

python3 train.py \
  --train_file_pattern=gldv2_dataset/tfrecord/train* \
  --validation_file_pattern=gldv2_dataset/tfrecord/validation* \
  --imagenet_checkpoint=resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5 \
  --dataset_version=gld_v2_clean \
  --logdir=gldv2_training \
  --batch_size=4

或者使用全局和局部特征训练:

python3 train.py \
  --train_file_pattern=gldv2_dataset/tfrecord/train* \
  --validation_file_pattern=gldv2_dataset/tfrecord/validation* \
  --imagenet_checkpoint=resnet50_weights_tf_dim_ordering_tf_kernels_notop.h5 \
  --dataset_version=gld_v2_clean \
  --logdir=gldv2_training \
  --delg_global_features \
  --batch_size=4
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值