当前位置 : 主页 > 编程语言 > java >

kaggle挑战赛——超声乳腺癌分割

来源:互联网 收集:自由互联 发布时间:2022-07-22
今天将分享乳腺癌超声分割实现版本,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。 一、背景 乳腺癌是全

今天将分享乳腺癌超声分割实现版本,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。

一、背景

乳腺癌是全世界女性最常见的死亡原因之一。早期发现有助于减少早期死亡人数。

乳腺超声数据包括 25 至 75 岁女性的乳房超声图像,共有600 名女性患者。该数据集由 780 张图像组成,平均图像大小为 500*500 像素。图片为PNG格式。提供了标注金标准图像与原始图像。图像分为三类,即正常、良性和恶性。数据下载请点击原文链接。

二、超声图像分析与预处理

(1)、780张乳腺超声数据及标注数据可以下载获取,其中只有647张乳腺超声数据有分割标注

(2)、首先将数据分割成训练集合测试集,按照常规分割比例标准,80%用来训练,20%用来测试,这样就有520例数据用来训练,127例用来测试。

(3)、由于520例训练数据还是不足,需要做数据增强操作,对训练数据进行2倍数据增强操作(平移,旋转,翻转等操作),一共得到1560例数据。

(4)、图像与mask进行归一化操作,直接除以255,归一化到0-1范围。

三、分割网络

(1)、搭建VNet2d模型,网络输入大小是(512,512)。

kaggle挑战赛——超声乳腺癌分割_tensorflow

具体实现可以参考​​Tensorflow入门教程(十九)——基于VNet的前列腺分割案例​​

(2)、loss采用的是二分类的dice函数。

代码实现如下:

def __get_cost(self, cost_name, Y_gt, Y_pred): H, W, C = Y_gt.get_shape().as_list()[1:] if cost_name == <span data-raw-text="" "="" data-textnode-index-1654842920379="27" data-index-1654842920379="547" style="margin: 0px; padding: 0px;">"dice coefficient<span data-raw-text="" "="" data-textnode-index-1654842920379="27" data-index-1654842920379="564" style="margin: 0px; padding: 0px;">": smooth = 1e-5 pred_flat = tf.reshape(Y_pred, [-1, H * W * C]) true_flat = tf.reshape(Y_gt, [-1, H * W * C]) intersection = 2 * tf.reduce_sum(pred_flat * true_flat, axis=1) + smooth denominator = tf.reduce_sum(pred_flat, axis=1) + tf.reduce_sum(true_flat, axis=1) + smooth loss = -tf.reduce_mean(intersection / denominator) return loss

具体实现可以参考​​Tensorflow入门教程(三十四)——常用两类图像分割损失函数​​

(3)、分割损失结果和精度经过如下图所示。

kaggle挑战赛——超声乳腺癌分割_归一化_02

kaggle挑战赛——超声乳腺癌分割_归一化_03

(4)、测试图像结果对比

下图是部分测试图像分割结果与金标准结果对比效果图,中间是金标准,右边是预测结果。在测试数据上可以得到平均IOU分数为0.63左右,平均dice分数为0.74。


kaggle挑战赛——超声乳腺癌分割_tensorflow_04

kaggle挑战赛——超声乳腺癌分割_归一化_05

kaggle挑战赛——超声乳腺癌分割_归一化_06

kaggle挑战赛——超声乳腺癌分割_tensorflow_07

kaggle挑战赛——超声乳腺癌分割_数据_08

为了方便大家更高效地学习,我将代码进行了整理并更新到github上,点击原文链接即可访问。

网友评论