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

本文涉及的产品
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,100CU*H 3个月
简介: 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-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
设计模式 开发框架 前端开发
项目开发中,真的有必要定义VO,BO,PO,DO,DTO这些吗?
存在即是合理的,业务复杂,人员协同性要求高的场景下,这些规范性的东西不按着来虽然不会出错,程序照样跑,但是遵守规范会让程序更具扩展性和可读性,都是前辈血淋淋的宝贵经验,为什么不用?
|
Python
Python中如何按行遍历DataFrame
听世界的意见,保留自己的态度。
2087 0
|
10月前
|
机器学习/深度学习 传感器 人工智能
AI与未来医疗:重塑健康管理新格局随着人工智能(AI)技术的飞速发展,医疗行业正迎来一场前所未有的变革。AI不仅在数据分析、诊断支持方面展现出巨大潜力,还在个性化治疗、远程医疗等多个领域实现了突破性进展。本文将探讨AI技术在医疗领域的具体应用及其对未来健康管理的影响。
人工智能(AI)正在彻底改变医疗行业的面貌。通过深度学习算法和大数据分析,AI能够迅速分析海量的医疗数据,提供精准的诊断和治疗建议。此外,AI在远程医疗、药物研发以及患者管理等方面也展现出了巨大的潜力。本文将详细探讨这些技术的应用实例,并展望其对健康管理的深远影响。
|
5月前
|
机器学习/深度学习 资源调度 算法
YOLOv11改进策略【损失函数篇】| 引入Soft-NMS,提升密集遮挡场景检测精度,包括GIoU-NMS、DIoU-NMS、CIoU-NMS、SIoU-NMS、 EIou-NMS
YOLOv11改进策略【损失函数篇】| 引入Soft-NMS,提升密集遮挡场景检测精度,包括GIoU-NMS、DIoU-NMS、CIoU-NMS、SIoU-NMS、 EIou-NMS
2317 6
|
存储 数据采集 数据挖掘
TMDB电影数据分析(上)
TMDB电影数据分析(上)
441 0
|
11月前
|
存储 缓存 Java
Java零基础教学(13):自动拆箱与自动装箱详解
【8月更文挑战第13天】Java零基础教学篇,手把手实践教学!
123 1
Java零基础教学(13):自动拆箱与自动装箱详解
|
9月前
|
数据采集 人工智能 监控
揭秘数据治理:七步工作法&十大准则全解析
数据治理的“七步工作法”与“十大准则”为企业构建科学、系统、高效的数据治理体系提供了重要的指导和借鉴。企业应结合自身实际情况,灵活运用这些方法和准则,充分挖掘数据潜能,赋能业务创新,实现数字化转型的稳健推进。
|
存储 安全 Java
【JAVA基础篇教学】第八篇:Java中List详解说明
【JAVA基础篇教学】第八篇:Java中List详解说明
|
算法 Go vr&ar
YOLOv8模型yaml结构图理解(逐层分析)
YOLOv8模型yaml结构图理解(逐层分析)
15235 0
|
机器学习/深度学习 编解码 算法
使用EasyCV Mask2Former轻松实现图像分割
EasyCV可以轻松预测图像的分割谱以及训练定制化的分割模型。本文主要介绍如何使用EasyCV实现实例分割、全景分割和语义分割,及相关算法思想。
使用EasyCV Mask2Former轻松实现图像分割

热门文章

最新文章