久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

使用TensorFlow和DLTK進(jìn)行生物醫(yī)學(xué)圖像分析的介紹

 doctorwangfovn 2018-07-04

DLTK是用于醫(yī)學(xué)成像的深度學(xué)習(xí)工具包,,它擴(kuò)展了TensorFlow,, 以實(shí)現(xiàn)生物醫(yī)學(xué)圖像的深度學(xué)習(xí),。它提供了專(zhuān)業(yè)操作和功能,模型實(shí)現(xiàn),,教程(在本博客中使用)和典型應(yīng)用程序的代碼示例,。

這篇文章是對(duì)生物醫(yī)學(xué)圖像深度學(xué)習(xí)的快速介紹,我們將在這里展示當(dāng)前工程問(wèn)題的一些問(wèn)題和解決方案,,并向您展示如何啟動(dòng)和運(yùn)行問(wèn)題的原型,。

使用TensorFlow和DLTK進(jìn)行生物醫(yī)學(xué)圖像分析的介紹

概述

什么是生物醫(yī)學(xué)圖像分析?為什么需要它,?

生物醫(yī)學(xué)圖像是在不同尺度上(即微觀(guān),,宏觀(guān)等)對(duì)人體的測(cè)量。它們具有多種成像模式(例如CT掃描儀,,超聲波儀器等)并且測(cè)量人體的物理特性(例如,,輻射密度,X射線(xiàn)的不透明度),。這些圖像由領(lǐng)域?qū)<遥ɡ绶派淇漆t(yī)師)解釋用于臨床任務(wù)(例如診斷)并且對(duì)醫(yī)生的決策具有很大影響,。

使用TensorFlow和DLTK進(jìn)行生物醫(yī)學(xué)圖像分析的介紹

醫(yī)學(xué)圖像示例

生物醫(yī)學(xué)圖像通常是體積圖像(3D),并且有時(shí)具有額外的時(shí)間維度(4D)和/或多個(gè)通道(4-5D)(例如,,多序列MR圖像),。生物醫(yī)學(xué)圖像的變化與自然圖像(例如照片)的變化完全不同,,因?yàn)榕R床方案旨在對(duì)圖像的獲取方式進(jìn)行分層(如病人仰臥,頭部不傾斜等),。在他們的分析中,,我們的目標(biāo)是檢測(cè)細(xì)微的差異(即一些小區(qū)域表明發(fā)現(xiàn)異常)。

為什么需要計(jì)算機(jī)視覺(jué)和機(jī)器學(xué)習(xí),?

長(zhǎng)期以來(lái),,計(jì)算機(jī)視覺(jué)方法被用于自動(dòng)分析生物醫(yī)學(xué)圖像。最近深度學(xué)習(xí)的出現(xiàn)取代了許多其他機(jī)器學(xué)習(xí)方法,,因?yàn)樗苊饬耸止すこ??特征的創(chuàng)建,,從而從過(guò)程中消除了一個(gè)關(guān)鍵的錯(cuò)誤來(lái)源。此外,,GPU加速的完全網(wǎng)絡(luò)的快速推理速度允許我們將分析量化為前所未有的數(shù)據(jù)量(例如10?主題圖片),。

我們可以隨時(shí)使用深度學(xué)習(xí)庫(kù)進(jìn)行生物醫(yī)學(xué)成像嗎,?為什么要?jiǎng)?chuàng)建DLTK,?

創(chuàng)建DLTK的主要原因是將這個(gè)領(lǐng)域的專(zhuān)用工具開(kāi)箱即用。雖然許多深度學(xué)習(xí)庫(kù)公開(kāi)低級(jí)操作(如張量乘法等)開(kāi)發(fā)人員,但許多較高級(jí)別的專(zhuān)業(yè)操作因其在體積圖像上的使用而丟失(如differentiable 3D upsampling layers層,),并且由于圖像的額外空間維度,,我們可能遇到存儲(chǔ)器問(wèn)題(例如,,存儲(chǔ)1k CT圖像的數(shù)據(jù)庫(kù)的單個(gè)副本,其中圖像尺寸為325x512x256在float32中為~268GB),。由于采集的性質(zhì)不同,,由于采集的性質(zhì)不同一些圖像將需要特殊的預(yù)處理(如強(qiáng)度歸一化、偏差校正,、去噪,、空間歸一化/registration等)。

文件格式,,headers和讀取圖像

雖然許多成像模式的供應(yīng)商都以DICOM標(biāo)準(zhǔn)格式生成圖像,,以二維切片的形式保存大量數(shù)據(jù),但許多分析庫(kù)都依賴(lài)于更適合計(jì)算和與醫(yī)學(xué)圖像交互的格式,。我們使用最初為腦成像開(kāi)發(fā)的NifTI(或.nii格式),,但在DLTK和本教程中廣泛應(yīng)用于大多數(shù)其他卷圖像。這種和其他格式保存的是重建圖像容器并將其定位在物理空間的必要信息,。

為此,,它需要專(zhuān)業(yè)的標(biāo)題信息,我們將通過(guò)一些屬性進(jìn)行深入學(xué)習(xí):

  • 尺寸和大小存儲(chǔ)有關(guān)如何重建圖像的信息(例如,,使用大小向量將體積分解為三維),。
  • 數(shù)據(jù)類(lèi)型
  • 體素間距(也是體素的物理尺寸,通常以mm為單位)
  • 物理坐標(biāo)系原點(diǎn)
  • 方向

為什么這些屬性很重要,?

網(wǎng)絡(luò)將在體素空間中進(jìn)行訓(xùn)練,,這意味著我們將創(chuàng)建形狀和尺寸張量[batch_size,dx,dy,,dz,,channels / features]并將其提供給網(wǎng)絡(luò)。網(wǎng)絡(luò)將在該體素空間中進(jìn)行訓(xùn)練并假設(shè)所有圖像(也是看不見(jiàn)的測(cè)試圖像)在該空間中被標(biāo)準(zhǔn)化或者可能有問(wèn)題要概括,。在該體素空間中,,特征提取器(例如卷積層)將假設(shè)體素尺寸是各向同性的(即,在每個(gè)維度中相同)并且所有圖像以相同的方式定向,。

但是,,由于大多數(shù)圖像都描繪了物理空間,我們需要從該物理空間轉(zhuǎn)換為常見(jiàn)的體素空間:

如果所有圖像都以相同的方式定向(有時(shí)我們需要注冊(cè)以對(duì)圖像進(jìn)行空間標(biāo)準(zhǔn)化:檢查MIRTK),,我們可以計(jì)算從物理空間到體素空間的縮放變換

phys_coords = origin voxel_spacing * voxel_coord

其中所有這些信息都是存儲(chǔ)在.nii頭文件中的向量,。

讀取.nii圖像:

有幾個(gè)庫(kù)可以讀取.nii文件并訪(fǎng)問(wèn)頭信息并解析它以獲得重建的圖像容器作為numpy數(shù)組。我們選擇了SimpleITK,,它允許我們導(dǎo)入額外的圖像過(guò)濾器以進(jìn)行預(yù)處理和其他任務(wù):

import SimpleITK as sitk

import numpy as np

# A path to a T1-weighted brain .nii image:

t1_fn = './brain_t1_0001.nii'

# Read the .nii image containing the volume with SimpleITK:

sitk_t1 = sitk.ReadImage(t1_fn)

# and access the numpy array:

t1 = sitk.GetArrayFromImage(sitk_t1)

數(shù)據(jù)I / O方面的考慮

根據(jù)訓(xùn)練數(shù)據(jù)庫(kù)的大小,,有幾個(gè)選項(xiàng)可以將.nii圖像數(shù)據(jù)輸入到網(wǎng)絡(luò)圖中。每一種方法在速度上都有特定的權(quán)衡,,在訓(xùn)練過(guò)程中都可能成為瓶頸,。我們將討論并解釋三種選擇:

1、In memory & feeding dictionaries

我們可以為網(wǎng)絡(luò)圖創(chuàng)建一個(gè)tf.placeholder,,并在訓(xùn)練期間通過(guò)feed_dict提供它,。我們從磁盤(pán)讀取所有.nii文件,在python中處理它們(cf load_data())并將所有訓(xùn)練示例存儲(chǔ)在內(nèi)存中:

# Load all data into memory

data = load_data(all_filenames, tf.estimator.ModeKeys.TRAIN, reader_params)

# Create placeholder variables and define their shapes (here,

# we input a volume image of size [128, 224, 244] and a single

# channel (i.e. greyscale):

x = tf.placeholder(reader_example_dtypes['features']['x'],

[None, 128, 224, 224, 1])

y = tf.placeholder(reader_example_dtypes['labels']['y'],

[None, 1])

# Create a tf.data.Dataset

dataset = tf.data.Dataset.from_tensor_slices((x, y))

dataset = dataset.repeat(None)

dataset = dataset.batch(batch_size)

dataset = dataset.prefetch(1)

# Create an iterator

iterator = dataset.make_initializable_iterator()

nx = iterator.get_next()

with tf.train.MonitoredTrainingSession() as sess_dict:

sess_dict.run(iterator.initializer,

feed_dict={x: data['features'], y: data['labels']})

for i in range(iterations):

# Get next features/labels pair

dict_batch_feat, dict_batch_lbl = sess_dict.run(nx)

TLDR:這種直接的方法通常是最快且最容易實(shí)現(xiàn)的,,因?yàn)樗梢员苊膺B續(xù)讀取磁盤(pán)上的數(shù)據(jù),,但是需要在內(nèi)存中保留整個(gè)訓(xùn)練示例(和驗(yàn)證示例)的數(shù)據(jù)庫(kù),這對(duì)于大型數(shù)據(jù)庫(kù)或較大的圖像文件來(lái)說(shuō)是不可行的,。

2,、使用TFRecords數(shù)據(jù)庫(kù):

對(duì)于圖像卷上的大多數(shù)深度學(xué)習(xí)問(wèn)題,訓(xùn)練示例的數(shù)據(jù)庫(kù)太大,,無(wú)法裝入內(nèi)存,。TFRecords格式允許序列化訓(xùn)練實(shí)例并將其存儲(chǔ)在磁盤(pán)上,用快速寫(xiě)訪(fǎng)問(wèn)(即并行數(shù)據(jù)讀取)

def _int64_feature(value):

return tf.train.Feature(int64_list=tf.train.Int64List(value=[value]))

def _float_feature(value):

return tf.train.Feature(float_list=tf.train.FloatList(value=value))

# path to save the TFRecords file

train_filename = 'train.tfrecords'

# open the file

writer = tf.python_io.TFRecordWriter(train_filename)

# iterate through all .nii files:

for meta_data in all_filenames:

# Load the image and label

img, label = load_img(meta_data, reader_params)

# Create a feature

feature = {'train/label': _int64_feature(label),

'train/image': _float_feature(img.ravel())}

# Create an example protocol buffer

example = tf.train.Example(features=tf.train.Features(feature=feature))

# Serialize to string and write on the file

writer.write(example.SerializeToString())

writer.close()

格式可以直接與TensorFlow連接,,可以直接集成到tf.graph中的訓(xùn)練循環(huán)中

def decode(serialized_example):

# Decode examples stored in TFRecord

# NOTE: make sure to specify the correct dimensions for the images

features = tf.parse_single_example(

serialized_example,

features={'train/image': tf.FixedLenFeature([128, 224, 224, 1], tf.float32),

'train/label': tf.FixedLenFeature([], tf.int64)})

# NOTE: No need to cast these features, as they are already `tf.float32` values.

return features['train/image'], features['train/label']

dataset = tf.data.TFRecordDataset(train_filename).map(decode)

dataset = dataset.repeat(None)

dataset = dataset.batch(batch_size)

dataset = dataset.prefetch(1)

iterator = dataset.make_initializable_iterator()

features, labels = iterator.get_next()

nx = iterator.get_next()

with tf.train.MonitoredTrainingSession() as sess_rec:

sess_rec.run(iterator.initializer)

for i in range(iterations):

try:

# Get next features-labels pair

rec_batch_feat, rec_batch_lbl = sess_rec.run([features, labels])

except tf.errors.OutOfRangeError:

pass

TLDR : TFRecords是從磁盤(pán)訪(fǎng)問(wèn)文件的快速方法,,但需要存儲(chǔ)整個(gè)訓(xùn)練數(shù)據(jù)庫(kù)的另一個(gè)副本。如果我們的目標(biāo)是使用幾TB大小的數(shù)據(jù)庫(kù),,這可能會(huì)讓人望而卻步,。

3、使用本機(jī)python生成器

最后,,我們可以使用python生成器,,創(chuàng)建一個(gè)read_fn()來(lái)直接加載圖像數(shù)據(jù)......

def read_fn(file_references, mode, params=None):

# We define a `read_fn` and iterate through the `file_references`, which

# can contain information about the data to be read (e.g. a file path):

for meta_data in file_references:

# Here, we parse the `subject_id` to construct a file path to read

# an image from.

subject_id = meta_data[0]

data_path = '../../data/IXI_HH/1mm'

t1_fn = os.path.join(data_path, '{}/T1_1mm.nii.gz'.format(subject_id))

# Read the .nii image containing a brain volume with SimpleITK and get

# the numpy array:

sitk_t1 = sitk.ReadImage(t1_fn)

t1 = sitk.GetArrayFromImage(sitk_t1)

# Normalise the image to zero mean/unit std dev:

t1 = whitening(t1)

# Create a 4D Tensor with a dummy dimension for channels

t1 = t1[..., np.newaxis]

# If in PREDICT mode, yield the image (because there will be no label

# present). Additionally, yield the sitk.Image pointer (including all

# the header information) and some metadata (e.g. the subject id),

# to facilitate post-processing (e.g. reslicing) and saving.

# This can be useful when you want to use the same read function as

# python generator for deployment.

if mode == tf.estimator.ModeKeys.PREDICT:

yield {'features': {'x': t1}}

# Labels: Here, we parse the class *sex* from the file_references

# \in [1,2] and shift them to \in [0,1] for training:

sex = np.int32(meta_data[1]) - 1

y = sex

# If training should be done on image patches for improved mixing,

# memory limitations or class balancing, call a patch extractor

if params['extract_examples']:

images = extract_random_example_array(

t1,

example_size=params['example_size'],

n_examples=params['n_examples'])

# Loop the extracted image patches and yield

for e in range(params['n_examples']):

yield {'features': {'x': images[e].astype(np.float32)},

'labels': {'y': y.astype(np.int32)}}

# If desired (i.e. for evaluation, etc.), return the full images

else:

yield {'features': {'x': images},

'labels': {'y': y.astype(np.int32)}}

return

tf.data.Dataset.from_generator()對(duì)示例進(jìn)行排隊(duì):

# Generator function

def f():

fn = read_fn(file_references=all_filenames,

mode=tf.estimator.ModeKeys.TRAIN,

params=reader_params)

ex = next(fn)

# Yield the next image

yield ex

# Timed example with generator io

dataset = tf.data.Dataset.from_generator(

f, reader_example_dtypes, reader_example_shapes)

dataset = dataset.repeat(None)

dataset = dataset.batch(batch_size)

dataset = dataset.prefetch(1)

iterator = dataset.make_initializable_iterator()

next_dict = iterator.get_next()

with tf.train.MonitoredTrainingSession() as sess_gen:

# Initialize generator

sess_gen.run(iterator.initializer)

with Timer('Generator'):

for i in range(iterations):

# Fetch the next batch of images

gen_batch_feat, gen_batch_lbl = sess_gen.run([next_dict['features'], next_dict['labels']])

TLDR :它避免創(chuàng)建圖像數(shù)據(jù)庫(kù)的其他副本,,但是比TFRecords慢得多,因?yàn)樯善鳠o(wú)法并行讀取和映射函數(shù),。

速度基準(zhǔn)和選擇方法:我們將這三種讀取.nii文件到TensorFlow的方法進(jìn)行了運(yùn)行,,并比較了加載和提供固定大小的示例數(shù)據(jù)庫(kù)所需的時(shí)間。

顯然,,最快的方法是在5.6秒內(nèi)通過(guò)占位符從內(nèi)存中獲取信息,,然后是31.1秒的TFRecords,以及123.5秒的未優(yōu)化磁盤(pán)讀取,。然而,,只要訓(xùn)練過(guò)程中的forward/backward passes是計(jì)算瓶頸,數(shù)據(jù)I/O的速度就可以忽略不計(jì),。

數(shù)據(jù)歸一化

與自然圖像一樣,,我們可以對(duì)生物醫(yī)學(xué)圖像數(shù)據(jù)進(jìn)行歸一化,但是方法可能略有不同,。歸一化的目的是消除數(shù)據(jù)中的某些變化(例如,,不同的主題或圖像對(duì)比度等),這是已知的,,因此簡(jiǎn)化了我們感興趣的細(xì)微差異的檢測(cè)(例如,,病理學(xué)的存在)。在這里,,我們將討論最常見(jiàn)的歸一化形式:

體素強(qiáng)度歸一化:這種形式高度依賴(lài)于成像方式,數(shù)據(jù)是已獲得的,。典型的零均值,、單位方差歸一化是定性圖像(例如加權(quán)腦MR圖像,其對(duì)比度高度依賴(lài)于采集參數(shù),,通常由專(zhuān)家設(shè)置)的標(biāo)準(zhǔn),。如果我們采用這種統(tǒng)計(jì)方法,我們使用的統(tǒng)計(jì)數(shù)據(jù)來(lái)自一個(gè)完整的卷,,而不是整個(gè)數(shù)據(jù)庫(kù),。

與此相反,定量成像測(cè)量的是物理量(例如CT成像中的輻射密度,,在不同的掃描儀中強(qiáng)度相當(dāng)),,并受益于剪切和/或重新縮放,如簡(jiǎn)單范圍歸一化(例如到[-1,1]),。

使用TensorFlow和DLTK進(jìn)行生物醫(yī)學(xué)圖像分析的介紹

實(shí)例:強(qiáng)度歸一化方法

空間歸一化:對(duì)圖像方向進(jìn)行歸一化避免了模型必須學(xué)習(xí)所有可能的方向,,這大大減少了所需的訓(xùn)練圖像的數(shù)量。我們還考慮了體素間距,,即使從同一掃描儀獲取,,也可能在圖像之間變化,。這可以通過(guò)重新采樣到各向同性分辨率來(lái)完成:

def resample_img(itk_image, out_spacing=[2.0, 2.0, 2.0], is_label=False):

# Resample images to 2mm spacing with SimpleITK

original_spacing = itk_image.GetSpacing()

original_size = itk_image.GetSize()

out_size = [

int(np.round(original_size[0] * (original_spacing[0] / out_spacing[0]))),

int(np.round(original_size[1] * (original_spacing[1] / out_spacing[1]))),

int(np.round(original_size[2] * (original_spacing[2] / out_spacing[2])))]

resample = sitk.ResampleImageFilter()

resample.SetOutputSpacing(out_spacing)

resample.SetSize(out_size)

resample.SetOutputDirection(itk_image.GetDirection())

resample.SetOutputOrigin(itk_image.GetOrigin())

resample.SetTransform(sitk.Transform())

resample.SetDefaultPixelValue(itk_image.GetPixelIDValue())

if is_label:

resample.SetInterpolator(sitk.sitkNearestNeighbor)

else:

resample.SetInterpolator(sitk.sitkBSpline)

return resample.Execute(itk_image)

# Assume to have some sitk image (itk_image) and label (itk_label)

resampled_sitk_img = resample_img(itk_image, out_spacing=[2.0, 2.0, 2.0], is_label=False)

resampled_sitk_lbl = resample_img(itk_label, out_spacing=[2.0, 2.0, 2.0], is_label=True)

如果需要進(jìn)一步歸一化,我們可以使用醫(yī)學(xué)圖像注冊(cè)包(例如MIRTK等)并將圖像注冊(cè)到相同的空間中,,使得圖像之間的體素位置彼此對(duì)應(yīng),。分析結(jié)構(gòu)腦MR圖像(例如T1加權(quán)MR圖像)的典型步驟是將訓(xùn)練數(shù)據(jù)庫(kù)中的所有圖像登記到參考標(biāo)準(zhǔn),例如平均圖集(例如MNI 305)圖集),。根據(jù)配準(zhǔn)方法的自由度,,這也可以規(guī)范尺寸(仿射配準(zhǔn))或形狀(可變形配準(zhǔn))。這兩種變體很少使用,,因?yàn)樗鼈內(nèi)コ藞D像中的一些信息(即形狀信息或大小信息),,這些信息可能對(duì)分析很重要(例如,大心臟可能預(yù)測(cè)心臟?。?。

數(shù)據(jù)增強(qiáng)

通常情況下,可用的數(shù)據(jù)量是有限的,,有些差異沒(méi)有被涵蓋,。一些例子包括:

  • 軟組織器官,有很多正常的形狀
  • 病理,,如癌癥病變,,在形狀和位置上有很大的不同
  • 免費(fèi)的超聲波圖像,有很多可能的視圖,。

為了恰當(dāng)?shù)赝茝V到不可見(jiàn)的測(cè)試用例,,我們通過(guò)模擬我們要對(duì)抗的數(shù)據(jù)的變化來(lái)增強(qiáng)訓(xùn)練圖像。類(lèi)似于標(biāo)準(zhǔn)化方法,,我們區(qū)分強(qiáng)度和空間增強(qiáng):

強(qiáng)度增強(qiáng)的例子:

  • 向訓(xùn)練圖像添加噪聲可歸結(jié)為噪聲圖像
  • 添加隨機(jī)偏移或?qū)Ρ榷纫蕴幚韴D像之間的差異

空間增強(qiáng)的例子:

  • 在預(yù)期對(duì)稱(chēng)性的方向上翻轉(zhuǎn)圖像張量(例如,,在腦部掃描時(shí)左/右翻轉(zhuǎn))
  • 隨機(jī)變形,(例如用于模仿器官形狀的差異)
  • 沿軸的旋轉(zhuǎn)(例如,,用于模擬差異超聲視角)
  • 隨機(jī)裁剪

使用TensorFlow和DLTK進(jìn)行生物醫(yī)學(xué)圖像分析的介紹

強(qiáng)度和空間增強(qiáng)技術(shù)示例

關(guān)于擴(kuò)充和數(shù)據(jù)I / O的重要說(shuō)明:根據(jù)需要或有用的擴(kuò)充,,某些操作僅在python中可用(例如隨機(jī)變形),這意味著如果使用使用原始TensorFlow的讀取方法(即TFRecords或tf.placeholder),,它們需要預(yù)先計(jì)算并存儲(chǔ)到磁盤(pán),,從而大大增加了訓(xùn)練數(shù)據(jù)庫(kù)的大小。

類(lèi)平衡

領(lǐng)域?qū)<医忉專(zhuān)ɡ缡謩?dòng)分割疾病類(lèi)別)是在醫(yī)學(xué)圖像的監(jiān)督學(xué)習(xí)期間的要求,。通常,,圖像級(jí)(例如疾病類(lèi))或體素級(jí)(即分段)標(biāo)簽不能以相同的比率獲得,這意味著網(wǎng)絡(luò)在訓(xùn)練期間將不會(huì)從每個(gè)類(lèi)看到相同數(shù)量的示例,。如果類(lèi)比率有些相似(例如對(duì)于二元分類(lèi)情況為30/70),,則這對(duì)準(zhǔn)確性沒(méi)有很大影響。但是,,由于大多數(shù)損失是整個(gè)批次的平均成本,,因此網(wǎng)絡(luò)將首先學(xué)會(huì)正確預(yù)測(cè)最常見(jiàn)的類(lèi)別(例如背景或正常情況,,這通常是更多可用的示例)。

訓(xùn)練期間的類(lèi)不平衡將對(duì)罕見(jiàn)現(xiàn)象(例如圖像分割中的小病變)產(chǎn)生更大的影響,,并且在很大程度上影響測(cè)試準(zhǔn)確性,。

為了避免這種下降,有兩種典型的方法來(lái)對(duì)抗數(shù)據(jù)集中的類(lèi)不平衡:

通過(guò)采樣進(jìn)行類(lèi)平衡:在此,,我們的目標(biāo)是在采樣期間校正所見(jiàn)示例的頻率,。這可以通過(guò)以下方式來(lái)完成:a)從每個(gè)類(lèi)中抽取相等的量,b)過(guò)度抽樣的過(guò)度表示的類(lèi)或c)過(guò)度抽樣的頻率較低的類(lèi),。在DLTK中,,我們有a)的實(shí)現(xiàn)。我們對(duì)圖像卷中的隨機(jī)位置進(jìn)行采樣,,并考慮一個(gè)提取的示例,,如果它包含我們正在尋找的類(lèi)。

通過(guò)損失函數(shù)進(jìn)行類(lèi)平衡:與典型的體素平均損失(例如分類(lèi)交叉熵,,L2等)相比,,我們可以a)使用本質(zhì)上平衡的損失函數(shù)(例如平滑骰子損失,這是一種均值所有類(lèi)別的骰子系數(shù))或b)通過(guò)類(lèi)頻率(例如,,中頻重新加權(quán)的交叉熵)對(duì)每個(gè)預(yù)測(cè)的損失進(jìn)行重新加權(quán),。

應(yīng)用亮點(diǎn)示例

通過(guò)本博文中提供的所有基本知識(shí),我們現(xiàn)在可以研究使用TensorFlow構(gòu)建用于醫(yī)學(xué)圖像深度學(xué)習(xí)的完整應(yīng)用程序,。

示例數(shù)據(jù)集

對(duì)于大多數(shù)情況,,我們使用了IXI腦數(shù)據(jù)庫(kù)(http:///ixi-dataset/)。對(duì)于圖像分割,,我們下載了MRBrainS13挑戰(zhàn)數(shù)據(jù)庫(kù)(http://mrbrains13.isi./),,您需要先注冊(cè)才能下載它。

多通道腦MR圖像的圖像分割

使用TensorFlow和DLTK進(jìn)行生物醫(yī)學(xué)圖像分析的介紹

多序列圖像輸入,,目標(biāo)標(biāo)簽和預(yù)測(cè)的Tensorboard可視化

該圖像分割應(yīng)用程序?qū)W習(xí)在小(N = 5)MRBrainS挑戰(zhàn)數(shù)據(jù)集上從多序列MR圖像(T1加權(quán),,T1反轉(zhuǎn)恢復(fù)和T2 FLAIR)預(yù)測(cè)腦組織和白質(zhì)病變,。它使用具有殘差單位的3D U-Net網(wǎng)絡(luò)作為特征提取器,并跟蹤TensorBoard中每個(gè)標(biāo)簽的Dice系數(shù)精度,。

代碼和說(shuō)明可以在這里找到(https://github.com/DLTK/DLTK/tree/master/examples/applications/MRBrainS13_tissue_segmentation),。

T1加權(quán)腦MR圖像的年齡回歸和性別分類(lèi)

使用TensorFlow和DLTK進(jìn)行生物醫(yī)學(xué)圖像分析的介紹

輸入T1加權(quán)腦MR圖像用于回歸和分類(lèi)示例

采用可擴(kuò)展3D ResNet架構(gòu)的兩個(gè)類(lèi)似應(yīng)用程序?qū)W習(xí)從IXI數(shù)據(jù)庫(kù)的T1加權(quán)腦MR圖像中預(yù)測(cè)受試者的年齡(回歸)或受試者的性別(分類(lèi))。這些應(yīng)用程序之間的主要區(qū)別在于損失函數(shù):我們訓(xùn)練回歸網(wǎng)絡(luò)以將年齡預(yù)測(cè)為具有L2損失的連續(xù)變量(預(yù)測(cè)年齡與實(shí)際年齡之間的均方差),,我們使用分類(lèi)交叉 - 熵?fù)p失預(yù)測(cè)性別的類(lèi)別,。

這些應(yīng)用程序的代碼和說(shuō)明可以在這里找到:分類(lèi)(https://github.com/DLTK/DLTK/tree/master/examples/applications/IXI_HH_sex_classification_resnet),回歸(https://github.com/DLTK/DLTK/tree/master/examples/applications/IXI_HH_age_regression_resnet),。

3T多通道腦MR圖像的表示學(xué)習(xí)

使用TensorFlow和DLTK進(jìn)行生物醫(yī)學(xué)圖像分析的介紹

使用深度卷積自動(dòng)編碼器網(wǎng)絡(luò)測(cè)試圖像和重建

在這里,,我們演示了深度卷積自動(dòng)編碼器架構(gòu)的使用,,這是一種強(qiáng)大的表示學(xué)習(xí)工具:網(wǎng)絡(luò)將多序列MR圖像作為輸入,旨在重建它們,。通過(guò)這樣做,,它在其潛在變量中壓縮整個(gè)訓(xùn)練數(shù)據(jù)庫(kù)的信息。訓(xùn)練的權(quán)重也可用于轉(zhuǎn)移學(xué)習(xí)或信息壓縮,。請(qǐng)注意,,重建的圖像非常平滑:這可能是由于此應(yīng)用程序使用L2丟失功能或網(wǎng)絡(luò)較小以正確編碼詳細(xì)信息。

代碼和說(shuō)明可以在這里找到(https://github.com/DLTK/DLTK/tree/master/examples/applications/IXI_HH_representation_learning_cae),。

T1w腦MR圖像上的簡(jiǎn)單圖像超分辨率

使用TensorFlow和DLTK進(jìn)行生物醫(yī)學(xué)圖像分析的介紹

圖像超分辨率:原始目標(biāo)圖像; 下采樣輸入圖像; 線(xiàn)性上采樣圖像; 預(yù)測(cè)超分辨率

單圖像超分辨率旨在學(xué)習(xí)如何從低分辨率輸入上采樣和重建高分辨率圖像,。這種簡(jiǎn)單的實(shí)現(xiàn)創(chuàng)建了圖像的低分辨率版本,超級(jí)分辨率網(wǎng)絡(luò)學(xué)會(huì)將圖像上采樣到其原始分辨率(此處上采樣因子為[4,4,4]),。此外,,我們計(jì)算線(xiàn)性上采樣版本以顯示重建圖像的差異。

代碼和說(shuō)明可以在這里找到(https://github.com/DLTK/DLTK/tree/master/examples/applications/IXI_HH_superresolution),。

最后…

我們希望本教程能幫助您輕松深入學(xué)習(xí)生物醫(yī)學(xué)圖像的深度學(xué)習(xí),。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,,不代表本站觀(guān)點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多