二值图像分割统一项目

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

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

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实体、协议、服务和服务访问点

目录 一、概念 二、相邻两层之间的关系 三、面向连接服务的特点 四、无连接服务的特点 五、著名的协议举例 一、概念 实体(entity)表示任何可发送或接收信息的硬件或软件进程。同机器上同一层的实体叫做对等实体(peer entity&#xff0…

【算法专题】前缀和

前缀和 前缀和1. 前缀和【模板】2. 二维前缀和【模板】3. 寻找数组的中心下标4. 除自身以外数组的乘积5. 和为K的子数组6. 和可被K整除的子数组7. 连续数组8. 矩阵区域和 前缀和 1. 前缀和【模板】 题目链接 -> Nowcoder -DP34.前缀和【模板】 Nowcoder -DP34.前缀和【模…

计算机网络:传输层——多路复用与解复用

文章目录 前言一、Socket(套接字)二、多路复用/解复用三、多路解复用(1)多路解复用原理(2)无连接(UDP)多路解复用(3)面向连接(TCP)的多…

15:00的面试,15:06就出来了,问的问题过于变态了。。。

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

neuq-acm预备队训练week 8 B3647 【模板】Floyd 题解

题目描述 给出一张由 n 个点 m 条边组成的无向图。 求出所有点对(i,j) 之间的最短路径。 题目限制 输入格式 第一行为两个整数 n,m,分别代表点的个数和边的条数。 接下来 m 行,每行三个整数u,v,w,代表 u,v 之间存在一条边权为 w 的边。 …

pip的基本命令和使用

pip 简介 pip是Python官方的包管理器,可以方便地安装、升级和卸载Python包。 pip 常用命令 显示版本和路径 pip --version获取帮助 pip --help升级pip和升级包 pip install --upgrade pip # Linux/macOS pip install -U pip # windowspip install…

基于SSM的图书馆管理系统的设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:vue 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

剑指 Offer(第2版)面试题 16:数值的整数次方

剑指 Offer(第2版)面试题 16:数值的整数次方 剑指 Offer(第2版)面试题 16:数值的整数次方解法1:快速幂 - 递归写法解法2:快速幂 - 非递归写法 剑指 Offer(第2版&#xff…

ES 快照到 S3 并从 Windows 共享目录恢复(qbit)

前言 业务需要将 Elasticsearch 快照到 AWS S3,再将快照拷贝到 Windows 系统,并恢复到 Elasticsearch。如下图所示: 环境 Elasticsearch 7.10.1 Windows Server 2019 Ubuntu 20.04 (ES 宿主) ES 集群1 安装 S3 插…

HarmonyOS/OpenHarmony应用开发

OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目, 目标是面向全场景、全连接、全智能时代, 搭建一个智能终端设备操作系统的框架和平台, 促进万物互联产业的繁荣发展。 了解OpenHarmony HarmonyOS是华为通过OpenHarmony项目,结合商业…

Notepad++ 安装TextFx插件失败

据说TextFx插件是Notepad常用插件之一;有很多格式化代码的功能;下面安装一下; 插件管理里面看一下,没有这个TextFx; 根据资料,先安装NppExec; 然后下一个5.9老版本的Notepad,如下图…

Backend - Django makemigrations

目录 一、迁移命令 (一)前提 (二)生成迁移文件 (三)执行迁移 二、迁移问题 1. Error:No changes detected 2. Error:You are trying to add a non-nullable field XXX to XXX…

SpringBoot启动流程

SpringBoot启动流程 文章目录 SpringBoot启动流程SpringBoot启动流程 SpringBoot启动流程 视频链接: https://www.bilibili.com/video/BV15b4y1a7yG/?p174&spm_id_frompageDriver&vd_sourcef6debc5a79e3f424f9dde2f13891b158 看李老师讲的吧,特…

LoadBalancer将服务暴露到外部实现负载均衡Openelb-layer2模式配置介绍

目录 一.openelb简介 二.主要介绍layer2模式 1.简介 2.原理 3.部署 (1)先在集群master上开启kube-proxy的strictARP (2)应用下载openelb.yaml(需要修改镜像地址) (3)编写yam…

在winform中绘图

今天跟大家分享一下最近做的一个程序中绘图功能的实现。 先来看看实现的效果: 具体实现 页面的设计 绘图设置页面的设计如下所示: 4个label控件,控件如下所示: 2个DateEdit控件,控件如下所示: 1个ComboB…

前端笔记(三)CSS 盒子模型

结构伪类选择器 基本的结构伪类选择器 可以根据元素的结构关系来查找元素 比如列标签 li&#xff0c;使用 li:first-child { background-color: green; }就可以选中第一个该标签。 <!DOCTYPE html> <html lang"en"> <head><meta charset&q…

python-单词本|通讯录

编写程序&#xff0c;生词本。 def sayHello():print("" * 20 \n 欢迎使用生词本\n 1.查看生词本\n 2.背单词\n 3.添加新单词\n 4.删除单词\n 5.清空生词本\n 6.退出生词本\n * 20 \n)def addW(data):word input("请输入新单词&#xff1a;")trans i…

如何使用Cloudreve搭建本地云盘系统并实现随时远程访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…

mfc 设置excel 单元格的列宽

CString strTL, strBR;strTL.Format(L"%s%d", GetExcelColName(cd.nCol), cd.nRow);strBR strTL;CRange rangeMerge range.get_Range(_variant_t(strTL), _variant_t(strBR));rangeMerge.put_ColumnWidth(_variant_t((long)(20))); 宽度设置函数为 &#xff1a; pu…

Nginx安装

Nginx简介 Nginx 是一个高性能的HTTP和反向代理web服务器&#xff0c;其特点是占有内存少&#xff0c;并发能力强&#xff0c;其并发能力在同类型的网页服务器中表现较好。 Nginx安装 下载地址 安装稳定版本 下载完成后进行解压 可以双击nginx.exe 启动nginx 也可以打开cm…