共计 7181 个字符,预计需要花费 18 分钟才能阅读完成。
在 Hugging Face 上,咱们为与社区一起推动人工智能畛域的民主化而感到骄傲。作为这个使命的一部分,咱们从去年开始专一于计算机视觉。开始只是 🤗 Transformers 中 Vision Transformers (ViT) 的一个 PR,当初曾经发展壮大: 8 个外围视觉工作,超过 3000 个模型,在 Hugging Face Hub 上有超过 1000 个数据集。
自从 ViTs 退出 Hub 后,曾经产生了大量激动人心的事件。在这篇博客文章中,咱们将从 🤗Hugging Face 生态系统中总结曾经产生的和将要产生的停顿,以反对计算机视觉的继续倒退。
上面是咱们要笼罩的内容:
- 反对的视觉工作和流水线
- 训练你本人的视觉模型
- 和
timm
整合 - Diffusers
- 对第三方库的反对
- 开发
- 以及更多内容!
启动社区: 一次一个工作
Hugging Face Hub 领有超过 10 万个用于不同工作的公共模型,例如: 下一词预测、掩码填充、词符分类、序列分类等。截止明天,咱们反对 8 个外围视觉工作,提供许多模型的 checkpoints:
- 图像分类
- 图像宰割
- (零样本) 指标检测
- 视频分类
- 深度预计
- 图像到图像合成
- 无条件图像生成
- 零样本图像分类
每个工作在 Hub 上至多有 10 个模型期待你去摸索。此外,咱们反对视觉和语言的穿插工作,比方:
- 图像到文字 (图像阐明,光学字符识别)
- 文字到图像
- 文档问答
- 视觉问答
这些工作不仅须要最先进的基于 Transformer 的架构,如 ViT、Swin、DETR,还须要 纯卷积 的架构,如 ConvNeXt、ResNet、RegNet,甚至更多!像 ResNets 这样的架构依然与有数的工业用例十分相干,因而在 🤗 Transformers 中也反对这些非 Transformers 的架构。
还须要留神的是,在 Hub 上的这些模型不仅来自 Transformers 库,也来自于其余第三方库。例如,只管咱们在 Hub 上反对无条件图像生成等工作,但咱们在 Transformers 中还没有任何模型反对该工作 (比方 这个链接)。反对所有的机器学习工作,无论是应用 Transformers 还是第三方库来解决,都是咱们促成一个合作的开源机器学习生态系统使命的一部分。
对 Pipelines 的反对
咱们开发了 Pipelines 来为从业者提供他们须要的工具,以便轻松地将机器学习整合到他们的工具箱中。对于给定与工作相干的输出,他们提供了一种简略的办法来执行推理。咱们在 Pipelines 里反对 7 种视觉工作。上面是一个应用 Pipelines 进行深度预计的例子:
from transformers import pipeline
depth_estimator = pipeline(task="depth-estimation", model="Intel/dpt-large")
output = depth_estimator("http://images.cocodataset.org/val2017/000000039769.jpg")
# This is a tensor with the values being the depth expressed
# in meters for each pixel
output["depth"]
即便对于视觉问答工作,接口也放弃不变:
from transformers import pipeline
oracle = pipeline(model="dandelin/vilt-b32-finetuned-vqa")
image_url = "https://huggingface.co/datasets/Narsil/image_dummy/raw/main/lena.png"
oracle(question="What is she wearing?", image=image_url, top_k=1)
# [{'score': 0.948, 'answer': 'hat'}]
训练你本人的模型
尽管可能应用现成推理模型是一个很好的入门形式,但微调是社区取得最大收益的中央。当你的数据集是自定义的、并且预训练模型的性能不佳时,这一点尤其正确。
Transformers 为所有与训练相干的货色提供了 训练器 API。以后,Trainer
无缝地反对以下工作: 图像分类、图像宰割、视频分类、指标检测和深度预计。微调其余视觉工作的模型也是反对的,只是并不通过 Trainer
。
只有损失计算蕴含在 Transformers 计算给定工作损失的模型中,它就应该有资格对该工作进行微调。如果你发现问题,请在 GitHub 上 报告。
我从哪里能够找到代码?
- 模型文档
- Hugging Face 笔记本
- Hugging Face 示例脚本
- 工作页面
Hugging Face 示例脚本 包含不同的 自监督预训练策略 如 MAE,和 比照图像到文本预训练策略 如 CLIP。这些脚本对于钻研社区和违心在预训练模型上从头训练自定义数据语料的从业者来说是十分贵重的资源。
不过有些工作原本就不适宜微调。例子包含零样本图像分类 (比方 CLIP),零样本指标检测 (比方 OWL-ViT),和零样本宰割 (比方 CLIPSeg)。咱们将在这篇文章中从新探讨这些模型。
与 Datasets 集成
Datasets 提供了对数千个不同模态数据集的轻松拜访。如前所述,Hub 有超过 1000 个计算机视觉的数据集。一些例子值得关注: ImageNet-1k、Scene Parsing、NYU Depth V2、COYO-700M 和 LAION-400M。这些在 Hub 上的数据集,只需两行代码就能够加载它们:
from datasets import load_dataset
dataset = load_dataset("scene_parse_150")
除了这些数据集,咱们提供了对加强库如 albumentations 和 Kornia 的集成反对。社区能够利用 Datasets 的灵活性和性能,还有这些库提供的弱小的加强变换能力。除此之外,咱们也为外围视觉工作提供 专用的数据加载指南: 图像分类,图像宰割,指标检测和深度预计。
🤗 🤝 timm
timm
,即 pytorch-image-models,是一个最先进的 PyTorch 图像模型、预训练权重和用于训练、推理、验证的实用脚本的开源汇合。
pytorch-image-models 我的项目仓库:
<url>https://github.com/rwightman/pytorch-image-models</url>
咱们在 Hub 上有超过 200 个来自 timm
的模型,并且有更多模型行将上线。查看 文档 以理解更多对于此集成的信息。
🧨 Diffusers
Diffusers 提供预训练的视觉和音频扩散模型,并且用作推理和训练的模块化工具箱。有了这个库,你能够从自然语言输出和其余创造性用例中生成可信的图像。上面是一个例子:
from diffusers import DiffusionPipeline
generator = DiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4")
generator.to(“cuda”)
image = generator("An image of a squirrel in Picasso style").images[0]
这种类型的技术能够赋予新一代的创造性利用,也能够帮忙来自不同背景的艺术家。查看 官网文档 以理解更多对于 Diffusers 和不同用例的信息。
基于扩散模型的文献正在疾速倒退,这就是为什么咱们与 乔纳森·惠特克 合作开发一门课程。这门课程是收费的,你能够点击 这里 查看。
对第三方库的反对
Hugging Face 生态系统的外围是 Hugging Face Hub,它让人们在机器学习上无效单干。正如后面所提到的,咱们在 Hub 上不仅反对来自 🤗 Transformers 的模型,还反对来自其余第三方包的模型。为此,咱们提供了几个 实用程序,以便你能够将本人的库与 Hub 集成。这样做的次要长处之一是,与社区共享工件 (如模型和数据集) 变得非常容易,从而使你的用户能够更容易地尝试你的模型。
当你的模型托管在 Hub 上时,你还能够为它们 增加自定义推理部件。推理部件容许用户疾速地查看模型。这有助于进步用户的参与度。
计算机视觉演示空间
应用 Hugging Hub Spaces 利用,人们能够轻松地演示他们的机器学习模型。空间反对与 Gradio、Streamlit 和 Docker 的间接集成,使从业者在展现他们的模型时有很大的灵活性。你能够用 Spaces 引入本人的机器学习框架来构建演示。
在 Spaces 里,Gradio 库提供几个部件来构建计算机视觉利用,比方 Video、Gallery 和 Model3D。社区始终在致力构建一些由 Spaces 提供反对的令人惊叹的计算机视觉利用:
- 从输出图像的预测深度图生成 3D 体素
- 凋谢词汇语义宰割
- 通过生成字幕来讲述视频
- 对来自 YouTube 的视频进行分类
- 零样本视频分类
- 视觉问答
- 应用零样本图像分类为图像找到最佳阐明以生成类似的图像
🤗 AutoTrain
AutoTrain 提供一个”零代码“的解决方案,为文本分类、文本摘要、命名实体辨认等这样的工作训练最先进的机器学习模型。对于计算机视觉,咱们以后反对 图像分类,但能够期待更多的工作笼罩。
AutoTrain 还反对 主动模型评估。此应用程序容许你用在 Hub 上的各种 数据集 评估 🤗 Transformers 模型。你的评估后果将会显示在 公共排行榜 上。你能够查看 下列博客 以取得更多细节。
技术理念
在此局部,咱们像向你分享在 🤗 Transformers 里增加计算机视觉背地的理念,以便社区晓得针对该畛域的设计抉择。
只管 Transformers 是从 NLP 开始的,但咱们明天反对多种模式,比方: 视觉、音频、视觉语言和强化学习。对于所有的这些模式,Transformers 中所有相应的模型都享有一些独特的劣势:
- 应用一行代码
from_pretrained()
即可轻松下载模型 - 用
push_to_hub()
轻松上传模型 - 反对应用 checkpoint 分片技术加载大型的 checkpoints
- 优化反对 (应用 Optimum 之类的工具)
- 从模型配置中初始化
- 反对 PyTorch 和 TensorFlow (非全面反对)
- 以及更多
与分词器不同,咱们有预处理器 (例如 链接中的预处理器) 负责为视觉模型筹备数据。咱们始终致力确保在应用视觉模型时仍然有轻松和类似的用户体验:
from transformers import ViTImageProcessor, ViTForImageClassification
import torch
from datasets import load_dataset
dataset = load_dataset("huggingface/cats-image")
image = dataset["test"]["image"][0]
image_processor = ViTImageProcessor.from_pretrained("google/vit-base-patch16-224")
model = ViTForImageClassification.from_pretrained("google/vit-base-patch16-224")
inputs = image_processor(image, return_tensors="pt")
with torch.no_grad():
logits = model(**inputs).logits
# model predicts one of the 1000 ImageNet classes
predicted_label = logits.argmax(-1).item()
print(model.config.id2label[predicted_label])
# Egyptian cat
即便对于一个艰难的工作如指标检测,用户体验也不会扭转很多:
from transformers import AutoImageProcessor, AutoModelForObjectDetection
from PIL import Image
import requests
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
image_processor = AutoImageProcessor.from_pretrained("microsoft/conditional-detr-resnet-50")
model = AutoModelForObjectDetection.from_pretrained("microsoft/conditional-detr-resnet-50")
inputs = image_processor(images=image, return_tensors="pt")
outputs = model(**inputs)
# convert outputs (bounding boxes and class logits) to COCO API
target_sizes = torch.tensor([image.size[::-1]])
results = image_processor.post_process_object_detection(outputs, threshold=0.5, target_sizes=target_sizes)[0]
for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
box = [round(i, 2) for i in box.tolist()]
print(f"Detected {model.config.id2label[label.item()]} with confidence"
f"{round(score.item(), 3)} at location {box}"
)
输入为:
Detected remote with confidence 0.833 at location [38.31, 72.1, 177.63, 118.45]
Detected cat with confidence 0.831 at location [9.2, 51.38, 321.13, 469.0]
Detected cat with confidence 0.804 at location [340.3, 16.85, 642.93, 370.95]
Detected remote with confidence 0.683 at location [334.48, 73.49, 366.37, 190.01]
Detected couch with confidence 0.535 at location [0.52, 1.19, 640.35, 475.1]
视觉零样本模型
大量的模型以乏味的形式从新订正了宰割和检测等外围视觉工作,并引入了更大的灵活性。咱们反对 Transformers 中的一些:
- CLIP 反对带提醒的零样本图像分类。给定一张图片,你能够用相似”一张 {} 的图片“这样的自然语言询问来提醒 CLIP 模型。冀望是失去类别标签作为答案。
- OWL-ViT 容许以语言为条件的零样本指标检测和以图像为条件的单样本指标检测。这意味着你能够在一张图片中检测物体即便底层模型在训练期间没有学过检测它们!你能够参考 下列笔记本 以理解更多。
- CLIPSeg 反对以语言为条件的零样本图像宰割和以图像为条件的单样本图像宰割。这意味着你能够在一张图片中宰割物体即便底层模型在训练期间没有学过宰割它们!你能够参考阐明此想法的 这篇博客文章。GroupViT 也反对零样本宰割。
- X-CLIP 展现对视频的零样本泛化。精确地说是反对零样本视频分类。查看 下列笔记本 以取得更多细节。
社区期待在今后的日子里看到 🤗Transformers 反对更多的计算机视觉零样本模型。
开发
咱们的 CTO 说:”真正的艺术家能将产品上市“🚀
咱们通过 🤗Inference Endpoints 反对这些视觉模型的开发。Inference Endpoints 间接集成了与图像分类、指标检测、图像宰割相干的兼容模型。对于其余模型,你能够应用自定义处理程序。因为咱们还在 TensorFlow 中提供了许多来自 🤗Transformers 的视觉模型用于部署,咱们倡议应用自定义处理程序或遵循这些资源:
- 在 Hugging Face 上用 TF 服务开发 TensorFlow 视觉模型
- 在 Kubernets 上用 TF 服务开发 ViT
- 在 Vertex AI 上开发 ViT
- 用 TFX 和 Vertex AI 开发 ViT
论断
在这篇文章中,咱们向你简要介绍了 Hugging Face 生态系统目前为下一代计算机视觉利用提供的反对。咱们心愿你会喜爱应用这些产品来牢靠地构建利用。
不过还有很多工作要做。以下是您能够期待看到的一些内容:
- 🤗 Datasets 对视频的间接反对
- 反对更多和工业界相干的工作,比方图像相似性
- 图像数据集与 TensorFlow 的交互
- 来自 🤗Hugging Face 社区对于计算机视觉的课程
像平常一样,咱们欢送你的补丁、PR、模型 checkpoints、数据集和其余奉献!🤗
感激 Omar Sanseviero, Nate Raw, Niels Rogge, Alara Dirik, Amy Roberts, Maria Khalusova, and Lysandre Debut for their 精心审阅和校对这篇文章,感激 Chunte Lee 创作的博文缩略图
原文: https://hf.co/blog/cv_state
作者: Sayak Paul
译者: AIboy1993 (李旭东)
译者: zhongdongy (阿东)