# unet_42 **Repository Path**: luoyongcoder/unet_42 ## Basic Information - **Project Name**: unet_42 - **Description**: 基于Unet的医学影像分割系统 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 27 - **Created**: 2022-11-05 - **Last Updated**: 2022-11-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 手把手教你用Unet做医学图像分割 兄弟们好呀,这里是肆十二,这转眼间寒假就要过完了,相信大家的毕设也要准备动手了吧,作为一名大作业区的UP主,也该蹭波热度了,之前关于图像分类和目标检测我们都出了相应的教程,所以这期内容我们搞波新的,我们用Unet来做医学图像分割。我们将会以皮肤病的数据作为示范,训练一个皮肤病分割的模型出来,用户输入图像,模型可以自动分割去皮肤病的区域和正常的区域。废话不多说,先上效果,左侧展示是原始图片,右侧是分割结果。  考虑到同学们的论文需要,我这里还做了一些指标图,大家可以放在文章里增加篇幅  需要远程调试的小伙伴直接扫码加我好友(qq: 3045834499)即可,没有三连的小伙伴99元,三连的小伙伴只需49元,你就可以获取环境配置、标注好的数据集、训练好的模型以及远程在线答疑全套服务。  ## 算法原理介绍 > 论文地址:https://arxiv.org/pdf/1505.04597.pdf > > 算法解析:[U-Net原理分析与代码解读 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/150579454) Unet 发表于 2015 年,属于 FCN 的一种变体。Unet 的初衷是为了解决生物医学图像方面的问题,由于效果确实很好后来也被广泛的应用在语义分割的各个方向,比如卫星图像分割,工业瑕疵检测等。 Unet 跟 FCN 都是 Encoder-Decoder 结构,结构简单但很有效。Encoder 负责特征提取,你可以将自己熟悉的各种特征提取网络放在这个位置。由于在医学方面,样本收集较为困难,作者为了解决这个问题,应用了图像增强的方法,在数据集有限的情况下获得了不错的精度。  如上图,Unet 网络结构是对称的,形似英文字母 U 所以被称为 Unet,在一些类别较少的数据集上,一般使用unet来做语义分割,尤其是在一些二分类的任务上,不仅仅模型比较小,而且在精度上也比较高。 更加详细的原理介绍大家可以参考原文以及大佬们在知乎和csdn上的解答,我在这里就不多做赘述了。 ## 下载代码 老规矩,代码放在码云上,地址是: 大家下载之后放在本地就行 **注:请大家使用chrome浏览器或者windows本地自带的edge浏览器下载,否则可能会出现压缩包损坏的bug,而且解压强烈安利大家使用bandzip。** ## 配置环境 不熟悉pycharm的anaconda的小伙伴请先看这篇csdn博客,了解pycharm和anaconda的基本操作 [如何在pycharm中配置anaconda的虚拟环境_dejahu的博客-CSDN博客_如何在pycharm中配置anaconda](https://blog.csdn.net/ECHOSON/article/details/117220445) anaconda安装完成之后请切换到国内的源来提高下载速度 ,命令如下: ```bash conda config --remove-key channels conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/ conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.bfsu.edu.cn/anaconda/cloud/pytorch/ conda config --set show_channel_urls yes pip config set global.index-url https://mirrors.ustc.edu.cn/pypi/web/simple ``` 首先创建python3.8的虚拟环境,请在命令行中执行下列操作: ```bash conda create -n unet python==3.8.5 conda activate unet ``` ### pytorch安装(gpu版本和cpu版本的安装) 实际测试情况是unet在CPU和GPU的情况下均可使用,不过在CPU的条件下训练那个速度会令人发指,所以有条件的小伙伴一定要安装GPU版本的Pytorch,没有条件的小伙伴最好是租服务器来使用。 GPU版本安装的具体步骤可以参考这篇文章:[2021年Windows下安装GPU版本的Tensorflow和Pytorch_dejahu的博客-CSDN博客](https://blog.csdn.net/ECHOSON/article/details/118420968) 需要注意以下几点: * 安装之前一定要先更新你的显卡驱动,去官网下载对应型号的驱动安装 * 30系显卡只能使用cuda11的版本 * 一定要创建虚拟环境,这样的话各个深度学习框架之间不发生冲突 我这里创建的是python3.8的环境,安装的Pytorch的版本是1.8.0,命令如下: ```cmd conda install pytorch==1.8.0 torchvision torchaudio cudatoolkit=10.2 # 注意这条命令指定Pytorch的版本和cuda的版本 conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cpuonly # CPU的小伙伴直接执行这条命令即可 ``` 安装完毕之后,我们来测试一下GPU是否  ### 安装unet程序所需的其他包 程序其他所需要的包我写在了`requirements.txt`文件中,大家只需要在项目目录下打开cmd,然后执行下列命令安装即可,**安装之前请确保你已经激活了虚拟环境** ```bash pip install -r requirements.txt ``` 到这里我们的环境基本已经配置完成了,你已经成功了一大半了,下面只需要按照教程完成剩下的步骤即可。 ## 数据处理 数据处理部分,医学影像这块我们一般使用公开的数据集,如果没有合适的数据集大家也可以选择自己进行标注,分割相对于检测而言标注起来比较麻烦,所以能找到公开的数据集最好使用公开的数据集,这里也放一些我收集和处理好的数据集,大家有需要的可以自取。 以下面的皮肤病数据集为例,其中左侧是原始图片,右侧是标注之后的标签,因为标签有两种像素值,背景为0,皮肤病区域为1,所以我们肉眼上看到的标签图片是全黑,但是实际上这些标签文件中的值是不一样的。  记住这里数据集的位置,后面在训练和测试的时候在代码中替换为自己本地的数据集位置。 **注:下面的内容是关于数据集的标注,如果大家已经找到合适的数据集,请自行跳过这部分的内容** * 1.LabelMe的安装 用户在采集完用于训练、评估和预测的图片之后,需使用数据标注工具[LabelMe](https://github.com/wkentaro/labelme)完成数据标注。LabelMe支持在Windows/macOS/Linux三个系统上使用,且三个系统下的标注格式是一样。 安装的过程非常简单,大家只需要在激活虚拟环境的前提下,执行下列之类即可 ``` pip install labelme ``` 安装完成之后,直接在命令行中输入`labelme`即可启动 * 2.LabelMe的使用 打开终端输入`labelme`会出现LableMe的交互界面,可以先预览`LabelMe`给出的已标注好的图片,再开始标注自定义数据集。 
图1 LableMe交互界面的示意图
图2 已标注图片的示意图
图3 标注单个目标的示意图
图4 修改标注的示意图
图5 LableMe产出的真值文件的示意图
图6 带空洞目标的标注示意图
图7 格式转换后的数据集目录的结构示意图
图8 格式转换后的数据集各目录的内容示意图