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

相关文章
|
4月前
|
存储 API 图形学
Unity精华☀️二、到底是什么原因导致“万向锁”?旋转翻车的终极解析!
Unity精华☀️二、到底是什么原因导致“万向锁”?旋转翻车的终极解析!
|
4月前
|
存储 安全 Java
揭秘Java序列化神器Serializable:一键解锁对象穿越时空的超能力,你的数据旅行不再受限,震撼登场!
【8月更文挑战第4天】Serializable是Java中的魔术钥匙,开启对象穿越时空的能力。作为序列化的核心,它让复杂对象的复制与传输变得简单。通过实现此接口,对象能被序列化成字节流,实现本地存储或网络传输,再通过反序列化恢复原状。尽管使用方便,但序列化过程耗时且存在安全风险,需谨慎使用。
52 7
|
4月前
|
安全 Java 调度
震撼揭秘!手撕并发编程迷雾,Semaphore与CountDownLatch携手AQS共享模式,让你秒懂并发神器背后的惊天秘密!
【8月更文挑战第4天】在Java并发编程中,AbstractQueuedSynchronizer (AQS) 是核心框架,支持独占锁与共享锁的实现。本文以Semaphore与CountDownLatch为例,深入解析AQS共享模式的工作原理。Semaphore通过AQS管理许可数量,控制资源的并发访问;而CountDownLatch则利用共享计数器实现线程间同步。两者均依赖AQS提供的tryAcquireShared和tryReleaseShared方法进行状态管理和线程调度,展示了AQS的强大功能和灵活性。
46 0
|
6月前
|
移动开发 前端开发 安全
技术心得记录:怎么更快地合成大西瓜?搞懂游戏的源码,闭着眼睛都能成功!
技术心得记录:怎么更快地合成大西瓜?搞懂游戏的源码,闭着眼睛都能成功!
98 0
|
安全 Java 数据库连接
ThreadLocal Java多线程下的影分身之术
后来,我把c删掉,变成了下面这样。如果我现在想查h,按照上面getEntry的逻辑,是不是遍历到3就停了,所以找不到h了? getEntry的逻辑表面确实是这样,但实际上getEntryAfterMiss、remove、gets时都会直接或者间接调用expungeStaleEntry会对表里的数据做整理。expungeStaleEntry()除了利用弱引用的特性对tab中Entry做清理外,还会对之前Hash冲突导致后移的Entry重新安放位置。所以不可能出现下面这种tab排放的。
38 0
算法入门小题目——点击消除
算法入门小题目——点击消除
|
Java 程序员 开发者
只用一行代码,你能玩出什么花样?
只用一行代码,你能玩出什么花样?
101 1
|
前端开发 算法
看了涡流大佬的面试文章的总结(手撕代码 & 算法)
看了涡流大佬的面试文章的总结(手撕代码&算法)
|
程序员
程序猿的中秋夜,利用这些“代码”,解锁团聚新姿态
水也水了这么多字,其实我想说的是,疫情,让我们原有的生活方式发生了翻天覆地的改变,友情、爱情、亲情,都受到了不同程度的改变,节日的庆祝方式或许不同,但月还是那片月,没有什么是熬不过去的。也正是如此,我踏入了计算机的门槛,或许大家有人的想法,和我不约而同,想用自己的双手,去创造些东西,行前人所不能,利后人之利。程序猿们,这个中秋,不会还在学习,还在修bug吧?记得某一年,国庆还是和中秋在一块,今年又来个双节,猿粪呐,不知道是不是又有小盆友要不满了,明明能放两次假,最后1+1=1,妙极了。什么,女朋友不认账?.
程序猿的中秋夜,利用这些“代码”,解锁团聚新姿态
算法每日一题——第七天——消除游戏
算法每日一题——第七天——消除游戏
算法每日一题——第七天——消除游戏

热门文章

最新文章