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首发,如有引用请标明出处,感谢。

相关文章
|
3月前
|
存储 安全 Java
揭秘Java序列化神器Serializable:一键解锁对象穿越时空的超能力,你的数据旅行不再受限,震撼登场!
【8月更文挑战第4天】Serializable是Java中的魔术钥匙,开启对象穿越时空的能力。作为序列化的核心,它让复杂对象的复制与传输变得简单。通过实现此接口,对象能被序列化成字节流,实现本地存储或网络传输,再通过反序列化恢复原状。尽管使用方便,但序列化过程耗时且存在安全风险,需谨慎使用。
48 7
|
3月前
|
安全 Java 调度
震撼揭秘!手撕并发编程迷雾,Semaphore与CountDownLatch携手AQS共享模式,让你秒懂并发神器背后的惊天秘密!
【8月更文挑战第4天】在Java并发编程中,AbstractQueuedSynchronizer (AQS) 是核心框架,支持独占锁与共享锁的实现。本文以Semaphore与CountDownLatch为例,深入解析AQS共享模式的工作原理。Semaphore通过AQS管理许可数量,控制资源的并发访问;而CountDownLatch则利用共享计数器实现线程间同步。两者均依赖AQS提供的tryAcquireShared和tryReleaseShared方法进行状态管理和线程调度,展示了AQS的强大功能和灵活性。
41 0
|
6月前
|
前端开发 程序员 开发者
光辉璀璨:开发者的壮丽"高光时刻"
作为开发者,在自己的开发生涯中,肯定都会经历一些让自己激动和自豪的"高光时刻",这些时刻是我们在技术道路上的重要里程碑,带给我们成就感和动力。就拿我自己的程序开发生涯来讲,截止目前,我的开发经历可以用一个曲线来表示,为什么这么说?原因就是自己的开放经历一直都是叠嶂起伏,忽高忽低,忽低忽高,反反复复的演绎。本文就来简单分享一下我自己的“高光时刻”。
81 9
光辉璀璨:开发者的壮丽"高光时刻"
|
6月前
|
存储 Python
【数据结构】期中考试一把梭(通宵版上)
【数据结构】期中考试一把梭(通宵版上)
103 1
|
算法 Python
算法创作|龟兔赛跑问题解决方法
算法创作|龟兔赛跑问题解决方法
153 0
|
程序员
程序猿的中秋夜,利用这些“代码”,解锁团聚新姿态
水也水了这么多字,其实我想说的是,疫情,让我们原有的生活方式发生了翻天覆地的改变,友情、爱情、亲情,都受到了不同程度的改变,节日的庆祝方式或许不同,但月还是那片月,没有什么是熬不过去的。也正是如此,我踏入了计算机的门槛,或许大家有人的想法,和我不约而同,想用自己的双手,去创造些东西,行前人所不能,利后人之利。程序猿们,这个中秋,不会还在学习,还在修bug吧?记得某一年,国庆还是和中秋在一块,今年又来个双节,猿粪呐,不知道是不是又有小盆友要不满了,明明能放两次假,最后1+1=1,妙极了。什么,女朋友不认账?.
程序猿的中秋夜,利用这些“代码”,解锁团聚新姿态
|
存储 安全 算法
重生之我在人间敲代码_Java并发基础_安全性、活跃性以及性能问题
并发编程中我们需要注意的问题有很多,很庆幸前人已经帮我们总结过了,主要有三个方面,分别是:安全性问题、活跃性问题和性能问题。
|
Java 编译器 调度
重生之我在人间敲代码_Java并发基础_原子性问题之互斥锁
原子性问题的源头是线程切换,如果能够禁用线程切换那就能解决这个问题。而操作系统做线程切换是依赖 CPU 中断的,所以禁止 CPU 发生中断就能够禁止线程切换。
|
安全 数据安全/隐私保护 双11
手机无感知验证时代来了:避免剁手的最后一道屏障消失了?!
人的懒惰没有极限。就拿手机验证这事儿来说,现在的体验流程已经相当简单,不记得静态密码也没事,只需要通过手机短信验证就可以解决绝大部分注册、登陆、下单问题。但是本机主每次看到短信推送验证码、“天空飘来六个数字”的时候,心里就会莫名紧张,生怕不能在短信消失前把六个数字记下来。
2763 0
|
算法 物联网 大数据
15个未来高科技产品会让你无法想象!这些开脑洞的设计太牛了!
从衣食住行到生活的方方面面,未来必将会有天翻地覆的变化。大数据、云计算、物联网和人工智能这些年的发展,让我们对并不遥远的未来有了更多想象和期待。那些我们现阶段不可企及的所思所想,将在未来成为大部分人的日常。
5260 0