二值图像分割统一项目

1. 项目文件介绍

本章为二值图像的分割任务做统一实现,下面是项目的实现目录

项目和文章绑定了,之前没用过,不知道行不行

  • data 文件夹下负责摆放数据的训练集+测试集
  • inference 负责放待推理的图片(支持多张图片预测分割)
  • run_results 是网络训练过程的日志文件
  • python 代码介绍
compute_mean_std计算训练集图像灰度的均值和方差像素分布(-1,1)之间可以让网络更好的收敛
confuse_matrix混淆矩阵通过分类任务的混淆矩阵,计算不同像素的iou
dataset数据集的加载代码根据数据集在data文件下的摆放,加载数据
model模型,这里采用vgg为骨干网络resnet比vgg有更好的提取特征能力,这个后续介绍
predict推理代码
train模型的训练代码
transforms对图像预处理的重构不同于分类任务,图像的缩放,相应的标签也要进行缩放
utils关于训练过程的工具函数

2. 使用代码

README 文件有详细介绍!!

1. 环境搭建

搭建好项目需要的环境后,下载 requirements.txt 需要的库文件即可

2. 数据集的摆放

按照指定位置摆放,文件夹的名称不可更改,否则需要重新编写dataset文件 !!!

3. 关于超参数的设定

因为transforms 对图像进行缩放后中心裁剪,所以训练train 文件前,根据训练图片的大小进行更改。训练过程的超参数文件也可以在这里更改

例如这里的训练图片是96*96的空间分辨率,所以设定的中心裁剪为96

至于base_size 是图像进行缩放的比例,如下图,在120的 0.5到1.5倍数之间随机缩放。有部分疑问后面聊

4. 开始训练

运行train 文件即可,会在train文件生成下面四个文件

下面是细胞分割的训练展示

loss iou 曲线:

学习率衰减曲线:这里使用的cos自适应衰减

训练日志:左侧的一列是背影0的指标,右侧是1的指标,可以参考之前的介绍:混淆矩阵、语义分割的指标

 

5. 如何预测

因为训练的预处理mean和std是计算得到的,所以预测之前需要重新填写,如下

只需要将train得到的填入下方就行了

3. 有些问题

因为本人在训练过程有几点困惑,所以写在这,方便大佬解答...

1. transform 的缩放设定

因为图像分割最终的目的都是将前景图像从背景中抠出来,这就涉及到图像的尺寸问题。

例如,标准的unet 输入是固定的,例如460*460或者512*512,但大部分的图片这个尺寸。虽说图像处理可以进行缩放解决,但将label缩放插值方法总觉得差点意思,这会导致原本的前景被改变。而且,就算将训练集统一缩放了,预测新的图片呢?也需要缩放吗?

于是本章利用了随机缩放图像大小的方法,这样随机输入的图像本身就是不固定的,相当于多尺度输入吧,这样随机预测新图片的时候,输入的图像大小也就无所谓了

        min_size = int(0.5 * base_size)max_size = int(1.5 * base_size)

2. 为什么用 vgg 不用 resnet

vgg 的效果确实不如 resnet 提取特征强,作者本人网上找了很多换成resnet的代码,但都用一个问题,不能任意输入大小

本人在resnet的代码上更改了很久,没有实现,太菜了...

这样就产生了第一个问题,最后权衡一二,使用了本章vgg为骨干的unet模型。这里的unet添加了代码,可以支持任何尺度的输入

当然,如果不介意输入尺寸的问题,可以利用自带库,直接调用

参考:Unet 基于TCGA颅脑肿瘤MRI分割(高阶API分割模型)

3. 关于 dataset 部分

对应于固定的分割任务,dataset都是需要自己重构的,为了尽量代码复用,所以数据集的摆放必须遵循固定的顺序

有些训练图片和标签图像名字不是严格对应的,比如后缀啊,或者文件名啊。可以利用python 批处理进行更改,或者在dataset 里面重构

对于,label 不是标准的二值图像(看起来黑白,其实中间包含了其他像素值),通过阈值进行处理。

需要注意的是,qq截图可以显示灰度值,但不是准确的。将图片放到最大,可能就是二值图片,因为图像缩放,分辨器显示的问题。(作者之前在这吃过不少亏...)

二值化还一个好处,将灰度值映射成120的话,可以观察train过程的预处理图像长啥样

将train 部分的代码打开即可

好像不需要更改也行,plot 自动调色了....

    # # 可视化数据,二值化中,将 dataset的标签映射改成 120会看的更清楚# # 可以查看具体的训练图像被预处理成啥样# dataloader = next(iter(trainLoader))# plot(data_loader=dataloader,mean=train_mean,std=train_std)# return

还有别的问题,可以在评论区在交流....

 

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

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

相关文章

gitlab-jenkins-shell-helm-chart-k8s自动化部署微服务

1.准备好编译环境的容器,所有容器的镜像制作在gemdale-dockerfile这个代码库里面,也可以直接拉取官方镜像部署 docker run --name node1420-patternx -v /data/var/www/:/data/var/www/ -v /var/jenkins_home/:/var/jenkins_home/ -v /mnt/hgfs/:/mnt/h…

postgresql pg_hba.conf 配置详解

配置文件之pg_hba.conf介绍 该文件用于控制访问安全性,管理客户端对于PostgreSQL服务器的访问权限,内容包括:允许哪些用户连接到哪个数据库,允许哪些IP或者哪个网段的IP连接到本服务器,以及指定连接时使用的身份验证模…

MySQL数据备份

一、逻辑备份 备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低。 本质:导出的是SQL语句文件 优点:不论是什么存储引擎,都可以用mysqldump备成SQL语句 缺点:速度较慢&…

由11月27日滴滴崩溃到近两个月国内互联网产品接二连三崩溃引发的感想

文章目录 知乎文分析微信聊天截图微信公众号 滴滴技术 发文k8s 官方文档滴滴官方微博账号 近两个月国内互联网产品“崩溃”事件2023-10-23 语雀崩溃2023-11-12 阿里云崩溃2023-11-27 滴滴崩溃2023-12-03 腾讯视频崩溃总结 我的感想 知乎文分析 最近连续加班,打车较…

天池XGBoost,重写柱状图代码,标签编码

天池XGBoost 地址 重写柱状图代码:我没考虑复杂度,只考虑直观理解 原文统计地点是否降雨来画柱状图实在是太麻烦了,我重写了一下。最麻烦的就是数据处理。我的思路是: 首先取下雨的全部数据data[data[RainTomorrow] Yes] 然后…

SpringBoot——嵌入式 Servlet容器

一、如何定制和修改Servlet容器的相关配置 前言: SpringBoot在Web环境下,默认使用的是Tomact作为嵌入式的Servlet容器; 【1】修改和server相关的配置(ServerProperties实现了EmbeddedServletContainerCustomizer)例如…

Http和WebSocket

客户端发送一次http请求,服务器返回一次http响应。 问题:如何在客户端没有发送请求的情况下,返回服务端的响应,网页可以得服务器数据? 1:http定时轮询 客户端定时发送http请求,eg&#…

IntelliJ IDEA图形安装教程

IntelliJ IDEA图形安装教程 之前开始Java程序,一直用的eclipse,觉得还可以。一直听说IntelliJ IDEA比eclipse好用很多,但因为比较懒,也没有学习使用。机缘巧合下,尝试用了下,顿时有种相见恨晚的感觉&#…

17:00面试,17:06就出来了,问的问题有点变态。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到8月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%,…

编码器-解码器(seq-seq)

1. 背景 encoder-decoder和seq-seq模型可以解决输入与输出都是不定长序列的问题。它们都用到了两个循环NN,分别叫做编码器(用来分析输入序列)与解码器(用来生成输出序列)。 2. 编码器 把一个不定长的输入序列变换成一个定长的背景变量c,并在其中编码输入…

关于栈的简单理解

1. 栈(Stack) 1.1 文字讲解 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则&a…

设计模式之代理模式(1)

目录 概述定义应用场景主要角色类图 详述基本代码应用实例符合的设计原则 总结 概述 定义 代理模式是一种结构型设计模式,它允许通过一个代理对象来控制对原始对象的访问。代理对象可以在不改变原始对象的情况下,增加一些额外的功能,例如权限…