SuperPoint微调
本文最后更新于89 天前,其中的信息可能已经过时,如有错误请发送邮件到c550129432@163.com
原文作者明确表示不会发布训练和评估代码,本篇文章使用的代码为非官方版本。

环境配置

作者提供了具体的makefile,并且推荐使用Python 3.6.1版本。然而,安装后通过conda环境启动时,犯病无法检测到pip(pip3)工具。为了解决这个问题,需要对makefile进行调整。需要注意的是,在编辑makefile时,要使用Tab键作为缩进符号,因为某些编辑器(如vscode)可能会自动将Tab转换为空格。可以通过在编辑器右下角选择“缩进”并点击“convert indentation to Tabs”来修复此问题。
install:
	python -m pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
	python -m pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple
	sh setup.sh
然后,运行相应指令进行配置。需要注意的是,在配置过程中,系统会要求输入data根目录(Path of the directory where datasets are stored and read)和logs保存路径(Path of the directory where experiments data (logs, checkpoints, configs) are written)。 由于主包的服务器CUDA环境与要求不完全匹配,缺少libcublas.so.9.0文件。最简单的解决方法是直接使用Conda安装与GPU兼容的TensorFlow版本。 直接运行代码时会报错 KeyError: 'CUDA_VISIBLE_DEVICES',因此需要提前指定GPU。由于实习公司的服务器只为主包分配了较低配置的设备(8张NVIDIA TITAN Xp,12GB),主包决定选择使用其中的四个GPU。可以通过以下命令指定使用的GPU: export CUDA_VISIBLE_DEVICES=0,1,2,3,在训练时可能对应输入不匹配,记得去yaml配置文件中去修改eval_batch_size使得分配GPU依然匹配输入,如果显存爆了,可以降低batch_size
conda install tensorflow-gpu==1.12 cudatoolkit=9.0 cudnn=7.1 -c anaconda

模型准备

1) MagicPoint

MagicPoint特征检测器需要使用合成形状数据集(Synthetic Shapes Dataset)进行训练,该数据集包含9种不同的形状(包括椭圆和高斯噪声,作为负样本),并且提供.npy文件记录特征点坐标作为标签进行训练。 作者已经准备了自动生成合成数据集的代码,我们只需直接运行训练即可。 在使用PyYAML≥5.1时,yaml.load需要显式指定Loader,否则会抛出如下错误: TypeError: load() missing 1 required positional argument: 'Loader'。 为了避免此错误,我们需要将第153行改为使用 yaml.safe_load(f)。 在生成合成图形数据时,代码会访问 os.environ['TMPDIR'],因此需要配置该环境变量。可以通过以下命令设置:export TMPDIR=""
python experiment.py train configs/magic-point_shapes.yaml magic-point_synth(模型)
训练代码如上,其中 magic-point_synth 是实验名称,可以根据需要更改为任何名称。训练过程可以随时通过按 Ctrl+C 中断,训练权重将保存在 EXPER_PATH/magic-point_synth/ 目录中,其中也包括了TensorBoard的记录文件。 在第一次训练时,系统将生成合成形状数据集,并将数据保存在指定文件夹中。 magic-point_shapes.yaml 文件中包含了各种可修改的训练参数和数据配置。如果训练有困难,可以选择直接使用预训练的模型,将其放置到设置好的logs目录下。

2) 自标注

得到训练后的MagicPoint检测器后,我们可以使用它对真实图像数据集进行标注,获得伪真实(pseudo-ground truth)的数据和标签。在这一过程中,进行了一个名为Homographic Adaptation的图像处理操作。此操作可以在 yaml 文件中进行配置,选择是否开启或关闭该功能。在这一步,我们便可以替换成自己的数据集,进行标注。原文使用的是 COCO 数据集,所以需要对 coco.py 进行一些修改。
        首先,修改图像的尺寸和位置,如:'resize': [], data_path。要注意代码需要路径下直接是图像数据,可以根据需求进行修改,标签保存也同样需要进行修改。如果想修改数据集的名称,可以修改 name:'',然后将文件和类名也进行相应修改。
python export_detections.py configs/magic-point_coco_export.yaml magic-point_synth --pred_only --batch_size=5 --export_name=magic-point_coco-export1

训练

1) 重训练 MagicPoint

训练完成后,我们可以重复进行上一步骤和此步骤,以达到较好的效果。

重训练

在第一步中训练得到的 MagicPoint 检测器虽然能够检测出一些特征点,但由于其使用的是合成形状数据集进行训练,检测性能仍有所不足。因此,在第二步中,我们通过自标注数据,并使用标注好的真实图像进行训练,最终得到增强版的检测器。
        修改 labels 路径,将第二步得到的 npz 文件夹路径替换到 magic-point_coco_train.yaml 中。

微调

这里是可以选择直接使用在coco数据集上预训练好的模型来进行微调训练的。
python experiment.py train configs/magic-point_coco_train.yaml magic-point_coco(模型)
python experiment.py train configs/magic-point_coco_train.yaml magic-point_finetuned(模型) --pretrained_model mp_synth-v11_ha1_trained(预训练模型)

2) 训练 Superpoint

训练(从头训练)

将「最后导出的标签(labels)」用于 SuperPoint 训练。需要在 superpoint_coco.yaml 中把 data/label(或同等字段)指向你的标签目录。 确保 resize 参数对齐:训练时的 resize / 输入分辨率必须与标签生成(导出)时的 resize 保持一致,否则关键点坐标会错位

微调

SuperPoint 也支持直接在已有权重上进行微调。
python experiment.py train configs/superpoint_coco.yaml superpoint_coco(模型)
python experiment.py train configs/superpoint_coco.yaml superpoint_coco__finetuned(模型) --pretrained_model sp_v6(预训练模型)
参考github仓库
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
八寻宁宁
什么猫
呼呼
派蒙的画作
上一篇
下一篇