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

Update: YOLO pipeline to return scaled Boxes #881

Merged
merged 7 commits into from
Feb 8, 2023

Conversation

rahul-tuli
Copy link
Member

@rahul-tuli rahul-tuli commented Jan 24, 2023

This PR updates YOLO pipeline to return bounding boxes scaled with respect to the original image rather than preprocessed image.

The solution included two changes:

  • Maintaining and propagating information on the original image sizes, this was done by adding a return value to the _preprocess function(the original image shape is returned) and propagating it to postprocessing function via the postprocessing_kwargs

  • Actual rescaling of the bounding boxes based on model input shape and original input shape

code to visualize bounding boxes:

from deepsparse import Pipeline
from deepsparse.utils.annotate import load_image
from deepsparse.yolo import annotate_image
from matplotlib import pyplot as plt


image_path = "./tests/deepsparse/pipelines/sample_images/basilica.jpg"
pipeline = Pipeline.create(task="yolo")
_, original_img = load_image(image_path, image_size=(640, 640))

pipeline_output = pipeline(images=[original_img])
annotated_img = annotate_image(image=original_img, prediction=pipeline_output)
plt.imshow(annotated_img)
plt.show()
  • Image Before this PR:
    before

  • Image after this PR:
    after

Note: The failing test, seems to be from the following issue, but I haven't taken a deeper look yet

CONTAINS:


@rahul-tuli rahul-tuli marked this pull request as ready for review January 24, 2023 16:39
corey-nm
corey-nm previously approved these changes Jan 24, 2023
Copy link
Contributor

@corey-nm corey-nm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice fixes and write up!

dbogunowicz
dbogunowicz previously approved these changes Jan 25, 2023
Copy link
Contributor

@dbogunowicz dbogunowicz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, left some nits

* Update: YOLO pipeline to return scaled Boxes

* Apply: comments from @dbogunowicz 's code review

* Apply: comments from @dbogunowicz, update original image shape extraction logic to work with both 3 and 4 dimensional inputs

* Update: All loaders to only resize an input image if a truthy image_size is passed
Update: `annotate_image` signature to not use `model_input_size` as yolo-pipeline take care of scaling now
Remove: `--image-shape` argument as it's actually the expected model input shape Which can be inferred from the graph

* Update: Yolo Annotation to allow shape overrides (#883)

* Update: Annotation script to allow shape override of input onnx model, by adding a `--model_input_shape` CLI argument

* Apply: Comments from @bfineran, update `--model-input-shape` to `--model-input-image-shape`
@dbogunowicz
Copy link
Contributor

@rahul-tuli shall we land it?

@rahul-tuli rahul-tuli merged commit 972e2ca into main Feb 8, 2023
@rahul-tuli rahul-tuli deleted the rescale-yolo-pipeline-boxes branch February 8, 2023 12:55
KSGulin pushed a commit that referenced this pull request Mar 13, 2023
* Update: YOLO pipeline to return scaled Boxes

* Apply: comments from @dbogunowicz 's code review

* Apply: comments from @dbogunowicz, update original image shape extraction logic to work with both 3 and 4 dimensional inputs

* Apply: comments from @dbogunowicz

* Update: YOLO Annotation flow to work with rescaled bounding boxes (#882)

* Update: YOLO pipeline to return scaled Boxes

* Apply: comments from @dbogunowicz 's code review

* Apply: comments from @dbogunowicz, update original image shape extraction logic to work with both 3 and 4 dimensional inputs

* Update: All loaders to only resize an input image if a truthy image_size is passed
Update: `annotate_image` signature to not use `model_input_size` as yolo-pipeline take care of scaling now
Remove: `--image-shape` argument as it's actually the expected model input shape Which can be inferred from the graph

* Update: Yolo Annotation to allow shape overrides (#883)

* Update: Annotation script to allow shape override of input onnx model, by adding a `--model_input_shape` CLI argument

* Apply: Comments from @bfineran, update `--model-input-shape` to `--model-input-image-shape`

* Fix: Quality Failures
KSGulin added a commit that referenced this pull request Mar 13, 2023
* Update: YOLO pipeline to return scaled Boxes

* Apply: comments from @dbogunowicz 's code review

* Apply: comments from @dbogunowicz, update original image shape extraction logic to work with both 3 and 4 dimensional inputs

* Apply: comments from @dbogunowicz

* Update: YOLO Annotation flow to work with rescaled bounding boxes (#882)

* Update: YOLO pipeline to return scaled Boxes

* Apply: comments from @dbogunowicz 's code review

* Apply: comments from @dbogunowicz, update original image shape extraction logic to work with both 3 and 4 dimensional inputs

* Update: All loaders to only resize an input image if a truthy image_size is passed
Update: `annotate_image` signature to not use `model_input_size` as yolo-pipeline take care of scaling now
Remove: `--image-shape` argument as it's actually the expected model input shape Which can be inferred from the graph

* Update: Yolo Annotation to allow shape overrides (#883)

* Update: Annotation script to allow shape override of input onnx model, by adding a `--model_input_shape` CLI argument

* Apply: Comments from @bfineran, update `--model-input-shape` to `--model-input-image-shape`

* Fix: Quality Failures

Co-authored-by: Rahul Tuli <rahul@neuralmagic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants