Torchvision

Stars

PyTorch 官方计算机视觉库,提供主流视觉数据集、预训练模型、图像与视频变换以及高性能算子,是视觉训练和推理工作流中的核心基础设施。

PYTORCH VISION · TENSOR LAYOUT

让 JPEG 变换理解非连续批次

转置改变的是 Tensor 的 stride,不是它作为图像批次的合法性;变换内核应该处理这种布局差异,而不是把约束转嫁给调用方。

TRANSPOSED BATCH
3231616
shape is validstride is non-contiguous
BEFORE.view(-1, C, H, W)RuntimeError内存布局不兼容
AFTER.reshape(-1, C, H, W)6 × 3 × 16 × 16兼容时零复制,必要时物化
JPEG KERNEL
restore original shape[3, 2, 3, H′, W′]
合法输入

任意前导维不等于连续内存

`transforms.v2.JPEG` 支持形如 `[..., C, H, W]` 的任意前导批次维度,但内核使用 `view()` 展平批次轴;一旦输入由 transpose 等操作产生非连续布局,合法 Tensor 会在进入 JPEG 编码前直接报错。

算子语义

view 要求连续,reshape 保持逻辑顺序

Tensor 的逻辑形状与底层内存是否连续是两个维度。这里需要的是保持逻辑元素顺序的展平,而不是强制要求调用方先复制;`reshape()` 在布局兼容时仍返回视图,仅在必要时才物化连续副本,正好覆盖这条语义边界。

内核修复

仅在必要时物化连续布局

将 JPEG v2 内核的前导维展平从 `view()` 改为 `reshape()`,编码完成后继续恢复原始形状;同时用转置批次轴构造真实的非连续输入,并与其 contiguous 等价输入对照,锁定多前导维场景。

接口结果

JPEG 直接接受转置后的批次

非连续批次 Tensor 现在可以直接进入 JPEG 变换,无需用户手动调用 `.contiguous()`;原有连续输入仍沿零额外复制路径执行,接口承诺与 PyTorch 的 Tensor 布局语义重新一致。