Skip to content

InternVL 架构与训练策略

InternVL 是上海 AI Lab 推出的视觉语言模型系列,以创新的动态分辨率处理、渐进式对齐训练和强大的 OCR/文档理解能力著称,在多项多模态基准测试中取得了领先成绩。

InternVL架构示意

架构设计

InternVL 的架构包含以下核心组件:

  1. InternViT:6B 参数的视觉编码器,支持动态分辨率输入
  2. MLP 投影层:将视觉特征映射到语言模型空间
  3. 语言模型:基于 InternLM2 的解码器

动态分辨率机制

InternVL 的动态分辨率处理是其核心创新:

python
class DynamicResolution:
    """InternVL 动态分辨率处理"""
    def __init__(self, max_tiles=12, tile_size=448):
        self.max_tiles = max_tiles
        self.tile_size = tile_size

    def find_best_resolution(self, orig_size):
        """找到最优的切分方案"""
        orig_width, orig_height = orig_size
        best_ratio = orig_width / orig_height
        best_tiles = 1
        best_diff = float('inf')

        for tiles in range(1, self.max_tiles + 1):
            for rows in range(1, tiles + 1):
                cols = tiles // rows
                if rows * cols != tiles:
                    continue
                ratio = cols / rows
                diff = abs(ratio - best_ratio)
                if diff < best_diff:
                    best_diff = diff
                    best_tiles = tiles
                    best_rows, best_cols = rows, cols

        return best_rows, best_cols

    def preprocess(self, image):
        rows, cols = self.find_best_resolution(image.size)
        target_w = cols * self.tile_size
        target_h = rows * self.tile_size
        image = image.resize((target_w, target_h))
        # 切分为 tiles
        tiles = []
        for i in range(rows):
            for j in range(cols):
                tile = image.crop((
                    j * self.tile_size, i * self.tile_size,
                    (j+1) * self.tile_size, (i+1) * self.tile_size
                ))
                tiles.append(tile)
        return tiles

渐进式对齐训练

InternVL 采用三阶段渐进式训练策略:

阶段一:视觉-语言对齐

  • 使用大规模图文对数据(约 10 亿对)
  • 冻结语言模型,训练视觉编码器和投影层
  • 建立基础的跨模态映射

阶段二:视觉指令微调

  • 使用多模态指令数据
  • 解冻所有参数联合训练
  • 增强多模态对话和推理能力

阶段三:特定任务精调

  • 针对OCR、文档理解等任务精调
  • 使用高质量领域数据

InternVL-2 的改进

InternVL-2 引入了更强的 InternViT-6B 视觉编码器,支持最多 40 个 tile 的动态分辨率,在 OCR 和文档理解任务上取得了显著提升。

核心能力

InternVL 在以下任务上表现突出:

  • OCR 与文档理解:支持高分辨率文档图像的文字识别和结构理解
  • 图表分析:理解数据图表并回答相关问题
  • 数学推理:结合视觉信息的数学问题求解
  • 多图理解:同时处理多张图像的对比分析

性能对比

模型参数量OCRBenchDocVQAMathVista
InternVL-2-8B8B82.391.658.3
InternVL-2-26B26B85.193.263.8
InternVL-2-76B76B87.294.567.5
GPT-4o-85.692.863.8

相关资源

最近更新