【DSW Gallery】 基于EasyCV的Mask2Former图像分割示例

简介: EasyCV是基于Pytorch,以自监督学习和Transformer技术为核心的 all-in-one 视觉算法建模工具,并包含图像分类,度量学习,目标检测,姿态识别等视觉任务的SOTA算法。本文将介绍使用EasyCV进行图像分割模型的训练和预测。

直接使用

请打开基于EasyCV的Mask2Former图像分割示例并点击右上角 “ 在DSW中打开” 。

lQLPJxbfV4fH_m7NA3DNCTqwU4NFKUFsR14Dbv1c5wCFAA_2362_880.png

EasyCV图像分割-Mask2Former

Mask2Former是一个统一的Transformer-based图像分割架构,能够在相同的模型结构下实现语义分割、实例分割以及全景分割任务。

本文将介绍如何利用EasyCV基于Mask2Former进行图像分割模型的训练,以及如何利用训练好的模型进行图像分割预测

运行环境要求

PAI-Pytorch镜像 or 原生Pytorch1.8+以上环境 GPU机器, 内存32G以上

安装依赖包

注: 在PAI-DSW docker中无需安装相关依赖,可跳过此部分 在本地notebook环境中执行

1、 首先,安装pytorch和对应版本的torchvision,支持Pytorch1.8以上版本

# install pytorch and torch vision
! conda install --yes pytorch==1.10.0 torchvision==0.11.0 -c pytorch

2、获取torch和cuda版本,安装对应版本的mmcv和nvidia-dali

import torch
import os
os.environ['CUDA']='cu' + torch.version.cuda.replace('.', '')
os.environ['Torch']='torch'+torch.version.__version__.replace('+PAI', '')
!echo "cuda version: $CUDA"
!echo "pytorch version: $Torch"
# install some python deps
! pip install mmdet
! pip install mmcv-full==1.4.4 -f https://download.openmmlab.com/mmcv/dist/${CUDA}/${Torch}/index.html
! pip install http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/third_party/nvidia_dali_cuda100-0.25.0-1535750-py3-none-manylinux2014_x86_64.whl

3、 安装EasyCV算法包

pip install pai-easycv

4、 简单验证

from easycv.apis import *

5、安装deformable_attention

import easycv
print(easycv.__file__)
# 进入easycv安装目录编译deformable_attention
! cd /home/pai/lib/python3.6/site-packages/easycv/thirdparty/deformable_attention && python setup.py build install 

数据准备

接下来介绍基于coco数据集的实例分割训练示例,你可以下载COCO2017数据,也可以使用我们提供了示例COCO数据

! wget http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/data/small_coco_demo/small_coco_demo.tar.gz && tar -zxf small_coco_demo.tar.gz
# 重命名文件夹
! mkdir -p data/  && mv small_coco_demo database/coco

data/coco格式如下

data/coco/
├── annotations
│   ├── instances_train2017.json
│   └── instances_val2017.json
├── train2017
│   ├── 000000005802.jpg
│   ├── 000000060623.jpg
│   ├── 000000086408.jpg
│   ├── 000000118113.jpg
│   ├── 000000184613.jpg
│   ├── 000000193271.jpg
│   ├── 000000222564.jpg
│       ...
│   └── 000000574769.jpg
└── val2017
    ├── 000000006818.jpg
    ├── 000000017627.jpg
    ├── 000000037777.jpg
    ├── 000000087038.jpg
    ├── 000000174482.jpg
    ├── 000000181666.jpg
    ├── 000000184791.jpg
    ├── 000000252219.jpg
         ...
    └── 000000522713.jpg

模型训练

这个Demo中我们采用Mask2Former图像分割算法训练ResNet50主干网络, 下载示例配置文件

! rm -rf mask2former_r50_8xb2_e50_instance.py
! wget https://raw.githubusercontent.com/alibaba/EasyCV/master/configs/segmentation/mask2former/mask2former_r50_8xb2_e50_instance.py

为了适配小数据,我们对配置文件mask2former_r50_8xb2_e50_instance.py做如下字段的修改,减少训练epoch数目,加大打印日志的频率

total_epochs = 3
#optimizer.lr -> 0.000001
# optimizer
optimizer = dict(
    type='AdamW',
    lr=0.000001,
    weight_decay=0.05,
    eps=1e-8,
    betas=(0.9, 0.999),
    paramwise_options={
        'backbone': dict(lr_mult=0.1),
        'query_embed': dict(weight_decay=0.),
        'query_feat': dict(weight_decay=0.),
        'level_embed': dict(weight_decay=0.),
        'norm': dict(weight_decay=0.),
    })
# log_config.interval 1
log_config = dict(interval=1)

注意: 如果是使用COCO完整数据训练,为了保证效果,建议使用单机8卡进行训练;

为了保证模型效果,我们在预训练模型基础上finetune, 执行如下命令启动训练

!python -m easycv.tools.train mask2former_r50_8xb2_e50_instance.py --work_dir work_dir/segmentatino/mask2former_r50_instance --load_from http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/EasyCV/modelzoo/segmentation/mask2former_r50_instance/epoch_50.pth

预测

下载测试图片

! wget http://pai-vision-data-hz.oss-cn-zhangjiakou.aliyuncs.com/EasyCV/modelzoo/segmentation/000000123213.jpg

使用训练好的模型进行图像分割预测

import torch
import cv2
from IPython.display import Image
from easycv.predictors.segmentation import Mask2formerPredictor
predictor = Mask2formerPredictor(model_path='work_dir/segmentatino/mask2former_r50_instance/epoch_3.pth',
                                 config_file='mask2former_r50_8xb2_e50_instance.py',
                                 task_mode='instance')
img = cv2.imread('000000123213.jpg')
predict_out = predictor(['000000123213.jpg'])
instance_img = predictor.show_instance(img, **predict_out[0])
cv2.imwrite('instance_out.jpg',instance_img)
display(Image('000000123213.jpg'))
display(Image('instance_out.jpg'))


相关实践学习
使用PAI+LLaMA Factory微调Qwen2-VL模型,搭建文旅领域知识问答机器人
使用PAI和LLaMA Factory框架,基于全参方法微调 Qwen2-VL模型,使其能够进行文旅领域知识问答,同时通过人工测试验证了微调的效果。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
7月前
|
数据采集 算法 数据挖掘
模块化控制协议(MCP)在网络中增强智能体执行效率的研究
随着Web3技术的迅速发展,去中心化应用和智能体在各种领域的应用逐渐增多。MCP(Modularized Control Protocol,模块化控制协议)作为一种增强智能体执行能力的关键技术,为Web3场景中的智能体提供了更强的灵活性和可扩展性。本文将探讨如何利用MCP技术提升智能体在Web3场景中的执行能力,并通过实例代码展示其实现路径。
602 22
|
7月前
|
机器学习/深度学习 供应链 监控
如何通过API优化电商库存管理,减少缺货风险
本文详解如何通过API优化电商库存管理,实现库存实时同步、需求预测与自动化补货,降低缺货风险,提升运营效率及客户满意度。
383 0
|
7月前
|
XML 安全 数据安全/隐私保护
Okta核心协议SAML
SAML(安全断言标记语言)是一种开放标准,用于在身份提供商和服务提供商之间安全传递用户身份和权限信息,常用于实现单点登录(SSO),提升用户体验与安全性,简化企业用户管理。
723 89
|
7月前
|
小程序 安全 JavaScript
构建即时通讯APP内的小程序生态体系:从架构设计到技术实现-优雅草卓伊凡
构建即时通讯APP内的小程序生态体系:从架构设计到技术实现-优雅草卓伊凡
502 1
构建即时通讯APP内的小程序生态体系:从架构设计到技术实现-优雅草卓伊凡
|
7月前
|
数据采集 人工智能 自然语言处理
豆蔻妇科大模型再突破:钉钉行业训练平台+精标数据SFT ,准确率从 77.1%上升至 90.2%
在医疗AI领域,通用大模型因缺乏专业临床判断力而难以胜任复杂诊断任务。本文以豆蔻妇科大模型为例,介绍了通过监督微调(SFT)显著提升诊断准确率的实践路径。从初始77.1%到最终90.2%的突破,依托高质量数据筛选、思维链校准、双重评估体系及钉钉训练平台支持,展示了医疗大模型从“知其然”到“知其所以然”的演进过程,并展望SFT+RL协同训练的未来发展。
573 59
|
7月前
|
SQL 数据采集 分布式计算
在ODPS生态中成长:从实践到思考,再到未来展望
在ODPS生态中成长:从实践到思考,再到未来展望
377 1
|
8月前
|
分布式计算 运维 监控
Fusion 引擎赋能:流利说如何用阿里云 Serverless Spark 实现数仓计算加速
本文介绍了流利说与阿里云合作,利用EMR Serverless Spark优化数据处理的全过程。流利说是科技驱动的教育公司,通过AI技术提升用户英语水平。原有架构存在资源管理、成本和性能等痛点,采用EMR Serverless Spark后,实现弹性资源管理、按需计费及性能优化。方案涵盖数据采集、存储、计算到查询的完整能力,支持多种接入方式与高效调度。迁移后任务耗时减少40%,失败率降低80%,成本下降30%。未来将深化合作,探索更多行业解决方案。
550 1
|
7月前
|
存储 安全 算法
RAW格式硬盘打不开?这样做让它恢复如初
当硬盘或U盘突然显示为RAW格式,无法打开并提示“需格式化”时,切勿立即格式化或运行chkdsk,这可能导致数据永久丢失。RAW格式是系统无法识别文件系统的状态,常见原因包括分区损坏、病毒、坏道或异常关机。正确做法是先用专业工具恢复数据,通过智能加载或深度扫描找回文件。数据恢复后,再对硬盘进行格式化修复。本文详解操作步骤与注意事项,助你安全恢复数据、修复磁盘。
|
7月前
|
消息中间件 缓存 负载均衡
构建高效可扩展的后端架构:从设计到实现
本文探讨了如何构建高效、可扩展的后端架构,涵盖需求分析、系统设计、实现与优化全过程。内容包括微服务、数据库设计、缓存与消息队列等关键技术,并涉及API设计、自动化测试、CI/CD及性能优化策略,助力打造高性能、易维护的后端系统。
|
7月前
|
存储 缓存 分布式计算
阿里云服务器热门实例选择指南:经济型/通用型/计算型性能解析与场景适配
当我们通过阿里云的活动选购云服务器时,常常会面临一个令人困惑的选择:相同配置的云服务器,为何存在多个不同的实例类型,且价格差异显著。这背后的原因在于不同实例规格采用了各异的处理器和底层架构,例如常见的X86计算架构与Arm计算架构,这些差异直接导致了云服务器在性能表现和适用场景上的不同。本文将为大家深入剖析阿里云的经济型、通用算力型、计算型、通用型和内存型实例的性能特点及适用场景,以供选择参考。

热门文章

最新文章