Please provide complete information as applicable to your setup.
• Hardware Platform (Jetson / GPU): Jetson Orin NX • DeepStream Version:nvcr.io/nvidia/deepstream:7.0-triton-multiarch • JetPack Version (valid for Jetson only): Jetpack 6.0 • TensorRT Version: 8.6.2.3 • NVIDIA GPU Driver Version (valid for GPU only) • Issue Type( questions, new requirements, bugs): questions
Hi everyone,
I followed DeepStream-Yolo-Pose to run Yolov8-pose on Jetson Orin and it worked. I also added NvDCF tracker so now I can get person id and pose after nvtracker. I’m using Python.
After that, I want to implement ST-GCN action classifier as sgie, which takes an input sequence of these poses with same tracker id and outputs the action class. The model has 2 inputs, their shapes are input1:batchx2x15x17; input2:batchx2x14x17. 17 is number of skeleton joints, 15 is sequence size and input2 is the motion subtraction of skeletons in the input1 so its sequence size is 14.
So, I have some questions:
How can I obtain the input of ST-GCN model I mentioned above which is 2x15x17?
How to implement ST-GCN model as sgie, especially my model have two inputs? Does it have any example similar/related to this task?
Do you guys have any suggestion or recommendation for me about possible approaches to deploy skeleton-based acction recognition on deepstream?
I’m quite new to deepstream so hopefully you guys can help me. Thanks in advanced.
Actually, the output of Yolov8-pose model is similar to normal Yolov8 model so I can access the skeletons by using
obj_meta = pyds.NvDsObjectMeta.cast(l_obj.data)
data = obj_meta.mask_params.get_mask_array()
So with the ID assigned by the tracker, how can I create the sequence of skeletons as I mentioned (2x15x17) so I can use it for the SGIE? Do you have any suggestion or ideal to do it? Thank you very much.
Are you asking for the algorithm of getting the 17 skeleton joints coordinates from the yolov8-pose output mask data? It depends on the models you are using. Please consult the guys who provide the models.
No, I can get 17 skeleton joints from the Yolov8-pose. But when I cast data from ObjectMeta, I only have the people ID and their skeleton joints in the current frame while the ST-GCN requires 15 consecutive skeletons as input.
Assume that I have a person with ID 1 in the video stream, how do I stack the skeleton joints of this person into sequence of 15 so I can put it throught the ST-GCN model?
Hi @Fiona.Chen, I ran the deepstream-pose-classification. In this sample, the pipeline is pgie(peoplenet detect person) → tracker → sgie0(extract skeletons) → nvpreprocess1(preprocess skeletons) → sgie1(predict action) right?
Now, I want to change the pgie into Yolov8-pose so the pipeline will be like pgie(Yolov8-pose) → tracker → sgie(ST-GCN predict action). But your pretrained ST-GCN has “nvidia” graph_layout and it requires 34 joints meanwhile the Yolov8-pose only provide 17 joints. So, seem like your pretrained ST-GCN can’t be used along with Yolov8-pose right? Please correct if I’m wrong. Therefore, I want to use my own ST-GCN so the pipeline will be pgie(Yolov8-pose) → tracker → sgie(custom ST-GCN predict action)
I have some questions:
My ST-GCN model have two inputs as I mentioned before, how do I change the pipeline as I described? Can you guide me the steps and the things that I need to do to modify the pipeline base on the deepstream-pose-classification sample?
I saw the labels of the NVIDIA dataset here. I’m not access it yet but can it be transformed into COCO format?
Your pretrained ST-GCN can only infer a single person. But I want to infer multiple people, so do I have to re-train it?
Hi @Fiona.Chen, I follow your lastest reply and I can initialize 2 inputs model as SGIE.
According to my knowledge, now the SIGE requires input tensor meta and I have to create a nvdspreprocess before SGIE to form tensors which are fitted to my SGIE. So, my question is how to copy tensors to the buffer in nvdspreprocess because my model has 2 inputs? I saw a sample about modifying nvdspreprocess of deepstream-pose-classification here but I’m still confuse about it.
Can you walk me through this? Thank you very much.