GithubHelp home page GithubHelp logo

xiaoyang212 / pp3dseg Goto Github PK

View Code? Open in Web Editor NEW

This project forked from fjjrichard/pp3dseg

0.0 0.0 0.0 88 KB

基于PaddlePaddle和PaddleSeg创建PP3DSeg项目,用于对医疗数据进行3D分割

License: Apache License 2.0

Python 100.00%

pp3dseg's Introduction

PP3DSeg

PP3DSeg这个工具是基于PaddlePaddle和PaddleSeg构建的,其中3DUnet网络和一些transform方法是参考https://github.com/wolny/pytorch-3dunet

整个项目基本和PaddleSeg很像,只是针对3D医疗数据进行修改。专门用来处理3D的医疗数据,并对数据进行3D分割。

目前项目中只支持3DUnet网络和交叉熵损失函数。

数据增强暂时支持随机水平翻转、随机垂直翻转,重采样,归一化,随机对比度改变,随机角度旋转等方法。

运行环境

1.建议在飞桨AIStudio平台在线运行

【PP3DSeg】基于PaddleSeg实现3DUnet分割肝脏

2.本地环境

  • Python 3.7 +

  • PaddlePaddle >=2.2.1

  • Nvidia 显卡

快速使用

1.安装依赖

git clone https://github.com/richarddddd198/PP3DSeg.git
cd PP3DSeg
pip install -r requirements.txt

2. 准备数据

数据文件结构如下,文件夹名和文件名可以自行定义。

./dataset/  # 数据集根目录
|--images  # 原图目录
|  |--xxx1.nii (xx1.nii.gz)
|  |--...
|  └--...
|
|--mask  # 标注图目录
|  |--xxx1.nii (xxx1.nii.gz)
|  |--...
|  └--...

3.划分数据

按一定比例划分数据,并生成文件列表train.txt/val.txt

train.txtval.txt文本以空格为分割符分为两列,第一列为图像文件相对于dataset的相对路径,第二列为标注图像文件相对于dataset的相对路径。如下所示:

images/xxx1.nii (xx1.nii.gz) mask/xxx1.nii(xxx1.nii.gz)
images/xxx2.nii (xx2.nii.gz) mask/xxx2.nii(xxx1.nii.gz)
...

4.创建DataSet

from PP3DSeg.transforms import transforms as T
from PP3DSeg.datasets import Dataset
WW = 350 #设置窗宽窗位
WC = 60
SIZE = (48,256,256) # 设置重采样参数

#使用数据增广
train_transforms =T.Compose( [
    T.Normalize(ww=WW,wc=WC),
    T.RandomHorizontalFlip(),#水平翻转
    T.RandomContrast( alpha=(0.2, 1.6)),#随机改变对比度
    T.RandomRotate(max_rotation=25),#随机旋转一定角度
    T.Resize3D(target_size=SIZE),#重采样
    T.ToTensor()
])

val_transforms = T.Compose([
    T.Normalize(ww=WW,wc=WC),
    T.Resize3D(target_size=SIZE),
    T.ToTensor()
])

#文件列表文件路径
train_path = '/home/aistudio/work/liver/train_list.txt'
val_path = '/home/aistudio/work/liver/val_list.txt'
# 创建DataSet
train_dataset = Dataset(
                transforms=train_transforms,
                dataset_root='/home/',
                num_classes=2,  #分类类别
                mode='train',  #用于训练的DataSet
                train_path=train_path,
                flipud=False) #是否上下翻转
val_dataset = Dataset(
                transforms=val_transforms,
                dataset_root='/home/',
                num_classes=2,
                mode='val',
                val_path=val_path,
                flipud=False)

5.导入3D分割网络

from PP3DSeg.models.unet3d import Unet3d
model = Unet3d(class_num=2)

6.设置优化器和损失函数

from PP3DSeg.models.losses.cross_entropy_loss import CrossEntropyLoss
lr = paddle.optimizer.lr.PolynomialDecay(learning_rate=0.02, verbose=False)
optimizer = paddle.optimizer.Momentum(lr, parameters=model.parameters())

losses = {}
losses['types'] = [CrossEntropyLoss()] 
losses['coef'] = [1]

7.开始训练

from PP3DSeg.core import train
train(
    model=model,
    train_dataset=train_dataset,
    val_dataset=val_dataset,
    optimizer=optimizer,
    save_dir='./Output', #模型保存路径
    iters=1000,
    batch_size=2,
    save_interval=10, #模型保存间隔
    log_iters=2,  #日志打印间隔
    losses=losses,
    use_vdl=True)

8.验证

from PP3DSeg.core import evaluate
evaluate(model,val_dataset)

参考资料

可见PP3DSeg这个项目是多么不成熟的。里面存在各种各样的未知Bug,不过后面会慢慢更新,加入更多处理医疗数据的方法和3D分割网络等等。希望更多大佬可以给予珍贵的意见,在这表示非常感激!

pp3dseg's People

Contributors

fjjrichard avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.