今天将分享乳腺癌超声分割实现版本,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。
一、背景
乳腺癌是全世界女性最常见的死亡原因之一。早期发现有助于减少早期死亡人数。
乳腺超声数据包括 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)。
具体实现可以参考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)、分割损失结果和精度经过如下图所示。
(4)、测试图像结果对比
下图是部分测试图像分割结果与金标准结果对比效果图,中间是金标准,右边是预测结果。在测试数据上可以得到平均IOU分数为0.63左右,平均dice分数为0.74。
为了方便大家更高效地学习,我将代码进行了整理并更新到github上,点击原文链接即可访问。