OFA一把梭(1)——玩转图像描述

简介: 本文将用最简单的方式帮助你快速上手ModelScope的OFA模型,并快速上手使用图像描述能力。

本文将用最简单的方式帮助你快速上手ModelScope的OFA模型(点这里查看模型),玩转当前全球最强的图像描述(Image Captioning)模型(目前OFA位列MSCOCO Leaderboard第一名,点这里查看)。阅读本文大约需要5分钟。

Case体验

最强的图像描述模型有多强?下面两个case可以给大家看看:

模型能够精确的描述图像内容,甚至电影海报里面还被识别出了月球,是不是真的非常强?

环境准备

开始一个项目,往往最难的是环境的准备。但今天你完全不需要担心这个问题,我们提供了配置好环境的Notebook,包含CPU和GPU环境,任君选择。具体操作如下:

notebook.jpg

当然,如果你依然希望选择自己配置环境,请参考快速开始,也不算是很麻烦(可以选择只安装multi-modal哦,还是很贴心的。)

让代码跑起来

接下来你将进入一个jupyter notebook中,环境已经ready,你只需要输入ModelScope相关的代码,就可以把OFA的image captioning功能玩起来了。

首先,你需要import相关的module,具体如下:

frommodelscope.pipelinesimportpipelinefrommodelscope.utils.constantimportTasks

import成功将出现如下提示:

import_success.jpg

接下来,通过如下两行命令,你实现了ModelScope中的pipeline和Tasks的import,后续则需要通过Tasks指定具体任务传入pipeline中,便能搭建起image captioning的pipeline,如下所示:

img_captioning=pipeline(Tasks.image_captioning, model='damo/ofa_image-caption_coco_large_en')

执行这一行命令,pipeline将下载OFA的image captioning的模型,具体模型为OFA在MSCOCO数据集上Finetune的Large模型,随后将模型load到pipeline中。出现如下提示,则initialize模型完成:

load_success.jpg

完成上述步骤,便可以开始体验,具体方式即将你需要生成caption的图片传入img_captioning中,如下所示:

result=img_captioning({'image': 'data/test/images/image_captioning.png'})
# 同样支持url, 是不是非常方便# result = img_captioning({'image': 'http://xingchen-data.oss-cn-zhangjiakou.aliyuncs.com/maas/image-captioning/image_captioning.png'})

上述命令只需要将图片路径构造dict传入img_captioning,就可以得到结果,通过`print(result['caption'])`即可看到结果:

a man in a blue and white striped shirt is making a face with his mouth

result是一个dict,其中的key: sample包含了所有输入数据,这很方便得到输入输出的pair。

部署&分享

图像描述的能力真的很有意思,但是部署给其他人怎么操作呢?

目前我发现了一个小神器:gradio,可以轻松将模型分享,下面是一个简单的例子。

importgradioasgrfrommodelscope.pipelinesimportpipelinefrommodelscope.utils.constantimportTasksfrommodelscopeimportoutputsimg_captioning=pipeline(Tasks.image_captioning, model='damo/ofa_image-caption_coco_large_en')
defgen_caption(image):
result=img_captioning({'image': image})
returnresult[outputs.OutputKeys.CAPTION]
demo=gr.Interface(
fn=gen_caption,
inputs=gr.Image(type='pil'),
outputs="label",
)
demo.launch(share=True) # 会生成一个可供临时使用的大家都可以访问的URL

例子结果如下,是不是很简单:

image.png

结语

上述用最简单的方式帮助读者快速上手OFA的image captioning模型,读者可以根据自己的需求根据上述方法实现更加复杂的功能及应用制作等。


注:以上内容由tzjz89首发,如有引用请标明出处,感谢。

相关文章
|
5月前
|
存储 API 图形学
Unity精华☀️二、到底是什么原因导致“万向锁”?旋转翻车的终极解析!
Unity精华☀️二、到底是什么原因导致“万向锁”?旋转翻车的终极解析!
|
5月前
|
图形学
Unity精华☀️三、四元数(Quaternion)解决万向锁
Unity精华☀️三、四元数(Quaternion)解决万向锁
|
5月前
|
存储 安全 Java
揭秘Java序列化神器Serializable:一键解锁对象穿越时空的超能力,你的数据旅行不再受限,震撼登场!
【8月更文挑战第4天】Serializable是Java中的魔术钥匙,开启对象穿越时空的能力。作为序列化的核心,它让复杂对象的复制与传输变得简单。通过实现此接口,对象能被序列化成字节流,实现本地存储或网络传输,再通过反序列化恢复原状。尽管使用方便,但序列化过程耗时且存在安全风险,需谨慎使用。
57 7
|
8月前
|
消息中间件 安全 算法
通透!从头到脚讲明白线程锁
线程锁在分布式应用中是重中之重,当谈论线程锁时,通常指的是在多线程编程中使用的同步机制,它可以确保在同一时刻只有一个线程能够访问共享资源,从而避免竞争条件和数据不一致性问题。
342 0
|
程序员
程序猿的中秋夜,利用这些“代码”,解锁团聚新姿态
水也水了这么多字,其实我想说的是,疫情,让我们原有的生活方式发生了翻天覆地的改变,友情、爱情、亲情,都受到了不同程度的改变,节日的庆祝方式或许不同,但月还是那片月,没有什么是熬不过去的。也正是如此,我踏入了计算机的门槛,或许大家有人的想法,和我不约而同,想用自己的双手,去创造些东西,行前人所不能,利后人之利。程序猿们,这个中秋,不会还在学习,还在修bug吧?记得某一年,国庆还是和中秋在一块,今年又来个双节,猿粪呐,不知道是不是又有小盆友要不满了,明明能放两次假,最后1+1=1,妙极了。什么,女朋友不认账?.
程序猿的中秋夜,利用这些“代码”,解锁团聚新姿态
|
机器学习/深度学习 编解码 算法
让 GLEAN 还原你女神的美妙容颜
在 CVPR 2021, 我们提出了 GLEAN, 利用预训练的 StyleGAN 作为 latent bank, 提高图像超分辨率的效能。当时,GLEAN 在 Bicubic 下采样获得非常好的效果。 之后,我们向前踏出一步,在真实人脸复原上作出尝试。今天,我们就在这里分享一下我们现在的进展。
325 0
让 GLEAN 还原你女神的美妙容颜
|
数据可视化 Python
用Python绘制诱人的桑基图,一眼看透熬夜和狗粮的秘密...
桑基图(Sankey diagram),即桑基能量分流图,也叫桑基能量平衡图。它是一种特定类型的流程图,图中延伸的分支的宽度对应数据流量的大小,通常应用于能源、材料成分、金融等数据的可视化分析。因1898年Matthew Henry Phineas Riall Sankey绘制的"蒸汽机的能源效率图"而闻名,此后便以其名字命名为"桑基图"。
985 0
用Python绘制诱人的桑基图,一眼看透熬夜和狗粮的秘密...
J3
|
机器学习/深度学习 存储 缓存
有图有真相的Java内存模型基础,你好意思不看嘛!
有图有真相的Java内存模型基础
J3
157 0
有图有真相的Java内存模型基础,你好意思不看嘛!
|
Java 编译器 调度
重生之我在人间敲代码_Java并发基础_原子性问题之互斥锁
原子性问题的源头是线程切换,如果能够禁用线程切换那就能解决这个问题。而操作系统做线程切换是依赖 CPU 中断的,所以禁止 CPU 发生中断就能够禁止线程切换。
再学一道算法题: 寻找大富翁
再学一道算法题: 寻找大富翁