Unet 高阶分割网络实战、多类别分割、迁移学习(deeplab、resnet101等等)

1、前言 

Unet 图像分割之前介绍了不少,具体可以参考 图像分割专栏

 

为了实现多类别的自适应分割,前段时间利用numpy的unique函数实现了一个项目。通过numpy函数将mask的灰度值提取出来,保存在txt文本里,这样txt里面就会有类似0 1 2 ...等等的灰度值。而有几个灰度值,就代表分割要分出几个类别。

具体可以参考:Unet 实战分割项目、多尺度训练、多类别分割

将vgg换成resnet的unet参考:Unet+ResNet 实战分割项目、多尺度训练、多类别分割 

对于图像分割而言,仍有很多的分割网络(例如deeplab、retinaNet等等)在分割任务有不错的表现。这里将介绍几种torch自定义的高阶分割API

高阶分割API的输入被限制为32的倍数,不能像之前那样输入任意大小

2、Resnet101

代码类似,参考之前的文章即可,这里仅仅将网络进行替换

需要安装的库文件:

pip install segmentation-models-pytorch

导入:

导入网络:

结果:

效果还是可以的

3、Deeplabv3

可以利用torchvision自带的分割网络

导入:

加载网络:

这里没有加载预训练模型,因为不同的输出会导入预训练权重失败,当然可以删除最后的输出层进行导入,可以自己尝试下

结果:

4、项目地址

下载地址:项目的使用,参考readme文件

深度学习 Unet+Resnet101 实战分割项目、多尺度训练、迁移学习、多类别分割:腹部多脏器5类别分割数据集

 

深度学习 Deeplabv3+Resnet101 实战分割项目、多尺度训练、多类别分割:腹部多脏器5类别分割数据集

5、一点废话

对于官方实现的高阶分割网络而言,输入需要限制在32的倍数,这是根据unet下采样的倍数决定的。

这样在推理的时候,也需要将图像resize成固定大小,之前讨论过这个问题,总感觉有点差强人意,所以本人不太使用这种高阶API,参考:关于图像分割的预处理 transform

对于二值图像来说,之前做过几个项目,有的是单通道输出,有的是多通道输出

因为对于二值图像分割,结果就两个0 1,可以利用交叉熵进行输出两个,也可以利用sigmoid阈值处理变成两个,结果是没区别的。后者的精度虽然高,但仅仅是精度,不是iou,将同样的项目换到交叉熵的多通道输出,结果也一样,所以不需要纠结。如下:

 

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

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

相关文章

RisingWave最佳实践-利用Dynamic filters 和 Temporal filters 实现监控告警

心得的体会 刚过了年刚开工,闲暇之余调研了分布式SQL流处理数据库–RisingWave,本人是Flink(包括FlinkSQL和Flink DataStream API)的资深用户,但接触到RisingWave令我眼前一亮,并且拿我们生产上的监控告警…

快速排序法的名字由来,排序步骤是什么,最坏情况下的排序次数如何计算得来的呢?

问题描述: 快速排序法的名字由来,排序步骤是什么,最坏情况下的排序次数如何计算得来的呢? 问题解答: 快速排序法的名字来源于其排序速度快的特点。它是由英国计算机科学家 Tony Hoare 于1960年提出的,最…

劫持已经存在的DLL

这里找到一个成功加载的 这里先把原来程序正常的dll改名为libEGL1.dll,然后将我们自己的dll改名为libEGL.dll 然后再重新执行程序,这里同样是弹出了窗口

C++的string容器->基本概念、构造函数、赋值操作、字符串拼接、查找和替换、字符串比较、字符存取、插入和删除、子串

#include<iostream> using namespace std; #include <string> //string的构造函数 /* -string(); //创建一个空的字符串 例如: string str; -string(const char* s); //使用字符串s初始化 -string(const string& str); //使…

每日一学—由面试题“Redis 是否为单线程”引发的思考

文章目录 &#x1f4cb; 前言&#x1f330; 举个例子&#x1f3af; 什么是 Redis&#xff08;知识点补充&#xff09;&#x1f3af; Redis 中的多线程&#x1f3af; I/O 多线程&#x1f3af; Redis 中的多进程&#x1f4dd; 结论&#x1f3af;书籍推荐&#x1f525;参与方式 &a…

备战蓝桥杯—— 双指针技巧巧答链表1

对于单链表相关的问题&#xff0c;双指针技巧是一种非常广泛且有效的解决方法。以下是一些常见问题以及使用双指针技巧解决&#xff1a; 合并两个有序链表&#xff1a; 使用两个指针分别指向两个链表的头部&#xff0c;逐一比较节点的值&#xff0c;将较小的节点链接到结果链表…

C++的文件操作详解

目录 1.文本文件 1.写文件 2.读文件 2.二进制文件 1.写文件 2.读文件 1.文本文件 1.写文件 #include<bits/stdc.h> #include<fstream> using namespace std;int main() {ofstream ofs;ofs.open("text.txt",ios::out);ofs << "abc&qu…

H桥逆变控制方式(单极性倍频)

单极性倍频图像 内部做了载波取反&#xff1a;正相载波和负相载波 最后都和调制载波一起比较 正相载波&#xff1a;Q7导通为高电平&#xff0c;Q15导通为低电平 负相载波&#xff1a;Q16导通为高电平&#xff0c;Q8导通为低电平 导通次序为&#xff1a;Q7Q16——Q7Q8——Q7Q…

第3.3章:StarRocks数据导入——Stream Load

一、概述 Stream Load是StarRocks最为核心的导入方式&#xff0c;用户通过发送HTTP请求将本地文件或数据流导入至StarRocks中&#xff0c;其本身不依赖其他组件。 Stream Load支持csv和json两种数据文件格式&#xff0c;适用于数据文件数量较少且单个文件的大小不超过10GB 的场…

【微服务】国内微服务生态标准-SpringCloud Alibaba

现在已经是21世纪的二十年代&#xff0c;在未来的很长时间&#xff0c;以互联网、IOT物联网为代表的分布式应用必将越来越多&#xff0c;大量的软件企业对掌握微服务与高可用、高性能、高并发的架构人才也必定趋之若鹜。我们可以看看现阶段针对软件架构师的招聘需求和薪资&…

LoRA Land:性能优于 GPT-4 的微调开源 LLMs

我们很高兴发布 LoRA Land&#xff0c;这是 25 个经过微调的 Mistral-7b 模型的集合&#xff0c;根据任务的不同&#xff0c;它们的性能始终比基本模型高出 70%&#xff0c;GPT-4 高出 4-15%。LoRA Land 的 25 个任务专用大型语言模型 &#xff08;LLMs&#xff09; 都使用 Pre…

Java的编程之旅27——继承

1.继承的简介 继承是面向对象编程中的一个重要概念&#xff0c;指的是一个类可以继承另一个类的属性和方法。被继承的类称为父类或基类&#xff0c;继承这个父类的类称为子类或派生类。 通过继承&#xff0c;子类可以继承父类的属性和方法&#xff0c;使得子类具有相似的行为…