| Title: | Additional Operators for Image Models |
|---|---|
| Description: | Implements additional operators for computer vision models, including operators necessary for image segmentation and object detection deep learning models. |
| Authors: | Daniel Falbel [aut], Tomasz Kalinowski [ctb, cre], Derrick Richard [ctb], RStudio [cph] |
| Maintainer: | Tomasz Kalinowski <[email protected]> |
| License: | MIT + file LICENSE |
| Version: | 0.8.0.9000 |
| Built: | 2026-10-19 09:54:07 UTC |
| Source: | https://github.com/mlverse/torchvisionlib |
Computes the pairwise intersection-over-union (IoU) between two sets of rotated bounding boxes.
ops_box_iou_rotated(boxes1, boxes2, fmt = "cxcywhr")ops_box_iou_rotated(boxes1, boxes2, fmt = "cxcywhr")
boxes1 |
|
boxes2 |
|
fmt |
format of the input boxes. One of:
|
Tensor[N, M] float32 matrix of pairwise IoU values.
Other ops:
ops_ms_deform_attn(),
ops_nms(),
ops_roi_align_rotated()
if (torchvisionlib_is_installed()) { boxes <- torch::torch_tensor(matrix(c(0, 0, 10, 10, 45), nrow = 1)) ops_box_iou_rotated(boxes, boxes) }if (torchvisionlib_is_installed()) { boxes <- torch::torch_tensor(matrix(c(0, 0, 10, 10, 45), nrow = 1)) ops_box_iou_rotated(boxes, boxes) }
Ddescribed in Deformable ConvNets v2: More Deformable, Better Results
if mask is not NULL and performs Deformable Convolution, described in
Deformable Convolutional Networks
if mask is NULL.
ops_deform_conv2d( input, offset, weight, bias = NULL, stride = c(1, 1), padding = c(0, 0), dilation = c(1, 1), mask = NULL )ops_deform_conv2d( input, offset, weight, bias = NULL, stride = c(1, 1), padding = c(0, 0), dilation = c(1, 1), mask = NULL )
input |
( |
offset |
( |
weight |
( |
bias |
( |
stride |
(int or |
padding |
(int or |
dilation |
(int or |
mask |
( |
Tensor[batch_sz, out_channels, out_h, out_w]: result of convolution
if (torchvisionlib_is_installed()) { library(torch) input <- torch_rand(4, 3, 10, 10) kh <- kw <- 3 weight <- torch_rand(5, 3, kh, kw) # offset and mask should have the same spatial size as the output # of the convolution. In this case, for an input of 10, stride of 1 # and kernel size of 3, without padding, the output size is 8 offset <- torch_rand(4, 2 * kh * kw, 8, 8) mask <- torch_rand(4, kh * kw, 8, 8) out <- ops_deform_conv2d(input, offset, weight, mask = mask) print(out$shape) }if (torchvisionlib_is_installed()) { library(torch) input <- torch_rand(4, 3, 10, 10) kh <- kw <- 3 weight <- torch_rand(5, 3, kh, kw) # offset and mask should have the same spatial size as the output # of the convolution. In this case, for an input of 10, stride of 1 # and kernel size of 3, without padding, the output size is 8 offset <- torch_rand(4, 2 * kh * kw, 8, 8) mask <- torch_rand(4, kh * kw, 8, 8) out <- ops_deform_conv2d(input, offset, weight, mask = mask) print(out$shape) }
Computes multi-scale deformable attention as used by Deformable-DETR and
LW-DETR. Only a CUDA implementation is provided; all input tensors must be on
the same CUDA device. On CPU, models should fall back to a pure-R
implementation (e.g. based on torch::nnf_grid_sample()).
ops_ms_deform_attn( value, spatial_shapes, level_start_index, sampling_locations, attention_weights, im2col_step = 64L )ops_ms_deform_attn( value, spatial_shapes, level_start_index, sampling_locations, attention_weights, im2col_step = 64L )
value |
( |
spatial_shapes |
( |
level_start_index |
( |
sampling_locations |
( |
attention_weights |
( |
im2col_step |
(int): batch chunk size used internally by the kernel.
Must divide |
spatial_shapes and level_start_index use the kernel's 0-based indexing
convention: level_start_index[l] is the flat offset (into the Len_in
dimension of value) of the first element of level l, and the output is a
feature tensor, so no 1-based index adjustment is applied.
Tensor[batch, Len_q, n_heads * head_dim]: the attended output.
Other ops:
ops_box_iou_rotated(),
ops_nms(),
ops_roi_align_rotated()
Performs non-maximum suppression (NMS) on the boxes according to their intersection-over-union (IoU).
ops_nms(boxes, scores, iou_threshold)ops_nms(boxes, scores, iou_threshold)
boxes |
|
scores |
|
iou_threshold |
|
NMS iteratively removes lower scoring boxes which have an IoU greater than
iou_threshold with another (higher scoring) box.
If multiple boxes have the exact same score and satisfy the IoU criterion with respect to a reference box, the selected box is not guaranteed to be the same between CPU and GPU. This is similar to the behavior of argsort in PyTorch when repeated values are present.
int64 tensor with the indices of the elements that have been kept by NMS, sorted in decreasing order of scores
Other ops:
ops_box_iou_rotated(),
ops_ms_deform_attn(),
ops_roi_align_rotated()
if (torchvisionlib_is_installed()) { ops_nms(torch::torch_rand(3, 4), torch::torch_rand(3), 0.5) }if (torchvisionlib_is_installed()) { ops_nms(torch::torch_rand(3, 4), torch::torch_rand(3), 0.5) }
The (RoI) Align operator is mentioned in Light-Head R-CNN.
ops_ps_roi_align( input, boxes, output_size, spatial_scale = 1, sampling_ratio = -1 ) nn_ps_roi_align(output_size, spatial_scale = 1, sampling_ratio = -1)ops_ps_roi_align( input, boxes, output_size, spatial_scale = 1, sampling_ratio = -1 ) nn_ps_roi_align(output_size, spatial_scale = 1, sampling_ratio = -1)
input |
( |
boxes |
( |
output_size |
(int or |
spatial_scale |
(float): a scaling factor that maps the box coordinates to the input coordinates. For example, if your boxes are defined on the scale of a 224x224 image and your input is a 112x112 feature map (resulting from a 0.5x scaling of the original image), you'll want to set this to 0.5. Default: 1.0 |
sampling_ratio |
(int): number of sampling points in the interpolation grid
used to compute the output value of each pooled output bin. If > 0,
then exactly |
Tensor[K, C / (output_size[1] * output_size[2]), output_size[1], output_size[2]]:
The pooled RoIs
nn_ps_roi_align(): The torch::nn_module() wrapper for ops_ps_roi_align().
if (torchvisionlib_is_installed()) { library(torch) library(torchvisionlib) input <- torch_randn(1, 3, 28, 28) boxes <- list(torch_tensor(matrix(c(1,1,5,5), ncol = 4))) roi <- nn_ps_roi_align(output_size = c(1, 1)) roi(input, boxes) }if (torchvisionlib_is_installed()) { library(torch) library(torchvisionlib) input <- torch_randn(1, 3, 28, 28) boxes <- list(torch_tensor(matrix(c(1,1,5,5), ncol = 4))) roi <- nn_ps_roi_align(output_size = c(1, 1)) roi(input, boxes) }
Performs RoI (Region of Interest) align pooling for rotated proposals, as implemented by the MMCV
roi_align_rotated operator.
Only a CPU implementation is provided.
ops_roi_align_rotated( input, rois, output_size, spatial_scale, sampling_ratio = 0, aligned = TRUE, clockwise = FALSE ) nn_roi_align_rotated( output_size, spatial_scale, sampling_ratio = 0, aligned = TRUE, clockwise = FALSE )ops_roi_align_rotated( input, rois, output_size, spatial_scale, sampling_ratio = 0, aligned = TRUE, clockwise = FALSE ) nn_roi_align_rotated( output_size, spatial_scale, sampling_ratio = 0, aligned = TRUE, clockwise = FALSE )
input |
( |
rois |
( |
output_size |
(integer or integer vector): the output size |
spatial_scale |
(float): scaling factor mapping box coordinates to input
coordinates. For example, if boxes are defined on a 224x224 image and
|
sampling_ratio |
(int): number of sampling points per output bin. If |
aligned |
(bool): if |
clockwise |
(bool): if |
Tensor[K, C, output_height, output_width]: the pooled features, where
the r-th element corresponds to the r-th RoI in rois.
nn_roi_align_rotated(): The torch::nn_module() wrapper for ops_roi_align_rotated().
Other ops:
ops_box_iou_rotated(),
ops_ms_deform_attn(),
ops_nms()
if (torchvisionlib_is_installed()) { library(torch) input <- torch_randn(1, 3, 28, 28) # (batch_index, cx, cy, w, h, angle) with 0-based batch index rois <- torch_tensor(matrix(c(0, 14, 14, 10, 10, 0.5), ncol = 6)) ops_roi_align_rotated(input, rois, output_size = c(5, 5), spatial_scale = 1, sampling_ratio = 2) }if (torchvisionlib_is_installed()) { library(torch) input <- torch_randn(1, 3, 28, 28) # (batch_index, cx, cy, w, h, angle) with 0-based batch index rois <- torch_tensor(matrix(c(0, 14, 14, 10, 10, 0.5), ncol = 6)) ops_roi_align_rotated(input, rois, output_size = c(5, 5), spatial_scale = 1, sampling_ratio = 2) }
Checks if an installation of torchvisionlib was found.
Install additional libraries
torchvisionlib_is_installed() install_torchvisionlib(url = Sys.getenv("TORCHVISIONLIB_URL", unset = NA))torchvisionlib_is_installed() install_torchvisionlib(url = Sys.getenv("TORCHVISIONLIB_URL", unset = NA))
url |
Url for the binaries. Can also be the file path to the binaries. |
Read JPEG's directly into torch tensors
vision_read_jpeg(path)vision_read_jpeg(path)
path |
path to JPEG file |