本模型基于Cascade mask rc分割框架,backboe选用先进的swi trasformer模型。 Swi trasformer是一种具有金字塔结构的trasformer架构,其表征通过shifted widows计算。Shifted widows方案将自注意力的计算限制在不重叠的局部窗口上,同时还允许跨窗口连接,从而带来更高的计算效率。分层的金字塔架构则让其具有在各种尺度上建模的灵活性。这些特性使swi trasformer与广泛的视觉任务兼容,并在密集预测任务如COCO实例分割上达到SOTA性能。其结构如下图所示。 Cascade R-CNN是一种多阶段目标检测架构,该架构由一系列经过不断提高的IOU阈值的检测器组成。检测器串联进行训练,前一个检测器的输出作为下一个检测器的输入。通过重采样不断提高proposal质量,达到高质量检测定位的效果。Cascade R-CNN可以被推广到实例分割,并对Mask R-CNN产生重大改进。其结构示意图如下所示。 本模型适用范围较广,能对图片中包含的大部分感兴趣物体(COCO 80类)进行识别和分割。 在ModelScope框架上,提供输入图片,即可通过简单的Pipelie调用来使用。 测试时主要的预处理如下: 模型在COCO2017val上进行测试,结果如下: 可视化结果: 可通过如下代码对模型进行评估验证,我们在modelscope的DatasetHub上存储了COCO2017的验证集,方便用户下载调用。 通过使用托管在modelscope DatasetHub上的数据集(持续更新中): 如果你觉得这个该模型对有所帮助,请考虑引用下面的相关的论文:Cascade-Mask-RCNN-Swi实例分割模型介绍
模型描述
期望模型使用方式以及适用范围
如何使用
代码范例
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()
模型局限性以及可能的偏差
训练数据介绍
模型训练流程
预处理
数据评估及结果
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
模型评估代码
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)
模型训练代码
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}
}
点击空白处退出提示
评论