meituan / YOLOv6

YOLOv6: a single-stage object detection framework dedicated to industrial applications.
GNU General Public License v3.0
5.72k stars 1.03k forks source link

Code Modification and Object Detection Implementation with Jetson RT [error] "gain=ratio_pad[0] is not subscritable" #1040

Open OscarAmayaEIA opened 7 months ago

OscarAmayaEIA commented 7 months ago

Search before asking

Description

when i try to implement YOLOv6 over TensorRT in a jetson orin , i have errors using the module Processor.py , i solved this with it: Changes in the post_process method: The line self.scale_coords(self.input_shape, det_t[0][:, :4], img_shape[0], img_shape[1]) in the post_process method was commented out to avoid an error. This line was responsible for scaling the object detection coordinates, but passing img_shape[0] and img_shape[1] as arguments caused an error because these values did not meet the expectations of the scale_coords function.

Use case

Final code used (save in root path: YOLOv6\testRT.py):

import cv2 import deploy.TensorRT.Processor as YOLORT

Load the image

image_path = "IMG_DIR/22.png" image = cv2.imread(image_path)

Instantiate the processor with the TensorRT model

model_path = "best.trt" img_model_size = 192 processor = YOLORT.Processor(model_path,)

Detect objects in the image

outputs = processor.detect(image)

Post-process the outputs

ratio_pat = None # No ratio_pad provided img_shape = [img_model_size, ratio_pat] # Input image size to the model detected_objects = processor.post_process(outputs, img_shape)

Print the detected objects

print(detected_objects)

Draw bounding boxes around the detected objects

for detection in detected_objects: x1, y1, x2, y2, conf, cls = detection color = (0, 255, 0) # Green color for the bounding box label = f"Class: {int(cls)}, Confidence: {conf:.2f}" cv2.rectangle(image, (int(x1), int(y1)), (int(x2), int(y2)), color, 2) cv2.putText(image, label, (int(x1), int(y1) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, 2)

Display the resulting image

cv2.imshow("Detected Objects", image) cv2.waitKey(0) cv2.destroyAllWindows() In this code, an image is loaded, objects are detected using a TensorRT model, post-processing of the outputs is performed, and the detected objects are visualized by drawing bounding boxes around them in the original image. The calculation of ratio_pad has been omitted as it was not used in the scale_coords function.

Use: cd YOLOv6 python3 testRT.py

Additional

No response

Are you willing to submit a PR?

mtjhl commented 7 months ago

Gain ratio is not a part of tensorrt model. In tensorrt inference, you need to preprocess image (get the padding and scale ratio), tensorrt inference, post process(use padding and scale ratio to rescale the coordinates).