成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

英偉達NVLM多模態大模型細節和數據集 原創

發布于 2024-12-19 11:22
瀏覽
0收藏

前期筆者介紹了OCR-free的多模態大模型,可以參考:??【多模態&文檔智能】OCR-free感知多模態大模型技術鏈路及訓練數據細節??,其更偏向于訓練模型對于密集文本的感知能力。本文看一看英偉達出品的多模態大模型NVLM-1.0系列,雖然暫未開源,但該文章給出了NVLM的詳細細節,值得一讀。

NVLM-1.0方法

英偉達NVLM多模態大模型細節和數據集-AI.x社區

NVLM-1.0包括三種不同的架構:

  1. NVLM-D,一種解碼器架構;
  2. NVLM-X,一種基于交叉注意力(X-attention)的架構;
  3. NVLM-H,一種混合架構。

共享視覺路徑

所有NVLM模型共享一個視覺路徑。使用InternViT-6B-448px-V1-5作為默認的視覺編碼器,并在整個訓練階段保持其凍結狀態。該視覺編碼器以固定的448x448像素分辨率處理圖像,生成1024個輸出標記。采用動態高分辨率(DHR)方法來處理不同分辨率的圖像輸入。具體的如下圖,圖像被分割成最多6個瓦片(tile),每個瓦片對應448x448像素。然后,每個瓦片被送入InternViT-6B進行處理,生成1024個標記。這些標記通過下采樣操作減少到256個標記,這么做可以降低處理開銷。

英偉達NVLM多模態大模型細節和數據集-AI.x社區

英偉達NVLM多模態大模型細節和數據集-AI.x社區

上述兩張圖都是動態DHR的處理過程,圍繞圖像的預處理,包括歸一化、縮放、裁剪、根據寬高比動態處理等操作,構建了一套完整的流程,代碼邏輯如下:

import torch
from PIL import Image
import torchvision.transforms as T
from torchvision.transforms.functional import InterpolationMode

IMAGENET_MEAN = (0.485, 0.456, 0.406)
IMAGENET_STD = (0.229, 0.224, 0.225)


def build_transform(input_size):
    MEAN, STD = IMAGENET_MEAN, IMAGENET_STD
    transform = T.Compose([
        T.Lambda(lambda img: img.convert('RGB') if img.mode != 'RGB'else img),
        T.Resize((input_size, input_size), interpolatinotallow=InterpolationMode.BICUBIC),
        T.ToTensor(),
        T.Normalize(mean=MEAN, std=STD)
    ])
    return transform


def find_closest_aspect_ratio(aspect_ratio, target_ratios, width, height, image_size):
    best_ratio_diff = float('inf')
    best_ratio = (1, 1)
    area = width * height
    for ratio in target_ratios:
        target_aspect_ratio = ratio[0] / ratio[1]
        ratio_diff = abs(aspect_ratio - target_aspect_ratio)
        if ratio_diff < best_ratio_diff:
            best_ratio_diff = ratio_diff
            best_ratio = ratio
        elif ratio_diff == best_ratio_diff:
            if area > 0.5 * image_size * image_size * ratio[0] * ratio[1]:
                best_ratio = ratio
    return best_ratio


def dynamic_preprocess(image, min_num=1, max_num=6, image_size=448, use_thumbnail=True):
    orig_width, orig_height = image.size
    aspect_ratio = orig_width / orig_height

    target_ratios = set(
        (i, j) for n in range(min_num, max_num + 1) for i in range(1, n + 1) for j in range(1, n + 1) if
        i * j <= max_num and i * j >= min_num)
    target_ratios = sorted(target_ratios, key=lambda x: x[0] * x[1])

    target_aspect_ratio = find_closest_aspect_ratio(
        aspect_ratio, target_ratios, orig_width, orig_height, image_size)

    target_width = image_size * target_aspect_ratio[0]
    target_height = image_size * target_aspect_ratio[1]
    blocks = target_aspect_ratio[0] * target_aspect_ratio[1]

    resized_img = image.resize((target_width, target_height))
    processed_images = []
    for i in range(blocks):
        box = (
            (i % (target_width // image_size)) * image_size,
            (i // (target_width // image_size)) * image_size,
            ((i % (target_width // image_size)) + 1) * image_size,
            ((i // (target_width // image_size)) + 1) * image_size
        )
        split_img = resized_img.crop(box)
        processed_images.append(split_img)
    assert len(processed_images) == blocks
    if use_thumbnail and len(processed_images) != 1:
        thumbnail_img = image.resize((image_size, image_size))
        processed_images.append(thumbnail_img)
    return processed_images


def load_image(image_file, input_size=448, max_num=6):
    image = Image.open(image_file).convert('RGB')
    transform = build_transform(input_size=input_size)
    images = dynamic_preprocess(image, image_size=input_size, use_thumbnail=True, max_num=max_num)
    pixel_values = [transform(image) for image in images]
    pixel_values = torch.stack(pixel_values)
    return pixel_values

文中引入了三種tile標簽:

  • 無標簽:簡單連接,沒有tile標簽,這是InternVL-1.5的設計。
  • 一維扁平化tile tag:<tile_1>、<tile_2>、...、<tile_6>、<tile_global>。
  • 二維網格tag:<tile_x0_y0>、<tile_x1_y0>、...、<tile_xW_yH>、<tile_global>,其中<tile_xi_yj>的{i:j}可以是{1:1, 1:2, 1:3, 1:4, 1:5, 1:6, 2:1, 2:2, 2:3, 3:1, 3:2, 4:1, 5:1, 6:1}中的任何一個。
  • 二維邊界框標簽: (x0, y0), (x1, y1) 、...、 (xW, yH), (xW+1, yH+1) ,其中(xi, yj)和(xi+1, yj+1)分別是整個高分辨率圖像中該特定tile的(左、上)和(右、下)坐標。

實驗可以看到,其中DHR + 1-D tag取得了最佳的性能。

英偉達NVLM多模態大模型細節和數據集-AI.x社區

英偉達NVLM多模態大模型細節和數據集-AI.x社區

NVLM-D: 解碼器架構

NVLM-D模型類似于之前的解碼器架構多模態LLMs(如:)。通過一個兩層MLP將預訓練的視覺編碼器連接到LLM。訓練NVLM-D涉及兩個階段:預訓練和SFT。在預訓練階段,MLP需要先進行訓練,同時保持視覺編碼器和LLM主干凍結。在SFT階段,MLP和LLM都被訓練以學習新的視覺-語言任務,而視覺編碼器保持凍結狀態。為了防止LLM在多模態SFT訓練期間退化文本性能,引入了一個高質量的文本SFT數據集。

NVLM-X: 基于X-attention的模型

NVLM-X使用門控交叉注意力來處理圖像token。與Flamingo模型不同,NVLM-X不使用感知重采樣器,而是直接通過交叉注意力層處理圖像標記。在SFT階段,解凍LLM主干,并混合高質量文本SFT數據集以保持強大的文本性能。

NVLM-H: 混合模型

NVLM-H結合了解碼器架構和基于X-attention的架構的優點。將圖像token分為兩部分:縮略圖token和常規瓦片token。縮略圖標記通過自注意力層處理,而常規瓦片標記通過交叉注意力層處理。這種設計提高了高分辨率圖像的處理能力,同時顯著提高了計算效率。

模型配置和訓練方法

所有NVLM模型的訓練過程包括兩個階段:預訓練和監督微調(SFT)。在預訓練階段,凍結LLM主干和視覺編碼器,只訓練模態對齊模塊。在SFT階段,保持視覺編碼器凍結,同時訓練LLM和模態對齊模塊。

LLM和視覺模型選擇

  • LLM:對于NVLM-D、NVLM-X和NVLM-H 72B模型,使用Qwen2-72B-Instruct作為LLM。為了計算效率,還使用了較小的Nous-Hermes-2-Yi-34B進行更快的消融研究和實驗。
  • 視覺編碼器:所有NVLM模型都使用InternViT-6B-448px-V1-5作為視覺編碼器。

模態對齊模塊

  • NVLM-D: 使用兩層MLP將視覺編碼器和背景語言模型連接起來。隱藏維度為12800→20480→7168(34B模型)和12800→29568→8192(72B模型)。
  • NVLM-X: 圖像特征首先通過一層MLP投影到背景語言模型的隱藏維度,然后插入門控X-attention層。具體配置為12800→7168(34B模型)和12800→8192(72B模型)。
  • NVLM-H: 使用兩層MLP和X-attention層作為模態對齊模塊。縮略圖圖像標記直接輸入到背景語言模型解碼器中,而常規圖像塊則通過X-attention層進行處理。

訓練超參數

  • 預訓練階段

英偉達NVLM多模態大模型細節和數據集-AI.x社區

  • SFT階段

英偉達NVLM多模態大模型細節和數據集-AI.x社區

訓練數據

  • 預訓練數據集

英偉達NVLM多模態大模型細節和數據集-AI.x社區

  • SFT數據集

英偉達NVLM多模態大模型細節和數據集-AI.x社區

  • 文本SFT數據集
    包括ShareGPT、SlimOrca、EvolInstruct、GPTeacher、AlpacaGPT4、UltraInteract、OrcaMathWordProblems、MathInstruct、MetaMath、GlaiveCodeAssistant、Magicoder、WizardCoder、GlaiveCodeAssistant等。并使用OpenAI模型GPT-4o和GPT-4o-mini進一步優化響應質量,并進行數據去污染,確保不包含基準測試數據集中的提示。
  • SFT數據構建格式

英偉達NVLM多模態大模型細節和數據集-AI.x社區

  • 預訓練中使用的各種任務的訓練格式示例。綠色< image >tag表示插入視覺特征的位置。藍色文本代表與損失相關的真實值。
  • 英偉達NVLM多模態大模型細節和數據集-AI.x社區

  • SFT中使用的ChatML模板示例。綠色< image >標簽指示插入視覺特征的位置。藍色文本代表與損失相關的真實值。
  • 實驗結果

    重點關注多模態推理、視覺上下文中的數學推理、自然圖像理解、場景-文本閱讀、圖表理解、文檔理解、現實世界感知和OCR能力。

    英偉達NVLM多模態大模型細節和數據集-AI.x社區

    英偉達NVLM多模態大模型細節和數據集-AI.x社區

    英偉達NVLM多模態大模型細節和數據集-AI.x社區

    參考文獻

    • NVLM: Open Frontier-Class Multimodal LLMs,https://arxiv.org/pdf/2409.11402


    本文轉載自公眾號大模型自然語言處理  作者:余俊暉

    原文鏈接:??https://mp.weixin.qq.com/s/QtawR9aG-ABO8cZ67KlVvA??

    ?著作權歸作者所有,如需轉載,請注明出處,否則將追究法律責任
    收藏
    回復
    舉報
    回復
    相關推薦
    主站蜘蛛池模板: 亚洲精品天堂 | 日韩精品视频中文字幕 | 视频二区 | 涩涩视频在线观看 | 国产精品久久精品 | 国产精品美女久久久久aⅴ国产馆 | 四虎国产 | 精品国产一区二区三区久久久四川 | 99精品在线| 正在播放国产精品 | 精品国产免费人成在线观看 | 国产一级片网站 | 免费xxxx大片国产在线 | 精品久久久久久 | 国产精品成人国产乱一区 | 国产999精品久久久 日本视频一区二区三区 | 欧美日韩精品中文字幕 | 日韩一区二区av | 欧美一区二区免费 | 99在线精品视频 | 精品国产91乱码一区二区三区 | 天天干国产 | 色噜噜狠狠色综合中国 | 午夜影院在线观看 | 国产一区二区不卡 | 男女激情网 | 欧美videosex性极品hd | 国产精品99久久久久久www | 久草新在线 | 五月综合色啪 | 亚洲精品久久久久中文字幕欢迎你 | 一区二区三区视频免费看 | 国产日韩欧美在线播放 | 精品国产1区2区3区 在线国产视频 | a级在线免费视频 | 久久久91精品国产一区二区三区 | 天天澡天天狠天天天做 | 永久网站 | 久久99精品久久久久久 | 欧美激情在线一区二区三区 | 97人人超碰|