在 Lua 中将图像保存到 HDF5 文件时出错
Error when saving images to an HDF5 file in Lua
尝试将 Lua 中的一堆图像转换为 HDF5 文件时,出现以下错误:
/home/ubuntu/torch/install/bin/luajit: /home/ubuntu/torch/install/share/lua/5.1/hdf5/group.lua:97: attempt to call method 'adjustForData' (a nil value)
stack traceback:
/home/ubuntu/torch/install/share/lua/5.1/hdf5/group.lua:97: in function '_writeData'
/home/ubuntu/torch/install/share/lua/5.1/hdf5/group.lua:307: in function '_write_or_append'
/home/ubuntu/torch/install/share/lua/5.1/hdf5/group.lua:270: in function </home/ubuntu/torch/install/share/lua/5.1/hdf5/group.lua:269>
/home/ubuntu/torch/install/share/lua/5.1/hdf5/file.lua:84: in function '_write_or_append'
/home/ubuntu/torch/install/share/lua/5.1/hdf5/file.lua:58: in function 'write'
这是错误发生的地方:
for i = 1, #input_images_caffe do
newFile:write('images', input_images_caffe[i], 'w')
end
里面的图片input_image_caffe
,来自:
local input_size = math.ceil(params.input_scale * params.image_size)
local input_image_list = params.input_image:split(',')
local input_images_caffe = {}
local img_caffe
for _, img_path in ipairs(input_image_list) do
local img = image.load(img_path, 3)
img = image.scale(img, input_size, 'bilinear')
img_caffe = preprocess(img):float()
table.insert(input_images_caffe, img_caffe)
end
此函数用于预处理图像:
function preprocess(img)
local mean_pixel = torch.DoubleTensor({103.939, 116.779, 123.68})
local perm = torch.LongTensor{3, 2, 1}
img = img:index(1, perm):mul(256.0)
mean_pixel = mean_pixel:view(3, 1, 1):expandAs(img)
img:add(-1, mean_pixel)
return img
end
input_images_caffe
可能包含的一些示例:
{
1 : FloatTensor - size: 3x405x512
2 : FloatTensor - size: 3x512x393
}
或者:
{
1 : FloatTensor - size: 3x405x512
}
HDF5 创建时使用:
local newFile = hdf5.open(params.output_hdf5, 'w')
我正在使用 torch-hdf5
库:
https://github.com/deepmind/torch-hdf5
我不确定我做错了什么?
newFile:write('images', input_images_caffe[i], 'w')
试试 newFile:write('images', input_images_caffe[i])
。 third parameter 应该是一个(可选的)options
对象,但是你传递的是一个字符串,它没有 adjustForData
方法,因此你得到了错误。
尝试将 Lua 中的一堆图像转换为 HDF5 文件时,出现以下错误:
/home/ubuntu/torch/install/bin/luajit: /home/ubuntu/torch/install/share/lua/5.1/hdf5/group.lua:97: attempt to call method 'adjustForData' (a nil value)
stack traceback:
/home/ubuntu/torch/install/share/lua/5.1/hdf5/group.lua:97: in function '_writeData'
/home/ubuntu/torch/install/share/lua/5.1/hdf5/group.lua:307: in function '_write_or_append'
/home/ubuntu/torch/install/share/lua/5.1/hdf5/group.lua:270: in function </home/ubuntu/torch/install/share/lua/5.1/hdf5/group.lua:269>
/home/ubuntu/torch/install/share/lua/5.1/hdf5/file.lua:84: in function '_write_or_append'
/home/ubuntu/torch/install/share/lua/5.1/hdf5/file.lua:58: in function 'write'
这是错误发生的地方:
for i = 1, #input_images_caffe do
newFile:write('images', input_images_caffe[i], 'w')
end
里面的图片input_image_caffe
,来自:
local input_size = math.ceil(params.input_scale * params.image_size)
local input_image_list = params.input_image:split(',')
local input_images_caffe = {}
local img_caffe
for _, img_path in ipairs(input_image_list) do
local img = image.load(img_path, 3)
img = image.scale(img, input_size, 'bilinear')
img_caffe = preprocess(img):float()
table.insert(input_images_caffe, img_caffe)
end
此函数用于预处理图像:
function preprocess(img)
local mean_pixel = torch.DoubleTensor({103.939, 116.779, 123.68})
local perm = torch.LongTensor{3, 2, 1}
img = img:index(1, perm):mul(256.0)
mean_pixel = mean_pixel:view(3, 1, 1):expandAs(img)
img:add(-1, mean_pixel)
return img
end
input_images_caffe
可能包含的一些示例:
{
1 : FloatTensor - size: 3x405x512
2 : FloatTensor - size: 3x512x393
}
或者:
{
1 : FloatTensor - size: 3x405x512
}
HDF5 创建时使用:
local newFile = hdf5.open(params.output_hdf5, 'w')
我正在使用 torch-hdf5
库:
https://github.com/deepmind/torch-hdf5
我不确定我做错了什么?
newFile:write('images', input_images_caffe[i], 'w')
试试 newFile:write('images', input_images_caffe[i])
。 third parameter 应该是一个(可选的)options
对象,但是你传递的是一个字符串,它没有 adjustForData
方法,因此你得到了错误。