首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

DLP教程系列之MRI图像语义分割(1):准备数据和搭建网络

深度学习平台(DLP)软件是一个用于深度学习应用开发的免编程软件平台,致力于为广大深度学习应用开发者打造一个高效并且具备良好用户体验的开发工具。DLP软件可前往DLP官网免费下载:www.ai-dlp.com

本文将介绍如何利用DLP对MRI图像进行图像语义分割(Image segmentation)。

1. 准备数据

我们将使用Sunnybrook左心室分割挑战赛数据集(http://smial.sri.utoronto.ca/LV_Challenge/)训练一个Caffe模型,该数据集由DICOM格式的16位MRI图像和文本格式的专家标记轮廓(多线段轮廓)组成,示例图像/标签如下所示:

我们的模型任务是从MRI图像中将左心室识别出,在本教程结束时,读者将能够从一张MRI图像中标记处左心室区域,如下图。

为了简单起见,在本教程中,笔者将为读者直接提供训练Caffe模型所需的Sunnybrook左心室分割挑战数据集(lmdb格式)。读者可在这里(https://pan.baidu.com/s/1FvNrG9ebY-p9zSkhSgnvvA)下载数据,数据集文件结构应该如下所示:

由于本教程所用的数据都已经准备好了,因此略过了利用DLP对图片进行打标的介绍。关于如何利用DLP对用于语义分割的图片进行打标,笔者会专门写一篇文章来做详细的介绍。

2. 设计网络

启动DLP,选择导航栏中的“Net”标签,这将是我们设计神经网络的地方。在导航栏的右上角,点击“齿轮”按钮。 在弹出的菜单栏中指定:

Caffe的工具子目录:caffe/build/tools;

Caffe的python wrapper子目录:caffe/python;

包含环境python的bin目录的路径:/usr/bin(在MacOs和Ubuntu中可在Terminal中输入“which python”命令,它将返回python安装路径,Python bin应该指向bin文件夹的路径)。

设置完环境之后,首先要做的是定义工作路径,点击“SetDir”按钮,选择当前项目文件夹作为工作路径。

接下来,我们开始在网络设计区域设计神经网络。目前有三种方式可以与DLP来生成网络体系结构:

1. 从右侧的网络组件库中将所需的组件拖拽至工作区域中,进行连线组合;

2. 导入已有的网络描述文件(.prototxt文件),如果导入的文件是之前用DLP导出的,那么导入后的网络将延续导出时的网络结构;如果导入的文件是用户自己在DLP之外定义的,那么需要用户手动调整网络结构;

3. 从上方的DLP网络库中选择一个神经网络,将它拖拽至工作区域,迅速生成一个结构清晰的神经网络。

在DLP的网络库中目前有两种类型的网络:卷积神经网络(CNN)和全卷积神经网络(FCN),前者主要用于分类任务,后者主要用于语义分割。接下来我们重点介绍一下FCN。

在之前的教程中,介绍了如何用DLP训练卷积神经网络(CNN)分类器。图像分类主要是将图像中出现的内容分类到一组预定义类别中的任务,这种任务假设图像中只有一个焦点对象。

图像分割则是一项复杂得多的任务:给定一幅图像,其目标是将图像分成属于相同部分/对象/内容的区域。实现这一目标的一种方法是图像语义分割技术。图像语义分割可以被认为是图像分类的泛化,在图像的部分区域附近产生轮廓,从而到达分割不同区域的目的。

FCN的所有可学习层都是卷积层,没有任何完全连接层,目的是保留输入图像的空间排列,这对于图像分割很有用。

通常为了训练FCN进行语义分割,必须使用合适的预训练的分类模型(例如在ImageNet数据集上训练的CNN模型)。 将预训练的分类网络(例如AlexNet和VGGnet)转换为FCN,然后通过Finetune转移到语义分割任务。将标准CNN转换为一个预训练FCN模型通常包含三个步骤:

1. 训练一个用于图像分类的CNN模型,本教程中使用AlexNet;

2. 将所有全连接层转换为具有1x1滤镜/内核大小的卷积层;

3. 在网络末端添加一个转置卷积层(Deconvolution)以放大之前被缩小的特征图。

如下图,在DLP的神经网络库中,有两个FCN网络可用,来自fcn.berkeleyvision.org(https://github.com/shelhamer/fcn.berkeleyvision.org)。

本教程将使用AlexFCN来对MRI图像进行语义分割。为了成功训练AlexFCN,需要从这里(https://pan.baidu.com/s/1RDM9ZU6d1BCPT9juVccMjw)下载预训练的AlexNet模型。现在将网络库中的AlexFCN拖拽至可视化区域。

现在我们需要对AlexFCN稍作修改以适应图像语义分割任务。

首先,将数据提供给网络,依次点击网络中的“Data”层,在组件设置面板中,将路径设置为对应于该数据层的lmdb文件路径。为了设置lmdb文件对应的数据层,请参考给每个数据层的默认名称(读者可以编辑这些名称,但建议不要这样做)。例如,在下面的图片中,被选中的数据层的名称是label_train,意味着Source须指向训练标签的lmdb文件夹,即train_gt_lmdb。由于该数据层仅输出标签,因此在Top项中仅勾选“Label”。

对所有其他数据层执行相同的操作,注意每个数据层的Name属性以确定lmdb文件路径。

接下来,需要修改网络中的两个卷积层的Name属性,分别将名为conv6conv7的卷积层更改为fc6fc7。这是为了确保网络中的所有层的名称都与预先训练好的模型中的层名称相匹配,这对于利用预训练的模型进行迁移学习和微调非常重要。

修改完所有需要修改的层的名称之后,切换网络视图到“名称模式”,方便观察每一个网络层的命名是否正确。

接下来,确保最后一个卷积层和转置卷积层的FeatureMapNum属性设置为2。这是因为分割任务在MRI图像中只有一个感兴趣的对象(左心室)。因此,属于左心室的像素的标签被设置为1,其他一切像素(背景)的标签被设置为零。因此,最后一个卷积层和转置卷积层的FeatureMapNum属性应该设置为“感兴趣对象的数量+1”。

最后,修改Solver组件的一些属性。将训练这个模型最大迭代次数设为10k,并且每5k次迭代保存一次快照。我们可以在GPU或CPU上训练,这是由Solver Mode属性定义的。最重要的是,指定预训练的模型,在Solver组件的Pretrained属性中勾选“Include”,然后加载预训练模型。

现在一切准备就绪,点击“Train”按钮将触发一个弹出窗口,要求保存网络结构信息,保存后DLP将开始训练模型并进入训练模块。

下期预告:DLP教程系列之MRI图像语义分割(2): 模型训练和部署

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180315G1HRBW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券