Skip to content
3 changes: 3 additions & 0 deletions NAMESPACE
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,9 @@ S3method(transform_to_tensor,list)
S3method(transform_to_tensor,matrix)
S3method(transform_vflip,default)
S3method(transform_vflip,torch_tensor)
S3method(vision_make_grid,"magick-image")
S3method(vision_make_grid,default)
S3method(vision_make_grid,torch_tensor)
export(base_loader)
export(batched_nms)
export(box_area)
Expand Down
1 change: 1 addition & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@

## Bug fixes and improvements

* `vision_make_grid()` now accepts multiple 3D tensors with mixed uint8 and float dtype (#398).
* `transform_random_affine()` now accepts a bare number for `shear`. It used to widen `degrees`
instead of `shear`, which left the shear range incomplete and made the sampling fail (#390).
* `item_transform_rotate()` no longer truncates the rotation angle to a whole number of degrees
Expand Down
3 changes: 2 additions & 1 deletion R/collection-rf100-biology.R
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ rf100_biology_collection <- torch::dataset(
size = c(81, 24, 12, 6.4, 1.8, 0.9 , 65.1,17.9,9, 0.3, 0.1, 0.05,
1.4, 2.5, 0.8, 62, 16.8, 9,
19, 5.3, 2.7, 69,9.0, 5.7, 192,55.6, 28,
45, 13, 4.5) * 1e6
45, 13, 4.5) * 1e6,
stringsAsFactors = FALSE
)
)
3 changes: 2 additions & 1 deletion R/collection-rf100-damage.R
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@ rf100_damage_collection <- torch::dataset(
# asbestos
"f53af703c4ce594c3950d7e732003f2d", "8e99904ce49e7f0e830735fb22986868", "4fef507d057690d1a55fa043696248cc"
),
size = c(21.5, 5.7, 1.4, 8.5, 2.3, 1.5, 28, 7.8, 4) * 1e6
size = c(21.5, 5.7, 1.4, 8.5, 2.3, 1.5, 28, 7.8, 4) * 1e6,
stringsAsFactors = FALSE
)
)
3 changes: 2 additions & 1 deletion R/collection-rf100-doc.R
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,8 @@ rf100_document_collection <- torch::dataset(
"ca0b96eb696da512eed629895a433bad"
),

size = c(rep(50, 18), 32, 9, 5, 108, 32, 23) * 1e6 # placeholder; optional
size = c(rep(50, 18), 32, 9, 5, 108, 32, 23) * 1e6, # placeholder; optional
stringsAsFactors = FALSE
),

initialize = function(
Expand Down
3 changes: 2 additions & 1 deletion R/dataset-pascal.R
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,8 @@ pascal_segmentation_dataset <- torch::dataset(
"da459979d0c395079b5c75ee67908abb",
"6c3384ef61512963050cb5d687e5bf1e",
"6cd6e144f989b92b3379bac3b3de84fd"),
size = c("440 MB", "440 MB", "550 MB", "890 MB", "1.3 GB", "1.7 GB", "1.9 GB")
size = c("440 MB", "440 MB", "550 MB", "890 MB", "1.3 GB", "1.7 GB", "1.9 GB"),
stringsAsFactors = FALSE
),
classes = pascal_voc_classes(),
voc_colormap = c(
Expand Down
9 changes: 6 additions & 3 deletions R/dataset-plankton.R
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ whoi_small_plankton_dataset <- torch::dataset(
"170921030aee26f9676725a0c55a4420",
"332ebc8b822058cd98f778099927c50e",
"f0747ae16fc7cd6946ea54c3fe1f30b4"),
size = c(217e6, 396e6, 383e6, 112e6)
size = c(217e6, 396e6, 383e6, 112e6),
stringsAsFactors = FALSE
),

initialize = function(
Expand Down Expand Up @@ -171,7 +172,8 @@ whoi_plankton_dataset <- torch::dataset(
"0f4d47f240cd9c30a7dd786171fa40ca",
"db827a7de8790cdcae67b174c7b8ea5e",
"d3181d9ffaed43d0c01f59455924edca"),
size = c(rep(450e6, 4), rep(490e6, 13), rep(450e6, 2))
size = c(rep(450e6, 4), rep(490e6, 13), rep(450e6, 2)),
stringsAsFactors = FALSE
)
)

Expand Down Expand Up @@ -201,6 +203,7 @@ whoi_small_coralnet_dataset <- torch::dataset(
"f4dd2d2effc1f9c02918e3ee614b85d3",
"d66ec691a4c5c63878a9cfff164a6aaf",
"7ea146b9b2f7b6cee99092bd44182d06"),
size = c(430e6, rep(380e6, 4), 192e6)
size = c(430e6, rep(380e6, 4), 192e6),
stringsAsFactors = FALSE
)
)
3 changes: 2 additions & 1 deletion R/dataset-vggface2.R
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ vggface2_dataset <- torch::dataset(
"bb7a323824d1004e14e00c23974facd3",
"d08b10f12bc9889509364ef56d73c621",
"d315386c7e8e166c4f60e27d9cc61acc"),
size = c(37.9e9, 62e6, 2.03e9, 3e6, 335e3)
size = c(37.9e9, 62e6, 2.03e9, 3e6, 335e3),
stringsAsFactors = FALSE
),
initialize = function(
root = tempdir(),
Expand Down
57 changes: 26 additions & 31 deletions R/item-transforms-geometry.R
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,11 @@
#'
#' after <- item_transform_rotate(before, angle = angle)
#'
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)$to(torch_float())$div(255)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)$to(torch_float())$div(255)
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)
#'
#' grid <- vision_make_grid(
#' torch_stack(list(transform_resize(before_plot, c(600, 600)),
#' transform_resize(after_plot, c(600, 600)))),
#' grid <- vision_make_grid(transform_resize(before_plot, c(600, 600)),
#' transform_resize(after_plot, c(600, 600)),
#' scale = TRUE
#' )
#' tensor_image_browse(grid)
Expand Down Expand Up @@ -241,14 +240,14 @@ item_transform_rotate.image_with_rotated_box <- function(x, angle, interpolation
#'
#' after <- item_transform_crop(before, top = 100, left = 200, height = 500, width = 800)
#'
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)$to(torch_float())$div(255)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)$to(torch_float())$div(255)
#'
#' before_plot <- transform_resize(before_plot, c(2000, 3000))
#' after_plot <- transform_resize(after_plot, c(2000, 3000))
#' before_plot <- before %>%
#' draw_bounding_boxes(colors = "blue", width = 10) %>%
#' transform_resize(c(2000, 3000))
#' after_plot <- after %>%
#' draw_bounding_boxes(colors = "red", width = 10) %>%
#' transform_resize(c(2000, 3000))
#'
#' grid <- vision_make_grid(torch_stack(list(before_plot, after_plot)), scale = TRUE)
#' tensor_image_browse(grid)
#' tensor_image_browse(vision_make_grid(before_plot, after_plot, scale = TRUE))
#' }
#'
#' @family item_unitary_transforms
Expand Down Expand Up @@ -399,10 +398,10 @@ item_transform_crop.image_with_rotated_box <- function(x, top, left, height, wid
#'
#' after <- item_transform_hflip(before)
#'
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)$to(torch_float())$div(255)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)$to(torch_float())$div(255)
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)
#'
#' grid <- vision_make_grid(torch_stack(list(before_plot, after_plot)), scale = TRUE)
#' grid <- vision_make_grid(before_plot, after_plot, scale = TRUE)
#' tensor_image_browse(grid)
#' }
#'
Expand Down Expand Up @@ -502,11 +501,10 @@ item_transform_hflip.image_with_rotated_box <- function(x) {
#'
#' after <- item_transform_vflip(before)
#'
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)$to(torch_float())$div(255)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)$to(torch_float())$div(255)
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)
#'
#' grid <- vision_make_grid(torch_stack(list(before_plot, after_plot)), scale = TRUE)
#' tensor_image_browse(grid)
#' tensor_image_browse(vision_make_grid(before_plot, after_plot, scale = TRUE))
#' }
#'
#' @family item_unitary_transforms
Expand Down Expand Up @@ -613,14 +611,13 @@ item_transform_vflip.image_with_rotated_box <- function(x) {
#'
#' after <- item_transform_center_crop(before, size = c(1500, 1500))
#'
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)$to(torch_float())$div(255)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)$to(torch_float())$div(255)
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)
#'
#' before_plot <- transform_resize(before_plot, c(1500, 1500))
#' after_plot <- transform_resize(after_plot, c(1500, 1500))
#'
#' grid <- vision_make_grid(torch_stack(list(before_plot, after_plot)), scale = TRUE)
#' tensor_image_browse(grid)
#' tensor_image_browse(vision_make_grid(before_plot, after_plot, scale = TRUE))
#' }
#'
#' @family item_unitary_transforms
Expand Down Expand Up @@ -917,14 +914,13 @@ item_transform_affine.dataset <- function(x, angle = 0, translate = c(0, 0),
#'
#' after <- item_transform_pad(before, padding = 100)
#'
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)$to(torch_float())$div(255)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)$to(torch_float())$div(255)
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)
#'
#' before_plot <- transform_resize(before_plot, c(2000, 3000))
#' after_plot <- transform_resize(after_plot, c(2000, 3000))
#'
#' grid <- vision_make_grid(torch_stack(list(before_plot, after_plot)), scale = TRUE)
#' tensor_image_browse(grid)
#' tensor_image_browse(vision_make_grid(before_plot, after_plot, scale = TRUE))
#' }
#'
#' @family item_unitary_transforms
Expand Down Expand Up @@ -1087,11 +1083,10 @@ item_transform_pad.image_with_rotated_box <- function(x, padding, fill = 0, padd
#'
#' after <- item_transform_perspective(before, startpoints, endpoints)
#'
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)$to(torch_float())$div(255)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)$to(torch_float())$div(255)
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)
#'
#' grid <- vision_make_grid(torch_stack(list(before_plot, after_plot)), scale = TRUE)
#' tensor_image_browse(grid)
#' tensor_image_browse(vision_make_grid(before_plot, after_plot, scale = TRUE))
#' }
#'
#' @family item_unitary_transforms
Expand Down
38 changes: 17 additions & 21 deletions R/item-transforms-random-geometry.R
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,10 @@
#'
#' after <- item_transform_random_horizontal_flip(before)
#'
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)$to(torch_float())$div(255)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)$to(torch_float())$div(255)
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)
#'
#' grid <- vision_make_grid(torch_stack(list(before_plot, after_plot)), scale = TRUE)
#' tensor_image_browse(grid)
#' tensor_image_browse(vision_make_grid(before_plot, after_plot, scale = TRUE))
#' }
#'
#' @family item_random_transforms
Expand Down Expand Up @@ -111,11 +110,10 @@ item_transform_random_horizontal_flip.image_with_rotated_box <- function(x, p =
#'
#' after <- item_transform_random_vertical_flip(before)
#'
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)$to(torch_float())$div(255)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)$to(torch_float())$div(255)
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)
#'
#' grid <- vision_make_grid(torch_stack(list(before_plot, after_plot)), num_rows = 1, scale = TRUE)
#' tensor_image_browse(grid)
#' tensor_image_browse(vision_make_grid(before_plot, after_plot, per_row = 1, scale = TRUE))
#' }
#'
#' @family item_random_transforms
Expand Down Expand Up @@ -365,16 +363,15 @@ rescale_box_angle <- function(angle_deg, scale_w, scale_h) {
#'
#' after <- item_transform_random_crop(before, size = c(800, 1200))
#'
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)$to(torch_float())$div(255)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)$to(torch_float())$div(255)
#' # the crop will changes the image size, so resize is needed before vision_make_grid
#' before_plot <- before %>%
#' draw_bounding_boxes(colors = "blue", width = 10) %>%
#' transform_resize(c(600, 600))
#' after_plot <- after %>%
#' draw_bounding_boxes(colors = "red", width = 10) %>%
#' transform_resize(c(600, 600))
#'
#' # the crop changes the image size, so resize before stacking into the grid
#' grid <- vision_make_grid(
#' torch_stack(list(transform_resize(before_plot, c(600, 600)),
#' transform_resize(after_plot, c(600, 600)))),
#' scale = TRUE
#' )
#' tensor_image_browse(grid)
#' tensor_image_browse(vision_make_grid(before_plot, after_plot))
#' }
#'
#' @family item_random_transforms
Expand Down Expand Up @@ -777,11 +774,10 @@ item_transform_random_rotation.image_with_segmentation_mask <- item_transform_ra
#'
#' after <- item_transform_random_erasing(before)
#'
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)$to(torch_float())$div(255)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)$to(torch_float())$div(255)
#' before_plot <- draw_bounding_boxes(before, colors = "blue", width = 10)
#' after_plot <- draw_bounding_boxes(after, colors = "red", width = 10)
#'
#' grid <- vision_make_grid(torch_stack(list(before_plot, after_plot)), scale = TRUE)
#' tensor_image_browse(grid)
#' tensor_image_browse(vision_make_grid(before_plot, after_plot, scale = TRUE))
#' }
#'
#' @family item_random_transforms
Expand Down
2 changes: 1 addition & 1 deletion R/models-faster_rcnn.R
Original file line number Diff line number Diff line change
Expand Up @@ -980,7 +980,7 @@ mobilenet_v3_320_fpn_backbone <- function(pretrained = TRUE) {
#' batch_normalized <- input$unsqueeze(1) # Add batch dimension (1, 3, H, W)
#'
#' # ResNet-50 FPN V2
#' model <- model_fasterrcnn_resnet50_fpn_v2(pretrained = TRUE, , detections_per_img = 5 )
#' model <- model_fasterrcnn_resnet50_fpn_v2(pretrained = TRUE, detections_per_img = 5 )
#' model$eval()
#' torch::with_no_grad({pred <- model(batch_normalized)$detections[[1]]})
#' labels <- coco_classes(as.integer(pred$labels))
Expand Down
2 changes: 1 addition & 1 deletion R/models-mask_rcnn.R
Original file line number Diff line number Diff line change
Expand Up @@ -562,7 +562,7 @@ maskrcnn_model_v2 <- torch::nn_module(
#' batch <- input$unsqueeze(1)
#'
#' # Mask R-CNN ResNet-50 FPN
#' model <- model_maskrcnn_resnet50_fpn(pretrained = TRUE, , detections_per_img = 5)
#' model <- model_maskrcnn_resnet50_fpn(pretrained = TRUE, detections_per_img = 5)
#' model$eval()
#'
#' torch::with_no_grad({pred <- model(batch)$detections[[1]]})
Expand Down
2 changes: 1 addition & 1 deletion R/models-vgg.R
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ VGG <- torch::nn_module(
torch::nn_linear(4096, 4096),
torch::nn_relu(TRUE),
torch::nn_dropout(),
torch::nn_linear(4096, num_classes),
torch::nn_linear(4096, num_classes)
)

if (init_weights)
Expand Down
6 changes: 1 addition & 5 deletions R/target-transforms-detection.R
Original file line number Diff line number Diff line change
Expand Up @@ -277,11 +277,7 @@ target_transform_sahi_crop.object_detection_target <- function(y, sahi_split, mi
#' # Rotated boxes (red, drawn as polygons)
#' after_plot <- draw_bounding_boxes(img, boxes = rotated_target$boxes, colors = "red", width = 10)
#'
#' grid <- vision_make_grid(
#' torch_stack(list(before_plot, after_plot))$to(torch_float32()),
#' scale = TRUE
#' )
#' tensor_image_browse(grid)
#' tensor_image_browse(vision_make_grid(before_plot, after_plot, scale = TRUE))
#' }
#'
#' @family target_transforms_detection
Expand Down
2 changes: 1 addition & 1 deletion R/transforms-generics.R
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,7 @@ transform_ten_crop <- function(img, size, vertical_flip = FALSE) {
#' class(item) <- "image_with_bounding_box"
#' draw_bounding_boxes(item, colors = "red")
#' })
#' grid <- vision_make_grid(torch_stack(preview), scale = FALSE, num_rows = 3)
#' grid <- vision_make_grid(torch_stack(preview), scale = FALSE, per_row = 3)
#' tensor_image_browse(grid)
#' }
#'
Expand Down
Loading