使用DataWorks Notebook实现智能图片标注,给你的图片加个“注释”

简介: 本文介绍如何使用DataWorks Notebook结合视觉识别模型RAM和自然语言处理模型BERT实现多模态图片标注,为智能内容生成和多模态数据分析的广泛应用提供支持。

DataWorks作为一站式智能数据开发治理平台,积累和沉淀了阿里巴巴十余年大数据建设方法论和最佳实践,为数仓、数据湖、OpenLake湖仓一体数据架构提供智能化ETL开发、数据分析与主动式数据资产治理服务,助力“Data+AI”全生命周期的数据管理。面向大数据&AI协同开发场景,DataWorks提供了交互式开发和分析工具Notebook。DataWorks Notebook具备灵活且可复用的数据处理和分析环境,增强了数据开发和分析体验的直观性、模块化和交互性,能够帮助用户轻松高效地进行数据处理、数据探索、数据可视化和模型构建。


开发者在创建Notebook个人开发环境时,可以选择GPU类型的资源,以支持进行高性能的计算工作。在此基础上:开发者可在DataWorks一个平台即可完成数据清洗、特征工程到模型训练/推理的全流程,无需跨平台迁移数据,真正实现“Data+ AI”一站式数据开发,让数据驱动的未来加速降临。


本文将基于视觉识别模型 RAM 和自然语言处理模型 BERT,介绍如何使用DataWorks Notebook实现多模态图片标注,为智能内容生成、多模态数据分析领域提供数据基础。


实践原理与背景:

通过RAM的开放词汇视觉识别能力,系统能够从图像中精准检测并提取物体、场景及细粒度属性信息。 结合BERT对文本语义的深度理解与生成能力,将视觉特征转化为自然语言描述,实现语义连贯、内容丰富的图像标注。

该方法利用视觉-语言跨模态对齐,在无需领域标注数据的条件下,支持零样本场景下的自动化标注,可广泛应用于智能内容生成及多模态数据分析等领域。


前置步骤:

  1. 进入DataWorks Gallery ,选择基于视觉识别模型 RAM 和自然语言处理模型 BERT 实现图片标注”案例

DataWorks Gallery是最佳实践案例集,提供数十种公共数据集与数据开发实践案例,覆盖大数据+AI协同开发、RAG、数据预处理多场景,涉及互联网、金融、电商、汽车等多行业,旨在帮助用户快速体验最佳实践。您可以一键载入案例,快速体验。

  1. 点击“载入案例”,选择“工作空间”与“个人开发环境”。
  2. 如何创建工作空间?

截屏2025-03-14 上午11.44.29.png

填写工作空间基本信息,注意需要将数据开发(DataStudio)(新版)公测开关置为开启才可使用Notebook。

截屏2025-03-14 上午11.39.31.png

  1. 如何创建个人开发环境实例?

工作空间创建完后,点击“创建实例”,进入数据开发Data Studio创建实例界面

注意选择GPU资源类型时,选择以下配置:  

  • GPU 推荐使用 24GB 显存的 A10(ecs.gn7i-c8g1.2xlarge)或更高配置
  • 镜像选择 DSW 官方镜像 modelscope:1.18.0-pytorch2.3.0-gpu-py310-cu121-ubuntu22.04

截屏2025-03-14 下午1.11.30.png

完成以上配置后,点击“确定”即可完成个人环境实例创建,根据以下实验步骤完成实验。


实验步骤

1. 环境准备

Recognize Anything Model (RAM) 是一个先进的视觉识别模型,旨在通过零样本(zero-shot)或小样本(few-shot)学习,实现开放词汇(open-vocabulary)的通用视觉识别。

运行以下命令,在Notebook 个人开发环境中安装RAM。

! pip install git+https://github.com/xinyu1205/recognize-anything.git
Looking in indexes: https://mirrors.aliyun.com/pypi/simple Collecting git+https://github.com/xinyu1205/recognize-anything.git  Cloning https://github.com/xinyu1205/recognize-anything.git to /tmp/pip-req-build-j5jd7kf3  Running command git clone --filter=blob:none --quiet https://github.com/xinyu1205/recognize-anything.git /tmp/pip-req-build-j5jd7kf3
Resolved https://github.com/xinyu1205/recognize-anything.git to commit 7cb804a8609e9f4b1a50b7f31436d2df40bb9481  Preparing metadata (setup.py) ... ?25ldone ?25hWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv [notice] A new release of pip is available: 23.0.1 -> 25.0.1 [notice] To update, run: pip install --upgrade pip

2. 下载数据集

本教程提供了一份多模态对话数据集。

数据集中的样本为单轮对话形式,共计 261 条样本,每条样本都由一条系统提示、一条用户指令和一条模型回答组成。

数据样例如下所示:

[  {  "conversations": [  {  "from": "system",  "value": "你是一个导游,请生动有趣地回答游客提出的问题"  },  {  "from": "human",  "value": "给我讲讲这个东西<image>"  },  {  "from": "gpt",  "value": "各位游客朋友们,大家好!\n\n现在映入大家眼帘的,是一件极为珍贵的文物——**神面纹玉戚**。它可不是一般的宝贝,而是来自遥远的新石器时代的一件精美玉器哦!\n\n这件宝贝现藏于山西博物院,它的尺寸相当精致:高20.6厘米,宽13.1厘米,厚仅0.4厘米,真是薄如蝉翼,工艺精湛!\n\n1964年,它在黎城县后庄村广志山出土,仿佛穿越时空,向我们诉说着古老的故事。\n\n大家仔细看,这块玉戚采用了线刻工艺,一侧雕刻着神人的半侧面头像,头戴华美的冠饰,披拂着飘逸的长发,眼眉清晰可辨,仿佛在凝视着我们;而另一侧则是一个方形台座上置神人冠饰的形象,显得神秘而威严。\n\n要知道,玉戚在古代可是象征军事统帅权力的神器,握有它,就如同掌握了千军万马!\n\n大家不妨多停留片刻,感受一下这件文物散发出的古老而神秘的气息吧!\n\n谢谢大家的聆听,接下来我们将继续参观其他精彩展品,敬请期待!"  }  ],  "images": [  "images/instance_1579398113581395972.jpg"  ]  } ]

运行以下命令,下载数据集。

import os region = os.getenv('DATAWORKS_REGION')
!wget https://dataworks-notebook-{region}.oss-{region}-internal.aliyuncs.com/public-datasets/Image_Tagging_GPU/Qwen2-VL-History.zip !mkdir data && unzip -q Qwen2-VL-History.zip -d ./data
--2025-03-13 16:03:20-- https://dataworks-notebook-cn-shanghai.oss-cn-shanghai-internal.aliyuncs.com/public-datasets/Image_Tagging_GPU/Qwen2-VL-History.zip 正在解析主机 dataworks-notebook-cn-shanghai.oss-cn-shanghai-internal.aliyuncs.com (dataworks-notebook-cn-shanghai.oss-cn-shanghai-internal.aliyuncs.com)... 100.118.102.33, 100.118.102.36, 100.118.102.35, ... 正在连接 dataworks-notebook-cn-shanghai.oss-cn-shanghai-internal.aliyuncs.com (dataworks-notebook-cn-shanghai.oss-cn-shanghai-internal.aliyuncs.com)|100.118.102.33|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度: 7436378 (7.1M) [application/zip] 正在保存至: ‘Qwen2-VL-History.zip’ Qwen2-VL-History.zi 100%[===================>] 7.09M --.-KB/s 用时 0.1s 2025-03-13 16:03:21 (50.4 MB/s) - 已保存 ‘Qwen2-VL-History.zip’ [7436378/7436378])

3. 下载模型

3.1 下载 ram_plus_swin_large_14m 模型

在本教程中,所需的第一个模型为视觉识别模型 ram_plus_swin_large_14m:

https://huggingface.co/xinyu1205/recognize-anything-plus-model/blob/main/ram_plus_swin_large_14m.pth

RAM++ 是下一代 RAM ,能够高精度地识别任何类别,包括预定义的常见类别和多样化的开放类别。

RAM++ 在常见标签类别、不常见标签类别以及人物交互阶段的表现均优于现有的 SOTA 图像基础识别模型。

运行以下命令,下载 ram_plus_swin_large_14m 模型。

注意:该模型文件较大(2.8 GB),下载时长预计10分钟。

!mkdir models !wget -P ./models https://dataworks-notebook-{region}.oss-{region}-internal.aliyuncs.com/public-datasets/Image_Tagging_GPU/ram_plus_swin_large_14m.pth
--2025-03-13 16:03:21-- https://dataworks-notebook-cn-shanghai.oss-cn-shanghai-internal.aliyuncs.com/public-datasets/Image_Tagging_GPU/ram_plus_swin_large_14m.pth 正在解析主机 dataworks-notebook-cn-shanghai.oss-cn-shanghai-internal.aliyuncs.com (dataworks-notebook-cn-shanghai.oss-cn-shanghai-internal.aliyuncs.com)... 100.118.102.34, 100.118.102.35, 100.118.102.33, ... 正在连接 dataworks-notebook-cn-shanghai.oss-cn-shanghai-internal.aliyuncs.com (dataworks-notebook-cn-shanghai.oss-cn-shanghai-internal.aliyuncs.com)|100.118.102.34|:443... 已连接。 已发出 HTTP 请求,正在等待回应...
200 OK 长度: 3010210801 (2.8G) [application/octet-stream] 正在保存至: ‘./models/ram_plus_swin_large_14m.pth’ ram_plus_swin_large 100%[===================>] 2.80G 109MB/s 用时 21s 2025-03-13 16:03:42 (136 MB/s) - 已保存 ‘./models/ram_plus_swin_large_14m.pth’ [3010210801/3010210801])

3.2 下载 BERT-base-uncased 模型

在本教程中,所需的第一个模型为视觉识别模型 BERT_base_uncased:

https://huggingface.co/google-bert/bert-base-uncased/tree/main

BERT_base_uncased 是使用了掩码语言建模 (MLM) 目标对英语进行预训练的模型。该模型不区分英文大小写。

运行以下命令,下载 BERT_base_uncased 模型。

注意:该模型文件较大(2.9 GB),下载时长预计10分钟。

!wget https://dataworks-notebook-{region}.oss-{region}-internal.aliyuncs.com/public-datasets/Image_Tagging_GPU/bert-base-uncased.zip !unzip -q bert-base-uncased.zip -d ./models
--2025-03-13 16:03:42-- https://dataworks-notebook-cn-shanghai.oss-cn-shanghai-internal.aliyuncs.com/public-datasets/Image_Tagging_GPU/bert-base-uncased.zip 正在解析主机 dataworks-notebook-cn-shanghai.oss-cn-shanghai-internal.aliyuncs.com (dataworks-notebook-cn-shanghai.oss-cn-shanghai-internal.aliyuncs.com)... 100.118.102.33, 100.118.102.36, 100.118.102.35, ... 正在连接 dataworks-notebook-cn-shanghai.oss-cn-shanghai-internal.aliyuncs.com (dataworks-notebook-cn-shanghai.oss-cn-shanghai-internal.aliyuncs.com)|100.118.102.33|:443... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度: 3194230164 (3.0G) [application/zip] 正在保存至: ‘bert-base-uncased.zip’ bert-base-uncased.z 100%[===================>] 2.97G 154MB/s 用时 21s 2025-03-13 16:04:03 (146 MB/s) - 已保存 ‘bert-base-uncased.zip’ [3194230164/3194230164])

下载2个模型后,在DataWorks个人目录中,模型文件将按照以下格式存储:

├─models │ │─ ram_plus_swin_large_14m.pth │ │─ bert-base-uncased │ │ │─coreml │ │ │ │─... │ │ │─config.json │ │ │─model.safetensors │ │ │─pytorch_model.bin │ │ │─...

4. 数据打标

通过如下代码定义图片打标的算子逻辑:

from collections import Counter from datasets import Image import os import numpy as np import torch from ram.models import ram_plus from ram.transform import get_transform import logging logging.basicConfig(level=logging.INFO,  format='%(asctime)s:%(name)s:%(levelname)s:%(message)s') IMAGE_BASE_DIR = './data' def load_image(path):  img_feature = Image()  img = img_feature.decode_example(img_feature.encode_example(path))  img = img.convert('RGB')  return img class ImageTaggingMapper(object):  """Generate image tags.  """  def __init__(self,  image_filed: str = 'images',  tag_field_name: str = 'image_tags',  *args,  **kwargs):  """  Initialization method.  :param image_filed: the field name of images.  :param tag_field_name: the field name to store the tags.  :param args: extra args  :param kwargs: extra args  """  super().__init__(*args, **kwargs)  self.image_filed = image_filed  logging.info('Loading recognizeAnything model...')  self.model = ram_plus(  pretrained='./models/ram_plus_swin_large_14m.pth',  text_encoder_type='./models/bert-base-uncased',  image_size=384,  vit='swin_l',  threshold=0.68)  self.device = torch.device('cuda:0' if torch.cuda.is_available() else 'cpu')  self.model.to(self.device).eval()   self.transform = get_transform(image_size=384)  self.tag_field_name = tag_field_name  def process_single(self, sample):  # 检查标签是否已生成  if self.tag_field_name in sample:  return sample  # 如果图像不存在,则返回空标签  if self.image_filed not in sample or not sample[self.image_filed]:  sample[self.tag_field_name] = np.array([[]], dtype=np.str_)  return sample  # 加载图像  image_paths = sample[self.image_filed]   image_tags = []  for img_path in image_paths:  img_path = os.path.join(IMAGE_BASE_DIR, img_path) # 获取图像的路径  image = load_image(img_path)  image_tensor = torch.unsqueeze(self.transform(image), dim=0).to(self.device)  with torch.no_grad():  tags, _ = self.model.generate_tag(image_tensor)  words = [word.strip() for word in tags[0].split('|')]  word_count = Counter(words)  sorted_word_list = [item for item, _ in word_count.most_common()]  image_tags.append(np.array(sorted_word_list, dtype=np.str_))  sample[self.tag_field_name] = image_tags  return sample

对数据集中的图片进行打标:

from datasets import load_dataset data_path = './data/train.json' tag_data_path = './out_tag_data.json' # 加载数据 dataset = load_dataset('json', data_files=data_path) # 初始化打标算子 image_tagging_op = ImageTaggingMapper() # 数据集打标 dataset = dataset.map(function=image_tagging_op.process_single) # 保存打标结果,在原数据文件中新增一个tag field保存打标结果 dataset['train'].to_json(tag_data_path, force_ascii=False)
2025-03-13 16:04:36,406:root:INFO:Loading recognizeAnything model...
-------------- ./models/ram_plus_swin_large_14m.pth -------------- load checkpoint from ./models/ram_plus_swin_large_14m.pth vit: swin_l
Creating json from Arrow format: 0%| | 0/1 [00:00<?, ?ba/s]
349288

查看1条打标的数据,可以看到在原数据基础上新增了一个image_tags字段保存打标的结果:

!head -n 1 ./out_tag_data.json
{"conversations":[{"from":"system","value":"你是一个文博工作人员,请严谨认真地回答用户提出的问题"},{"from":"human","value":"<image>给我讲讲这个东西"},{"from":"gpt","value":"# 文物名称\n神面纹玉戚\n# 时代\n新石器时代\n# 类别\n玉器\n# 收藏机构\n山西博物院\n# 尺寸\n高20.6厘米,宽13.1厘米,厚0.4厘米\n# 出土时间\n1964年\n# 出土地点\n黎城县后庄村广志山\n# 特征描述\n线刻,一侧为神人半侧面头像,头戴冠饰,披拂长发,眼眉清晰可辨;一侧为一方形台座上置神人冠饰的形象,神秘威严\n# 象征意义\n象征军事统帅权力"}],"images":["images\/instance_1579398113581395972.jpg"],"image_tags":[["artifact","hole","metal","rust","writing"]]}

打标结果可视化:

import matplotlib.pyplot as plt from PIL import Image, ImageDraw, ImageFont import os import json import random TAG_FONT_SIZE = 30 FONT_PATH = "./DingTalk JinBuTi.ttf" # 使用字体文件 TAG_COLOR = "red" # 可视化函数 def visualize_with_tags(image_path, tags):  try:  # 加载图片  img = Image.open(image_path)  draw = ImageDraw.Draw(img)   # 加载字体并设置大小  try:  font = ImageFont.truetype(FONT_PATH, TAG_FONT_SIZE)  except Exception as e:  print('load default font')  font = ImageFont.load_default() # 默认字体可能无法缩放   # 在图片左上角添加标签  tag_text = "标签:\n" + ", \n".join(tags)  draw.text((10, 10), tag_text, fill=TAG_COLOR, font=font)   # 显示图片  plt.figure(figsize=(10, 8))  plt.imshow(img)  plt.axis("off")  plt.title(os.path.basename(image_path))  plt.show()   except FileNotFoundError:  print(f"图片文件不存在:{image_path}")  except Exception as e:  print(f"处理图片时发生错误:{str(e)}") # 加载数据 with open(tag_data_path, 'r') as f:  data_list = f.readlines()  random.shuffle(data_list) # 有一些连续相同的图像,shuffle 显示不同的图像   # 批量可视化  for item in data_list[:3]: # 显示3个样本  item = json.loads(item)  images = item['images']  tags = item['image_tags']  for i in range(len(images)):  image_path = os.path.join(IMAGE_BASE_DIR, images[i])  tag = item['image_tags'][i]  print(f"图片路径:{images[i]}")  print(f"标注标签:{tags[i]}")   visualize_with_tags(image_path, tag)
图片路径:images/instance_1579398113589784578.jpg 标注标签:['calligraphy', 'ink', 'manuscript', 'mark', 'pen', 'scroll', 'text', 'write', 'writing']

图片路径:images/instance_1579398113581395972.jpg 标注标签:['artifact', 'hole', 'metal', 'rust', 'writing']

图片路径:images/instance_1586990758474346497.jpg 标注标签:['architecture', 'building', 'city', 'pillar', 'entrance', 'palace', 'place', 'plaza', 'red', 'shrine', 'sky', 'structure', 'temple', 'worship']



立即行动:免费额度,即刻体验!


DataWorks为新用户提供750CU*H免费GPU算力资源,有效期1个月,点击领取免费试用资源包;

同时推出400CU*H的资源组抵扣包5折活动,可抵扣按量付费费用,点击领取百元资源组抵扣包


相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
相关文章
|
6月前
|
SQL DataWorks 大数据
DataWorks x 婚礼纪:智能一站式数据开发治理平台让千万新人的幸福时刻“数智化”
婚礼纪是杭州火烧云科技推出的结婚服务平台,覆盖婚宴酒店、婚纱摄影等全产业链,年服务超2000万对新人。为应对海量数据处理挑战,婚礼纪选择阿里云DataWorks作为一站式大数据开发治理平台,解决数据血缘不清、指标口径混乱等问题。通过湖仓一体架构与全链路数据治理,实现多源异构数据高效整合,支撑精准营销、交易风控等核心场景。DataWorks新版数据开发Data Studio大幅提升开发效率,Copilot智能助手优化SQL代码生成与测试,助力婚礼纪构建数据驱动的结婚产业服务中枢。
|
10月前
|
SQL 分布式计算 DataWorks
活动实践 | DataWorks智能交互式数据开发与分析之旅
本指南介绍了如何使用阿里云平台进行大数据开发与分析。首先,在MaxCompute控制台创建项目并配置计算资源;接着,通过DataWorks控制台创建工作空间和独享资源组,并绑定工作空间。然后,创建个人开发环境,载入案例并新建Notebook实例。在Notebook中,通过SQL和Python Cell进行交互式开发和数据分析,体验智能助手Copilot的功能,如SQL改写、解释、生成注释及智能建表。最后,清理所有创建的资源,包括删除DataWorks资源、MaxCompute项目及网络配置,确保环境整洁。
|
11月前
|
SQL 人工智能 自然语言处理
DataWorks年度发布:智能化湖仓一体数据开发与治理平台的演进
阿里云在过去15年中持续为268集团提供数据服务,积累了丰富的实践经验,并连续三年在IDC中国数据治理市场份额中排名第一。新一代智能数据开发平台DateWorks推出了全新的DateStudio IDE,支持湖仓一体化开发,新增Flink计算引擎和全面适配locs,优化工作流程系统和数据目录管理。同时,阿里云正式推出个人开发环境模式和个人Notebook,提升开发者体验和效率。此外,DateWorks Copilot通过自然语言生成SQL、代码补全等功能,显著提升了数据开发与分析的效率,已累计帮助开发者生成超过3200万行代码。
|
11月前
|
SQL 分布式计算 DataWorks
DataWorks智能交互式数据开发与分析之旅
本次实验将带您进行DataWorks Notebook的快速入门,包含:Notebook新建、多引擎SQL开发与分析、Python开发、交互式分析等,同时,使用DataWorks Copilot体验智能数据开发,体验智能交互式数据探索之旅。
2939 11
|
11月前
|
DataWorks 搜索推荐 大数据
聊聊DataWorks——这个一站式智能大数据开发治理平台
聊聊DataWorks——这个一站式智能大数据开发治理平台
700 2
|
数据采集 存储 分布式计算
构建智能数据湖:DataWorks助力企业实现数据驱动转型
【8月更文第25天】本文将详细介绍如何利用阿里巴巴云的DataWorks平台构建一个智能、灵活、可扩展的数据湖存储体系,以帮助企业实现数据驱动的业务转型。我们将通过具体的案例和技术实践来展示DataWorks如何集成各种数据源,并通过数据湖进行高级分析和挖掘,最终基于数据洞察驱动业务增长和创新。
666 53
|
SQL 人工智能 自然语言处理
【2023云栖】田奇铣:大模型驱动DataWorks数据开发治理平台智能化升级
随着大模型掀起AI技术革新浪潮,大数据也进入了与AI深度结合的创新时期。2023年云栖大会上,阿里云DataWorks产品负责人田奇铣发布了DataWorks Copilot、DataWorks AI增强分析、DataWorks湖仓融合数据管理等众多新产品能力,让DataWorks这款已经发展了14年的大数据开发治理平台产品,从一站式向智能化不断升级演进。
59935 8
|
SQL DataWorks 安全
DataWorks产品使用合集之怎么注释代码块
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
375 0
|
运维 监控 DataWorks
DataWorks智能监控 规则管理是什么?
DataWorks智能监控 规则管理是什么?
187 2
|
SQL 存储 自然语言处理
阿里云 DataWorks 智能数据建模(二)| 学习笔记
快速学习阿里云 DataWorks 智能数据建模
阿里云 DataWorks 智能数据建模(二)| 学习笔记

热门文章

最新文章

相关产品

  • 大数据开发治理平台 DataWorks
  • 下一篇