pytorch
文章平均质量分 52
zeeq_
A WHU LIESMARSer
展开
-
pytorch3d旋转矩阵转四元数transforms.matrix_to_quaternion函数隐藏的大坑及其解决方法
这样就存在一个非常大的隐患,因为我们知道,对四元数中的所有数字同时取负,那么它所表示的旋转是不变的。也就是说,matrix_to_quaternion函数转换获得的四元数本身并没有错,但是它没有限制其中的实数w为正,这样就会在诸如我们需要使用四元数的二范数作为网络loss的时候,埋下巨大的隐患(毕竟如果同一个旋转量,一会是正一会是负,网络该信哪个?按照官方解释,每个四元数的第一个数字为实部w,通常我们会规范实部为正数,而如下图所示的输出,很明显,它没有进行这一约束。如下图所示,就是使用。原创 2022-12-11 21:48:54 · 1611 阅读 · 3 评论 -
python读取并可视化npy格式的深度图文件以及将其保存为jpg图片的方法
npy文件是无法直接打开的,它里面包含的是一个矩阵格式的数据,可以用于存储图像。为了对其进行可视化,需要将其转换为图像。这里需要用到numpy包以及matplotlib包,没有的话就pip install一下吧。现进入包含有npy文件的目录(我的该目录下有一个名为0000.npy的文件),然后打开一个终端,执行python进入pythn命令行模式,依次输入如下代码即可:import numpy as npimport matplotlib.pyplot as pltdepthmap = np.lo原创 2021-11-07 22:29:27 · 40331 阅读 · 25 评论 -
pytorch旋转矩阵转四元数及各种旋转表示方式之间的转换实现代码
在做三维相关工作的时候,经常会遇到需要在不同旋转表示方式之间进行转换的情况。常用的旋转参数化方式有轴角、旋转矩阵、欧拉角、四元数等,它们之间的转换推导可以查看这里。不同旋转表示方式之间的转换在网上可以找到很多相关的代码,同时也有一些库帮助我们实现了它们之间的转换,比如python里的scipy包,其旋转相关的转换代码在scipy.spatial.transform里面,C++里则可以使用Eigen库来实现。而在pytorch里,则可以使用pytorch3d包。在pytorch3d的transforms模块原创 2022-04-27 21:48:54 · 5380 阅读 · 6 评论 -
RuntimeError: Cannot get values on an uncoalesced tensor, please call .coalesce() first
这个错误是因为使用了pytorch的sparse张量,然后调用了其中的.values()或者.indices()方法出错的。只要对应改成._values()或者._indices()就可以了:>>> s.values()Traceback (most recent call last): File "<stdin>", line 1, in <module>RuntimeError: Cannot get values on an uncoalesce原创 2022-02-26 22:39:55 · 1099 阅读 · 0 评论 -
pytorch稀疏张量模块torch.sparse详解
torch.sparse是一个专门处理稀疏张量的模块。通常,张量会按一定的顺序连续地进行存取。但是,对于一个存在很多空值的稀疏张量来说,顺序存储的效率显得较为低下。因此,pytorch推出了稀疏张量的处理模块。在这里,有意义的值被称为specified elements,而无意义的值(空值,通常为0,但是也可以是其他值)则被称为fill value。只有足够稀疏的张量使用这种方式进行存储才能获得更高的效率。 Sparse COO tensors1 Coordinate format 这种格式原创 2022-02-26 22:31:28 · 14373 阅读 · 6 评论 -
python torch节约内存开销的运算方法
示例如下,首先创建两个两行一列,值全为1的张量a和b,然后将b加到a上,使用python自带的id函数来获取a和b的内存地址。下面依次演示不同方法获得结果的差异: 1. +运算a = torch.ones(2,1)b = torch.ones(2,1)before_id = id(a)a = a + bafter_id = id(a)before_id == after_id 输出为:False 2. +=运算a = torch.ones(2,1)b = torch原创 2022-01-23 12:26:14 · 1106 阅读 · 0 评论 -
报错RuntimeError: torch.cuda.FloatTensor is not enabled.的可能原因及解决办法
使用pytorch时候报错RuntimeError: torch.cuda.FloatTensor is not enabled.,具体信息如下所示:可能原因1 出现这个错误,有可能是因为你的电脑没有英韦达显卡,不支持GPU加速,而你在代码中使用了gpu。解决办法就是把gpu版本的代码改成cpu版本的,也就是把代码里所有出现.cuda()的地方都修改为.cpu()即可。具体可以参考这里。可能原因2 还一个原因,刚好和上面的反过来了。当然,不是因为电脑没有cpu,而是你下载安装的pytorc原创 2021-10-28 15:42:04 · 4250 阅读 · 0 评论 -
ubuntu中使用终端命令行快速查看torch.save保存的pth / pth.tar格式训练数据的方法
在使用pytorch框架训练深度学习网络的时候,我们可以很方便地使用torch.save()方法对训练过程中的网络参数等信息进行保存。比如这里,我们保存成的文件格式为pth.tar(如下图所示),咋一看以为是一个压缩包,需要先解压一下。其实不用,直接使用torch.load就可以了。下面讲一下其数据查看方法。 首先,在这些pth.tar文件的目录下打开一个终端,执行:python 进入python命令行模式。比如我想查看net_5000_checkpoint.pth.tar文件里的内容,那原创 2021-10-30 16:27:24 · 2355 阅读 · 0 评论 -
使用pytorch的时候,报错NVIDIA GeForce RTX 3080 Ti with CUDA capability sm_86 is not compatible with xxx的解决方法
报错信息如下:torch/cuda/__init__.py:104: UserWarning: NVIDIA GeForce RTX 3080 Ti with CUDA capability sm_86 is not compatible with the current PyTorch installation.The current PyTorch install supports CUDA capabilities sm_37 sm_50 sm_60 sm_61 sm_70 sm_75 co原创 2021-12-06 16:10:18 · 8791 阅读 · 2 评论 -
pytorch新创建的变量默认是放在cpu还是cuda/gpu上及两者之间的转换
pytorch创建的变量默认是存放在cpu上的,如下列代码所示:>>> import torch>>> R = torch.eye(3)>>> R.device# 输出为:device(type='cpu') torch变量在不同device之间的转换方法有两种,如下:# cpu -> cuda>>> R = R.cuda(0) # 这里0表示第一个cuda>>> R.device原创 2022-01-14 14:14:57 · 3516 阅读 · 0 评论