基于U-Net网络实现图像分割

目录

  • 1、作者介绍
  • 2、U-Net网络及数据集介绍
    • 2.1 U-Net网络
    • 2.2 数据集介绍
      • 2.2.1 VOC_2012数据集
      • 2.2.2 眼球毛细血管数据集
      • 2.2.3 医学图像数据集
  • 3、U-Net实现图像分割
    • 3.1 U-Net实现图像分割实验(简易版本)
      • 3.1.1 环境配置
      • 3.1.2 数据集准备
      • 3.1.3 代码实现
      • 3.1.4 实验结果
      • 3.1.5 总结
    • 3.2 U-Net实现图像分割实验(改进版本)
      • 3.2.1 环境配置
      • 3.2.2 数据集准备
      • 3.2.3 代码实现
      • 3.2.4 实验结果(采用MIoU评价指标)
  • 4、问题与分析
  • 参考链接

1、作者介绍

黎长淼,男,西安工程大学电子信息学院,2022级研究生
研究方向:控制科学与工程
电子邮件:1043626870@qq.com

陈梦丹,女,西安工程大学电子信息学院,2022级硕士研究生,张宏伟人工智能课题组
研究方向:机器视觉与人工智能
电子邮件:1169738496@qq.com

2、U-Net网络及数据集介绍

2.1 U-Net网络

U-Net是2015年提出的一种经典的图像语义分割网络,主要用于解决医学图像分割问题。U-Net能从更少的训练图像中进行学习,当它在少于40张图的生物医学数据集上训练时,IOU值仍能达到92%。它由一个编码器和一个解码器组成,其中编码器用于提取图像特征,解码器用于将特征图还原为原始图像大小的分割结果。
在这里插入图片描述

2.2 数据集介绍

2.2.1 VOC_2012数据集

VOC_2012数据集来源于PASCAL VOC挑战赛(The PASCAL Visual Object Classes),该数据集主要包括20个类别,可用于目标检测、目标分割、行为识别等任务。可选择在官网下载或者使用百度网盘进行下载:

(1)官网下载地址:
http://host.robots.ox.ac.uk/pascal/VOC/voc2012/VOCtrainval_11-May-2012.tar
https://pjreddie.com/projects/pascal-voc-dataset-mirror/
(2)百度网盘下载地址:
链接:https://pan.baidu.com/s/1ln-1Pa2VzXx5P9179PPvvQ
提取码:miao

原始图片(左列)及标签(右列)如下图所示:
在这里插入图片描述

2.2.2 眼球毛细血管数据集

数据集下载路径(百度网盘):
链接:https://pan.baidu.com/s/1zOYyO8ocvEE9LgT3Eexfhg
提取码:miao

原始图片(左侧)及标签(右侧):
在这里插入图片描述

2.2.3 医学图像数据集

数据集下载路径(百度网盘):
链接:https://pan.baidu.com/s/1U6iivLiwOALJB-3nVHKHfQ
提取码:miao

原始图片(左侧)及标签(右侧):
在这里插入图片描述

3、U-Net实现图像分割

3.1 U-Net实现图像分割实验(简易版本)

3.1.1 环境配置

  • pytorch
  • torchvision
  • opencv-python
  • tqdm

3.1.2 数据集准备

下载前面提到的VOC_2012数据集和眼球毛细血管数据集,下载好的两个数据集目录如下图所示:
在这里插入图片描述

3.1.3 代码实现

代码实现部分主要包括定义U-Net网络、对数据集进行预处理、编写训练函数训练模型,具体编程思路可参考下图。
在这里插入图片描述

百度网盘
(1)完整代码下载地址:
链接:https://pan.baidu.com/s/1E8xJMFQX7jciq7T0-SssiA
提取码:miao
(2)训练好的模型权重下载地址:
链接:https://pan.baidu.com/s/1nvl0BUxgNbnR67ankmCebQ
提取码:miao

注意:

  • 程序中数据集路径不要包含中文名;
  • 如果使用笔记本的gpu或cpu进行调试时,建议将程序中的batchsize设置小一点,例如batchsize=1;
  • 如果仅仅是测试,建议下载上文训练好的权重,然后选择几张图片进行测试。

3.1.4 实验结果

VOC_2012数据集:在这里插入图片描述
在这里插入图片描述
眼球毛细血管数据集:
在这里插入图片描述
在这里插入图片描述

3.1.5 总结

优点:实现较为简单,训练速度较快。
不足:分割性能有待提升,缺乏评价指标。

3.2 U-Net实现图像分割实验(改进版本)

鉴于上述版本,为追求便捷性,实现较为简单,适用于初学者了解U-Net网络的作用。为了更近一步学习,我们使用VGG16及ResNet50将U-Net网络加深,并设计多种损失函数、完善训练策略。

3.2.1 环境配置

  • scipy==1.2.1
  • numpy==1.17.0
  • matplotlib==3.1.2
  • opencv_python==4.1.2.30
  • torch==1.2.0
  • torchvision==0.4.0
  • tqdm==4.60.0
  • Pillow==8.2.0
  • h5py==2.10.0

3.2.2 数据集准备

下载前文提到的VOC_2012数据集和医学图像数据集。

3.2.3 代码实现

代码中已逐行注释,我们可以根据自身情况选择不同的网络结构、损失函数和训练参数进行训练。

(1)完整代码下载地址:
百度网盘下载:
链接:https://pan.baidu.com/s/1cPcKLM0ORQcfBlOt_hMxbw
提取码:miao
GitCode下载:
https://gitcode.net/mirrors/bubbliiiing/unet-pytorch/-/tree/main/img

(2)训练好的模型权重下载地址:
链接: https://pan.baidu.com/s/1A22fC5cPRb74gqrpq7O9-A
提取码: 6n2c

3.2.4 实验结果(采用MIoU评价指标)

在这里插入图片描述
在这里插入图片描述

4、问题与分析

1、问题一: VOC数据集无法下载
在这里插入图片描述
解决方法一:换个浏览器,例如谷歌浏览器等;
解决方法二:使用本文给出的百度网盘下载地址进行下载。

2、问题二:路径问题

在这里插入图片描述
注意事项一:VOC数据集中原图(JPEGImages)是jpg格式,标签(SegmentationClass)是png格式;
注意事项二:查看所给路径是否正确,尤其是使用相对路径时。

3、问题三:配置虚拟环境时,装包过慢导致失败
解决方法一:使用清华镜像源进行加速。下面两行代码二选一即可,用具体包名替换代码中的some-package。

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
或者
pip install some-package -i https://pypi.tuna.tsinghua.edu.cn/simple 

解决方法二:使用镜像源加速,仍然无法解决上述问题时,可采用离线安装的方式。

参考链接

[1] VOC2012数据集文件夹结构的介绍:https://blog.csdn.net/qq_43718758/article/details/128065362
[2] 程序编写:https://blog.csdn.net/hehuaiyuyu/article/details/106307748
https://gitcode.net/mirrors/bubbliiiing/unet-pytorch/-/tree/main/img

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

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

相关文章

(十)异步-使用异步(3)

一、GUI 程序中的异步操作 1、在 GUI 程序中使用异步操作 在 GUI程序中, 首先理解关于 UI 显示变化的概念。 消息: UI 上的行为,如点击按钮、展示标签、移动窗体等。消息队列: 把要触发的所有消息,都按照相关的顺序…

CSDN 周赛 59 期

CSDN 周赛 59 期 前言判断题单选题题目1题目2填空题编程题1、题目名称:坏掉的打字机2、题目名称:布尔零点计数小结前言 由于最近,csdn 每日一练新增了两个题目,按照惯例,那么新增的题目,会就近出现在最近的 CSDN 周赛中,嗯,经常参加周赛,并关注每日一练社区的小伙伴应…

IO流(C++)

IO流C C语言的输入与输出流是什么CIO流C标准IO流C文件IO流二进制读写文本读写 stringstream的简单介绍 C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输入设备(键 盘)读取数据,并将值存放在变量中。printf():…

阿里云国际站代理商:如何优化阿里云服务器的性能和响应速度?有哪些调优策略和建议?

随着互联网的发展,阿里云服务器已经成为很多企业和个人的首选解决方案。然而,面对不断增长的需求和复杂的网络环境,如何优化阿里云服务器的性能和响应速度,提高用户体验,是很多用户关心的问题。本文将从以下几个方面&a…

MsSqlServer配置管理器TCP/IP属性

TCP/IP 属性(“IP 地址”选项卡) 使用 “TCP/IP 属性(‘IP 地址’选项卡)” 对话框,可以配置特定 IP 地址的 TCP/IP 协议选项。 只有选中 “IP All” ,才能一次配置所有地址的 “TCP 动态端口” 和 “TCP…

Debian openssh-server 的安装

在之前安装系统的时候有一个安装 SSH 服务的,结果没点上,导致系统完成后,ssh无法连接上啊,于是要安装sshd 服务。使用命令:apt-get install openssh-server 结果就出现问题了: 网上搜索说是要更新源&#x…

catkin cmake官方教程解读以及资料补充

这里写目录标题 报错cmakei下载cmake 官方教程教程1step1最低版本 报错报错2 vscode 路径没有配置好setting.json通过该方式打开的似乎是一个全局的文件,可以为本工作文件夹下设置一个本地的吗 报错3配置cmake工具链准确的流程报错4 cpp中main函数返回值问题结果 官…

Verilog基础:标识符的向上向下层次名引用

相关文章 Verilog基础:表达式位宽的确定(位宽拓展) Verilog基础:表达式符号的确定 Verilog基础:数据类型 Verilog基础:位宽拓展和有符号数运算的联系 Verilog基础:case、casex、ca…

如何在Microsoft Excel中使用TRUNC函数

Excel 中有多种删除小数点和缩短数值的方法。在本文中,我们将解释如何使用 TRUNC 函数,以及它与其他技术的不同之处。 TRUNC函数 什么是 TRUNC 功能如何使用 TRUNC 函数从日期时间戳中删除时间什么是 TRUNC 功能 TRUNC 函数将数字截断为指定的小数位数。使 TRUNC 不同于其他…

概率论与数理统计教程第五章节笔记

参考书籍:概率论与数理统计教程第三版 茆诗松 程依明 濮晓龙 编著 文章声明:如有错误还望批评指正 文章目录 ξ 5.1 \xi5.1 ξ5.1总体与样本 ξ 5.2 \xi5.2 ξ5.2样本数据的整理与显示Python绘制直方图Python绘制茎叶图 ξ 5.3 \xi5.3 ξ5.3统计量及其分…

基於Hadoop HA 在kerberos中配置datax

概要 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 概要 前言一、基於HADOOP HA 搭建datax二、基於HADOOP HA 配置好的datax去配置kerberos1.在datax的配置文件中進行配置2.在shell腳本中加入認證語句 总结 前言…

layui框架学习(27:弹出层模块_其它用法)

除了前几篇文章介绍的弹出框类型外,layui的layer弹出层模块还支持相册框和tab框,所谓相册框即点击图片或按钮后会出现一个类似相册的页面单独浏览、切换图片,而tab框是指弹出框的显示形式类似于Winform中的TabControl控件,能以选项…

【Spring Security】的RememberMe功能流程与源码详解

文章目录 前言原理 基础版搭建初始化sql依赖引入配置类验证 源码分析 进阶版集成源码分析疑问1疑问2 鉴权 升级版集成初始化sql配置类验证 源码分析鉴权流程 扩展版 前言 之前我已经写过好几篇权限认证相关的文章了,有想复习的同学可以查看【身份权限认证合集】。今…

MIT 6.S081 Lab Four

MIT 6.S081 Lab Four 引言trapsRISC-V assembly (easy)代码解析 Backtrace(moderate)代码解析 Alarm(Hard)test0: invoke handler(调用处理程序)test1/test2(): resume interrupted code(恢复被中断的代码)代码解析issue解答 可选的挑战练习 引言 本文为 MIT 6.S081 2020 操作…

JDBC BasicDAO详解(通俗易懂)

目录 一、前言 二、BasicDAO的引入 1.为什么需要BasicDAO? 2.BasicDAO示意图 : 三、BasicDAO的分析 1.基本说明 : 2.简单设计 : 四、BasicDAO的实现 0.准备工作 : 1.工具类 : 2.JavaBean类 : 3.BasicDAO类 / StusDAO类 : 4.测试类 : 一、前言 第七节内容…

Jenkins+Docker 实现一键自动化部署项目!步骤齐全,少走坑路

大家好,我是互联网架构师! 本文章实现最简单全面的Jenkinsdockerspringboot 一键自动部署项目,步骤齐全,少走坑路。 环境:centos7git(gitee) 简述实现步骤:在docker安装jenkins,配置jenkins基…

数据结构:二叉树经典例题(单选题)-->你真的掌握二叉树了吗?(第一弹)

朋友们、伙计们,我们又见面了,本期来给大家解读一下有关二叉树的经典例题,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数…

Sentinel的限流和Gateway的限流差别?

Sentinel的限流与Gateway的限流有什么差别? 问题说明:考察对限流算法的掌握情况 限流算法常见的有三种实现:滑动时间窗口,令牌桶算法,漏桶算法。gateway则采用基于Redis实现的令牌桶算法。但是我们不会去用&#xff…

ubuntu常用命令

设置root密码 安装好ubuntu后谁也不知道root密码是多少,可以借助于passwd命令来设置root密码。 sudo passwd root 同理修改其他用户只需替换上方用户名即可 换源 备份原始文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak 修改源文件 sudo vim /et…

数据链路层(MAC)、网络层(IP)、传输层(TCP/UDP)抓包分析

目录 OSI七层模型数据包逐层封装头部抓包分析数据包概况数据链路层抓包网络层抓包(IP协议抓包)UDP抓包数据负载抓包 Linux cooked-mode capture OSI七层模型 OSI模型(OSI model),开放式系统互联通信参考模型&#xff…