sparsencnet复现(亲测有用)

  • 一、资源下载
  • 二、环境搭建
  • 三、demo测试
  • 四、训练数据

一、资源下载

在进行环境配置之前需要准备以下资源:
1、sparse-ncnet源代码下载
sparse-ncnet
2、MinkowskiEngine源代码下载,由于MinkowskiEngine更新比较快,但是sparse-ncnet 没有进行更新,所以需要在连接中找到0.4.3版本的.zip文件进行下载
MinkowskiEngine0.4.3
3、训练数据集下载(如果只想跑demo可不需要进行下载),按照官方提示进行数据集下载,此过程需要访问外网
ivd数据集下载

二、环境搭建

1、我这里使用的是网上租用的服务器,由于这个复现可能对显存有要求,所以采用租用服务器的方法进行实现,而且不可以租用30系列显卡,我这里使用的是Tesla P40,因为编译MinkowskiEngine需要cuda-10.1,租用的时候选择镜像选择pytorch1.6.0。如果大家的显存是12G可能会报错,还是选择显存大一点的显卡。这个服务器新人有10元代金券,大家可以免费体验。
服务器租用网址

2、搭建好环境后,需要将之前下载好的sparse-ncnet源代码与MinkowskiEngine源代码上传到服务器,并进行解压。

3、首次使用这个服务器打开终端后需要执行source activate命令配置一下anaconda(如果是自己的服务器可以忽略,直接进行第4步)

4、配置好终端后,打开命令行终端依次执行以下指令,有些双等号后面有空格,大家可以自行删除。
a) conda create -n sparsencnet python=3.6.9=h265db76_0(这里一定要安装3.6,其他版本有些库会安装失败)
b) conda activate sparsencnet
c) conda install numpy== 1.15.1 openblas
c) conda install openblas-devel -c anaconda
d) pip install torch== 1.6.0+cu101 torchvision== 0.7.0+cu101 -f https://download.pytorch.org/whl/torch_stable.html或者conda install pytorch== 1.6.0 torchvision== 0.7.0 cudatoolkit=10.1 -c pytorch(大家可以到pytorch官网进行安装pytorch1.6.0,千万不要安错,一定要选择cuda10.1版本,我使用的是前者,因为网速快)
e) cd MinkowskiEngine-0.4.3(进入到自己之前解压好的MinkowskiEngine路径)
f) export CXX=g+±7
g) python setup.py install(如果采用我推荐服务器安装,大家一定要有卡安装,否则编译出错
h) conda install https://repo.anaconda.com/pkgs/free/linux-64/cudatoolkit-8.0-3.tar.bz2(这个安装下载可能有点慢,如果用上面服务器,大家可以采用无卡模式进行安装)
i) conda install --force --no-deps faiss-gpu=1.4.0=py36_cuda8.0.61_1 -c pytorch
j) conda install matplotlib scikit-image pandas
k) pip uninstall pillow
l) CC=“cc -mavx2” pip install -U --force-reinstall pillow-simd

三、demo测试

搭建好环境后,可以利用官方提供的demo进行测试,需要先通过/sparse-ncnet-master/trained_models/路径下的download.sh文件下载与训练模型。

我将demo.ipynb文件内的内容拷贝了出来,做成可.py文件,一定要和源文件放在同一个地方,然后进入次目录,并进入刚刚搭建好的虚拟环境进行测试。(和我用一样服务器一定要在有卡模式下

demo.py的代码如下

import faiss
import torchimport osimport sys
sys.path.append('..')import matplotlib.pyplot as plt
import numpy as npfrom lib.model import ImMatchNet, MutualMatching
from lib.normalization import imreadth, resize, normalize, normalize_image
from lib.relocalize import relocalize, relocalize_soft, eval_model_reloc
from lib.sparse import get_matches_both_dirscheckpoint = '../trained_models/sparsencnet_k10.pth.tar'
chp_args = torch.load(checkpoint)['args']
model = ImMatchNet(use_cuda=True,checkpoint=checkpoint,ncons_kernel_sizes=chp_args.ncons_kernel_sizes,ncons_channels=chp_args.ncons_channels,sparse=True,symmetric_mode=bool(chp_args.symmetric_mode),feature_extraction_cnn=chp_args.feature_extraction_cnn,bn=bool(chp_args.bn),k=chp_args.k,return_fs=True,change_stride=1)image_size = 1600
scale_factor = 0.0625src=imreadth('aachen_query.jpg')
hA,wA=src.shape[-2:]
src=resize(normalize(src), image_size, scale_factor)
hA_,wA_=src.shape[-2:]tgt=imreadth('aachen_db.jpg')
hB,wB=tgt.shape[-2:]
tgt=resize(normalize(tgt), image_size, scale_factor)
hB_,wB_=tgt.shape[-2:]   with torch.no_grad():corr4d, feature_A_2x, feature_B_2x, fs1, fs2, fs3, fs4 = eval_model_reloc(model,{'source_image':src,'target_image':tgt})      Npts = 500# extract matches
xA_, yA_, xB_, yB_, score_ = get_matches_both_dirs(corr4d, fs1, fs2, fs3, fs4)# get top Npts
matches_idx_sorted = torch.argsort(-score_.view(-1))
N_matches = min(Npts, matches_idx_sorted.shape[0])
matches_idx_sorted = matches_idx_sorted[:N_matches]
score_ = score_[:,matches_idx_sorted]
xA_ = xA_[:,matches_idx_sorted]
yA_ = yA_[:,matches_idx_sorted]
xB_ = xB_[:,matches_idx_sorted]
yB_ = yB_[:,matches_idx_sorted]# upscale feature sizes by 2x
fs1_,fs2_,fs3_,fs4_=2*fs1,2*fs2,2*fs3,2*fs4# relocalization stage 1:
xA_, yA_, xB_, yB_, score_ = relocalize(xA_,yA_,xB_,yB_,score_,feature_A_2x,feature_B_2x,crop_size=2)# relocalization stage 2:
xA_, yA_, xB_, yB_, score_ = relocalize_soft(xA_,yA_,xB_,yB_,score_,feature_A_2x, feature_B_2x, upsample_positions=False)# normalize coords in [0,1] range
yA=((yA_+0.5)/(fs1_)).squeeze().cpu().numpy()
xA=((xA_+0.5)/(fs2_)).squeeze().cpu().numpy()
yB=((yB_+0.5)/(fs3_)).squeeze().cpu().numpy()
xB=((xB_+0.5)/(fs4_)).squeeze().cpu().numpy()mean = torch.tensor([0.485, 0.456, 0.406]).view(1,3,1,1).cuda()
std = torch.tensor([0.229, 0.224, 0.225]).view(1,3,1,1).cuda()src_tgt = (torch.cat((src,tgt),dim=2)*std)+mean
src_tgt = src_tgt.squeeze().permute(1,2,0).mul(255).cpu().numpy().astype(np.uint8)plt.imshow(src_tgt)
plt.axis('off')
plt.scatter(xA*wA_,yA*hA_,0.5,c='limegreen',alpha=0.5)
plt.scatter(xB*wB_,yB*hB_+hA_,0.5,c='limegreen',alpha=0.5)
plt.plot(np.stack((xA*wA_,xB*wB_)),np.stack((yA*hA_,yB*hB_+hA_)),c='limegreen',linewidth=0.1)
plt.gcf().set_dpi(400)

四、训练数据

在进行训练数据之前,要将下载好的数据集导入所存储位置,然后运行train.py进行训练。

下载好的ivd数据集所存储的内容。

运行train.py。

训练之后的权值文件,会存储在预训练模型文件夹下。

图像匹配sparse-ncnet复现相关推荐

  1. Lesson 16.1416.15 GoogLeNet:思想与具体框架GoogLeNet复现

    在深度学习的领域,最前沿.最先进的架构被称为state-of-the-art models,简写为SOTA,我将其翻译为"前沿网络".每个学者都希望自己论文中的模型是SOTA mo ...

  2. 复现经典:《统计学习方法》第21章 PageRank算法

    第21章 PageRank算法 本文是李航老师的<统计学习方法>一书的代码复现.作者:黄海广 备注:代码都可以在github中下载.我将陆续将代码发布在公众号"机器学习初学者&q ...

  3. 武大上交发布首篇「图像匹配」大领域综述!涵盖 8 个子领域,汇总近 20年经典方法

    原文链接:https://bbs.cvmart.net/topics/3176 专注计算机视觉前沿资讯和技术干货 微信公众号:极市平台 官网:https://www.cvmart.net/ 武汉大学和 ...

  4. 经典论文复现 | 基于深度学习的图像超分辨率重建

    过去几年发表于各大 AI 顶会论文提出的 400 多种算法中,公开算法代码的仅占 6%,其中三分之一的论文作者分享了测试数据,约 54% 的分享包含"伪代码".这是今年 AAAI ...

  5. Self-Attention真的是必要的吗?微软中科大提出Sparse MLP,降低计算量的同时提升性能!...

    关注公众号,发现CV技术之美 ▊ 写在前面 Transformer由于其强大的建模能力,目前在计算机视觉领域占据了重要的地位.在这项工作中,作者探究了Transformer的自注意(Self-Atte ...

  6. 仅需24小时,带你基于PaddleRec复现经典CTR预估算法

    项目背景 偶然看到了[飞桨论文复现挑战赛],抱着 划水 提升自己的态度,报名了一个推荐赛道的赛题.因为本身已经参加工作了,实际空闲时间不是太多,只能晚上下班或者周末和各位参赛大佬卷上一卷,划划水- 工 ...

  7. 【论文复现,含代码】MatchNet: Unifying Feature and Metric Learning for Patch-Based Matching

    图像匹配问题,历久而弥新.从上个世纪六十年代起,人们开始使用灰度匹配进行匹配,目前,图像匹配的研究重点为图像特征的提取与描述,初始匹配以及精准匹配.目前,深度学习在图像领域正如火如荼,传统的图像匹配问 ...

  8. WideDeep Model、Wide Model(LR)、Deep Model、DeepFm Model、NFM Model复现笔记

    声明:本模型复现笔记记录自己学习过程,如果有错误请各位老师批评指正. 本周复现了Wide&Deep Model.Wide Model.Deep Model.DeepFm Model.NFM M ...

  9. Seurat-单细胞文献复现第二弹-01

    A single-cell map of intratumoral changes during anti-PD1 treatment of patients with breast cancer h ...

最新文章

  1. 深度学习-Tensorflow2.2-预训练网络{7}-迁移学习基础针对小数据集-19
  2. 获取列表中包含的元素数 在C#中
  3. 用SQL语句查看数据库数据量的大小
  4. MySQL远程连接ERROR 2003 (HY000) Cant connect to MySQL server on (10060)
  5. 13.企业应用架构模式 --- 对象-关系元数据映射模式
  6. SEO网站优化注意5个小细节,降低网站跳出率
  7. 机器人导航,人工势场法的地图导航规划
  8. 4071 国际象棋(枚举)
  9. 一只蒟蒻的树形DP学习笔记
  10. Python与数学——使用Processing绘制高次方程图像
  11. NLP模型笔记2022-11:CTB5和CTB8数据集预处理 【PennTreebank 和Chinese Treebank】
  12. 爬虫(21)crawlspider讲解古诗文案例补充+小程序社区案例+汽车之家案例+scrapy内置的下载文件的方法
  13. 用料扎实的全模组电源,还有十年换新支持,安钛克HCG 850体验
  14. Java汉字输入练习
  15. 微信小程序获取绑定授权用户手机号getPhoneNumber-全流程及手机号带*号问题
  16. SPSS 顾客购买习惯调查问卷案例分析
  17. sniper photo
  18. ACM-音频编解码器管理器
  19. IE浏览器的这个代理服务总是被自动勾选怎么办,取消之后还是会被自动勾选!!!!!!!!!!!!(暂时找到“凶手了”)
  20. java 匿名接口_匿名内部类实现接口

热门文章

  1. 服务器操作系统怎么做映像,如何网络捕获使用 Sysprep 和 PXE 配置的服务器操作系统映像...
  2. java h264 sps解码,H.264(H264)解码SPS获取分辨率和帧率
  3. 2022年1月时事政治行业微信视频号企业认证排行榜:中央电视台运营的3个视频号上榜,央视新闻再度蝉联榜首(附月榜TOP20详单)
  4. 基于单片机声音分贝采集和显示控制系统设计(毕业设计资料)
  5. 一种基于智能卡登录Windows系统的实现方式
  6. 俞敏洪励志演讲稿【三】
  7. 如何清理Linux服务器磁盘空间
  8. 如何为系统盘集成SATA驱动
  9. DHU数据结构-单链表-ADT应用-长整数加法运算(使用单链表存储计算结果)
  10. 七天免登录(Cookie+session)+ 页面显示动画人物效果(萌娘+气泡效果)+购物车的实现代码