Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

how to use the numpy data in the DALI #177

Open
1124676457 opened this issue Mar 13, 2023 · 3 comments
Open

how to use the numpy data in the DALI #177

1124676457 opened this issue Mar 13, 2023 · 3 comments
Assignees
Labels
help wanted Extra attention is needed

Comments

@1124676457
Copy link

I use your NVIDIA hardware decoder, nvdecode, to decode the video and generate data in numpy format. How to use dali's gpu accelerated pre-processing, I use Dali.fn.decoders. image, and the error is as follows: Error in thread 1: [/opt/dali/dali/operators/decoder/host/host_decoder.cc:30] Assert on "input.ndim() == 1" failed: Input must be 1D encoded jpeg string.
If I remove decoders and directly use dali.fn.resize(device='gpu'), an error will be reported. Data on cpu cannot be operated by gpu

what shoud i do, my data.shape is (1620, 1920)

@szalpal szalpal added the help wanted Extra attention is needed label Mar 13, 2023
@szalpal
Copy link
Member

szalpal commented Mar 13, 2023

Hi @1124676457 ,

thanks for reaching out. Could you post your DALI Pipeline code? Or at least some relevant part of it?

@1124676457
Copy link
Author

@1124676457

感谢您伸出援手。你能发布你的DALI管道代码吗?或者至少是其中的一些相关部分?

@dali.pipeline_def(batch_size=1, num_threads=4, device_id=0)
def pipe():
images = dali.fn.external_source(device="cpu",name="DALI_INPUT_0")
images = images / 255
images = dali.fn.decoders.image(images, device="mixed", output_type=types.RGB)
images = dali.fn.resize(images, device='gpu',resize_x=1024, resize_y=576)
images = dali.fn.reshape(images,device='gpu',
src_dims=[2,0,1],
layout="CHW")
images = dali.fn.expand_dims(images, axes=[0], new_axis_names="N")
#images = images / 255

return images

the decode code is this, the worker.frame is the nvdecode's result, shape is (1620,1920):
while True:
if worker.updated:
c += 1
time_connect = time.time()
worker.updated = False
output = triton(worker.frame)

@szalpal
Copy link
Member

szalpal commented Mar 13, 2023

@1124676457 ,

your DALI Pipeline looks correct. It suggests, that maybe you're sending the data to the Triton in an improper way. The typical sending pattern for the pipeline you've posted is using either np.fromfile(filename, dtype=np.uint8) or open(filename, 'rb') function to open JPEG binary and sending it to the DALI Backend. Should you like to post the client code, I'll take a look and I can point to a problem.

Please refer to these examples that illustrate the usage pattern that is the most common with the pipeline you've presented:

def load_image(img_path: str):

image_data = load_images(FLAGS.img_dir if FLAGS.img_dir is not None else FLAGS.img,

def load_image(img_path: str):

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
help wanted Extra attention is needed
Development

No branches or pull requests

2 participants