语义分割模型库segmentation_models_pytorch的详细使用介绍
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的详细使用介绍相关推荐
- 语义分割之VOC2012、Cityscapes数据集介绍
PASCAL-VOC2012 PASCAL-VOC2012数据集介绍官网: 参考 数据集下载地址:http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCt ...
- 图像语义分割方法研究进展
全监督学习的图像语义分割方法研究进展 简介 1 全监督学习的图像语义分割方法 1.1 基于全卷积的图像语义分割方法 1.2 基于编码器解码器结构的图像语义分割方法 1.3 基于注意力机制的图像语义分割 ...
- 语义分割常用数据集整理
语义分割的数据集分为三类:2D图片,2.5D图片(RGB-D),3D图片.每一个类别的数据集都提供了像素级的标签,可以用来评估模型性能.同时其中一部分工作用到了数据增强来增加标签样本的数量. 一.2D ...
- 利用深度学习的点云语义分割(一)
Semantic Segmentation of Point Clouds using Deep Learning ...
- 语义分割和实例分割_一文读懂语义分割与实例分割
以人工智能为导向的现代计算机视觉技术,在过去的十年中发生了巨大的变化.今天,它被广泛用于图像分类.人脸识别.物体检测.视频分析以及机器人及自动驾驶汽车中的图像处理等领域.图像分割技术是目前预测图像领域 ...
- Pytorch实现FCN图像语义分割网络
针对图像的语义分割网络,本节将介绍PyTorch中已经预训练好网络的使用方式,然后使用VOC2012数据集训练一个FCN语义分割网络. 一.使用预训练好的语义分割网络 PyTorch提供了已预训练好的 ...
- DL之SegNet:SegNet图像分割/语义分割算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
DL之SegNet:SegNet图像分割/语义分割算法的简介(论文介绍).架构详解.案例应用等配图集合之详细攻略 导读 基于CNN的神经网络SegNet算法可进行高精度地识别行驶环境. 目录 SegN ...
- 【语义分割】1、语义分割超详细介绍
文章目录 一.分割方法介绍 1.1 Fully Convolutional Networks [2015] 1.1.1 FCN 1.1.2 ParseNet 1.2 Encoder-Decoder B ...
- 语义分割指标---MIoU详细介绍(原理及代码)
一.IOU理解 在语义分割的问题中,交并比就是该类的真实标签和预测值的交和并的比值 单类的交并比可以理解为下图: TP: 预测正确,真正例,模型预测为正例,实际是正例 FP: 预测错误,假正例,模型预 ...
最新文章
- python读取指定字节长度的文本
- 手持终端机USB无法同步连接是什么意思?
- AI公开课:19.02.20 雷鸣教授《人工智能革命与机遇》课堂笔记以及个人感悟
- Echarts地图坐标geoCoordMap数据动态获取
- html 查找添加联系人,使用phonegap查找联系人的实现方法
- spring中怎么让事物提交_Spring怎么在一个事务中开启另一个事务
- anaconda中python的位置_科学网—查询Anaconda安装路径、安装包位置及授予访问权限 - 张伟的博文...
- linux下java多线程_Linux系统下Java问题排查——cpu使用率过高或多线程锁问题
- 怎么删除用户_误删的手机照片怎么恢复?三种快速恢复的方法
- java碰碰球历险记下载_幼儿园玩球教案碰碰球.doc
- 面试手写代码的经验分享
- 数据仓库分层 (ODS、DWD、DWS)
- 计算机专业电脑需要显卡吗,组装电脑要不要配独立显卡?
- 简述你对人工智能未来发展的看法?
- python文本关键词提取_python实现关键词提取
- python中绘制柱形图、饼形图等
- 天翼云弹性计算服务器,获取天翼云Windows弹性云主机的密码操作步骤
- 水下动作捕捉的两种实现方式
- IOS学习之关于导航那些事
- Google 0day远程命令执行漏洞复现
热门文章
- 想让零件随着模型变动而变形?“柔性零部件”了解一下
- a=a+b 与a+=b 的一些对比
- U3d学习第三天--黑暗奇侠(1)地图搭建
- [模式识别].(希腊)西奥多里蒂斯第四版笔记8之__模板匹配
- 4.BPMN/DMN/CMMN规范简单梳理
- 基于JAVA动物防疫信息管理计算机毕业设计源码+系统+lw文档+部署
- 全国首例 “花呗套现”非法经营案宣判:90后男子获刑两年半
- 在华为云NAIE上跑深度学习_将数据集压缩文件拷贝到本地镜像并进行解压
- 考研人常说的“死亡211”和“984.5”是什么学校?
- 性能测试Locust--(6)非UI模式下运行Locust