快速玩起来
demo示例如果你希望为一张图片配上一句文字,或者打个标签,OFA模型就是你的绝佳选择。你只需要输入任意1张你的图片,3秒内就能收获一段精准的描述。本页面右侧提供了在线体验的服务,欢迎使用!
注:右侧demo的后处理后续会对齐下面示例code的处理方式。
本系列还有如下模型,欢迎试用:
玩转OFA只需区区以下6行代码,就是如此轻松!如果你觉得还不够方便,请点击右上角Notebook
按钮,我们为你提供了配备了GPU的环境,你只需要在notebook里输入提供的代码,就可以把OFA玩起来了!
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
from modelscope.outputs import OutputKeys
img_captioning = pipeline(Tasks.image_captioning, model='damo/ofa_image-caption_muge_base_zh', model_revision='v1.0.1')
result = img_captioning('https://xingchen-data.oss-cn-zhangjiakou.aliyuncs.com/maas/image-captioning/dress.png')
print(result[OutputKeys.CAPTION]) # '经典的圆领设计,修饰颈部线条,凸显女性的柔美气质,修身的版型,勾勒出曼妙的身姿。'
# 目前caption支持了batch inference,方式非常简单,具体如下:
result = img_captioning([{'image': 'https://xingchen-data.oss-cn-zhangjiakou.aliyuncs.com/maas/image-captioning/dress.png'} for _ in range(3)], batch_size=2)
for r in result:
print(r[OutputKeys.CAPTION])
OFA(One-For-All)是通用多模态预训练模型,使用简单的序列到序列的学习框架统一模态(跨模态、视觉、语言等模态)和任务(如图片生成、视觉定位、图片描述、图片分类、文本生成等),详见我们发表于ICML 2022的论文:OFA: Unifying Architectures, Tasks, and Modalities Through a Simple Sequence-to-Sequence Learning Framework,以及我们的官方Github仓库https://github.com/OFA-Sys/OFA。
Github  |  Paper   |  Blog
Model | Params-en | Params-zh | Backbone | Hidden size | Intermediate size | Num. of heads | Enc layers | Dec layers |
---|---|---|---|---|---|---|---|---|
OFATiny | 33M | - | ResNet50 | 256 | 1024 | 4 | 4 | 4 |
OFAMedium | 93M | - | ResNet101 | 512 | 2048 | 8 | 4 | 4 |
OFABase | 180M | 160M | ResNet101 | 768 | 3072 | 12 | 6 | 6 |
OFALarge | 470M | 440M | ResNet152 | 1024 | 4096 | 16 | 12 | 12 |
OFAHuge | 930M | - | ResNet152 | 1280 | 5120 | 16 | 24 | 12 |
OFA在图像描述(image captioning)任务的权威数据集Microsoft COCO Captions官方榜单成功登顶(想看榜单,点这里),并在经典测试集Karpathy test split取得CIDEr 154.9的分数。英文效果具体如下,中文数据为muge,效果后续更新:
Stage | Cross Entropy Optimization | CIDEr Optimization | ||||||
---|---|---|---|---|---|---|---|---|
Metric | BLEU-4 | METEOR | CIDEr | SPICE | BLEU-4 | METEOR | CIDEr | SPICE |
OFABase | 41.0 | 30.9 | 138.2 | 24.2 | 42.8 | 31.7 | 146.7 | 25.8 |
OFALarge | 42.4 | 31.5 | 142.2 | 24.5 | 43.6 | 32.2 | 150.7 | 26.2 |
OFAHuge | 43.9 | 31.8 | 145.3 | 24.8 | 44.9 | 32.5 | 154.9 | 26.6 |
本模型训练数据集是Muge数据集。
模型及finetune细节请参考OFA Tutorial 1.4节。
import tempfile
from modelscope.msdatasets import MsDataset
from modelscope.metainfo import Trainers
from modelscope.trainers import build_trainer
from modelscope.utils.constant import DownloadMode
from modelscope.utils.hub import snapshot_download
train_dataset = MsDataset(
MsDataset.load(
"coco_2014_caption",
namespace="modelscope",
split="train[:100]",
download_mode=DownloadMode.REUSE_DATASET_IF_EXISTS).remap_columns({
'image': 'image',
'caption': 'text'
}))
test_dataset = MsDataset(
MsDataset.load(
"coco_2014_caption",
namespace="modelscope",
split="validation[:20]",
download_mode=DownloadMode.REUSE_DATASET_IF_EXISTS).remap_columns({
'image': 'image',
'caption': 'text'
}))
def cfg_modify_fn(cfg):
cfg.train.hooks = [{
'type': 'CheckpointHook',
'interval': 2
}, {
'type': 'TextLoggerHook',
'interval': 1
}, {
'type': 'IterTimerHook'
}]
cfg.train.dataloader.batch_size_per_gpu = 1
cfg.train.max_epochs=2
return cfg
args = dict(
model='damo/ofa_image-caption_muge_base_zh',
model_revision='v1.0.1',
train_dataset=train_dataset,
eval_dataset=test_dataset,
cfg_modify_fn=cfg_modify_fn,
work_dir = tempfile.TemporaryDirectory().name)
trainer = build_trainer(name=Trainers.ofa, default_args=args)
trainer.train()
训练数据集自身有局限,有可能产生一些偏差,请用户自行评测后决定如何使用。
如果你觉得OFA好用,喜欢我们的工作,欢迎引用:
@article{wang2022ofa,
author = {Peng Wang and
An Yang and
Rui Men and
Junyang Lin and
Shuai Bai and
Zhikang Li and
Jianxin Ma and
Chang Zhou and
Jingren Zhou and
Hongxia Yang},
title = {OFA: Unifying Architectures, Tasks, and Modalities Through a Simple Sequence-to-Sequence
Learning Framework},
journal = {CoRR},
volume = {abs/2202.03052},
year = {2022}
}