如何将返回的PythoninLua numpy数组快速转换为Lua Torch张量?

2024-09-28 23:13:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python函数,它返回多维numpy数组。我想从Lua调用这个Python函数,并尽快将数据转换为Lua Torch张量。我有一个解决方案,工作相当缓慢,并正在寻找一个明显更快的方式(10帧或更多)。我不确定这是否可能。在

我相信,考虑到Facebook支持的Torch越来越受欢迎,以及Python提供的大量易于使用的图像处理工具(Lua缺少这些工具),这对其他人来说是有用的。在

我使用疯狂python的Bastibe fork从Lua调用python函数。在前面的question和这个{a2}的帮助下,我想出了一些可以工作的代码,但是太慢了。我使用的是Lua5.1和Python2.7.6,如果需要,可以对它们进行更新。在

Lua代码:“测试_卢阿““

require 'torch'

print(package.loadlib("libpython2.7.so", "*"))
require("lua-python")

getImage = python.import "test_python".getImage

pb = python.builtins()

function getImageTensor(pythonImageHandle,width,height)
    imageTensor = torch.Tensor(3,height,width)
    image_0 = python.asindx(pythonImageHandle(height,width))
    for i=0,height-1 do
        image_1 = python.asindx(image_0[i])
        for j=0,width-1 do
            image_2 = python.asindx(image_1[j])
            for k=0,2 do
                -- Tensor indices begin at 1
                -- User python inbuilt to-int function to return integer
                imageTensor[k+1][i+1][j+1] = pb.int(image_2[k])/255
            end
        end
    end
    return imageTensor
end


a = getImageTensor(getImage,600,400)

Python代码:“test_python.py““

^{pr2}$

Tags: 工具函数代码imageforrequiretorchwidth
1条回答
网友
1楼 · 发布于 2024-09-28 23:13:09

试试lutorpy,它在python中有一个lua引擎,能够与torch共享numpy内存,所以它非常快,下面是您案例的代码:

import numpy
import Image
import lutorpy as lua

getImage = numpy.asarray(Image.open("image.jpg"))
a = torch.fromNumpyArray(getImage)

# now you can use your image as torch Tensor
# for example: use SpatialConvolution from nn to process the image
require("nn")
n = nn.SpatialConvolution(1,16,12,12)
res = n._forward(a)
print(res._size())

# convert back to numpy array
output = res.asNumpyArray()

相关问题 更多 >