CascadeMaskRCNN-SwinB图像实例分割

我要开发同款
匿名用户2024年07月31日
82阅读

技术信息

开源地址
https://modelscope.cn/models/iic/cv_swin-b_image-instance-segmentation_coco
授权协议
Apache License 2.0

作品详情

Cascade-Mask-RCNN-Swi实例分割模型介绍

本模型基于Cascade mask rc分割框架,backboe选用先进的swi trasformer模型。

模型描述

Swi trasformer是一种具有金字塔结构的trasformer架构,其表征通过shifted widows计算。Shifted widows方案将自注意力的计算限制在不重叠的局部窗口上,同时还允许跨窗口连接,从而带来更高的计算效率。分层的金字塔架构则让其具有在各种尺度上建模的灵活性。这些特性使swi trasformer与广泛的视觉任务兼容,并在密集预测任务如COCO实例分割上达到SOTA性能。其结构如下图所示。

Swi模型结构

Cascade R-CNN是一种多阶段目标检测架构,该架构由一系列经过不断提高的IOU阈值的检测器组成。检测器串联进行训练,前一个检测器的输出作为下一个检测器的输入。通过重采样不断提高proposal质量,达到高质量检测定位的效果。Cascade R-CNN可以被推广到实例分割,并对Mask R-CNN产生重大改进。其结构示意图如下所示。

Cascade-rc模型结构

期望模型使用方式以及适用范围

本模型适用范围较广,能对图片中包含的大部分感兴趣物体(COCO 80类)进行识别和分割。

如何使用

在ModelScope框架上,提供输入图片,即可通过简单的Pipelie调用来使用。

代码范例

import os
from modelscope.pipelies import pipelie
from modelscope.utils.costat import ModelFile, Tasks

iput_img = 'https://modelscope.oss-c-beijig.aliyucs.com/test/images/image_istace_segmetatio.jpg'
output = './result.jpg'
segmetatio_pipelie = pipelie(Tasks.image_segmetatio, 'damo/cv_swi-b_image-istace-segmetatio_coco')
result = segmetatio_pipelie(iput_img)

# if you wat to show the result, you ca ru
from modelscope.preprocessors.image import LoadImage
from modelscope.models.cv.image_istace_segmetatio.postprocess_utils import show_result

umpy_image = LoadImage.covert_to_darray(iput_img)[:, :, ::-1]   # i bgr order
show_result(umpy_image, result, out_file=output, show_box=True, show_label=True, show_score=False)

from PIL import Image
Image.ope(output).show()

模型局限性以及可能的偏差

  • 部分非常规图片或感兴趣物体占比太小或遮挡严重可能会影响分割结果
  • 当前版本在pytho 3.7环境测试通过,其他环境下可用性待测试
  • 当前版本fie-tue在cpu和单机单gpu环境测试通过,单机多gpu等其他环境待测试

训练数据介绍

  • COCO2017:COCO全称是Commo Objects i Cotext,是Microsoft团队提供的一个可以用来图像识别、检测和分割的数据集。COCO2017包含训练集118287张、验证集5000张、测试集40670张,共有80类物体。

模型训练流程

  • 在COCO上使用AdamW优化器,初始学习率为1e-4;训练过程中使用large scale jitter和simple copy paste数据增强,训练了更长时间(50 epoch);Swi trasformer使用ImageNet-1K上的预训练模型

预处理

测试时主要的预处理如下:

  • Resize:先将原始图片的短边Resize到800,等比例缩放。此时如果长边超过了1333,则按照最长边为1333,重新计算Resize的scale进行Resize
  • Normalize:图像归一化,减均值除以标准差
  • Pad:图像高宽补零至32的倍数

数据评估及结果

模型在COCO2017val上进行测试,结果如下:

Backboe Pretrai box mAP mask mAP #params FLOPs Remark
Swi-B ImageNet-1k 51.9 45.0 145M 982G official
Swi-B ImageNet-1k 52.7 46.1 145M 982G modelscope

可视化结果:

source result

模型评估代码

可通过如下代码对模型进行评估验证,我们在modelscope的DatasetHub上存储了COCO2017的验证集,方便用户下载调用。

from fuctools import partial
import os
import tempfile

from modelscope.metaifo import Traiers
from modelscope.msdatasets import MsDataset
from modelscope.traiers import build_traier
from modelscope.utils.costat import DowloadMode

from mmcv.parallel import collate


tmp_dir = tempfile.TemporaryDirectory().ame
if ot os.path.exists(tmp_dir):
    os.makedirs(tmp_dir)

eval_dataset = MsDataset.load('COCO2017_Istace_Segmetatio', split='validatio',  
                              dowload_mode=DowloadMode.FORCE_REDOWNLOAD)
kwargs = dict(
    model='damo/cv_swi-b_image-istace-segmetatio_coco',
    data_collator=partial(collate, samples_per_gpu=1),
    trai_dataset=Noe,
    eval_dataset=eval_dataset,
    work_dir=tmp_dir)
traier = build_traier(ame=Traiers.image_istace_segmetatio, default_args=kwargs)
metric_values = traier.evaluate()
prit(metric_values)

模型训练代码

通过使用托管在modelscope DatasetHub上的数据集(持续更新中):

from fuctools import partial

from modelscope.metaifo import Traiers
from modelscope.msdatasets import MsDataset
from modelscope.traiers import build_traier
from modelscope.utils.cofig import Cofig, CofigDict
from modelscope.utils.hub import read_cofig


WORKSPACE = './work_dir'
model_id = 'damo/cv_swi-b_image-istace-segmetatio_coco'

samples_per_gpu = read_cofig(model_id).trai.dataloader.batch_size_per_gpu
trai_dataset = MsDataset.load(dataset_ame='pets_small',split='trai')
eval_dataset = MsDataset.load(dataset_ame='pets_small', split='validatio', test_mode=True)
max_epochs = 1

from mmcv.parallel import collate

kwargs = dict(
            model=model_id,
            data_collator=partial(collate, samples_per_gpu=samples_per_gpu),
            trai_dataset=trai_dataset,
            eval_dataset=eval_dataset,
            work_dir=WORKSPACE,
            max_epochs=max_epochs)

traier = build_traier(
    ame=Traiers.image_istace_segmetatio, default_args=kwargs)

prit('===============================================================')
prit('pre-traied model loaded, traiig started:')
prit('===============================================================')

traier.trai()

prit('===============================================================')
prit('trai success.')
prit('===============================================================')

for i i rage(max_epochs):
    eval_results = traier.evaluate(f'{WORKSPACE}/epoch_{i+1}.pth')
    prit(f'epoch {i} evaluatio result:')
    prit(eval_results)


prit('===============================================================')
prit('evaluate success')
prit('===============================================================')

引用

如果你觉得这个该模型对有所帮助,请考虑引用下面的相关的论文:

@iproceedigs{liu2021Swi,
  title={Swi Trasformer: Hierarchical Visio Trasformer usig Shifted Widows},
  author={Liu, Ze ad Li, Yutog ad Cao, Yue ad Hu, Ha ad Wei, Yixua ad Zhag, Zheg ad Li, Stephe ad Guo, Baiig},
  booktitle={Proceedigs of the IEEE/CVF Iteratioal Coferece o Computer Visio (ICCV)},
  year={2021}
}
@article{Cai_2019,
   title={Cascade R-CNN: High Quality Object Detectio ad Istace Segmetatio},
   ISSN={1939-3539},
   url={http://dx.doi.org/10.1109/tpami.2019.2956516},
   DOI={10.1109/tpami.2019.2956516},
   joural={IEEE Trasactios o Patter Aalysis ad Machie Itelligece},
   publisher={Istitute of Electrical ad Electroics Egieers (IEEE)},
   author={Cai, Zhaowei ad Vascocelos, Nuo},
   year={2019},
   pages={1–1}
}

功能介绍

Cascade-Mask-RCNN-Swin实例分割模型介绍 本模型基于Cascade mask rcnn分割框架,backbone选用先进的swin transformer模型。 模型描述 Swin

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论