TN-SCUI2020挑战赛详细讲解

2020-07-23 18:28:25 浏览数 (1)

今天将分享甲状腺超声结节二值分割和二值分类的完整实现过程并提供训练好的模型和在测试数据上的提交结果成绩,为了方便大家学习理解整个流程,将整个流程步骤进行了整理,并给出详细的步骤结果。感兴趣的朋友赶紧动手试一试吧。

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

(1)、3644张超声结节原始数据和标注数据及训练标签文件可以在官网上下载获取到,下载下来后如下所示。测试数据一共有910张数据,目前也可以在官网上下载了。

(2)、由于原始数据大小不一样,这里对图像做统一大小设置,都设置成512x512的大小。

(3)、使用全部的3644例数据来训练,为了增加模型鲁棒性,可以对原始数据做数据增强处理,但是在这里就不做数据增强操作了,直接在原始数据量上进行分割和分类。

(4)、原始图像和金标准Mask图像的预处理还需要做归一化操作,统一都归一化到(0,1)。

二、分割网络

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

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

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

代码实现如下:

代码语言:javascript复制
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="27" data-index="547" class="character">"dice coefficient<span data-raw-text="" "="" data-textnode-index="27" data-index="564" class="character">":
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)、分割损失结果和精度经过如下图所示。

三、分类网络

(1)、搭建ResNet2d模型,网络输入大小是(512,512),网络比较基础就不多说了。

(2)、loss采用的是常见的二分类交叉熵损失函数。

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

四、测试数据结果

在910例数据上进行测试,测试数据结果排名在113名。

为了方便大家更高效地学习,我将代码进行了整理并更新到github上,点击原文链接即可访问。此外训练好的模型文件已经上传至百度云盘:链接:https://pan.baidu.com/s/15E-RvaqSLdDMBCUZoGTrDA

提取码:hszn。

如果大家觉得这个项目还不错,希望大家给个Star并Fork,可以让更多的人学习。如果有任何问题,随时给我留言我会及时回复的。

0 人点赞