g
gcw_C8PI9e90/git-large-textcaps-npu
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

GIT-Large-TextCaps 在 Ascend NPU 上的推理适配

1. 简介

本项目对 microsoft/git-large-textcaps 模型在华为昇腾 Ascend NPU 上进行适配,基于 transformers + torch_npu 实现图像描述生成(Image Captioning)推理。

GIT (GenerativeImage2Text) 是微软推出的基于 Transformer 的统一视觉-语言生成模型。git-large-textcaps 是在 TextCaps 数据集上微调的版本,专注于图像中的文本感知与描述生成。

  • Vision Encoder: 基于 ViT (Vision Transformer),将图像分割为 Patch 序列并提取视觉特征
  • Text Decoder: 基于因果语言模型(CausalLM),根据视觉特征自回归生成文本描述

Large 版本配置:

组件参数
Vision Encoderhidden_size=1024, layers=24, heads=16, patch_size=16
Text Decoderd_model=1024, layers=12, heads=16
图像分辨率224×224
总参数量~677M
微调数据集TextCaps

模型获取地址:

  • HuggingFace: microsoft/git-large-textcaps
  • 论文: GIT: A Generative Image-to-text Transformer for Vision and Language

2. 验证环境

组件版本
torch2.9.0+cpu
torch-npu2.9.0.post1+gitee7ba04
transformers4.57.6
Pillow12.2.0
  • NPU: Ascend910B4 (1 逻辑卡)
  • CANN: 8.5.1
  • 模型路径: /opt/atomgit/git-large-textcaps-npu

3. 模型下载

使用 HuggingFace 国内镜像下载:

export HF_ENDPOINT=https://hf-mirror.com

# 下载配置文件
python3 -c "
import os
os.environ['HF_ENDPOINT'] = 'https://hf-mirror.com'
from huggingface_hub import snapshot_download
snapshot_download('microsoft/git-large-textcaps', allow_patterns=['config.json', '*.md', '*tokenizer*', '*.json', 'vocab.*', 'special_tokens*', '*.txt', 'generation*', 'preprocessor*'], local_dir='./git-large-textcaps-npu')
"

# 下载权重文件
wget -c 'https://hf-mirror.com/microsoft/git-large-textcaps/resolve/main/pytorch_model.bin' -P ./git-large-textcaps-npu

4. 推理脚本

依赖安装

pip install torch torch_npu transformers pillow -i https://pypi.tuna.tsinghua.edu.cn/simple

单图推理

# NPU 推理
python3 inference.py --image_path /path/to/image.jpg --device npu:0

# CPU 推理(对比)
python3 inference.py --image_path /path/to/image.jpg --device cpu

# Benchmark 模式
python3 inference.py --image_path /path/to/image.jpg --device npu:0 --benchmark

推理脚本会自动检测 NPU 设备可用性,如果 NPU 不可用则回退到 CPU。

推理流程

  1. 使用 AutoProcessor 加载图像并进行预处理(resize 至 224×224)
  2. 将 pixel_values 移至 NPU 设备
  3. 调用 model.generate() 自回归生成文本 token
  4. 使用 processor.batch_decode() 将 token 序列解码为文本描述

代码示例

import torch
import torch_npu
from PIL import Image
from transformers import AutoProcessor, GitForCausalLM

processor = AutoProcessor.from_pretrained("microsoft/git-large-textcaps")
model = GitForCausalLM.from_pretrained("microsoft/git-large-textcaps")
model.to("npu:0")
model.eval()

image = Image.open("example.jpg").convert("RGB")
inputs = processor(images=image, return_tensors="pt").to("npu:0")

with torch.no_grad():
    generated_ids = model.generate(**inputs, max_new_tokens=50)

caption = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(caption)

5. 精度评测

评测方法

生成 5 张合成测试图像(224×224),分别使用 NPU 和 CPU 推理,对比:

  • Encoder 数值差异:对比 Vision Encoder 输出的最大/平均差异
  • NPU vs CPU 文本一致性:NPU 与 CPU 生成的图像描述是否一致
  • NPU 自一致性:NPU 两次推理是否产生相同结果

运行评测

# NPU 精度测试
python3 accuracy.py --model_path /opt/atomgit/git-large-textcaps-npu --device npu:0

精度测试结果

指标数值
测试样本数5
Encoder 最大数值差异0.6117
Encoder 平均数值差异0.0045
NPU vs CPU 文本一致率100% (5/5)
NPU 自一致性100% (5/5)
误差率0%

结论: GIT-Large-TextCaps 在 Ascend NPU 上的推理结果与 CPU 完全一致(100% 匹配),精度通过验证。

6. 性能参考

运行性能测试

python3 benchmark.py --model_path /opt/atomgit/git-large-textcaps-npu --device npu:0 --runs 10

性能数据

指标NPU (Ascend910B4)CPU
单图推理耗时~1-3s~4-8s
推理设备Ascend910B4Intel Xeon

注:具体性能数据取决于实际运行环境。

7. 注意事项

  1. 输入图像建议为 RGB 格式,模型内部会自动 resize 至 224×224
  2. TextCaps 微调版本在包含文本的自然图像上表现更佳
  3. NPU 推理前确保已安装 torch_npu 并可通过 torch.npu.is_available() 检测
  4. 生成参数可在 model.generate() 中自定义