Open
Description
After using cuda to scale my img in function scale, i could not print the tensor anymore (note all the print statements in the code)
require 'paths'
paths.dofile('/home/iim/pose-hg-train/src/ref.lua')
paths.dofile('/home/iim/pose-hg-train/src/model.lua')
-- local cv = require 'cv'
require 'cutorch'
cv = require 'cv'
require 'cv.cudawarping'
require 'cv.highgui'
require 'cv.imgcodecs'
require 'cv.highgui' -- GUI
require 'cv.videoio' -- Video stream
require 'cv.imgproc' -- Image processing (resize, crop, draw text, ...)
require 'nn'
local function scale(input, size)
local h, w = input:size(1), input:size(2)
-- if (w <= h and w == size) or (h <= w and h == size) then
-- return input
-- end
local inputCUDA = input:float():cuda() / 255
if w < h then
return cv.cuda.resize{inputCUDA, {w/h * size, size}}:float()
else
return cv.cuda.resize{inputCUDA, {size, h/w * size}}:float()
end
end
local function padWithZeros(input, size)
local output = torch.FloatTensor(size, size, 3)
local w, h = input:size(2), input:size(1)
local x, y = math.ceil((size-h)/2), math.ceil((size-w)/2)
output:sub(x+1,x+h,y+1,y+w,1,3):copy(input:float())
print(output)
return output
end
local function getBoundingBox(bbox, rawImage)
-- print(bbox)
local boundingBox = rawImage:sub(bbox[2], bbox[2]+bbox[4], bbox[1], bbox[1]+bbox[3])
return boundingBox
end
local function transformKpts(bbox, kpts)
kpts:select(2,1):add(bbox[1])
kpts:select(2,2):add(bbox[2])
return kpts
end
local function detect_pose(bbox, rawImage)
input = getBoundingBox(bbox, rawImage)
input = scale(input, 256)
input = padWithZeros(input, 256)
input = input:reshape(3, 256, 256)
print(input:size())
-- print(input:size())
-- print(input:float())
-- print(input[0])
print(input)
if opt.GPU ~= -1 then
-- Convert to CUDA
cudaImg = applyFn(function (x) return x:cuda() end, input)
end
print(cudaImg:float())
print ("foward")
local hms = model:forward(cudaImg)[8][1]
print("DONE INFERENCING")
hms = hms:float()
_, x = hms:max(2):max(3)
MAX, y = hms:max(3):max(2)
kpts = x:float():cat(y:float()):view(16,2):div(64):mul(256)
score = MAX:float():view(16)
print("DRAWING")
imgWithSkeleton = drawSkeleton(rawImage:clone(), transformKpts(bbox, kpts), score)
-- local hmImg
-- local nOut,res = hms:size(1),hms:size(3)
-- -- Repeat input image, and darken it to overlay heatmaps
-- tmpInp = image.scale(img, res):mul(1)
-- hmImg = tmpInp:repeatTensor(nOut,1,1,1)
-- -- Copy ground truth heatmaps to red channel
-- hmImg:sub(1,-1,1,1):add(hms:mul(1.3))
-- -- -- Rescale so it is a little easier to see
-- hmImg = image.scale(hmImg:view(nOut*3,res,res),256):view(nOut,3,256,256)
return imgWithSkeleton
end
local capture = cv.VideoCapture{'/home/iim/pose-hg-train/src/test/data/test_video.avi'}
-- local capture = cv.VideoCapture{"/Users/yxchng/Desktop/pose_detection/test.mp4"}
local f = io.open('/home/iim/pose-hg-train/src/test/data/box.txt')
-- while true do
-- local ret, frame = capture:read{}
-- -- if not ret then
-- -- break
-- -- end
-- local s = f:read()
-- -- print(frame)
-- -- if s == "" then
-- -- break
-- -- end
-- s = s:split(" ")
-- -- print(s)
-- -- print(x)
-- local x, y, w, h = tonumber(s[1]), tonumber(s[2]), tonumber(s[3]), tonumber(s[4])
-- -- local boundingBox = getBoundingBox({x,y,w,h}, frame)
-- local pose = detect_pose({x,y,w,h}, frame)
-- cv.Rect{tonumber(s[1]), tonumber(s[2]), tonumber(s[3]), tonumber(s[4])}
-- cv.rectangle{frame, {x, y}, {x+w, y+h}, color={255,0,255,0}}
-- cv.namedWindow{"video_img", 0}
-- -- cv.resizeWindow{"video_img", 500, 500};
-- cv.imshow{'video_img', pose}
-- cv.waitKey{1}
-- end
local ret, frame = capture:read{}
-- if not ret then
-- break
-- end
local s = f:read()
-- print(frame)
-- if s == "" then
-- break
-- end
s = s:split(" ")
-- print(s)
-- print(x)
local x, y, w, h = tonumber(s[1]), tonumber(s[2]), tonumber(s[3]), tonumber(s[4])
-- local boundingBox = getBoundingBox({x,y,w,h}, frame)
local pose = detect_pose({x,y,w,h}, frame)
cv.Rect{tonumber(s[1]), tonumber(s[2]), tonumber(s[3]), tonumber(s[4])}
cv.rectangle{frame, {x, y}, {x+w, y+h}, color={255,0,255,0}}
cv.namedWindow{"video_img", 0}
-- cv.resizeWindow{"video_img", 500, 500};
cv.imshow{'video_img', pose}
cv.waitKey{1}
After using cuda to scale my img in function scale, i could not print the tensor anymore (not all the print statements in the code)
It gives the following error
THCudaCheck FAIL file=/home/iim/torch/extra/cutorch/lib/THC/generic/THCStorage.c line=182 error=17 : invalid device pointer
/home/iim/torch/install/bin/luajit: cuda runtime error (17) : invalid device pointer at /home/iim/torch/extra/cutorch/lib/THC/generic/THCStorage.c:182