多模态大模型intern-vl 1.5 里的PixelShuffle 上采样原理

目录

PixelShuffle 上采样原理

原理

数学公式

程序实现

解释

应用示例

在Intern-VL 1.5中的应用


PixelShuffle 上采样原理

PixelShuffle是一种用于上采样(即增加空间分辨率)的操作,主要用于图像超分辨率任务中。其核心思想是将通道维度的信息重新排列到空间维度,从而实现分辨率的提升。

原理

假设我们有一个输入张量,其形状为 (𝑁,𝐶×𝑟2,𝐻,𝑊),其中:

  • 𝑁 是批量大小。
  • 𝐶 是通道数。
  • 𝐻 和 𝑊 分别是高度和宽度。
  • 𝑟 是上采样因子。

PixelShuffle操作将这个张量重新排列为形状为 (𝑁,𝐶,𝐻×𝑟,𝑊×𝑟) 的张量。具体步骤如下:

  1. 将输入张量的通道数分解为 𝐶×𝑟2,然后将其视为形状为 (𝑁,𝐶,𝑟,𝑟,𝐻,𝑊) 的张量。
  2. 重新排列张量,使其形状变为 (𝑁,𝐶,𝐻×𝑟,𝑊×𝑟)。
数学公式

设输入张量为 𝑋,其形状为 (𝑁,𝐶×𝑟2,𝐻,𝑊)。PixelShuffle操作可以表示为: 𝑌𝑛,𝑐,ℎ×𝑟+𝑖,𝑤×𝑟+𝑗=𝑋𝑛,𝑐×𝑟2+𝑖×𝑟+𝑗,ℎ,𝑤 其中 0≤𝑖,𝑗<𝑟,0≤ℎ<𝐻,0≤𝑤<𝑊,0≤𝑐<𝐶。

程序实现

在PyTorch中,PixelShuffle已经被封装为一个简单的操作。以下是一个示例程序,展示如何使用PixelShuffle进行上采样:

import torch
import torch.nn as nn

# 定义输入张量
N, C, H, W = 1, 4, 2, 2  # 批量大小、通道数、高度、宽度
r = 2  # 上采样因子
input_tensor = torch.randn(N, C * r * r, H, W)

# 定义PixelShuffle层
pixel_shuffle = nn.PixelShuffle(r)

# 进行上采样
output_tensor = pixel_shuffle(input_tensor)

print("Input shape: ", input_tensor.shape)
print("Output shape: ", output_tensor.shape)

手动实现PixelShuffle,可以使用以下代码:

import torch

def pixel_shuffle(input_tensor, upscale_factor):
    N, C, H, W = input_tensor.size()
    r = upscale_factor
    assert C % (r * r) == 0, "通道数必须是上采样因子平方的整数倍"
    C //= (r * r)
    
    # 重新排列张量
    output_tensor = input_tensor.view(N, C, r, r, H, W)
    output_tensor = output_tensor.permute(0, 1, 4, 2, 5, 3).contiguous()
    output_tensor = output_tensor.view(N, C, H * r, W * r)
    
    return output_tensor

# 测试自定义实现
input_tensor = torch.randn(N, C * r * r, H, W)
output_tensor = pixel_shuffle(input_tensor, r)

print("Input shape: ", input_tensor.shape)
print("Output shape: ", output_tensor.shape)

解释

  1. 输入张量:形状为 (𝑁,𝐶×𝑟2,𝐻,𝑊)。
  2. 重新排列:使用view将输入张量重新排列为 (𝑁,𝐶,𝑟,𝑟,𝐻,𝑊)。
  3. 转置维度:使用permute将张量转置为 (𝑁,𝐶,𝐻,𝑟,𝑊,𝑟)。
  4. 调整形状:使用view将张量调整为目标形状 (𝑁,𝐶,𝐻×𝑟,𝑊×𝑟)。

应用示例

例如,对于一个448×448的输入图像,patch size为14,总共有32×32=1024个令牌。设置上采样系数 𝑟=2 后,该图像可以表示为256个令牌。

在Intern-VL 1.5中的应用

在Intern-VL 1.5模型中,PixelShuffle操作用于减少视觉令牌的数量,同时保持图像表示的完整性。这使得模型在处理高分辨率图像时更加高效。具体来说:

  1. 减少令牌数量:通过PixelShuffle操作,可以将图像表示的视觉令牌数量减少到原始数量的四分之一,从而提高计算效率。
  2. 支持高分辨率输入:即使在测试阶段图像瓦片的数量增加到40个(即4K分辨率),模型也能高效地处理高分辨率输入,实现对高分辨率图像的零样本适应性。
  3. 动态分辨率操作:使得Intern-VL 1.5能够灵活地处理不同尺寸和宽高比的图像,同时提高处理高分辨率图像时的计算效率。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

samoyan

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

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

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

打赏作者

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

抵扣说明:

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

余额充值