HF-Net
是一个可以提取图像描述子(global_descriptors
)和图像中的特征点(keypoints
)及其描述子(local_descriptors
)的卷积神经网络,前者用于图像检索,后者配合 SuperGlue/NN
等特征匹配算法可用于相机位姿计算。因此 HF-Net
的应用场景就是 SLAM
中的地图定位与位姿恢复。
HF-Net
论文地址
HF-Net
代码地址
下面是安装步骤:
(1)下载源码
git clone https://github.com/ethz-asl/hfnet.git
(2)环境初始化
方法一:
作者写了一个初始化的脚本
make install
方法二:
但这里不打算使用该脚本,怕把Ubuntu
环境搞乱了,还是自己按脚本内容一步一步来
#1.安装jupyter notebook
conda activate base
pip install jupyter
#2.创建一个虚拟环境用于HF-Net,虽然作者指定tf版本为1.12,但测试1.14也行,这里就安装1.14版本
conda create -n tf114 python=3.7
#3.把tf114虚拟环境添加到jupyter notebook中
conda activate tf114
conda install ipykernel
pip install --upgrade jupyter_client
python3 -m ipykernel install --user --name tf114 --display-name "tf114"
#4.开始配置tf114虚拟环境
conda activate tf114
pip install tensorflow_gpu==1.14.0
pip install keras==2.2.5
pip install protobuf==3.20.0
pip install pandas==1.0.0
pip install sklearn
pip install matplotlib==3.0.0
pip install numpy==1.19
pip install opencv-python==4.2.0.32
pip install scipy
pip install tqdm
pip install pyyaml
pip install flake8
pip install matplotlib
pip install protobuf
pip install sklearn
pip install pillow
pip install deepdish
#5.创建项目路径文件settings.py
cd hfnet
sh setup/setup.sh
# 运行后会让你在终端中输入两个路径:DATA_PATH和EXPER_PATH,前者是存放训练图像和预训练模型权重,后者存放 hfnet的训练输出,路径要为绝对路径,不要带~,例如我的是:
# DATA_PATH:/home/xxx/Project/python/tensorflow/hfnet/data/input
# EXPER_PATH:/home/xxx/Project/python/tensorflow/hfnet/data/output
# 路径会定义在./hfnet/settings.py文件中,后续也可以自己修改两个路径
(3)下载训练好的模型权重
下载好,解压后,将saved_models
文件夹复制到EXPER_PATH
路径下
(4)运行Demo
程序
作者提供了一个Demo
程序demo.ipynb
,可以快速感受HF-Net提取的特征点的匹配结果
cd hfnet
# 打开jupyter notebook
conda activate base
jupyter notebook
jupyter
运行后,打开demo.ipynb
文件,修改运行环境为自己配置的虚拟环境tf114
然后一步步运行,加载模型哪一步,如果是下图则加载成功:
最后看一下匹配效果,在光照变换剧烈的情况下也可以成功匹配