【计算机视觉】干货分享:Segmentation model PyTorch(快速搭建图像分割网络)

一、前言

如何快速搭建图像分割网络? 要手写把backbone ,手写decoder 吗? 介绍一个分割神器,分分钟搭建一个分割网络。

仓库的地址:

https://github.com/qubvel/segmentation_models.pytorch

在这里插入图片描述
该库的主要特点是:

  • 高级 API(只需两行即可创建神经网络)
  • 用于二元和多类分割的 9 种模型架构(包括传奇的 Unet) 124 个可用编码器(以及 timm 的 500 多个编码器)
  • 所有编码器都有预先训练的权重,以实现更快更好的收敛
  • 训练例程的流行指标和损失

二、快速引入—使用 SMP 创建您的第一个分割模型

分割模型只是一个 PyTorch nn.Module,创建起来很简单:

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)
)

三、Architectures

我们可以用到的 model 有:

  • Unet
  • Unet++
  • MAnet
  • Linknet
  • FPN
  • PSPNet
  • PAN
  • DeepLabV3
  • DeepLabV3+

3.1 UNet

UNet是一种常用于图像分割任务的深度学习架构。它由Olaf Ronneberger、Philipp Fischer和Thomas Brox于2015年在他们的论文《U-Net: Convolutional Networks for Biomedical Image Segmentation》中提出。

UNet的名字来自其U形的网络结构。它的设计目标是从输入图像中捕获低层次和高层次特征,然后利用这些信息生成像素级别的分割掩码。UNet在医学图像分析中特别受欢迎,因为它对于分割器官、肿瘤和其他感兴趣的结构非常有效。

UNet架构主要由两个部分组成:

  1. 收缩路径:该部分类似于典型的卷积神经网络架构,包含多个卷积和池化层。它被称为"收缩路径",因为每个卷积层减小空间维度,同时增加特征通道数量。

  2. 扩展路径:该部分涉及将特征映射进行上采样,恢复原始空间维度。它被称为"扩展路径",因为它增加空间维度,同时减少特征通道数量。

在U形架构的中心,有一个瓶颈层,它保留了局部和全局的上下文信息。

收缩路径和扩展路径是对称的,并通过跳跃连接相连接。这些跳跃连接有助于在上采样过程中保留细粒度的空间信息,使UNet特别适合图像分割任务。

在原始的UNet论文中,作者将该架构应用于生物医学图像分割任务,例如在电子显微镜数据中分割神经结构。然而,自那时以来,UNet架构已广泛应用于其他领域的图像分割任务,如自然图像、卫星图像等。

由于其有效性,UNet已成为各种扩展和改进的基础,并且在深度学习领域仍然是图像分割任务的热门选择。

3.2 UNet++

Unet++是对UNet进行改进和扩展的深度学习架构。它是由Zhou et al.于2018年在论文《UNet++: A Nested U-Net Architecture for Medical Image Segmentation》中提出的。

Unet++在原始UNet的基础上增加了一些重要的结构来提高图像分割的性能。主要的改进是引入了多层级的嵌套结构,使得模型能够更好地捕获不同尺度下的特征信息。以下是Unet++的主要特点:

  1. 多层级嵌套:Unet++采用了一种层级嵌套的结构,将UNet的每个阶段进行进一步细分。这样可以在不同的阶段获取更多的细节和语义信息,从而提高了分割的准确性。

  2. 密集跳跃连接:Unet++引入了密集的跳跃连接,将不同层级的特征图进行融合。这样可以使低层级的特征图能够直接参与到高层级的特征表示中,有助于更好地整合多尺度的信息。

  3. 自适应选择性上采样:在Unet++的解码器部分,采用了自适应选择性上采样技术,根据不同特征图的重要性进行选择性地上采样。这样可以减少计算量,并且避免了不必要的信息传递。

通过这些改进,Unet++在医学图像分割等任务中取得了较好的性能,相对于原始UNet,它能够更准确地定位和分割感兴趣的目标结构。

需要注意的是,自从Unet++的提出以来,还可能有其他进一步的改进和扩展,因为深度学习领域一直在不断发展和演进。

3.3 FPN

**FPN是"Feature Pyramid Network" 的缩写,是一种用于目标检测和语义分割任务的深度学习架构。它由Tsung-Yi Lin、Piotr Dollár、Ross Girshick和Kaiming He于2017年在论文《Feature Pyramid Networks for Object Detection》中提出。

FPN的目标是解决多尺度信息的问题。在许多计算机视觉任务中,目标可能在图像的不同尺度下出现,而且较小的目标可能在较低层级的特征图中丢失细节。FPN通过构建特征金字塔来解决这个问题。

FPN的主要思想是将不同层级的特征图进行融合,以提取多尺度的特征信息。它包含以下主要组件:

  • 底层特征:从卷积神经网络的底层获得的特征图。这些特征图具有高分辨率但缺乏语义信息。
  • 顶层特征:从网络的顶层获得的特征图。这些特征图具有较低的分辨率但包含丰富的语义信息。

FPN的构建过程如下:

  1. 首先,通过一个卷积层,将顶层特征图的通道数降低,使其与底层特征图的通道数相同。

  2. 然后,将降低通道数的顶层特征图与底层特征图相加,产生一组新的特征图,这些特征图在不同的层级上融合了多尺度的信息。

  3. 接下来,将融合后的特征图通过上采样操作(通常使用插值方法)增加分辨率,得到高分辨率的多尺度特征金字塔。

FPN的特征金字塔允许目标检测器或分割器在不同尺度下检测或分割目标,从而显著提高了算法的性能。由于其有效性和简单性,FPN已成为许多目标检测和语义分割任务的常用组件,并被广泛应用于许多深度学习模型中。

3.4 DeepLabV3

DeepLabV3是用于图像语义分割的深度学习模型,由Google于2018年推出。它是DeepLab系列模型的第三个版本,是对前两个版本的改进和扩展。

DeepLabV3的目标是对输入图像的每个像素进行分类,将每个像素标记为属于不同类别的某个目标或背景。该模型在图像分割任务中取得了很好的性能,尤其在细粒度的分割和边界细化方面表现出色。

主要的改进点包括:

  1. 空洞卷积(Atrous Convolution):DeepLabV3引入了空洞卷积来增大感受野,允许模型在保持计算效率的同时,获取更大范围的上下文信息。这有助于识别更大和更细微的目标。

  2. 多尺度信息融合:为了解决多尺度信息的问题,DeepLabV3使用了多尺度空洞卷积,将不同尺度的信息进行融合,从而提高了模型的语义分割性能。

  3. 引入特征金字塔池化(ASPP):ASPP模块进一步增加了感受野,帮助模型更好地理解图像中的上下文信息。ASPP模块由一组并行的空洞卷积层组成,每个卷积层的空洞率不同,从而捕获不同尺度的信息。

  4. 使用深度可分离卷积:为了减少模型的参数量和计算量,DeepLabV3采用了深度可分离卷积,这是一种将标准卷积分解为深度卷积和逐点卷积的方法。

DeepLabV3模型在PASCAL VOC 2012和Cityscapes等图像分割数据集上取得了显著的性能提升,成为当时图像语义分割领域的先进模型。其优秀的性能使得DeepLabV3被广泛应用于许多图像分割任务,特别是在需要准确分割细节的场景中。

四、Encoders

以下是 SMP 中支持的编码器列表。 选择适当的编码器系列,然后单击展开表格并选择特定的编码器及其预训练权重(encoder_name 和encoder_weights 参数)。

  1. ResNet
  2. ResNeXt
  3. ResNeSt
  4. Res2Ne(X)t
  5. RegNet(x/y)
  6. GERNet
  7. SE-Net
  8. SK-ResNe(X)t
  9. DenseNet
  10. Inception
  11. EfficientNet
  12. MobileNet
  13. DPN
  14. VGG
  15. Mix Vision Transformer
  16. MobileOne

我这里只展示其中一个,以 ResNet 为例:

在这里插入图片描述

更多权重详见我的kaggle数据集:

https://www.kaggle.com/datasets/holmes0610/pretrained-resnet-resnext

在这里插入图片描述

https://www.kaggle.com/datasets/holmes0610/timm-pretrained

在这里插入图片描述
Pytorch 图像模型(又名 timm)有很多预训练模型和接口,允许使用这些模型作为 smp 中的编码器,但是,并非所有模型都受支持。

  • 并非所有 Transformer 模型都实现了编码器所需的 features_only 功能
  • 一些模型的步幅不合适

支持的编码器总数:549

https://smp.readthedocs.io/en/latest/encoders_timm.html

在这里插入图片描述
这个网址里面总结了所有可用的 Encoders。

五、Models API

  • model.encoder:预训练主干提取不同空间分辨率的特征
  • model.decoder:取决于模型架构(Unet / Linknet / PSPNet / FPN)
  • model.segmentation_head:最后一个块产生所需数量的掩模通道(还包括可选的上采样和激活)
  • model.classification_head:在编码器顶部创建分类头的可选块
  • model.forward(x):按顺序将 x 通过模型的编码器、解码器和分段头(以及分类头,如果指定)

六、安装

PyPI version:

pip install segmentation-models-pytorch

Latest version from source:

pip install git+https://github.com/qubvel/segmentation_models.pytorch

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/22273.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

行业追踪,2023-08-04

自动复盘 2023-08-04 凡所有相,皆是虚妄。若见诸相非相,即见如来。 k 线图是最好的老师,每天持续发布板块的rps排名,追踪板块,板块来开仓,板块去清仓,丢弃自以为是的想法,板块去留让…

开源免费用|Apache Doris 2.0 推出跨集群数据复制功能

随着企业业务的发展,系统架构趋于复杂、数据规模不断增大,数据分布存储在不同的地域、数据中心或云平台上的现象越发普遍,如何保证数据的可靠性和在线服务的连续性成为人们关注的重点。在此基础上,跨集群复制(Cross-Cl…

如何把非1024的采样数放入aac编码器

一. aac对数据规格要求 二、代码实现 1.初始化 2.填入数据 3.取数据 三.图解 一. aac对放入的采样数要求 我们知道aac每次接受的字节数是固定的,在之前的文章里有介绍libfdk_aac音频采样数和编码字节数注意 它支持的采样数和编码字节数分别是: fdk_aac …

微信小程序:点击按钮实现数据加载(带模糊查询)

效果图 代码 wxml: <!-- 搜索框--> <form action"" bindsubmit"search_all_productiond"><view class"search_position"><view class"search"><view class"search_left">工单号:</view…

Linux tcpdump 命令详解

简介 用简单的话来定义tcpdump&#xff0c;就是&#xff1a;dump the traffic on a network&#xff0c;根据使用者的定义对网络上的数据包进行截获的包分析工具。 tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的…

【C++】开源:sqlite3数据库配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍sqlite3数据库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下…

若依打印sql

官方issue 自动生成的代码&#xff0c;sql日志怎么没有打印 在ruoyi-admin中的application.yml配置如下。 # 日志配置&#xff0c;默认 logging:level:com.ruoyi: debugorg.springframework: warn#添加配置com.ying: debug输出sql

zookeeper+kafka分布式消息队列集群的部署

目录 一、zookeeper 1.Zookeeper 定义 2.Zookeeper 工作机制 3.Zookeeper 特点 4.Zookeeper 数据结构 5.Zookeeper 应用场景 &#xff08;1&#xff09;统一命名服务 &#xff08;2&#xff09;统一配置管理 &#xff08;3&#xff09;统一集群管理 &#xff08;4&…

更新k8s环境支付系统支付证书

目录 一、背景 二、更新支付系统银行证书 三、备份旧的secret信息 四、更新支付应用的证书信息 五、重启支付系统的应用 六、验证应用实例挂载的秘钥已更新 一、背景 支付系统是基于k8s容器化部署的微服务&#xff0c;支付系统使用的支付证书以及和银行有关的证书都是保存…

OpenUSD联盟:塑造元宇宙的3D未来

一、引言 近日&#xff0c;美国3D内容行业的五家主要公司苹果、英伟达、皮克斯、Adobe和Autodesk联合成立了OpenUSD联盟&#xff08;AOUSD&#xff09;。这一联盟的成立标志着元宇宙领域的一次重要合作&#xff0c;旨在制定元宇宙的3D图形标准。本文将深入探讨OpenUSD联盟的目…

opencv-38 形态学操作-闭运算(先膨胀,后腐蚀)cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel)

闭运算是先膨胀、后腐蚀的运算&#xff0c;它有助于关闭前景物体内部的小孔&#xff0c;或去除物体上的小黑点&#xff0c;还可以将不同的前景图像进行连接。 例如&#xff0c;在图 8-17 中&#xff0c;通过先膨胀后腐蚀的闭运算去除了原始图像内部的小孔&#xff08;内部闭合的…

Ctfshow web入门 JWT篇 web345-web350 详细题解 全

CTFshow JWT web345 先看题目&#xff0c;提示admin。 抓个包看看看。 好吧我不装了&#xff0c;其实我知道是JWT。直接开做。 在jwt.io转换后&#xff0c;发现不存在第三部分的签证&#xff0c;也就不需要知道密钥。 全称是JSON Web Token。 通俗地说&#xff0c;JWT的本质…

Web测试框架SeleniumBase

首先&#xff0c;SeleniumBase支持 pip安装&#xff1a; > pip install seleniumbase它依赖的库比较多&#xff0c;包括pytest、nose这些第三方单元测试框架&#xff0c;是为更方便的运行测试用例&#xff0c;因为这两个测试框架是支持unittest测试用例的执行的。 Seleniu…

深入理解负载均衡原理及算法

1. 前言 在互联网早期,网络还不是很发达,上网用户少,流量相对较小,系统架构以单体架构为主。但如今在互联网发达的今天,流量请求动辄百亿、甚至上千亿,单台服务器或者实例已完全不能满足需求,这就有了集群。不论是为了实现高可用还是高性能,都需要用到多台机器来扩展服…

《在细雨中呼喊》阅读笔记

《在细雨中呼喊》阅读笔记 2023年2月5号在家读完&#xff0c;本书就是以作者者回忆的形式来写&#xff0c;男一号叫孙光林&#xff0c;有一个哥哥孙光平&#xff0c;一个弟弟叫孙光明&#xff0c;父亲叫孙光才。书中写了四篇故事。 第一篇写的就是作者对于老家生活的回忆 小的时…

2023年第四届“华数杯”数学建模思路 - 案例:随机森林

## 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是随机森林&#xff1f; 随机森林属于 集成学习 中的 Bagging&#xff08;Bootstrap AGgregation 的简称&#xff09; 方法。如果用图来表示他们之…

Android 之 AudioManager ( 音频管理器 )

本节引言&#xff1a; 在多媒体的第一节&#xff0c;我们用SoundPool写了个Duang的示例&#xff0c;小猪点击一个按钮后&#xff0c;突然发出"Duang"的 一声&#xff0c;而且当时的声音很大&#xff0c;吓死宝宝了 &#xff0c;好在不是上班时间&#xff0c;上班时间…

【LeetCode】516. 最长回文子序列

文章目录 1. 思路讲解1.1 创建dp表1.2 状态转移方程1.3 不需考虑边界问题 2. 整体代码 1. 思路讲解 1.1 创建dp表 此题采用动态规划的方法&#xff0c;创建一个二维dp表&#xff0c;dp[i][j]表示s[i, j]中最大回文子序列的长度。且我们人为规定 i 是一定小于等于 j 的。 1.2…

【大数据】Flink 从入门到实践(一):初步介绍

Flink 从入门到实践&#xff08;一&#xff09;&#xff1a;初步介绍 Apache Flink 是一个框架和分布式处理引擎&#xff0c;用于在 无边界 和 有边界 数据流上进行 有状态 的计算。Flink 能在所有常见集群环境中运行&#xff0c;并能以内存速度和任意规模进行计算。 1.架构 1…

Kubernetes——理论基础

Kubernetes——理论基础 一、Kubernetes 概述1.K8S 是什么&#xff1f;2.为什么要用 K8S?3.Kubernetes 主要功能 二、Kubernetes 集群架构与组件三、Master 组件1.Kube-apiserver2.Kube-controller-manager3.Kube-scheduler4.配置存储中心——etcd 四、Node 组件1.Kubelet2.Ku…