前途科技
  • 科技
  • AI
    • AI 前沿技术
    • Agent生态
    • AI应用场景
    • AI 行业应用
  • 初创
  • 报告
  • 学习中心
    • 编程与工具
    • 数据科学与工程
我的兴趣
前途科技前途科技
Font ResizerAa
站内搜索
Have an existing account? Sign In
Follow US
Copyright © 2024 AccessPath.com, 前途国际科技咨询(北京)有限公司,版权所有。 | 京ICP备17045010号-1 | 京公网安备 11010502033860号
计算机视觉

基于Transformer的四大计算机视觉核心任务交互式指南

NEXTECH
Last updated: 2025年9月22日 上午9:59
By NEXTECH
Share
91 Min Read
SHARE

什么是计算机视觉与视觉模型?

计算机视觉是人工智能的一个子领域,涵盖了图像处理与理解的广泛应用领域。传统上,这一领域主要通过卷积神经网络(CNNs)来解决,但Transformer架构的出现彻底改变了它的面貌。尽管Transformer因其在语言处理中的应用而闻名,但它能有效地适配并成为许多视觉模型的骨干。本文将深入探讨最先进的视觉模型和多模态模型,例如ViT(视觉Transformer)、DETR(检测Transformer)、BLIP(自举语言-图像预训练)和ViLT(视觉语言Transformer)。这些模型专精于各种计算机视觉任务,包括图像分类、图像分割、图像到文本转换和视觉问答。这些任务拥有丰富的现实世界应用,从大规模图像标注、医学图像中的异常检测,到从文档中提取文本以及根据视觉数据生成文本响应,都发挥着关键作用。

Contents
什么是计算机视觉与视觉模型?四大核心计算机视觉任务解析端到端计算机视觉应用开发总结

与CNN的比较

在基础模型广泛应用之前,CNNs是大多数计算机视觉任务的主导解决方案。简而言之,CNNs形成了由特征图、池化层、线性层和全连接层组成的层次化深度学习架构。相比之下,视觉Transformer利用自注意力机制,允许图像块之间相互关注。它们还具有较少的归纳偏置,这意味着它们受特定模型假设的约束不如CNNs,但因此需要显著更多的训练数据才能在通用任务上获得强大的性能。

与LLM的比较

基于Transformer的视觉模型借鉴了大型语言模型(LLMs)所使用的架构,并额外添加了将图像数据转换为数值嵌入的层。在自然语言处理任务中,文本序列在被Transformer编码器处理之前,会经历分词和嵌入过程。类似地,图像/视觉数据在馈入视觉Transformer编码器之前,也要经过分块、位置编码和图像嵌入等步骤。在本文中,将进一步探讨视觉Transformer及其变体如何基于Transformer骨干架构构建,并将能力从语言处理扩展到图像理解和图像生成。

向多模态模型的扩展

You Might Also Like

PaddleOCR-VL多模态文档解析方案发布:0.9B参数问鼎SOTA,突破文档极限
超越肉眼极限:利用CNN与Vision Transformer实现高精度花粉视觉分类
天猫行业中后台前端研发Agent设计:AI提效与范式变革实践
经典计算机视觉与透视变换:高效提取数独网格的秘密

视觉模型的进步推动了开发能够同时处理图像和文本数据的多模态模型的兴趣。视觉模型侧重于图像数据到数值表示的单向转换,通常为分类或对象检测(即图像分类和图像分割任务)生成基于分数的输出;而多模态模型则需要不同数据类型之间的双向处理和整合。例如,图像-文本多模态模型可以根据图像输入生成连贯的文本序列,用于图像字幕生成和视觉问答任务。

四大核心计算机视觉任务解析

0. 项目概览

本文将深入探讨这四项核心计算机视觉任务的细节,以及各自专精的Transformer模型。这些模型主要在编码器和解码器架构上有所不同,这赋予了它们在解释、处理和跨不同文本或视觉模态进行转换的独特能力。

图像 1
为了提升本指南的互动性,文中设计了一个 Streamlit Web 应用,用于展示和比较这些计算机视觉任务和模型的输出结果。本文将在末尾介绍端到端应用开发过程。

以下是基于上传图片的部分输出预览,显示了任务名称、输出、运行时间、模型名称、模型类型,通过运行Hugging Face管道中的默认模型获得。

图像 2: Streamlit 计算机视觉任务 Web 应用

1. 图像分类

图像 3: 图像分类
首先介绍图像分类——一项基础的计算机视觉任务,旨在将图像分配到一组预定义的标签中,这可以通过基本的视觉Transformer来实现。

ViT(视觉Transformer)

图像 4: ViT 模型架构
视觉Transformer(ViT)是本文中介绍的许多计算机视觉模型的基石。通过其仅编码器的Transformer架构,ViT在图像分类任务上持续超越CNN。它处理图像输入并输出候选标签的概率分数。由于图像分类纯粹是一个图像理解任务,不涉及生成要求,因此ViT的仅编码器架构非常适合此目的。

ViT架构由以下组件组成:

  • 分块(Patching):将输入图像分解成小的、固定大小的像素块(通常每个块为16×16像素),以便为后续处理保留局部特征。
  • 嵌入(Embedding):将图像块转换为数值表示,也称为向量嵌入,使得具有相似特征的图像在向量空间中被投影为距离更近的嵌入。
  • 分类Token(CLS):从所有图像块中提取并聚合信息到一个数值表示中,使其在分类方面特别有效。
  • 位置编码(Position Encoding):保留原始图像像素的相对位置。CLS token始终位于位置0。
  • Transformer编码器:通过多头注意力层和前馈网络处理嵌入。

ViT背后的机制使其在捕获全局依赖性方面表现出高效率,而CNN主要通过卷积核进行局部处理。另一方面,ViT的缺点是需要大量的训练数据(通常是数百万张图像)才能迭代调整注意力层中的模型参数,从而实现强大的性能。

实现

Hugging Face管道通过抽象底层的图像处理步骤,极大地简化了图像分类任务的实现。

from transformers import pipeline
from PIL import Image

image = Image.open(image_url)
pipe = pipeline(task="image-classification", model=model_id)
output = pipe(image=image)
  • 输入参数:

    • model:可以选择自己的模型,或者在未指定model参数时使用默认模型(例如“google/vit-base-patch16-224”)。
    • task:提供任务名称(例如“image-classification”、“image-segmentation”)。
    • image:通过URL或图像文件路径提供图像对象。
  • 输出:模型为候选标签生成分数。

文章比较了默认图像分类模型“google/vit-base-patch16-224”在两张构图相似但背景不同的图像上的结果。可以看出,尽管两张图像都包含相同的主要物体,但这个基线模型很容易混淆,产生了显著不同的输出(“espresso”与“microwave”)。

“咖啡杯”图像输出

图像 5

[
  { "label": "espresso", "score": 0.40687331557273865 },
  { "label": "cup", "score": 0.2804579734802246 },
  { "label": "coffee mug", "score": 0.17347976565361023 },
  { "label": "desk", "score": 0.01198530849069357 },
  { "label": "eggnog", "score": 0.00782513152807951 }
]

“带背景的咖啡杯”图像输出

图像 6

[
  { "label": "microwave, microwave oven", "score": 0.20218633115291595 },
  { "label": "dining table, board", "score": 0.14855517446994781 },
  { "label": "stove", "score": 0.1345038264989853 },
  { "label": "sliding door", "score": 0.10262308269739151 },
  { "label": "shoji", "score": 0.07306522130966187 }
]

读者可以尝试使用 Streamlit Web 应用来体验不同的模型,看看是否能生成更好的结果。

2. 图像分割

图像 7: 图像分割
图像分割是另一个常见的计算机视觉任务,需要视觉专属模型。其目标与目标检测相似,但要求在像素级别上具有更高的精度,生成物体边界的掩码,而非像目标检测那样绘制边界框。

图像分割主要有三种类型:

  • 语义分割:为每个对象类别预测一个掩码。
  • 实例分割:为每个对象实例预测一个掩码。
  • 全景分割:结合实例分割和语义分割,为每个像素分配一个对象类别和一个该类别的实例。

DETR(检测Transformer)

图像 8: DETR 模型架构
尽管DETR广泛用于目标检测,但通过添加一个分割掩码头,它可以扩展执行全景分割任务。如图所示,它利用编码器-解码器Transformer架构,并结合CNN骨干网络进行特征图提取。DETR模型学习一组对象查询,并经过训练预测这些查询的边界框,随后通过一个掩码预测头执行精确的像素级分割。

Mask2Former

Mask2Former也是图像分割任务的常见选择。由Facebook AI Research开发,Mask2Former通常在精度和计算效率方面优于DETR模型。它通过应用蒙版注意力机制而非全局交叉注意力来实现这一点,从而专门关注图像中的前景信息和主要对象。

实现

管道实现方式与图像分类类似,只需将任务参数更改为“image-segmentation”即可。为了处理输出,提取对象标签和掩码,然后使用st.image()显示蒙版图像。

from transformers import pipeline
from PIL import Image
import streamlit as st

image = Image.open(image_url)
pipe = pipeline(task="image-segmentation", model=model_id)
output = pipe(image=image)

output_labels = [i['label'] for i in output]
output_masks = [i['mask'] for i in output]

for m in output_masks:
        st.image(m)

DETR(“facebook/detr-resnet-50-panoptic”)和Mask2Former(“facebook/mask2former-swin-base-coco-panoptic”)都经过全景分割微调,对它们的性能进行了对比。在分割输出中显示,DETR和Mask2Former都成功识别并提取了“杯子”和“餐桌”。Mask2Former以更快的速度进行推理(2.47秒,而DETR为6.3秒),并且还设法从背景中识别出“窗户-其他”。

DETR “facebook/detr-resnet-50-panoptic” 输出

[
    {
        'score': 0.994395, 
        'label': 'dining table', 
        'mask': <PIL.Image.Image image mode=L size=996x886 at 0x7FAEA068D130>
    }, 
    {
        'score': 0.999692, 
        'label': 'cup', 
        'mask': <PIL.Image.Image image mode=L size=996x886 at 0x7FAEA0657290>
    }
]

图像 9
Mask2Former “facebook/mask2former-swin-base-coco-panoptic” 输出

[
    {
        'score': 0.999554, 
        'label': 'cup', 
        'mask': <PIL.Image.Image image mode=L size=996x886 at 0x7FAEAC25BF80>
    }, 
    {
        'score': 0.971946, 
        'label': 'dining table', 
        'mask': <PIL.Image.Image image mode=L size=996x886 at 0x7FAEA6907EF0>
    }, 
    {
        'score': 0.983782, 
        'label': 'window-other', 
        'mask': <PIL.Image.Image image mode=L size=996x886 at 0x7FAF22942B40>
    }
]

图像 10

3. 图像字幕生成

图像 11
图像字幕生成(又称图像到文本)将图像转换为描述图像内容的文本序列。这项任务需要图像理解和文本生成两方面的能力,因此非常适合能够同时处理图像和文本数据的多模态模型。

视觉编码器-解码器模型

视觉编码器-解码器是一种多模态架构,它将用于图像理解的视觉模型与预训练的语言模型结合起来,以进行文本生成。一个常见的例子是ViT-GPT2,它将视觉Transformer(在第1节“图像分类”中介绍)作为视觉编码器,并将GPT-2模型作为解码器,以执行自回归文本生成。

BLIP(自举语言-图像预训练)

图像 12
BLIP由Salesforce Research开发,利用了四个核心模块:一个图像编码器、一个文本编码器,随后是一个通过注意力机制融合视觉和文本特征的图像-文本联合编码器,以及一个用于文本序列生成的图像-文本联合解码器。预训练过程涉及最小化图像-文本对比损失、图像-文本匹配损失和语言建模损失,目标是校准视觉信息与文本序列之间的语义关系。它在应用中提供了更高的灵活性,可用于视觉问答(VQA),但同时也增加了架构设计的复杂性。

实现

以下代码片段用于生成图像字幕管道的输出。

from transformers import pipeline
from PIL import Image

image = Image.open(image_url)
pipe = pipeline(task="image-to-text", model=model_id)
output = pipe(image=image)

本文尝试了以下三种不同的模型,它们都生成了相当准确的图像描述,其中较大的模型表现优于基础模型。

视觉编码器-解码器 “ydshieh/vit-gpt2-coco-en” 输出

[{'generated_text': 'a cup of coffee sitting on a wooden table'}]
BLIP “Salesforce/blip-image-captioning-base” 输出

[{'generated_text': 'a cup of coffee on a table'}]
BLIP “Salesforce/blip-image-captioning-large” 输出

[{'generated_text': 'there is a cup of coffee on a saucer on a table'}]

4. 视觉问答

图像 13
视觉问答(VQA)因其允许用户提问图像并接收连贯的文本响应而日益受到欢迎。它同样需要一个多模态模型,既能提取视觉数据中的关键信息,又能生成文本响应。VQA与图像字幕生成的区别在于,除了图像输入外,它还接受用户提示作为输入,因此需要一个能同时解释两种模态的编码器。

ViLT(视觉语言Transformer)

图像 14: ViLT 模型架构
ViLT是一种用于执行VQA任务的计算高效模型架构。ViLT将图像块嵌入和文本嵌入整合到一个统一的Transformer编码器中,该编码器经过三种目标的预训练:

  • 图像-文本匹配:学习图像-文本对之间的语义关系。
  • 掩码语言建模:根据文本和图像输入,学习预测词汇表中被掩盖的词/标记。
  • 词块对齐:学习词语与图像块之间的关联。

ViLT采用仅编码器架构,并带有特定任务头(例如分类头、VQA头),这种极简设计比依赖区域监督进行目标检测和卷积架构进行特征提取的VLP(视觉与语言预训练)模型快十倍。然而,这种简化的架构在复杂任务上会导致次优性能,并需要大量的训练数据才能实现通用功能。正如后面所示,一个缺点是ViLT模型为VQA生成的是基于Token的输出,而非连贯的句子,非常类似于具有大量候选标签的图像分类任务。

BLIP

如第3节“图像字幕生成”中介绍,BLIP是一个更全面的模型,也可以通过微调来执行视觉问答任务。由于其编码器-解码器架构,它能生成完整的文本序列,而非Token。

实现

VQA 任务的实现使用了以下代码片段,将图像和文本提示都作为模型输入。

from transformers import pipeline
from PIL import Image
import streamlit as st

image = Image.open(image_url)
question='describe this image'
pipe = pipeline(task="image-to-text", model=model_id, question=question)
output = pipe(image=image)

当比较ViLT和BLIP模型回答“describe this image”这个问题时,由于它们独特的模型架构,输出结果存在显著差异。ViLT从其现有词汇表中预测得分最高的Token,而BLIP则生成更连贯、更合理的答案。

ViLT “dandelin/vilt-b32-finetuned-vqa” 输出

[
  { "score": 0.044245753437280655, "answer": "kitchen" },
  { "score": 0.03294338658452034, "answer": "tea" },
  { "score": 0.030773703008890152, "answer": "table" },
  { "score": 0.024886665865778923, "answer": "office" },
  { "score": 0.019653357565402985, "answer": "cup" }
]

BLIP “Salesforce/blip-vqa-capfilt-large” 输出

[{'answer': 'coffee cup on saucer'}]


端到端计算机视觉应用开发

Web 应用开发可以分解为六个易于遵循的步骤,以帮助读者构建交互式 Streamlit 应用或根据需求进行定制。完整的实现代码请参考 GitHub 仓库。

  1. 初始化Web应用并配置页面布局。
def initialize_page():
    """Initialize the Streamlit page configuration and layout"""
    st.set_page_config(
        page_title="Computer Vision",
        page_icon="",
        layout="centered"
    )
    st.title("Computer Vision Tasks")
    content_block = st.columns(1)[0]

    return content_block
  1. 提示用户上传图像。
def get_uploaded_image():

    uploaded_file = st.file_uploader(
        "Upload your own image", 
        accept_multiple_files=False,
        type=["jpg", "jpeg", "png"]
    )
    if uploaded_file:
        image = Image.open(uploaded_file)
        st.image(image, caption='Preview', use_container_width=False)

    else:
        image = None

    return image
  1. 使用多选下拉列表选择一个或多个计算机视觉任务(也接受用户输入的选项,例如“document-question-answering”)。如果选择了“visual-question-answering”或“document-question-answering”,则会提示用户输入问题,因为这两个任务需要“question”作为额外的输入参数。
def get_selected_task():
    options = st.multiselect(
        "Which tasks would you like to perform?",
        [
            "visual-question-answering",
            "image-to-text",
            "image-classification",
            "image-segmentation",
        ],
        max_selections=4,
        accept_new_options=True,
    )

    #prompt for question input if the task is 'VQA' and 'DocVQA' - parameter "question"
    if 'visual-question-answering' in options or 'document-question-answering' in options:
        question = st.text_input(
            "Please enter your question:"
        )

    elif "Other (specify task name)" in options:
        task = st.text_input(
            "Please enter the task name:"
        )
        options = task
        question = ""

    else:
        question = ""

    return options, question
  1. 提示用户选择Hugging Face管道内置的默认模型或输入自己的模型。
def get_selected_model():
    options = ["Use the default model", "Use your selected HuggingFace model"]
    selected_option = st.selectbox("Choose an option:", options)
    if selected_option == "Use your selected HuggingFace model":
        model = st.text_input(
            "Please enter your selected HuggingFace model id:"
        )
    else:
        model = None

    return model
  1. 根据用户输入的参数创建任务管道,然后收集模型输出和处理时间。结果以表格形式使用st.dataframe()显示,以比较不同的任务名称、输出、运行时间、模型名称和模型类型。对于图像分割任务,分割掩码也使用st.image()显示。
def display_results(image, task_list, user_question, model):

    results = []
    for task in task_list:
        if task in ['visual-question-answering', 'document-question-answering']:
            params = {'question': user_question}
        else:
            params = {}

        row = {
            'task': task,
        }

        try:
            model = i['model']
            row['model'] = model
            pipe = pipeline(task, model=model)

        except Exception as e:
            pipe = pipeline(task)
            row['model'] = pipe.model.name_or_path

        start_time = time.time()
        output = pipe(
            image,
            **params
        )
        execution_time = time.time() - start_time

        row['model_type'] = pipe.model.config.model_type
        row['time'] = execution_time


        # display image segentation visual output
        if task == 'image-segmentation':
            output_masks = [i['mask'] for i in output]

        row['output'] = str(output)

        results.append(row)
        results_df = pd.DataFrame(results)

    st.write('Model Responses')
    st.dataframe(results_df)

    if 'image-segmentation' in task_list:
        st.write('Segmentation Mask Output')

        for m in output_masks:
            st.image(m)

    return results_df
  1. 最后,使用主函数将这些功能串联起来。使用“生成响应”按钮触发这些功能并在应用中显示结果。
def main():
    initialize_page()
    image = get_uploaded_image()
    task_list, user_question = get_selected_task()
    model = get_selected_model()

    # generate reponse spinning wheel
    if st.button("Generate Response", key="generate_button"):
        display_results(image, task_list, user_question, model)

# run the app
if __name__ == "__main__":
    main()

总结

本文介绍了从传统基于CNN的方法到Transformer架构的演变过程,并对视觉模型与语言模型以及多模态模型进行了比较。同时,还探讨了四项核心计算机视觉任务及其对应的技术,并提供了一份实用的Streamlit实现指南,以帮助读者构建自己的计算机视觉Web应用进行进一步探索。

核心计算机视觉任务和模型包括:

TAGGED:TransformerVQA图像分割图像分类多模态计算机视觉
Share This Article
Email Copy Link Print
Previous Article 表1:从clinicaltrials.gov下载的两个阿尔茨海默病研究的关键信息示例,其中部分信息已从原始数据中提取。 五步精通PICO信息提取器:构建生物医学领域NLP应用与部署
Next Article 图1:传统RAG管道示意图 RAG系统核心:优化文档检索,提升大模型AI搜索精准度与效率
Leave a Comment

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

最新内容
20251202135921634.jpg
英伟达20亿美元投资新思科技,AI芯片设计革命加速
科技
20251202130505639.jpg
乌克兰国家AI模型选定谷歌Gemma,打造主权人工智能
科技
20251202121525971.jpg
中国开源AI新突破:DeepSeek V3.2模型性能比肩GPT-5
科技
20251202112744609.jpg
马斯克预言:AI三年内解决美国债务危机,可信吗?
科技

相关内容

Qwen3-VL模型崩溃截图示例
AI 前沿技术

Unsloth发布Qwen3-VL本地运行与微调指南:深度解析及关键Bug修复

2025年11月2日
奔跑人物定位输入图
AI 前沿技术

Qwen3-VL 30B-A3B 多模态大模型开源实测:轻量化与性能深度解析

2025年10月4日
Veo 3.1 首尾帧补间功能示例:汽车从悬崖起飞结束帧
AI 前沿技术

Google Veo 3.1 重磅发布:全解析其强大功能与创新应用

2025年10月16日
图像1:通过确定性方法检测图像中的猫(作者绘制)
计算机视觉

Excel实战:深入理解卷积神经网络(CNN)的图像识别原理

2025年11月18日
Show More
前途科技

前途科技是一个致力于提供全球最新科技资讯的专业网站。我们以实时更新的方式,为用户呈现来自世界各地的科技新闻和深度分析,涵盖从技术创新到企业发展等多方面内容。专注于为用户提供高质量的科技创业新闻和行业动态。

分类

  • AI
  • 初创
  • 学习中心

快速链接

  • 阅读历史
  • 我的关注
  • 我的收藏

Copyright © 2025 AccessPath.com, 前途国际科技咨询(北京)有限公司,版权所有。 | 京ICP备17045010号-1 | 京公网安备 11010502033860号

前途科技
Username or Email Address
Password

Lost your password?

Not a member? Sign Up