使用深度神经网络对医学影像进行疾病预测.Part1

最近为了生计一直奔波,没有时间更新文章了。

前几天,群里面有个小伙伴,询问关于医疗疾病的一些相关训练和使用。

想着这几天有时间,就来玩一下这个“local disease label detection”。

由于一些原因,使用了一台性能不是很高的电脑,用来搭建和训练模型,大家可以做个参考。

主要看下显卡:GeForce GTX 1650 4G显存。(有能力的小伙伴可以升级下显卡)

这里为什么要强调下显卡呢,群里小伙伴想用resnet50来搭建和训练网络。这个网络有超过2500万个参数,这张显卡显然带动不了。所以就降低了参数,构建差不多20万的参数就可以了。

这里介绍下大体的思路,其实跟前面聊的差不多,分析此类问题,由于时间和样本的问题,我这里就简单的使用多分类任务来处理,当然,常规的可以使用目标识别任务来处理,这样可以定位出病灶位置。

首先,我们看下样本的主要数据。

这里我们选择使用,Image Index和Finding Labels 这两个数据。解释下,Image Index 是图片文件名 Finding Labels 是疾病名称。我整理下了,一共有14种疾病名称,但是这14种疾病可以同时存在多个疾病的组合情况。以下是样本包含的疾病名称


{
    '肺不张',
    '扩张型心脏',
    '延迟折叠阶段',
    '水肿',
    '胸腔积液',
    '肺气肿',
    '纤维化',
    '隔疝',
    '阴影',
    '肿块',
    '没有发现',
    '结节',
    '肺纹理增加',
    '肺炎',
    '气胸'
}

搭建一个简单的网络模型


# 添加卷积层和池化层
    model.add(Convolution2D(filters=32,kernel_size=(3, 3),padding='same', activation='relu', input_shape=(target_height, target_width, 3)))
    model.add(BatchNormalization())
    model.add(MaxPooling2D(pool_size=(2, 2),strides=(2,2)))

    model.add(Convolution2D(filters=32,kernel_size=(3, 3),padding='same', activation='relu'))
    model.add(BatchNormalization())
    model.add(MaxPooling2D(pool_size=(2, 2),strides=(2,2)))

    model.add(Convolution2D(filters=512, kernel_size=(3, 3),padding='same', activation='relu'))
    model.add(BatchNormalization())
    model.add(MaxPooling2D(pool_size=(2, 2),strides=(2,2)))

    # 将特征图展平为一维向量
    model.add(Flatten())

    # 添加全连接层
    model.add(Dense(128, activation='relu'))
    model.add(BatchNormalization())


    model.add(Dense(15, activation='sigmoid'))
model.fit_generator(generator=generator_data(),
                        steps_per_epoch=math.ceil(len(train_data)/batch_size)+1,
                        epochs=10,
                        callbacks=[generatorCallback()])

在经过长达15个小时的训练之后,accuracy在超过80%之后,就得到了一个70M左右的模型。

使用模型进行测试展示效果如下:

结果中,我将概率最高的一类标红以便于寻找。

模型比较小,但是准确率还是非常高的。只是有一点遗憾,有些正片经过AI的预测,某一项疾病概率非常高,但是我又没法辨别是否真实存在,所以我不确定这个是预测错误还是真实预测到了?这个问题,如果有机会可以到实际的生产中去验证。当然这个模型肯定是要重新扩充和修改的。

以上就是粗略的解决思路,非常感谢大家!

如有疑问请到君羊:195889612

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值