当前位置: 首页 > news >正文

一文入门深度学习(以医学图像分割为例)

目录

  • 文章简介
  • 深度学习基础概念
    • 什么是深度学习?为什么它有用?
    • 特征提取
        • 卷积层
    • 神经网络
  • 医学图像分割实践
    • 图像分割
        • 任务介绍
        • ISBI2012数据集
    • UNet
        • 模型架构
    • 模型训练
        • 环境安装
        • ISBI2012数据集下载
        • 训练
        • 验证
  • 总结

文章简介

从前端转到学习人工智能,走了不少弯路,甚至可以说是一直在走弯路就没有直过,所以为了让广大想学习深度学习的人能够真真切切有个整体的概念,我这里以实践出发来介绍深度学习的训练流程和基础知识。
本文参考的项目是:pytorch-unet-isbi2012。使用该项目进行实践的原因是unet模型很小,isbi数据集也很小,用cpu和gpu都可以训练,让广大没有gpu的同学也可以进行训练。那么我们开始学习深度学习把。

深度学习基础概念

什么是深度学习?为什么它有用?

深度学习其实说白了就是让模型去自适应数据集的一种方法。而让其有用的方法就是其强大的自动特征提取功能,通过获取的特征就可以很好地区分数据集不同的类别。这个前提就是获取的特征要提取的有区分度,那如何让它有区分度,这就是深度学习涉及的内容了。

特征提取

本文以图像分割为例,在图像分割中获取特征的方法就是使用卷积层。

卷积层

这里不讲很多数学的东西,我只给大家一个概念,那就是卷积层就是一个过滤器。它用来过滤掉图像的无用信息,比如你想识别一个人,可以通过眼睛的轮廓,嘴巴的形状等等。那计算机想获取这些特征,那必须过滤掉无用的信息,因此卷积被提出来了。通过卷积这个过滤器,计算机就可以得到图像的特征图,这个特征图包含眼睛的轮廓、嘴巴的形状等信息。

神经网络

那了解了卷积层是什么,那么我们就可以往下了解什么是神经网络,神经网络其实就是卷积层的叠加。上一个卷积层的输出是下一个卷积层的输入。也就是说上一个卷积层的特征图需要被进一步提取特征,变成更加高维的特征,这种更高维的特征往往更具有区分度。所以我们经常可以看到神经网络的层有很多。

医学图像分割实践

其实学习了这些你就可以开始训练模型了,其他的细节,我认为应该在实践中慢慢学习摸索。

图像分割

任务介绍

在这个项目中,图像分割的意义是给定一个细胞的图片,需要模型能够分割出一个个细胞(如下图所示,第一张为细胞原始图片;第二张为输出图,其中黑色表示背景,白色表示细胞)。在计算机中就是输入一个图片,输出一个0和1的二值图,0代表背景,1代表细胞膜。在这里插入图片描述

在这里插入图片描述

ISBI2012数据集

ISBI2012细胞膜分割数据集主要包括了两部分:一部分是训练集,另一部分是测试集。训练集和测试集中都包含了30张原始图片(如上图第一张所示)和30张对应的标注图片(如上图第二张所示)。每张图片的分辨率为512*512。

UNet

好的我们先来学习一种神经网络,前面我们提到这个神经网络很小,其实也就只有26个卷积层,算是很小了。
Unet源于一篇论文,U-Net:Convolutional Networks for Biomedical Image Segmentation,它专门用于解决医学图像分割的问题,因此发展到现在已经有很多变体,这里我们就只复现最原始的论文。

模型架构

UNet主要由编码器和解码器构成。编码器其实就是左半部分下降的区域,它的作用其实就是进行特征提取;解码器是右半部分上升区域,用于将特征图还原到原始图像大小,并输出二值图。
解码器部分每一行的每一个小箭头都代表了一个卷积核,然后把输出作为下一层的输入。
UNet框架图

模型训练

具体模型的细节,我这里不再介绍,感兴趣的同学可以去查阅其他博主的文章,他们对模型的介绍十分详细。这里主要是帮助大家能够完整地训练一个模型,形成一个感性认知。
直接把pytorch-unet-isbi2012下载下来,并且解压到你自己的文件夹。

环境安装

1、先创建一个conda环境,这样所有的安装包都会安装到这下面,不会影响其他环境。

conda create -n unet_precision python=3.12.4
conda activate unet_precision

2、安装依赖包

pip3 install torch==2.4.0 torchvision==0.19.0 --index-url https://download.pytorch.org/whl/cu118
pip install numpy==1.26.4 matplotlib==3.7.5 Pillow==10.0.0

这几个是必备的包,所以一定要提前安装

ISBI2012数据集下载

数据集可以在kaggle上下载,只需要按要求把文件夹换成下面格式

project/
├── isbi2012/                 # Dataset directory (binary cell segmentation)
│   ├── train/
│   │   ├── imgs/             # Original training set images (PNG format)
│   │   └── labels/           # Training set segmentation labels (PNG format)
│   └── test/
│       ├── imgs/             # Original test set images (PNG format)
│       └── labels/           # Test set segmentation labels (PNG format)
训练

直接运行下面的命令,我们看到下面的输出,就说明开始训练了。

python ./train.py \
--data_root ./ \
--batch_size 2 \
--save_val_results \
--total_epoch 1501 \
--model unet \
--dataset isbi2012 \
--lr 2e-3 \
--loss_type binary_cross_entropy \
--lr_policy CosineAnnealingLR 

在这里插入图片描述

验证

接下来运行下面命令行,直接获得结果,得到下面的输出,就说明你成功验证了这个模型。

python ./predict.py

在这里插入图片描述

总结

成功运行一个项目真的对学习深度学习很重要,接下来,在成功运行的基础上,我将会带大家一步步解读每一块的源码和相关内容。

http://www.dtcms.com/a/285866.html

相关文章:

  • 【机器学习深度学习】LoRA 与 QLoRA:大模型高效微调的进阶指南
  • 【华为机试】70. 爬楼梯
  • 快速安装GitLab指南
  • mix-blend-mode的了解使用
  • git 介绍与使用教程
  • LP-MSPM0G3507学习--05管脚中断
  • 如何 ASP.NET Core 中使用 WebSocket
  • HTTP性能优化实战技术文章大纲
  • final 使用
  • 实现库存显示和状态按钮的Question
  • 数据统计模块后端架构解析:从Controller到SQL的ECharts数据对接实践
  • Spring介绍以及IOC和AOP的实现
  • 某邮生活旋转验证码逆向
  • Ansible + Shell 服务器巡检脚本
  • 如何使用Python将HTML格式的文本转换为Markdown格式?
  • UDP 协议下一发一收通信程序的实现与解析
  • Python - 数据分析三剑客之Pandas
  • docker--容器自启动
  • Vue导出Html为Word中包含图片在Microsoft Word显示异常问题
  • Python MP3 归一化器和长度分割器实用工具开发指南
  • 曼哈顿自注意力MaSA,基于曼哈顿距离的显式空间先验,以线性计算复杂度高效建模全局与局部空间关系,提升视觉任务的性能。
  • Java: 反射机制的 ParameterizedType(参数化类型)
  • WEB弹性设计
  • 使用 C++ 和 OpenCV 进行表面划痕检测
  • jQuery最新js文件下载教程
  • Django母婴商城项目实践(五)
  • Python 使用期物处理并发(使用concurrent.futures模块下载)
  • 黑马Node.js全套入门教程,nodejs新教程含es6模块化+npm+express+webpack+promise等_ts对象笔记
  • MISRA C-2012准则之指针类型转换
  • build.log中的is not a subdirectory of和ScanSourceDirectories函数的关系