项目介绍:oneformer_ade20k_dinat_large
项目背景
oneformer_ade20k_dinat_large是一个基于ADE20k数据集的大型图像分割项目,使用Dinat作为骨干网络。这个项目是由Jitesh Jain等人在他们的论文《OneFormer: One Transformer to Rule Universal Image Segmentation》中首次提出,并在相关的GitHub仓库中发布。
模型概述
OneFormer是首个多任务的通用图像分割框架。它只需通过单一的通用架构、单一模型和单一数据集进行训练,就能在语义、实例和全景分割任务中超越现有专用模型的表现。OneFormer采用任务令牌来根据特定任务的要求调整模型,使得这个架构在训练时是任务引导的,推理时则是任务动态的,且这一切都只需一个模型即可完成。
预期用途和局限性
此特定检查点可用于语义、实例和全景分割。您可以通过访问model hub来查找在不同数据集上经过微调的其他版本。
如何使用
以下是如何使用该模型的示例代码:
from transformers import OneFormerProcessor, OneFormerForUniversalSegmentation
from PIL import Image
import requests
# 下载并打开图像
url = "https://huggingface.co/datasets/shi-labs/oneformer_demo/blob/main/ade20k.jpeg"
image = Image.open(requests.get(url, stream=True).raw)
# 加载适用于所有三项任务的单一模型
processor = OneFormerProcessor.from_pretrained("shi-labs/oneformer_ade20k_dinat_large")
model = OneFormerForUniversalSegmentation.from_pretrained("shi-labs/oneformer_ade20k_dinat_large")
# 语义分割
semantic_inputs = processor(images=image, task_inputs=["semantic"], return_tensors="pt")
semantic_outputs = model(**semantic_inputs)
predicted_semantic_map = processor.post_process_semantic_segmentation(semantic_outputs, target_sizes=[image.size[::-1]])[0]
# 实例分割
instance_inputs = processor(images=image, task_inputs=["instance"], return_tensors="pt")
instance_outputs = model(**instance_inputs)
predicted_instance_map = processor.post_process_instance_segmentation(instance_outputs, target_sizes=[image.size[::-1]])[0]["segmentation"]
# 全景分割
panoptic_inputs = processor(images=image, task_inputs=["panoptic"], return_tensors="pt")
panoptic_outputs = model(**panoptic_inputs)
predicted_panoptic_map = processor.post_process_panoptic_segmentation(panoptic_outputs, target_sizes=[image.size[::-1]])[0]["segmentation"]
更多的使用示例可以参考文档。
结语
OneFormer项目的创新之处在于其多任务统一性,能够在单一模型中实现多个图像分割任务的出色表现。通过相关的GitHub资源,用户能够进一步了解并利用这一前沿技术。