ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AnyRes 任意长宽比图像动态分块与空间坐标注入:打破 ViT 固定正方形分辨率枷锁

AnyRes 任意长宽比图像动态分块与空间坐标注入:打破 ViT 固定正方形分辨率枷锁 在多模态大语言模型MLLM早期探索中视觉编码器普遍继承了经典视觉自监督如 CLIP ViT的设计范式——强制将所有输入图像裁剪或拉伸至固定的正方形分辨率例如 $224 \times 224$ 或 $336 \times 336$。然而在面对真实的工业级视觉文档、高分辨率网页截屏、超宽幅财务报表以及极端长宽比如 $1:5$ 或 $16:1$的条形全景图时这种粗暴的正方形假定带来了灾难性的信息损毁。强行将非正方形图像等比例压缩为正方形会引发几何各向异性畸变导致密集字符被挤压变形而不可读而若采用补零填充Zero-Padding又会将过半的计算与显存开销浪费在纯黑的无效像素上。为了彻底打破这一枷锁AnyResAny Resolution动态分块机制应运而生。通过在几何空间上动态求解最优网格切分并结合二维空间拓扑坐标注入AnyRes 实现了高保真、零畸变、全长宽比自适应的跨模态输入对齐。固定分辨率的几何原罪与信息坍缩在标准 ViT 处理流程中图像被划分为 $14 \times 14$ 或 $16 \times 16$ 像素的固定大小 Patch。设输入分辨率为 $H \times W$Patch 边长为 $P$则生成的视觉 Token 总数为$$N_{\text{tokens}} \frac{H}{P} \times \frac{W}{P}$$当一张原本分辨率为 $1920 \times 480$长宽比 $4:1$的复杂表格被强行缩放至 $336 \times 336$ 时各向异性畸变Anisotropic Distortion水平方向被压缩了 $5.7$ 倍而垂直方向仅压缩了 $1.4$ 倍。原本正方形的字符被挤压成长条状字符笔画高度重叠卷积或注意力层无法提取稳定的边缘特征。高频 Nyquist 采样失真密集文档中的英文单词或汉字字号通常只有数十个像素。一旦整体缩小高频细节直接越过采样下限在特征图中彻底湮灭为不可逆的模糊噪点。原始长图 (1920x480, 4:1) ──► 强行挤压至 (336x336) ──► 字符挤压变形、高频信息归零 │ ▼ (AnyRes 动态网格方案) 自适应拆解为 4 个连续局部块 [Block 1][Block 2][Block 3][Block 4] (每个 336x336 原生提取) 全局缩略图 (336x336 Overview) 提供全局宏观视野AnyRes 动态网格求解机制AnyRes 的核心设计哲学是永远不强行改变局部的原始物理比例而是将整幅大图自适应地铺展在动态离散网格上。1. 预设网格拓扑候选集Grid Candidates系统预先定义一个受硬件计算预算约束的合法网格拓扑集合 $\mathcal{G}$。设单图允许的最大局部块数为 $N_{\max}$通常在现代架构中设为 4 或 6$$\mathcal{G} {(m, n) \in \mathbb{N}^ \times \mathbb{N}^ \mid m \times n \le N_{\max}}$$例如当 $N_{\max} 4$ 时合法候选集包含${(1, 1), (1, 2), (2, 1), (1, 3), (3, 1), (1, 4), (4, 1), (2, 2)}$。2. 最优宽高比与尺度失真最小化给定输入图像的原始物理尺寸 $(W, H)$定义其原始长宽比为 $R \frac{W}{H}$。为了找到最贴合当前图像的网格 $(m^, n^)$算法在候选集中联合优化长宽比偏差与像素缩放惩罚$$(m^, n^) \arg\min_{(m, n) \in \mathcal{G}} \left( \left| \ln\left(\frac{m}{n}\right) - \ln\left(\frac{W}{H}\right) \right| \lambda \cdot \left| \frac{W \cdot H}{m \cdot n \cdot S^2} - 1.0 \right| \right)$$其中 $S$ 为基础 ViT 的原生输入边长如 336 像素。这一对数优化目标确保了所选网格在最大程度逼近原始长宽比的同时尽量保证局部块的有效利用率杜绝不必要的插值模糊。3. 双流特征聚合Dual-stream Fusion选定最优网格 $(m^, n^)$ 后图像处理分为两条并行的特征流局部微观流High-res Patch Stream将图像等比例缩放至 $(m^* \cdot S, n^* \cdot S)$无缝切分为 $m^* \times n^*$ 个大小严格为 $S \times S$ 的子图像分别送入 ViT 提取高分辨率局部特征。全局宏观流Overview Thumbnail Stream无论原图长宽比如何将整张图像通过双三次插值直接生成一张 $S \times S$ 的全局缩略图同样送入 ViT 提取全局上下文。全局流为模型提供了整幅画面的宏观布局与视线导引而局部流则为模型提供了清晰可辨的微观像素证据。空间坐标与换行分隔符注入局部图像块被 ViT 独立编码为 Token 序列后如果直接展平拼接并送入自回归语言模型模型将面临严重的空间拓扑感知断裂。因为一维序列无法直接表达二维平面上的垂直邻接关系。为了恢复图像的二维几何图景现代 AnyRes 架构引入了两项空间显式锚定机制1. 结构化换行符 Tokennewline_token在由 $m^$ 行、$n^$ 列构成的局部块网格中当第 $i$ 行的所有切块 Token 序列发射完毕后显式插入一个特殊的跨模态换行符$$\text{Sequence} \dots [\text{Block}{i, n^*} \text{ Tokens}] \longrightarrow [\text{Token}{\text{newline}}] \longrightarrow [\text{Block}_{i1, 1} \text{ Tokens}] \dots$$这从序列语法上严格对齐了语言模型对“段落/行”的自回归注意力偏置使模型能够建立从上至下的扫视习惯。2. 二维相对网格偏置注入将每个局部块在全局网格中的归一化坐标 $(u, v) \left(\frac{x}{m^}, \frac{y}{n^}\right)$通过小型 MLP 投射为连续的位置嵌入直接累加至模态投影层输出的隐藏向量中$$\tilde{h}{i, j} \text{MLP}{\text{proj}}(v_{i, j}) \text{MLP}_{\text{coord}}\left(\frac{i}{m^}, \frac{j}{n^}\right)$$# AnyRes 最优网格求解与动态切块核心实现 import math from typing import List, Tuple from PIL import Image class AnyResImageProcessor: def __init__(self, base_size: int 336, max_patches: int 4): self.base_size base_size self.max_patches max_patches # 构造全部合法的长宽比网格拓扑 self.candidate_grids [] for m in range(1, max_patches 1): for n in range(1, max_patches 1): if m * n max_patches: self.candidate_grids.append((m, n)) def find_best_grid(self, original_width: int, original_height: int) - Tuple[int, int]: orig_ratio original_width / original_height best_grid (1, 1) min_loss float(inf) for (m, n) in self.candidate_grids: grid_ratio m / n # 计算长宽比对数误差与面积利用率误差 ratio_loss abs(math.log(grid_ratio) - math.log(orig_ratio)) target_area m * n * (self.base_size ** 2) orig_area original_width * original_height scale_loss abs(math.log(target_area) - math.log(orig_area)) * 0.1 total_loss ratio_loss scale_loss if total_loss min_loss: min_loss total_loss best_grid (m, n) return best_grid def process_image(self, image: Image.Image) - Tuple[List[Image.Image], Image.Image, Tuple[int, int]]: w, h image.size m, n self.find_best_grid(w, h) # 1. 生成全局缩略图 overview image.resize((self.base_size, self.base_size), Image.Resampling.BICUBIC) # 2. 生成局部高分辨率切块 target_w m * self.base_size target_h n * self.base_size resized_img image.resize((target_w, target_h), Image.Resampling.BICUBIC) patches [] for j in range(n): for i in range(m): box (i * self.base_size, j * self.base_size, (i 1) * self.base_size, (j 1) * self.base_size) patch resized_img.crop(box) patches.append(patch) return patches, overview, (m, n)工业级基准实测与精度飞跃在权威密集视觉与文档图表理解基准上对比固定分辨率基线与开启 AnyRes 动态切分$N_{\max}4$后的实测表现评估基准数据集固定 336x336 基线固定 448x448 基线AnyRes 动态网格分块性能绝对提升DocVQA (文档精准问答)68.4%73.1%89.2%20.8%ChartQA (复杂图表推理)61.2%65.8%79.5%18.3%OCRBench (综合字符辨识)520 分585 分745 分225 分InfoVQA (极端条幅信息图)42.1%47.5%68.7%26.6%实验数据呈现出压倒性的代际跨越在高度依赖细小字体与密集排版的DocVQA与ChartQA上AnyRes 实现了约 20 个百分点的断崖式领先。对于极端长宽比的InfoVQA条幅图传统固定分辨率由于几何挤压导致近六成信息直接丢失而 AnyRes 准确率直接跃升至 68.7%。总结视觉模态与语言模态的对齐绝非单纯的矩阵相乘而是两种完全不同的物理信息维度的融合。AnyRes 机制深刻尊重了图像空间固有的各向异性与几何真实性。通过将离散的动态网格求解、高低频双流聚合以及二维拓扑坐标注入三者融为一体AnyRes 成功拆除了束缚在视觉语言大模型头顶的固定分辨率枷锁为多模态模型真正走向复杂的工业现实世界铺平了平坦的道路。
返回列表