From e7d4d9b0baeb9a9d5efe8fdd35db99fd452a0b9b Mon Sep 17 00:00:00 2001 From: DerrickUnleashed Date: Wed, 27 Aug 2025 14:29:51 +0530 Subject: [PATCH 1/4] Adding vignettes for visualisation utils #113 --- vignettes/examples/oxfordiiitpet-fcnresnet.R | 89 +++++++++++++++++++ .../examples/oxfordiiitpet-fcnresnet.Rmd | 9 ++ 2 files changed, 98 insertions(+) create mode 100644 vignettes/examples/oxfordiiitpet-fcnresnet.R create mode 100644 vignettes/examples/oxfordiiitpet-fcnresnet.Rmd diff --git a/vignettes/examples/oxfordiiitpet-fcnresnet.R b/vignettes/examples/oxfordiiitpet-fcnresnet.R new file mode 100644 index 00000000..ca8e27b7 --- /dev/null +++ b/vignettes/examples/oxfordiiitpet-fcnresnet.R @@ -0,0 +1,89 @@ +# Loading Images --------------------------------------------------- + + +read_to_tensor <- function(url) { + tmp <- download_and_cache(url) + arr <- jpeg::readJPEG(tmp) + arr <- as.array(arr) + torch_tensor(aperm(arr, c(3,1,2)), dtype = torch_float()) +} + +url1 <- "https://raw.githubusercontent.com/pytorch/vision/main/gallery/assets/dog1.jpg" +url2 <- "https://raw.githubusercontent.com/pytorch/vision/main/gallery/assets/dog2.jpg" + +dog1 <- read_to_tensor(url1) +dog2 <- read_to_tensor(url2) + + +# Visualizing a grid of images ------------------------------------- + + +dogs <- torch_stack(list(dog1, dog2)) +grid <- vision_make_grid(dogs, scale = TRUE, num_rows = 2) +grid_arr <- as.array(grid$permute(c(2,3,1))) +plot(c(0, dim(grid_arr)[2]), c(0, dim(grid_arr)[1]), type = "n", ann = FALSE, axes = FALSE, asp = 1) +rasterImage(grid_arr, 0, 0, w, h) + + +# Preprocessing the data ------------------------------------- + + +norm_mean <- c(0.485, 0.456, 0.406) +norm_std <- c(0.229, 0.224, 0.225) + +preprocess <- function(img) { + resized <- nnf_interpolate( + img$unsqueeze(1), size = c(520, 520), mode = "bilinear", align_corners = FALSE + )$squeeze(1) + normed <- (resized - torch_tensor(norm_mean)$unsqueeze(2)$unsqueeze(3)) / + torch_tensor(norm_std)$unsqueeze(2)$unsqueeze(3) + list(resized = resized, normed = normed) +} + +dog1_prep <- preprocess(dog1) +dog2_prep <- preprocess(dog2) + +# make batch (2,3,520,520) +input <- torch_stack(list(dog1_prep$normed, dog2_prep$normed)) + + +# Loading Model ------------------------------------- + + +model <- model_fcn_resnet50(pretrained = TRUE) +model$eval() + +# run model +output <- model(input) + + +# Processing the Output ------------------------------ + + +# argmax over classes -> (1,H,W) +mask_id <- output$out$argmax(dim = 2) + +make_masks <- function(mask_id_img, num_classes = 21) { + torch_stack(lapply(0:(num_classes-1), function(cls) mask_id_img$eq(cls)), dim = 1) +} +mask_bool1 <- make_masks(mask_id[1,..]) +mask_bool2 <- make_masks(mask_id[2,..]) + + +# Visualizing the Output ------------------------------ + + +segmented1 <- draw_segmentation_masks( + (dog1_prep$resized * 255)$to(torch_uint8()), + masks = mask_bool1, + alpha = 0.6 +) + +segmented2 <- draw_segmentation_masks( + (dog2_prep$resized * 255)$to(torch_uint8()), + masks = mask_bool2, + alpha = 0.6 +) + +tensor_image_browse(segmented1) +tensor_image_browse(segmented2) \ No newline at end of file diff --git a/vignettes/examples/oxfordiiitpet-fcnresnet.Rmd b/vignettes/examples/oxfordiiitpet-fcnresnet.Rmd new file mode 100644 index 00000000..118812f4 --- /dev/null +++ b/vignettes/examples/oxfordiiitpet-fcnresnet.Rmd @@ -0,0 +1,9 @@ +--- +title: oxfordiiitpet-fcnresnet +type: docs +--- + +```{r, echo = FALSE} +knitr::opts_chunk$set(eval = FALSE) +knitr::spin_child(paste0(rmarkdown::metadata$title, ".R")) +``` \ No newline at end of file From 06c7d5b740b31a02bf90506068c9cd12db5c4483 Mon Sep 17 00:00:00 2001 From: DerrickUnleashed Date: Wed, 27 Aug 2025 14:30:05 +0530 Subject: [PATCH 2/4] Adding NEWS.md #113 --- NEWS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/NEWS.md b/NEWS.md index a3dc9801..17c1cd56 100644 --- a/NEWS.md +++ b/NEWS.md @@ -14,6 +14,8 @@ ## New features +* Added vignette showcasing `model_fcn_resnet50()` with visualization utilities `draw_segmentation_masks()` and `make_vision_grid()` (@DerrickUnleashed, #244). + ## Bug fixes and improvements * Switch pre 0.5.0 models to their `/v2/` URL in torch-cdn.mlverse.org. (#215) From 9aba253ba55506300018241ad9f6681c7f8eaa53 Mon Sep 17 00:00:00 2001 From: DerrickUnleashed Date: Wed, 27 Aug 2025 14:31:23 +0530 Subject: [PATCH 3/4] Naming the vignettes appropiately --- vignettes/examples/{oxfordiiitpet-fcnresnet.R => fcnresnet.R} | 0 vignettes/examples/{oxfordiiitpet-fcnresnet.Rmd => fcnresnet.Rmd} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename vignettes/examples/{oxfordiiitpet-fcnresnet.R => fcnresnet.R} (100%) rename vignettes/examples/{oxfordiiitpet-fcnresnet.Rmd => fcnresnet.Rmd} (100%) diff --git a/vignettes/examples/oxfordiiitpet-fcnresnet.R b/vignettes/examples/fcnresnet.R similarity index 100% rename from vignettes/examples/oxfordiiitpet-fcnresnet.R rename to vignettes/examples/fcnresnet.R diff --git a/vignettes/examples/oxfordiiitpet-fcnresnet.Rmd b/vignettes/examples/fcnresnet.Rmd similarity index 100% rename from vignettes/examples/oxfordiiitpet-fcnresnet.Rmd rename to vignettes/examples/fcnresnet.Rmd From e35235864e5cbe1038c9988ad70bb9b78fd1fa3c Mon Sep 17 00:00:00 2001 From: DerrickUnleashed Date: Wed, 27 Aug 2025 14:32:32 +0530 Subject: [PATCH 4/4] Updating pkgdown.yml #113 --- _pkgdown.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/_pkgdown.yml b/_pkgdown.yml index 550a46e6..607aeca9 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -27,6 +27,8 @@ navbar: href: articles/examples/style-transfer.html - text: texture-nca href: articles/examples/texture-nca.html + - text: fcnresnet + href: articles/examples/fcnresnet.html reference: - title: Transforms