Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从图像标注开始,用 Byzer 加 Xtreme1 完成图像实例分割训练

从图像标注开始,用 Byzer 加 Xtreme1 完成图像实例分割训练

作者头像
用户2936994
发布于 2022-11-12 05:49:26
发布于 2022-11-12 05:49:26
1.1K00
代码可运行
举报
文章被收录于专栏:祝威廉祝威廉
运行总次数:0
代码可运行

该文需要将于 2022年11月发布的 Byzer 2.4.0 以及最新版本的 Byzer Notebook来支持,尽情期待。

背景

要完整的支持深度学习,需要一个很长的 Pipeline,通常我们的工作起步于标注平台, 尽管Byzer 也可以作为标注平台的上游,比如对图片和视频做一个统一的处理(诸如缩放成统一大小等),然后再放到标注平台里。

相比直接使用标注工具诸如 Lableimg 以及 Pytorch 等框架, 使用 Xtreme1 和 Byzer 则更适合形成一个完整和顺畅的工作流,我们会在文章中体会到这一点的。

另外,通过该文,我们可以看到 Byzer 作为胶水语言,可以很好的衔接多种工具,完成复杂的 Pipeline。

环境

你需要一个 Linux 环境,最好有 GPU。然后安装如下三个软件:

  1. Xtreme1 标注平台 安装文档参考: https://github.com/basicai/xtreme1
  2. Byzer Notebook 安装文档 Byzer Notebook 安装
  3. Byzer-lang 执行引擎 Byzer-lang 安装

标注

Xtreme1 最快捷的体验方式是 Docker ,启动后,需要先自助注册一个账号,然后登录。

点击图中的红框,进入数据集界面。

点击右上角的创建数据集,然后上传一个 zip 格式打包的图片数据集就可以了。我这里取名为 balloon, 里面有60张图片。

我标注了两张,只是为了做演示。标注完成后,就可以选择右上角的 Export:

导出后右下角,可以看到一个导出成功的图表,其实这里导出的是一个 json 文件,里面有标注信息以及图片 的地址。

实际上,这个标注文件以及原始的图片,都在 Minio上,该存储是 Xtreme1 自带的一个对象存储。Byzer 可以直接访问这个存储,所以无需下载和手动写代码去拉取图片。

加载、保存标注数据

自助注册和登录 Byzer Notebook后,因为需要访问 Minio 对象存储,我们需要有个驱动,可以在 Byzer Notebook 里执行插件安装的命令:

该插件比较大,下载时间较长。

接着安装 Xtreme1 数据源插件:

安装完成后,可以给 Minio 设置连接信息:

注意, endpoint 需要修改成一个实际的地址。

用户可以登录到 Minio 看看目录结构以及随意找一张图片的地址:

然后使用 Byzer Notebook 加载该图片,看看是不是能访问 Minio:

上面图的输出说明Byzer 已经可以访问 Minio了。

现在我们来加载下刚刚标注的数据。因为我只标注了两张,我们看看加载完后是不是数量是对的:

注意加载的路径是一个json文件,该文件存储在 Mino上, Byzer 会生成一个表,该表包含图片名称,图片标注信息,以及图片二进制三个字段。

如果图片很多,用户可以通过将标注的所有数据保存到数据湖,可以加速后续的访问。注意,这是个可选项。在Byzer 中你只要使用 save 语法即可完成。

从这里我们可以看到,我们可以轻松的把非结构化数据以及对应的标注信息以表结构的形态进行保存。

转换成 Coco 标注格式 并且使用 detectron2 进行训练

这里用户需要在安装 Byzer 的机器上提供一个合适的 Python 环境,我们推荐使用conda, 在下面的示例中,我们使用一个名称叫 ray-1.12.0 的。需要至少包含如下几个依赖包:

  1. pyjava
  2. byzer-cocodataset
  3. pytorch
  4. detectron2

然后在 Byzer Notebook 新建一个 Python 的 Cell:

第一个 input 框填写的是数据集对应的表,也就是前面我们用 load 语法得到的数据集。 schema 为 file 表示最后我们会输出一个模型表,虽然对应的模型是目录,但是Byzer 也可以将其转化表来存储。我们来看下完整代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#%python
#%input=new_ballon_dataset
#%output=out
#%schema=file
#%runIn=driver
#%dataMode=model
#%cache=true
#%env=source /opt/miniconda3/bin/activate ray-1.12.0


from pyjava.api.mlsql import RayContext,PythonContext
from tech.mlsql.plugin.ds.coco import create_coco_format_json

import torch, detectron2
import os

## Some basic setup:
## Setup detectron2 logger
import detectron2
from detectron2.utils.logger import setup_logger
setup_logger()


## import some common detectron2 utilities
from detectron2 import model_zoo
from detectron2.engine import DefaultPredictor
from detectron2.config import get_cfg
from detectron2.utils.visualizer import Visualizer
from detectron2.data.datasets import register_coco_instances
from detectron2.engine import DefaultTrainer


context:PythonContext = context
ray_context = RayContext.connect(globals(),None)

rows = ray_context.collect()

create_coco_format_json(rows,"/tmp/new_ballon_dataset2")

TORCH_VERSION = ".".join(torch.__version__.split(".")[:2])
CUDA_VERSION = torch.__version__.split("+")[-1]
print("torch: ", TORCH_VERSION, "; cuda: ", CUDA_VERSION)
print("detectron2:", detectron2.__version__)


cfg = get_cfg()
## add project-specific config (e.g., TensorMask) here if you're not running a model in detectron2's core library
cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5  # set threshold for this model
## Find a model from detectron2's model zoo. You can use the https://dl.fbaipublicfiles... url as well
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")
predictor = DefaultPredictor(cfg)

register_coco_instances("new_ballon_dataset", {}, "/tmp/new_ballon_dataset2/annotations/coco.json", "/tmp/new_ballon_dataset2/images")


cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))
cfg.DATASETS.TRAIN = ("new_ballon_dataset",)
cfg.DATASETS.TEST = ()
cfg.DATALOADER.NUM_WORKERS = 2
cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")  # Let training initialize from model zoo
cfg.SOLVER.IMS_PER_BATCH = 2  ## This is the real "batch size" commonly known to deep learning people
cfg.SOLVER.BASE_LR = 0.00025  ## pick a good LR
cfg.SOLVER.MAX_ITER = 300    ## 300 iterations seems good enough for this toy dataset; you will need to train longer for a practical dataset
cfg.SOLVER.STEPS = []        ## do not decay learning rate
cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = 128   ## The "RoIHead batch size". 128 is faster, and good enough for this toy dataset (default: 512)
cfg.MODEL.ROI_HEADS.NUM_CLASSES = 1  ## only has one class (ballon). (see https://detectron2.readthedocs.io/tutorials/datasets.html#update-the-config-for-new-datasets)
## NOTE: this config means the number of classes, but a few popular unofficial tutorials incorrect uses num_classes+1 here.

os.makedirs(cfg.OUTPUT_DIR, exist_ok=True)
trainer = DefaultTrainer(cfg) 
trainer.resume_or_load(resume=False)
trainer.train()

model_path = os.path.join(cfg.OUTPUT_DIR, "model_final.pth") 
model_binary = [item for item in streaming_tar.build_rows_from_file(model_path)]

context.build_result(model_binary)

这里值得关注的是, Byzer-python 仅仅关注输入和输出,输入主要是数据集,这里是指我们前面加载的表,然后通过 byzer-cocodataset 库中的 create_coco_format_json 方法将其转换为 Coco 数据集,然后就可以使用 detectron2 做训练了,最后将模型保存后,重新输出成表,后续方便保存到诸如数据湖中。

总结

在这里我们没有演示如何使用 Byzer 进行模型注册并且支持 API,流,批中的使用,感兴趣的同学可以参考诸如 祝威廉:如何基于 Byzer 使用深度学习快速开发一个图片分类应用 之类的文章。

在本篇文章中, Byzer 使用简单的语法即可读取标注数据,并且将其转化为标准数据集,进而使用 Python中的detectron2 进行处理。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[深度学习][原创]使用labelImg+yolov5完成所有slowfast时空动作检测项目-训练测试篇
当我们准备好训练集和配置文件后就可以着手训练的事情了。首先安装好slowfast环境,然后打开源码,slowfast/configs/AVA/SLOWFAST_32x2_R50_SHORT.yaml作如下配置
云未归来
2025/07/18
880
[深度学习][原创]使用labelImg+yolov5完成所有slowfast时空动作检测项目-训练测试篇
Detectron2入门教程
0. 前言目标:走马观花,两天时间浏览Detectron2源码,稍微记录一下。 与 TensorFlow Object Detection API、mmdetection 一样,Detectron2 也是通过配置文件来设置各种参数,所有的相关内容都像搭积木一样一点一点拼凑起来。我自己感觉,一般所有代码都可以分为三个部分,所以看Detectron2的源码也分为以下三个部分。 数据处理:包括数据读取、数据增强以及其他数据预处理。模型构建:没啥好说的。模型训练、预测、评估:包括模型存取、优化器、学习率、损失函数、
狼啸风云
2020/02/14
10.6K1
Detectron2 实用上手教程
随着最新的 Pythorc1.3 版本的发布,下一代完全重写了它以前的目标检测框架,新的目标检测框架被称为 Detectron2。本教程将通过使用自定义 COCO 数据集训练实例分割模型,帮助你开始使用此框架。如果你不知道如何创建 COCO 数据集,请阅读我之前的文章——如何创建自定义 COCO 数据集用于实例分割(https://www.dlology.com/blog/how-to-create-custom-coco-data-set-for-instance-segmentation/)。
AI研习社
2019/10/16
8.2K0
深度学习 | Detectron2使用指南
Detectron2是Facebook AI Research的检测和分割框架,其主要基于PyTorch实现,但具有更模块化设计,因此它是灵活且便于扩展的,具体简介可见Github库和Meta AI Blog Post。
Justlovesmile
2022/03/22
7.3K0
深度学习 | Detectron2使用指南
在 PyTorch 中使用 Detectron2 进行对象检测的指南
目标检测是深度学习的流行应用之一。让我们首先考虑一个现实生活中的例子。大多数人会在手机中使用 Google 相册,它会根据“事物”选项下的照片自动将照片分组。我在下面附上一个片段。
磐创AI
2021/10/27
1.8K0
在 PyTorch 中使用 Detectron2 进行对象检测的指南
Mask R-CNN源代码终于来了,还有它背后的物体检测平台
夏乙 编译整理 量子位 出品 | 公众号 QbitAI “等代码吧。” 从Mask R-CNN论文亮相至今的10个月里,关于它的讨论几乎都会以这句话收尾。 现在,官方版开源代码终于来了。同时发布的,
量子位
2018/03/02
1.1K0
Mask R-CNN源代码终于来了,还有它背后的物体检测平台
【目标检测】MMDetection的安装与基础使用
MMDetection是商汤和港中文大学针对目标检测任务推出的一个开源工具包,统一标准化了很多前沿模型,为研究者复现代码提供了便利。本篇就来尝试安装一下MMDetection并简单跑一下官方的示例教程。
zstar
2022/09/23
3.5K0
【目标检测】MMDetection的安装与基础使用
手把手教你训练自己的Mask R-CNN图像实例分割模型(PyTorch官方教程)
关于Mask R-CNN的详细理论说明,可以参见原作论文https://arxiv.org/abs/1703.06870,网上也有大量解读的文章。本篇博客主要是参考了PyTorch官方给出的训练教程,将如何在自己的数据集上训练Mask R-CNN模型的过程记录下来,希望能为感兴趣的读者提供一些帮助。
全栈程序员站长
2022/09/23
4.9K1
手把手教你训练自己的Mask R-CNN图像实例分割模型(PyTorch官方教程)
[深度学习][原创]slowfast的demo跑起来的正确方法
项目地址:GitHub - facebookresearch/SlowFast: PySlowFast: video understanding codebase from FAIR for reproducing state-of-the-art video models.
云未归来
2025/07/18
770
妙啊!MMDetection 训练自定义数据集
上一篇讲到如何安装MMDetection,今天要分享如何使用 MMDetection 训练自定义数据集,其实非常简单!
AI算法与图像处理
2021/03/14
2.3K0
Detectron2学习五:build_backbone_model配置及实现流程
本文主要讲build_backbone_model的配置及创建流程,目的则是希望大家看完本章节后能够对detectron2中模型创建及使用有清晰的认识,便于后续自定义网络层。若有需要补充希望大家在评论中提出。
CV_Learner
2019/12/16
6.1K1
Github 代码实践:Pytorch 实现的语义分割器
使用Detectron预训练权重输出 *e2e_mask_rcnn-R-101-FPN_2x* 的示例
AI研习社
2018/07/26
1.5K0
Github 代码实践:Pytorch 实现的语义分割器
YOLOv8 训练自己的数据集
本范例我们使用 ultralytics中的YOLOv8目标检测模型训练自己的数据集,从而能够检测气球。
lyhue1991
2023/09/05
3.4K1
YOLOv8 训练自己的数据集
detectron2 使用总结
detectron2 主要是用于检测和分割的代码框架,像分类这种任务的代码暂时没有
王云峰
2023/10/21
5820
业界 | Facebook开源Mask R-CNN的PyTorch 1.0基准,比mmdetection更快、更省内存
项目地址:https://github.com/facebookresearch/maskrcnn-benchmark
机器之心
2018/11/30
1.2K0
业界 | Facebook开源Mask R-CNN的PyTorch 1.0基准,比mmdetection更快、更省内存
Caffe2 - (二十) Detectron 之 config.py 文件参数
config.py 给出了 Detectron 的默认参数,其位于 lib/core/config.py. 类似于 Faster R-CNN 中对应的形式.
AIHGF
2019/02/27
3.3K0
Caffe2 - (十九) 基于 Detectron 的 DeepFashion 服装 bbox 检测实现
COCO 数据集格式如 - Dataset - COCO Dataset 数据特点.
AIHGF
2019/02/27
1.1K1
Caffe2 - Detectron 初步使用
Detectron 提供了基于 COCO Dataset 的推断和训练使用说明 - Using Detectron.
AIHGF
2019/02/18
1.1K0
Detectron2源码阅读笔记-(三)Dataset
结合前面两篇文章的内容可以看到detectron2在构建model,optimizer和data_loader的时候都是在对应的build.py文件里实现的。我们看一下build_detection_train_loader是如何定义的(对应上图中紫色方框内的部分(自下往上的顺序)):
marsggbo
2019/10/23
1.3K0
资源 | 一个基于PyTorch的目标检测工具箱,商汤联合港中文开源mmdetection
项目地址:https://github.com/open-mmlab/mmdetection
机器之心
2018/11/06
2.5K0
推荐阅读
相关推荐
[深度学习][原创]使用labelImg+yolov5完成所有slowfast时空动作检测项目-训练测试篇
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档