当前位置: 首页 > news >正文

Labelme加载AI(Segment-Anything)模型进行图像标注

  labelme是使用python写的基于QT的跨平台图像标注工具,可用来标注分类、检测、分割、关键点等常见的视觉任务,支持VOC格式和COCO等的导出,代码简单易读,是非常利用上手的良心工具。
在这里插入图片描述
第一步:
  下载源码进行安装。

git clone https://github.com/wkentaro/labelme.git
cd labelme
pip install -e .

第二步:
   找到源码所在路径进行修改。
  (1)打开labelme/labelme/ai/init.py,源码如下:

MODELS = [Model(name="Segment-Anything (speed)",encoder_weight=Weight(url="https://github.com/wkentaro/labelme/releases/download/sam-20230416/sam_vit_b_01ec64.quantized.encoder.onnx",  # NOQAmd5="80fd8d0ab6c6ae8cb7b3bd5f368a752c",),decoder_weight=Weight(url="https://github.com/wkentaro/labelme/releases/download/sam-20230416/sam_vit_b_01ec64.quantized.decoder.onnx",  # NOQAmd5="4253558be238c15fc265a7a876aaec82",),),Model(name="Segment-Anything (balanced)",encoder_weight=Weight(url="https://github.com/wkentaro/labelme/releases/download/sam-20230416/sam_vit_l_0b3195.quantized.encoder.onnx",  # NOQAmd5="080004dc9992724d360a49399d1ee24b",),decoder_weight=Weight(url="https://github.com/wkentaro/labelme/releases/download/sam-20230416/sam_vit_l_0b3195.quantized.decoder.onnx",  # NOQAmd5="851b7faac91e8e23940ee1294231d5c7",),),Model(name="Segment-Anything (accuracy)",encoder_weight=Weight(url="https://github.com/wkentaro/labelme/releases/download/sam-20230416/sam_vit_h_4b8939.quantized.encoder.onnx",  # NOQAmd5="958b5710d25b198d765fb6b94798f49e",),decoder_weight=Weight(url="https://github.com/wkentaro/labelme/releases/download/sam-20230416/sam_vit_h_4b8939.quantized.decoder.onnx",  # NOQAmd5="a997a408347aa081b17a3ffff9f42a80",),),
]

  (2)在labelme/labelme/文件夹下自建一个文件夹model_file。
  (3)依次输入以下几个网址下载onnx到model_file文件目录。

https://github.com/wkentaro/labelme/releases/download/sam-20230416/sam_vit_b_01ec64.quantized.encoder.onnx
https://github.com/wkentaro/labelme/releases/download/sam-20230416/sam_vit_b_01ec64.quantized.decoder.onnxhttps://github.com/wkentaro/labelme/releases/download/sam-20230416/sam_vit_l_0b3195.quantized.encoder.onnx
https://github.com/wkentaro/labelme/releases/download/sam-20230416/sam_vit_l_0b3195.quantized.decoder.onnxhttps://github.com/wkentaro/labelme/releases/download/sam-20230416/sam_vit_h_4b8939.quantized.encoder.onnx
https://github.com/wkentaro/labelme/releases/download/sam-20230416/sam_vit_h_4b8939.quantized.decoder.onnx

在这里插入图片描述
  (4)修改labelme/labelme/ai/init.py,代码如下:

import collectionsfrom .models.segment_anything import SegmentAnythingModel  # NOQAModel = collections.namedtuple("Model", ["name", "encoder_weight", "decoder_weight"]
)Weight = collections.namedtuple("Weight", ["url", "md5"])# MODELS = [
#     Model(
#         name="Segment-Anything (speed)",
#         encoder_weight=Weight(
#             url="https://github.com/wkentaro/labelme/releases/download/sam-20230416/sam_vit_b_01ec64.quantized.encoder.onnx",  # NOQA
#             md5="80fd8d0ab6c6ae8cb7b3bd5f368a752c",
#         ),
#         decoder_weight=Weight(
#             url="https://github.com/wkentaro/labelme/releases/download/sam-20230416/sam_vit_b_01ec64.quantized.decoder.onnx",  # NOQA
#             md5="4253558be238c15fc265a7a876aaec82",
#         ),
#     ),
#     Model(
#         name="Segment-Anything (balanced)",
#         encoder_weight=Weight(
#             url="https://github.com/wkentaro/labelme/releases/download/sam-20230416/sam_vit_l_0b3195.quantized.encoder.onnx",  # NOQA
#             md5="080004dc9992724d360a49399d1ee24b",
#         ),
#         decoder_weight=Weight(
#             url="https://github.com/wkentaro/labelme/releases/download/sam-20230416/sam_vit_l_0b3195.quantized.decoder.onnx",  # NOQA
#             md5="851b7faac91e8e23940ee1294231d5c7",
#         ),
#     ),
#     Model(
#         name="Segment-Anything (accuracy)",
#         encoder_weight=Weight(
#             url="https://github.com/wkentaro/labelme/releases/download/sam-20230416/sam_vit_h_4b8939.quantized.encoder.onnx",  # NOQA
#             md5="958b5710d25b198d765fb6b94798f49e",
#         ),
#         decoder_weight=Weight(
#             url="https://github.com/wkentaro/labelme/releases/download/sam-20230416/sam_vit_h_4b8939.quantized.decoder.onnx",  # NOQA
#             md5="a997a408347aa081b17a3ffff9f42a80",
#         ),
#     ),
# ]MODELS = [Model(name="Segment-Anything (speed)",encoder_weight=Weight(url="E:\labelme\labelme\model_file\sam_vit_b_01ec64.quantized.encoder.onnx",  # NOQAmd5="80fd8d0ab6c6ae8cb7b3bd5f368a752c",),decoder_weight=Weight(url="E:\labelme\labelme\model_file\sam_vit_b_01ec64.quantized.decoder.onnx",  # NOQAmd5="4253558be238c15fc265a7a876aaec82",),),Model(name="Segment-Anything (balanced)",encoder_weight=Weight(url="E:\labelme\labelme\model_file\sam_vit_l_0b3195.quantized.encoder.onnx",  # NOQAmd5="080004dc9992724d360a49399d1ee24b",),decoder_weight=Weight(url="E:\labelme\labelme\model_file\sam_vit_l_0b3195.quantized.decoder.onnx",  # NOQAmd5="851b7faac91e8e23940ee1294231d5c7",),),Model(name="Segment-Anything (accuracy)",encoder_weight=Weight(url="E:\labelme\labelme\model_file\sam_vit_h_4b8939.quantized.encoder.onnx",  # NOQAmd5="958b5710d25b198d765fb6b94798f49e",),decoder_weight=Weight(url="E:\labelme\labelme\model_file\sam_vit_h_4b8939.quantized.decoder.onnx",  # NOQAmd5="a997a408347aa081b17a3ffff9f42a80",),),
]

  (5)修改labelme/labelme/widgets/canvas.py,代码如下:

    def initializeAiModel(self, name):if name not in [model.name for model in labelme.ai.MODELS]:raise ValueError("Unsupported ai model: %s" % name)model = [model for model in labelme.ai.MODELS if model.name == name][0]if self._ai_model is not None and self._ai_model.name == model.name:logger.debug("AI model is already initialized: %r" % model.name)else:logger.debug("Initializing AI model: %r" % model.name)self._ai_model = labelme.ai.SegmentAnythingModel(name=model.name,# encoder_path=gdown.cached_download(#     url=model.encoder_weight.url,#     md5=model.encoder_weight.md5,# ),# decoder_path=gdown.cached_download(#     url=model.decoder_weight.url,#     md5=model.decoder_weight.md5,# ),encoder_path=model.encoder_weight.url,decoder_path=model.decoder_weight.url,)self._ai_model.set_image(image=labelme.utils.img_qt_to_arr(self.pixmap.toImage()))

第三步:
  启动labelme

cd labelme
labelme

在这里插入图片描述

相关文章:

  • 解决DaemonSet没法调度到master节点的问题
  • 短视频获客系统成功分享,与其开发流程与涉及到的技术
  • Ubuntu18.04安装A-Loam保姆级教程
  • 4-20mA高精度采集方案
  • 【nlp】3.5 Transformer论文复现:3.解码器部分(解码器层)和4.输出部分(线性层、softmax层)
  • Re54:读论文 How Context Affects Language Models‘ Factual Predictions
  • CSS:浏览器设置placeholder样式 / 微信小程序设置placeholder样式
  • Feign接口请求返回异常 no suitable HttpMessageConvert found for response type
  • 网络安全(黑客技术)—0基础小白自学
  • 系列六、Spring整合单元测试
  • Pycharm创建项目新环境,安装Pytorch
  • java springboot测试类虚拟MVC环境 匹配返回值与预期内容是否相同 (JSON数据格式) 版
  • HCIA题目解析(1)
  • element-vue实现网页锁屏功能
  • webshell之Laravel和yii
  • 分享的文章《人生如棋》
  • Android单元测试 - 几个重要问题
  • Apache的80端口被占用以及访问时报错403
  • ERLANG 网工修炼笔记 ---- UDP
  • ES学习笔记(12)--Symbol
  • exif信息对照
  • httpie使用详解
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JavaScript实现分页效果
  • java小心机(3)| 浅析finalize()
  • leetcode98. Validate Binary Search Tree
  • mysql 数据库四种事务隔离级别
  • PHP的类修饰符与访问修饰符
  • PV统计优化设计
  • Python打包系统简单入门
  • Redis字符串类型内部编码剖析
  • 后端_MYSQL
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 基于web的全景—— Pannellum小试
  • 简析gRPC client 连接管理
  • 利用DataURL技术在网页上显示图片
  • 聊聊sentinel的DegradeSlot
  • 码农张的Bug人生 - 初来乍到
  • 深入浅出webpack学习(1)--核心概念
  • 使用docker-compose进行多节点部署
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 一些关于Rust在2019年的思考
  • 找一份好的前端工作,起点很重要
  • 阿里云重庆大学大数据训练营落地分享
  • ​LeetCode解法汇总518. 零钱兑换 II
  • # 数据结构
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (1)(1.13) SiK无线电高级配置(五)
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (附源码)计算机毕业设计ssm电影分享网站
  • (四)JPA - JQPL 实现增删改查
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转载)Linux网络编程入门
  • (轉貼) UML中文FAQ (OO) (UML)