关于F.grid_sample和F.affine_grid函数的介绍

本文介绍了如何使用PyTorch中的F.affine_grid和F.grid_sample函数实现图片的仿射变换,包括Locaisationnet生成的仿射变换参数应用和图片扭曲过程。通过李宏毅老师的讲解,读者能理解并实践SpatialTransformerNetwork的基本原理。
Qwen3-32B-Chat 私有部署镜像 | RTX4090D 24G 显存 CUDA12.4 优化版

本镜像基于 RTX 4090D 24GB 显存 + CUDA 12.4 + 驱动 550.90.07 深度优化,内置完整运行环境与 Qwen3-32B 模型依赖,开箱即用。

最近刚刚看了“Spatial Transformer Network“这篇论文和李宏毅老师的相关视频,正好简单整理一下F.grid_sample和F.affine_grid这一对函数操作。

F.affine_grid函数是根据仿射变换矩阵,生成该变换相对应的逐像素偏移矩阵;

F.grid_sample函数则是根据这个偏移矩阵将原始图片逐像素扭曲warp到目标位置处形成一个新的图片。

这里引入一个小的知识点:

Spatial Transformer Network
在这里插入图片描述
具体可以参考“Spatial Transformer Network“这篇论文,以及李宏毅老师的视频讲解更加容易理解。(李宏毅老师yyds)

论文下载:https://proceedings.neurips.cc//paper/2015/file/33ceb07bf4eeb3da587e268d663aba1a-Paper.pdf

李宏毅老师主页:https://speech.ee.ntu.edu.tw/~hylee/
在这里插入图片描述
①Locaisation net

输入图片经过Locaisation net网络生成一个仿射变换参数

②Grid generator(坐标)

根据这个仿射变换参数得到输入图片与输出图片间的坐标映射关系

③Sampler(像素值)

通过目标坐标,从输入图片中采样对应的像素值填充到目标坐标系中,为了防止梯度消失,一般采用双线性插值法
在这里插入图片描述
言归正传:

下面利用python写一段小程序将图片逆时针旋转45°

from PIL import Image
import torch
import torch.nn.functional as F
from torchvision.transforms import ToTensor, ToPILImage

def pil_loader(path):
    with open(path, 'rb') as f:
        with Image.open(f) as img:
            return img.convert('RGB')

img = pil_loader('1.jpg')
img.show()

img = ToTensor()(img).unsqueeze(0)  # img→tensor 3维→4维

M = torch.tensor(                   # 仿射变换矩阵
    [[[0.7071, -0.7071, 0],
      [0.7071, 0.7071, 0]]]
)
grid = F.affine_grid(M, size=(1, 3, 500, 500))
warp_img = F.grid_sample(img, grid)             # 扭转图片
tensor_to_pil = ToPILImage()                    # tensor→img
tensor_to_pil(warp_img.data.squeeze(0)).show()  # 4维→3维

输出结果:
在这里插入图片描述

这里一定要注意维度的对应!!!!!!!!

中间有关于show()不能显示图片的问题。
Python中的PIL的img.show()函数不能显示图像

运行结果没有报错,但是不能显示图片,原因是由于没有设置默认打开图片的软件。

解决办法:搜索画图软件(或者浏览器),将其设置为默认打开jpg或bmp等类型图片的软件,即可。

待更新…

您可能感兴趣的与本文相关的镜像

Qwen3-32B-Chat 私有部署镜像 | RTX4090D 24G 显存 CUDA12.4 优化版

Qwen3-32B-Chat 私有部署镜像 | RTX4090D 24G 显存 CUDA12.4 优化版

Qwen
文本生成
Qwen3

本镜像基于 RTX 4090D 24GB 显存 + CUDA 12.4 + 驱动 550.90.07 深度优化,内置完整运行环境与 Qwen3-32B 模型依赖,开箱即用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个吃吃喝喝不务正业GirL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值