From c01951a0e547bfd2478fad117b0836fcf2a5b632 Mon Sep 17 00:00:00 2001 From: Nicolas Hug Date: Wed, 5 May 2021 11:48:45 +0100 Subject: [PATCH 01/12] some more --- docs/Makefile | 2 +- gallery/plot_visualization_utils.py | 114 ++++++++++++++++++++++++++++ torchvision/utils.py | 12 --- 3 files changed, 115 insertions(+), 13 deletions(-) create mode 100644 gallery/plot_visualization_utils.py diff --git a/docs/Makefile b/docs/Makefile index 58daa471f5c..de809ed81cb 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -26,7 +26,7 @@ html-noplot: # Avoids running the gallery examples, which may take time clean: rm -rf $(BUILDDIR)/* - rm -rf auto_examples/ + rm -rf $(SOURCEDIR)/auto_examples/ .PHONY: help Makefile docset diff --git a/gallery/plot_visualization_utils.py b/gallery/plot_visualization_utils.py new file mode 100644 index 00000000000..123ee066d7f --- /dev/null +++ b/gallery/plot_visualization_utils.py @@ -0,0 +1,114 @@ +""" +======================= +Visualization utilities +======================= + +This example illustrates some of the utilities that torchvision offers for +visualizing bounding boxes and segmentation masks. +""" + + +from pathlib import Path + +import torch +import numpy as np +import scipy.misc +import matplotlib.pyplot as plt + +import torchvision.transforms as T +from torchvision.io import read_image + + +plt.rcParams["savefig.bbox"] = 'tight' + + +def show(img): + plt.imshow(np.transpose(img, (1, 2, 0))) + plt.axis('off') + +#################################### +# Visualizing Bounding Boxes +# -------------------------- +# We will draw some bounding boxes on that cute racoon: + +from torchvision.utils import draw_bounding_boxes + +racoon = T.ToTensor()(scipy.misc.face().copy()) +racoon_int = T.ConvertImageDtype(dtype=torch.uint8)(racoon) +show(racoon_int) + +##################################### +# We can use :func:`~torchvision.utils.draw_bounding_boxes` to draw boxes on an +# image. We can set the colors, labels, width as well as font and font size ! +# This util requires a single image of dtype ``uint8`` as input. +# The boxes are in ``(xmin, ymin, xmax, ymax)`` format + +boxes = torch.tensor([[100, 400, 500, 740], [500, 200, 800, 580]], dtype=torch.float) +labels = ["grass", "racoon"] +colors = ["blue", "yellow"] +result = draw_bounding_boxes(racoon_int, boxes, labels=labels, colors=colors, width=10) +show(result) + +##################################### +# Naturally, we can also plot bounding boxes produced by torchvision detection +# models. Here is demo with a Faster R-CNN model loaded from +# :func:`~torchvision.models.detection.fasterrcnn_resnet50_fpn` +# model. You can also try using a RetinaNet with +# :func:`~torchvision.models.detection.retinanet_resnet50_fpn`. + +from torchvision.models.detection import fasterrcnn_resnet50_fpn + +model = fasterrcnn_resnet50_fpn(pretrained=True) +model = model.eval() + +outputs = model(racoon.unsqueeze(0)) +print(outputs) + +##################################### +# Let's plot the top 5 boxes detected by our model + +boxes = outputs[0]['boxes'] +colors = ["blue", "red", "green", "yellow", "orange"] + +result = draw_bounding_boxes(racoon_int, boxes=boxes[:5], colors=colors, width=10) +show(result) + +##################################### +# Visualizing Segmentation Masks +# ------------------------------ +# The :func:`~torchvision.utils.draw_segmentation_masks` function can be used to +# draw segmentation amasks on images. We can set the colors as well as +# transparency of masks. + +from torchvision.utils import draw_segmentation_masks +from PIL import Image +import requests + +url = "http://images.cocodataset.org/val2017/000000281759.jpg" +umbrellas = Image.open(requests.get(url, stream=True).raw) +umbrellas = T.ToTensor()(umbrellas) +show(umbrellas) + +##################################### +# Let's draw a few maks! The masks contain tensors denoting probabilites of each +# class. Here is demo with torchvision's FCN Resnet-50, loaded with +# :func:`~torchvision.models.segmentation.fcn_resnet50`. +# You can also try using +# DeepLabv3 (:func:`~torchvision.models.segmentation.deeplabv3_resnet50`) +# or lraspp mobilenet models +# (:func:`~torchvision.models.segmentation.lraspp_mobilenet_v3_large`). +# +# Like :func:`~torchvision.utils.draw_bounding_boxes`, +# :func:`~torchvision.utils.draw_segmentation_masks` requires a single RGB image +# of dtype `uint8`. + +from torchvision.models.segmentation import fcn_resnet50 + +model = fcn_resnet50(pretrained=True) +model = model.eval() +output = model(umbrellas.unsqueeze(0)) +masks = output['out'].squeeze(0) + +umbrellas_int = T.ConvertImageDtype(dtype=torch.uint8)(umbrellas) +result = draw_segmentation_masks(umbrellas_int, masks, alpha=0.2) +show(result) diff --git a/torchvision/utils.py b/torchvision/utils.py index 39423e3b227..9ccfc994dcb 100644 --- a/torchvision/utils.py +++ b/torchvision/utils.py @@ -40,10 +40,6 @@ def make_grid( Returns: grid (Tensor): the tensor containing grid of images. - - Example: - See this notebook - `here `_ """ if not (torch.is_tensor(tensor) or (isinstance(tensor, list) and all(torch.is_tensor(t) for t in tensor))): @@ -174,10 +170,6 @@ def draw_bounding_boxes( Returns: img (Tensor[C, H, W]): Image Tensor of dtype uint8 with bounding boxes plotted. - - Example: - See this notebook - `linked `_ """ if not isinstance(image, torch.Tensor): @@ -245,10 +237,6 @@ def draw_segmentation_masks( Returns: img (Tensor[C, H, W]): Image Tensor of dtype uint8 with segmentation masks plotted. - - Example: - See this notebook - `attached `_ """ if not isinstance(image, torch.Tensor): From dc45bf81c06cf6450b05d8e311210d6b52116b38 Mon Sep 17 00:00:00 2001 From: Nicolas Hug Date: Wed, 5 May 2021 11:54:44 +0100 Subject: [PATCH 02/12] pep8 --- docs/requirements.txt | 1 + gallery/plot_visualization_utils.py | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/docs/requirements.txt b/docs/requirements.txt index 778c2880bb8..36fda6f4235 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -2,4 +2,5 @@ sphinx==2.4.4 sphinx-gallery>=0.9.0 matplotlib numpy +scipy -e git+git://github.com/pytorch/pytorch_sphinx_theme.git#egg=pytorch_sphinx_theme diff --git a/gallery/plot_visualization_utils.py b/gallery/plot_visualization_utils.py index 123ee066d7f..0de890d9dc7 100644 --- a/gallery/plot_visualization_utils.py +++ b/gallery/plot_visualization_utils.py @@ -33,6 +33,7 @@ def show(img): from torchvision.utils import draw_bounding_boxes + racoon = T.ToTensor()(scipy.misc.face().copy()) racoon_int = T.ConvertImageDtype(dtype=torch.uint8)(racoon) show(racoon_int) @@ -58,6 +59,7 @@ def show(img): from torchvision.models.detection import fasterrcnn_resnet50_fpn + model = fasterrcnn_resnet50_fpn(pretrained=True) model = model.eval() @@ -84,6 +86,7 @@ def show(img): from PIL import Image import requests + url = "http://images.cocodataset.org/val2017/000000281759.jpg" umbrellas = Image.open(requests.get(url, stream=True).raw) umbrellas = T.ToTensor()(umbrellas) @@ -104,6 +107,7 @@ def show(img): from torchvision.models.segmentation import fcn_resnet50 + model = fcn_resnet50(pretrained=True) model = model.eval() output = model(umbrellas.unsqueeze(0)) From e4d287147ea8936988810771dbec78b1f3969425 Mon Sep 17 00:00:00 2001 From: Nicolas Hug Date: Wed, 5 May 2021 11:58:02 +0100 Subject: [PATCH 03/12] again? --- gallery/plot_visualization_utils.py | 1 + 1 file changed, 1 insertion(+) diff --git a/gallery/plot_visualization_utils.py b/gallery/plot_visualization_utils.py index 0de890d9dc7..2da4b7e56d6 100644 --- a/gallery/plot_visualization_utils.py +++ b/gallery/plot_visualization_utils.py @@ -26,6 +26,7 @@ def show(img): plt.imshow(np.transpose(img, (1, 2, 0))) plt.axis('off') + #################################### # Visualizing Bounding Boxes # -------------------------- From 71f7a57f8656bcbb3f0985062c2f5023e94827e8 Mon Sep 17 00:00:00 2001 From: Nicolas Hug Date: Wed, 5 May 2021 12:05:15 +0100 Subject: [PATCH 04/12] remove unsued imports --- gallery/plot_visualization_utils.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/gallery/plot_visualization_utils.py b/gallery/plot_visualization_utils.py index 2da4b7e56d6..5fb31c6b3d4 100644 --- a/gallery/plot_visualization_utils.py +++ b/gallery/plot_visualization_utils.py @@ -8,15 +8,12 @@ """ -from pathlib import Path - import torch import numpy as np import scipy.misc import matplotlib.pyplot as plt import torchvision.transforms as T -from torchvision.io import read_image plt.rcParams["savefig.bbox"] = 'tight' From 6d666e1e814d17427eba17ae73d601971e8da8b2 Mon Sep 17 00:00:00 2001 From: Nicolas Hug Date: Wed, 5 May 2021 14:55:13 +0100 Subject: [PATCH 05/12] Address comments --- gallery/plot_visualization_utils.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/gallery/plot_visualization_utils.py b/gallery/plot_visualization_utils.py index 5fb31c6b3d4..a666156ae64 100644 --- a/gallery/plot_visualization_utils.py +++ b/gallery/plot_visualization_utils.py @@ -25,22 +25,26 @@ def show(img): #################################### -# Visualizing Bounding Boxes -# -------------------------- -# We will draw some bounding boxes on that cute racoon: - -from torchvision.utils import draw_bounding_boxes +# Visualizing a grid of images +# ---------------------------- +# The :func:`~torchvision.utils.make_grid` function can be used to create a +# tensor that represents multiple images in a grid. This util requires a single +# image of dtype ``uint8`` as input. +from torchvision.utils import make_grid racoon = T.ToTensor()(scipy.misc.face().copy()) racoon_int = T.ConvertImageDtype(dtype=torch.uint8)(racoon) -show(racoon_int) +grid = make_grid([racoon_int, racoon_int, racoon_int]) +show(grid) -##################################### +#################################### +# Visualizing Bounding Boxes +# -------------------------- # We can use :func:`~torchvision.utils.draw_bounding_boxes` to draw boxes on an # image. We can set the colors, labels, width as well as font and font size ! -# This util requires a single image of dtype ``uint8`` as input. # The boxes are in ``(xmin, ymin, xmax, ymax)`` format +# from torchvision.utils import draw_bounding_boxes boxes = torch.tensor([[100, 400, 500, 740], [500, 200, 800, 580]], dtype=torch.float) labels = ["grass", "racoon"] @@ -58,7 +62,7 @@ def show(img): from torchvision.models.detection import fasterrcnn_resnet50_fpn -model = fasterrcnn_resnet50_fpn(pretrained=True) +model = fasterrcnn_resnet50_fpn(pretrained=True, progress=False) model = model.eval() outputs = model(racoon.unsqueeze(0)) @@ -106,7 +110,7 @@ def show(img): from torchvision.models.segmentation import fcn_resnet50 -model = fcn_resnet50(pretrained=True) +model = fcn_resnet50(pretrained=True, progress=False) model = model.eval() output = model(umbrellas.unsqueeze(0)) masks = output['out'].squeeze(0) From f53e32143ee4306f181f5b12521fb267b2cf9605 Mon Sep 17 00:00:00 2001 From: Nicolas Hug Date: Wed, 5 May 2021 14:58:16 +0100 Subject: [PATCH 06/12] oops --- gallery/plot_visualization_utils.py | 9 +++++++++ torchvision/utils.py | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/gallery/plot_visualization_utils.py b/gallery/plot_visualization_utils.py index a666156ae64..88f095bfe70 100644 --- a/gallery/plot_visualization_utils.py +++ b/gallery/plot_visualization_utils.py @@ -46,6 +46,9 @@ def show(img): # The boxes are in ``(xmin, ymin, xmax, ymax)`` format # from torchvision.utils import draw_bounding_boxes +from torchvision.utils import draw_bounding_boxes + + boxes = torch.tensor([[100, 400, 500, 740], [500, 200, 800, 580]], dtype=torch.float) labels = ["grass", "racoon"] colors = ["blue", "yellow"] @@ -118,3 +121,9 @@ def show(img): umbrellas_int = T.ConvertImageDtype(dtype=torch.uint8)(umbrellas) result = draw_segmentation_masks(umbrellas_int, masks, alpha=0.2) show(result) + +##################################### +# We can adjust alpha to show the masks with a different transparency level: + +result = draw_segmentation_masks(umbrellas_int, masks, alpha=0.6) +show(result) \ No newline at end of file diff --git a/torchvision/utils.py b/torchvision/utils.py index 9ccfc994dcb..9d9bbdb3c80 100644 --- a/torchvision/utils.py +++ b/torchvision/utils.py @@ -231,7 +231,7 @@ def draw_segmentation_masks( Args: image (Tensor): Tensor of shape (3 x H x W) and dtype uint8. masks (Tensor): Tensor of shape (num_masks, H, W). Each containing probability of predicted class. - alpha (float): Float number between 0 and 1 denoting factor of transpaerency of masks. + alpha (float): Float number between 0 and 1 denoting factor of transparency of masks. colors (List[Union[str, Tuple[int, int, int]]]): List containing the colors of masks. The colors can be represented as `str` or `Tuple[int, int, int]`. From 7ef0a64acae1d9e136e17d11f72f3bb5eed807f4 Mon Sep 17 00:00:00 2001 From: Nicolas Hug Date: Wed, 5 May 2021 15:41:43 +0100 Subject: [PATCH 07/12] update description --- gallery/plot_visualization_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gallery/plot_visualization_utils.py b/gallery/plot_visualization_utils.py index 88f095bfe70..bb98d427cb1 100644 --- a/gallery/plot_visualization_utils.py +++ b/gallery/plot_visualization_utils.py @@ -4,7 +4,7 @@ ======================= This example illustrates some of the utilities that torchvision offers for -visualizing bounding boxes and segmentation masks. +visualizing images, bounding boxes and segmentation masks. """ From 8bb99a61fc49426f3135ce7a5cb25abcca70af58 Mon Sep 17 00:00:00 2001 From: Nicolas Hug Date: Wed, 5 May 2021 16:14:49 +0100 Subject: [PATCH 08/12] pep8 --- gallery/plot_visualization_utils.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gallery/plot_visualization_utils.py b/gallery/plot_visualization_utils.py index bb98d427cb1..346635aa30b 100644 --- a/gallery/plot_visualization_utils.py +++ b/gallery/plot_visualization_utils.py @@ -4,7 +4,7 @@ ======================= This example illustrates some of the utilities that torchvision offers for -visualizing images, bounding boxes and segmentation masks. +visualizing images, bounding boxes, and segmentation masks. """ @@ -126,4 +126,4 @@ def show(img): # We can adjust alpha to show the masks with a different transparency level: result = draw_segmentation_masks(umbrellas_int, masks, alpha=0.6) -show(result) \ No newline at end of file +show(result) From 7a4a10ada8ec6e4132039252f3ab4aca3938a959 Mon Sep 17 00:00:00 2001 From: Nicolas Hug Date: Mon, 10 May 2021 11:53:45 +0100 Subject: [PATCH 09/12] Use free image --- gallery/assets/people.jpg | Bin 0 -> 70615 bytes gallery/plot_visualization_utils.py | 17 ++++++++--------- 2 files changed, 8 insertions(+), 9 deletions(-) create mode 100644 gallery/assets/people.jpg diff --git a/gallery/assets/people.jpg b/gallery/assets/people.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ed81e6a54b43cf79a74cc1b8d27346dd4b3916f7 GIT binary patch literal 70615 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 X-c;d|VxC0)nnX;)QP|;=?(hHE;>N#I literal 0 HcmV?d00001 diff --git a/gallery/plot_visualization_utils.py b/gallery/plot_visualization_utils.py index 346635aa30b..5532bef8b27 100644 --- a/gallery/plot_visualization_utils.py +++ b/gallery/plot_visualization_utils.py @@ -89,13 +89,12 @@ def show(img): from torchvision.utils import draw_segmentation_masks from PIL import Image -import requests +from pathlib import Path -url = "http://images.cocodataset.org/val2017/000000281759.jpg" -umbrellas = Image.open(requests.get(url, stream=True).raw) -umbrellas = T.ToTensor()(umbrellas) -show(umbrellas) +people = Image.open(Path('assets') / 'people.jpg') +people = T.ToTensor()(people) +show(people) ##################################### # Let's draw a few maks! The masks contain tensors denoting probabilites of each @@ -115,15 +114,15 @@ def show(img): model = fcn_resnet50(pretrained=True, progress=False) model = model.eval() -output = model(umbrellas.unsqueeze(0)) +output = model(people.unsqueeze(0)) masks = output['out'].squeeze(0) -umbrellas_int = T.ConvertImageDtype(dtype=torch.uint8)(umbrellas) -result = draw_segmentation_masks(umbrellas_int, masks, alpha=0.2) +people_int = T.ConvertImageDtype(dtype=torch.uint8)(people) +result = draw_segmentation_masks(people_int, masks, alpha=0.2) show(result) ##################################### # We can adjust alpha to show the masks with a different transparency level: -result = draw_segmentation_masks(umbrellas_int, masks, alpha=0.6) +result = draw_segmentation_masks(people_int, masks, alpha=0.6) show(result) From f68e8814ef5a831b02cc1bbbbcefa2915cca00c4 Mon Sep 17 00:00:00 2001 From: Nicolas Hug Date: Mon, 10 May 2021 16:38:22 +0100 Subject: [PATCH 10/12] Addressed comments --- docs/requirements.txt | 1 - gallery/assets/people.jpg | Bin 70615 -> 0 bytes gallery/plot_scripted_tensor_transforms.py | 2 +- gallery/plot_visualization_utils.py | 96 +++++++++++++-------- 4 files changed, 59 insertions(+), 40 deletions(-) delete mode 100644 gallery/assets/people.jpg diff --git a/docs/requirements.txt b/docs/requirements.txt index 36fda6f4235..778c2880bb8 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -2,5 +2,4 @@ sphinx==2.4.4 sphinx-gallery>=0.9.0 matplotlib numpy -scipy -e git+git://github.com/pytorch/pytorch_sphinx_theme.git#egg=pytorch_sphinx_theme diff --git a/gallery/assets/people.jpg b/gallery/assets/people.jpg deleted file mode 100644 index ed81e6a54b43cf79a74cc1b8d27346dd4b3916f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 70615 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 X-c;d|VxC0)nnX;)QP|;=?(hHE;>N#I diff --git a/gallery/plot_scripted_tensor_transforms.py b/gallery/plot_scripted_tensor_transforms.py index 1decb0b7d21..4eeeeb311b9 100644 --- a/gallery/plot_scripted_tensor_transforms.py +++ b/gallery/plot_scripted_tensor_transforms.py @@ -34,7 +34,7 @@ plt.rcParams["savefig.bbox"] = 'tight' -torch.manual_seed(0) +torch.manual_seed(1) def show(imgs): diff --git a/gallery/plot_visualization_utils.py b/gallery/plot_visualization_utils.py index 5532bef8b27..ca2a1871530 100644 --- a/gallery/plot_visualization_utils.py +++ b/gallery/plot_visualization_utils.py @@ -13,15 +13,20 @@ import scipy.misc import matplotlib.pyplot as plt -import torchvision.transforms as T +import torchvision.transforms.functional as F plt.rcParams["savefig.bbox"] = 'tight' -def show(img): - plt.imshow(np.transpose(img, (1, 2, 0))) - plt.axis('off') +def show(imgs): + if not isinstance(imgs, list): + imgs = [imgs] + fix, axs = plt.subplots(ncols=len(imgs), squeeze=False) + for i, img in enumerate(imgs): + img = F.to_pil_image(img.to('cpu')) + axs[0, i].imshow(np.asarray(img)) + axs[0, i].set(xticklabels=[], yticklabels=[], xticks=[], yticks=[]) #################################### @@ -32,10 +37,13 @@ def show(img): # image of dtype ``uint8`` as input. from torchvision.utils import make_grid +from torchvision.io import read_image +from pathlib import Path + +dog1_int = read_image(str(Path('assets') / 'dog1.jpg')) +dog2_int = read_image(str(Path('assets') / 'dog2.jpg')) -racoon = T.ToTensor()(scipy.misc.face().copy()) -racoon_int = T.ConvertImageDtype(dtype=torch.uint8)(racoon) -grid = make_grid([racoon_int, racoon_int, racoon_int]) +grid = make_grid([dog1_int, dog2_int, dog1_int, dog2_int]) show(grid) #################################### @@ -49,12 +57,12 @@ def show(img): from torchvision.utils import draw_bounding_boxes -boxes = torch.tensor([[100, 400, 500, 740], [500, 200, 800, 580]], dtype=torch.float) -labels = ["grass", "racoon"] +boxes = torch.tensor([[50, 50, 100, 200], [210, 150, 350, 430]], dtype=torch.float) colors = ["blue", "yellow"] -result = draw_bounding_boxes(racoon_int, boxes, labels=labels, colors=colors, width=10) +result = draw_bounding_boxes(dog1_int, boxes, colors=colors, width=5) show(result) + ##################################### # Naturally, we can also plot bounding boxes produced by torchvision detection # models. Here is demo with a Faster R-CNN model loaded from @@ -63,22 +71,27 @@ def show(img): # :func:`~torchvision.models.detection.retinanet_resnet50_fpn`. from torchvision.models.detection import fasterrcnn_resnet50_fpn +from torchvision.transforms.functional import convert_image_dtype +dog1_float = convert_image_dtype(dog1_int, dtype=torch.float) +dog2_float = convert_image_dtype(dog2_int, dtype=torch.float) +batch = torch.stack([dog1_float, dog2_float]) + model = fasterrcnn_resnet50_fpn(pretrained=True, progress=False) model = model.eval() -outputs = model(racoon.unsqueeze(0)) +outputs = model(batch) print(outputs) ##################################### -# Let's plot the top 5 boxes detected by our model - -boxes = outputs[0]['boxes'] -colors = ["blue", "red", "green", "yellow", "orange"] +# Let's plot the boxes detected by our model -result = draw_bounding_boxes(racoon_int, boxes=boxes[:5], colors=colors, width=10) -show(result) +dogs_with_boxes = [ + draw_bounding_boxes(dog_int, boxes=output['boxes'], width=4) + for dog_int, output in zip((dog1_int, dog2_int), outputs) +] +show(dogs_with_boxes) ##################################### # Visualizing Segmentation Masks @@ -86,19 +99,8 @@ def show(img): # The :func:`~torchvision.utils.draw_segmentation_masks` function can be used to # draw segmentation amasks on images. We can set the colors as well as # transparency of masks. - -from torchvision.utils import draw_segmentation_masks -from PIL import Image -from pathlib import Path - - -people = Image.open(Path('assets') / 'people.jpg') -people = T.ToTensor()(people) -show(people) - -##################################### -# Let's draw a few maks! The masks contain tensors denoting probabilites of each -# class. Here is demo with torchvision's FCN Resnet-50, loaded with +# +# Here is demo with torchvision's FCN Resnet-50, loaded with # :func:`~torchvision.models.segmentation.fcn_resnet50`. # You can also try using # DeepLabv3 (:func:`~torchvision.models.segmentation.deeplabv3_resnet50`) @@ -110,19 +112,37 @@ def show(img): # of dtype `uint8`. from torchvision.models.segmentation import fcn_resnet50 +from torchvision.utils import draw_segmentation_masks model = fcn_resnet50(pretrained=True, progress=False) model = model.eval() -output = model(people.unsqueeze(0)) -masks = output['out'].squeeze(0) -people_int = T.ConvertImageDtype(dtype=torch.uint8)(people) -result = draw_segmentation_masks(people_int, masks, alpha=0.2) -show(result) +# The model expects the batch to be normalized +batch = F.normalize(batch, mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225)) +outputs = model(batch) + +dogs_with_masks = [ + draw_segmentation_masks(dog_int, masks=output.squeeze(), alpha=0.6) + for dog_int, output in zip((dog1_int, dog2_int), outputs['out']) +] +show(dogs_with_masks) + ##################################### -# We can adjust alpha to show the masks with a different transparency level: +# The output of a Mask-RCNN model is slightly different but can be plotted too: -result = draw_segmentation_masks(people_int, masks, alpha=0.6) -show(result) +from torchvision.models.detection import maskrcnn_resnet50_fpn +model = maskrcnn_resnet50_fpn(pretrained=True, progress=False) +model = model.eval() + +outputs = model(batch) + +dogs_with_masks = [ + draw_segmentation_masks( + dog_int, + masks=F.convert_image_dtype(output['masks'], torch.float).squeeze(), + alpha=0.6 + ) for dog_int, output in zip((dog1_int, dog2_int), outputs) +] +show(dogs_with_masks) \ No newline at end of file From 57038fdc88e0063151fdbe7ea78c3df268b3bcc2 Mon Sep 17 00:00:00 2001 From: Nicolas Hug Date: Tue, 11 May 2021 14:47:55 +0100 Subject: [PATCH 11/12] removed maskrcnn, will work on it in another PR --- gallery/plot_visualization_utils.py | 33 +++++++---------------------- 1 file changed, 8 insertions(+), 25 deletions(-) diff --git a/gallery/plot_visualization_utils.py b/gallery/plot_visualization_utils.py index ca2a1871530..73de8870480 100644 --- a/gallery/plot_visualization_utils.py +++ b/gallery/plot_visualization_utils.py @@ -47,7 +47,7 @@ def show(imgs): show(grid) #################################### -# Visualizing Bounding Boxes +# Visualizing bounding boxes # -------------------------- # We can use :func:`~torchvision.utils.draw_bounding_boxes` to draw boxes on an # image. We can set the colors, labels, width as well as font and font size ! @@ -85,16 +85,18 @@ def show(imgs): print(outputs) ##################################### -# Let's plot the boxes detected by our model +# Let's plot the boxes detected by our model. We will only plot the boxes with a +# score greater than a given threshold. +threshold = .8 dogs_with_boxes = [ - draw_bounding_boxes(dog_int, boxes=output['boxes'], width=4) + draw_bounding_boxes(dog_int, boxes=output['boxes'][output['scores'] > threshold], width=4) for dog_int, output in zip((dog1_int, dog2_int), outputs) ] show(dogs_with_boxes) ##################################### -# Visualizing Segmentation Masks +# Visualizing segmentation masks # ------------------------------ # The :func:`~torchvision.utils.draw_segmentation_masks` function can be used to # draw segmentation amasks on images. We can set the colors as well as @@ -123,26 +125,7 @@ def show(imgs): outputs = model(batch) dogs_with_masks = [ - draw_segmentation_masks(dog_int, masks=output.squeeze(), alpha=0.6) - for dog_int, output in zip((dog1_int, dog2_int), outputs['out']) + draw_segmentation_masks(dog_int, masks=masks, alpha=0.6) + for dog_int, masks in zip((dog1_int, dog2_int), outputs['out']) ] show(dogs_with_masks) - - -##################################### -# The output of a Mask-RCNN model is slightly different but can be plotted too: - -from torchvision.models.detection import maskrcnn_resnet50_fpn -model = maskrcnn_resnet50_fpn(pretrained=True, progress=False) -model = model.eval() - -outputs = model(batch) - -dogs_with_masks = [ - draw_segmentation_masks( - dog_int, - masks=F.convert_image_dtype(output['masks'], torch.float).squeeze(), - alpha=0.6 - ) for dog_int, output in zip((dog1_int, dog2_int), outputs) -] -show(dogs_with_masks) \ No newline at end of file From 87f89bdd1cce901ffc0667f91d6b49efb172dd99 Mon Sep 17 00:00:00 2001 From: Nicolas Hug Date: Tue, 11 May 2021 15:16:08 +0100 Subject: [PATCH 12/12] flake8 --- gallery/plot_visualization_utils.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gallery/plot_visualization_utils.py b/gallery/plot_visualization_utils.py index 73de8870480..58788437a28 100644 --- a/gallery/plot_visualization_utils.py +++ b/gallery/plot_visualization_utils.py @@ -71,7 +71,7 @@ def show(imgs): # :func:`~torchvision.models.detection.retinanet_resnet50_fpn`. from torchvision.models.detection import fasterrcnn_resnet50_fpn -from torchvision.transforms.functional import convert_image_dtype +from torchvision.transforms.functional import convert_image_dtype dog1_float = convert_image_dtype(dog1_int, dtype=torch.float)