segmentation_models_pytorch(后文简称smp)是一个用于语义分割的高级模型库,支持9种语义分割网络,400多座编码器,本来对这只支持个别网络的模型库博主是不感兴趣的。但是,在查看到好几个竞赛的top方案都是使用unet++(efficientnet做编码器),博主心动了。如果想要使用更多更全的语义分割模型还是推荐使用MMSegmentation,把MMSegmentation作为语义分割模型库使用可以参考pytorch 24 把MMSegmentation的作为pytorch的语义分割模型库使用(已实现模型的训练与部署)_万里鹏程转瞬至的博客-CSDN博客_mmsegmentation 使用MMSegmentation是商汤科技推出的语义分割库套件,属于 OpenMMLab 项目的一部分,里面有很多的语义分割模型。为什么博主会有这样的骚操作想法呢?原因有二,第一点:MMSegmentation的封装太完善了,作为一个依赖于pytorch的模型库在训练上却不一样,用户的自由发挥空间很小(比如自定义loss、自定义学习率调度器、自定义数据加载器,啥都要重新学),这让博主很难接受;第二点:github上给出了的其他pytorch模型库太拉胯了,支持的模型数量有限,大多只支持2020年以前的模型,这对https://hpg123.blog.csdn.net/article/details/124459439回到正题,接下来描述smp的使用与构造。smp的项目地址为:https://github.com/qubvel/segmentation_models.pytorch

安装smp:

pip install segmentation-models-pytorch

1、基本介绍

9种模型架构(包括传奇的Unet):

  • Unet [paper] [docs]
  • Unet++ [paper] [docs]
  • MAnet [paper] [docs]
  • Linknet [paper] [docs]
  • FPN [paper] [docs]
  • PSPNet [paper] [docs]
  • PAN [paper] [docs]
  • DeepLabV3 [paper] [docs]
  • DeepLabV3+ [paper] [docs]

113个可用编码器(以及来自timm的400多个编码器,所有编码器都具有预先训练的权重,以更快更好地收敛):主要为以下网络的多种版本

ResNet
ResNeXt
ResNeSt
Res2Ne(X)t
RegNet(x/y)
GERNet
SE-Net
SK-ResNe(X)t
DenseNet
Inception
EfficientNet
MobileNet
DPN
VGG

训练常规的常用的损失:支持的loss如下所示(在segmentation_models_pytorch.losses中)

from .jaccard import JaccardLoss
from .dice import DiceLoss
from .focal import FocalLoss
from .lovasz import LovaszLoss
from .soft_bce import SoftBCEWithLogitsLoss
from .soft_ce import SoftCrossEntropyLoss
from .tversky import TverskyLoss
from .mcc import MCCLoss

训练常规的常用的指标:在segmentation_models_pytorch.metrics中


from .functional import (get_stats,fbeta_score,f1_score,iou_score,accuracy,precision,recall,sensitivity,specificity,balanced_accuracy,positive_predictive_value,negative_predictive_value,false_negative_rate,false_positive_rate,false_discovery_rate,false_omission_rate,positive_likelihood_ratio,negative_likelihood_ratio,
)

2、模型的构建

smp中模型的构建十分便捷,输入解码器类型,权重类型,输入通道数、输出通道数即可。

import segmentation_models_pytorch as smpmodel = smp.Unet(encoder_name="resnet34",        # choose encoder, e.g. mobilenet_v2 or efficientnet-b7encoder_weights="imagenet",     # use `imagenet` pre-trained weights for encoder initializationin_channels=1,                  # model input channels (1 for gray-scale images, 3 for RGB, etc.)classes=3,                      # model output channels (number of classes in your dataset)
)

但是有的时候,需要对网络结构进行修改,可以指定更为详细的参数(如网络的深度,是否需要辅助头【这里默认的辅助头都是分类头】)。需要注意的是,在unet网络中编码器深度与解码器的stage个数必须相同(stage中的filter num可以按情况修改)

3、模型的具体结构

在smp中,所有的模型都具备以下结构(encoder,decoder和segmentation_head)。encoder是通过传参控制(encoder输出的也不是一个单纯的feature map,而是包含了各阶段下的feature map,是一个list),decoder由具体的model类确定(所有smp模型decoder的输出都是一个tensor,不存在list【如pspnet的多尺度特征,在decoder输出前用conv进行了融合】),segmentation_head由传入的classes确定(只是一个简单的conv层)

所有smp模型的forward流程都如下图所示

语义分割头与分类赋值头

语义分割模型库segmentation_models_pytorch的详细使用介绍相关推荐

  1. 语义分割之VOC2012、Cityscapes数据集介绍

    PASCAL-VOC2012 PASCAL-VOC2012数据集介绍官网: 参考 数据集下载地址:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCt ...

  2. 图像语义分割方法研究进展

    全监督学习的图像语义分割方法研究进展 简介 1 全监督学习的图像语义分割方法 1.1 基于全卷积的图像语义分割方法 1.2 基于编码器解码器结构的图像语义分割方法 1.3 基于注意力机制的图像语义分割 ...

  3. 语义分割常用数据集整理

    语义分割的数据集分为三类:2D图片,2.5D图片(RGB-D),3D图片.每一个类别的数据集都提供了像素级的标签,可以用来评估模型性能.同时其中一部分工作用到了数据增强来增加标签样本的数量. 一.2D ...

  4. 利用深度学习的点云语义分割(一)

                                               Semantic Segmentation of Point Clouds using Deep Learning ...

  5. 语义分割和实例分割_一文读懂语义分割与实例分割

    以人工智能为导向的现代计算机视觉技术,在过去的十年中发生了巨大的变化.今天,它被广泛用于图像分类.人脸识别.物体检测.视频分析以及机器人及自动驾驶汽车中的图像处理等领域.图像分割技术是目前预测图像领域 ...

  6. Pytorch实现FCN图像语义分割网络

    针对图像的语义分割网络,本节将介绍PyTorch中已经预训练好网络的使用方式,然后使用VOC2012数据集训练一个FCN语义分割网络. 一.使用预训练好的语义分割网络 PyTorch提供了已预训练好的 ...

  7. DL之SegNet:SegNet图像分割/语义分割算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略

    DL之SegNet:SegNet图像分割/语义分割算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 导读 基于CNN的神经网络SegNet算法可进行高精度地识别行驶环境. 目录 SegN ...

  8. 【语义分割】1、语义分割超详细介绍

    文章目录 一.分割方法介绍 1.1 Fully Convolutional Networks [2015] 1.1.1 FCN 1.1.2 ParseNet 1.2 Encoder-Decoder B ...

  9. 语义分割指标---MIoU详细介绍(原理及代码)

    一.IOU理解 在语义分割的问题中,交并比就是该类的真实标签和预测值的交和并的比值 单类的交并比可以理解为下图: TP: 预测正确,真正例,模型预测为正例,实际是正例 FP: 预测错误,假正例,模型预 ...

最新文章

  1. python读取指定字节长度的文本
  2. 手持终端机USB无法同步连接是什么意思?
  3. AI公开课:19.02.20 雷鸣教授《人工智能革命与机遇》课堂笔记以及个人感悟
  4. Echarts地图坐标geoCoordMap数据动态获取
  5. html 查找添加联系人,使用phonegap查找联系人的实现方法
  6. spring中怎么让事物提交_Spring怎么在一个事务中开启另一个事务
  7. anaconda中python的位置_科学网—查询Anaconda安装路径、安装包位置及授予访问权限 - 张伟的博文...
  8. linux下java多线程_Linux系统下Java问题排查——cpu使用率过高或多线程锁问题
  9. 怎么删除用户_误删的手机照片怎么恢复?三种快速恢复的方法
  10. java碰碰球历险记下载_幼儿园玩球教案碰碰球.doc
  11. 面试手写代码的经验分享
  12. 数据仓库分层 (ODS、DWD、DWS)
  13. 计算机专业电脑需要显卡吗,组装电脑要不要配独立显卡?
  14. 简述你对人工智能未来发展的看法?
  15. python文本关键词提取_python实现关键词提取
  16. python中绘制柱形图、饼形图等
  17. 天翼云弹性计算服务器,获取天翼云Windows弹性云主机的密码操作步骤
  18. 水下动作捕捉的两种实现方式
  19. IOS学习之关于导航那些事
  20. Google 0day远程命令执行漏洞复现

热门文章

  1. 想让零件随着模型变动而变形?“柔性零部件”了解一下
  2. a=a+b 与a+=b 的一些对比
  3. U3d学习第三天--黑暗奇侠(1)地图搭建
  4. [模式识别].(希腊)西奥多里蒂斯第四版笔记8之__模板匹配
  5. 4.BPMN/DMN/CMMN规范简单梳理
  6. 基于JAVA动物防疫信息管理计算机毕业设计源码+系统+lw文档+部署
  7. 全国首例 “花呗套现”非法经营案宣判:90后男子获刑两年半
  8. 在华为云NAIE上跑深度学习_将数据集压缩文件拷贝到本地镜像并进行解压
  9. 考研人常说的“死亡211”和“984.5”是什么学校?
  10. 性能测试Locust--(6)非UI模式下运行Locust