引言--做了什么?如上一篇博文所提到用ImageNet图像来帮助医学图像的识别,但是ImageNet里面的图像(二维,彩色)没有医学图像,包含一些诸如鸟类、猫、狗、直升机等物体的识别,与医学图像(二维或三维,非彩色)相差很大。对此Le Lu大神于2016年3月份发表了一篇文章Deep Convolutional Neural Networks for Computer-Aided Detection: CNN Architectures, Dataset Characteristics and Transfer Learning,解决了这个问题,其中所用的机制就是选择窗位的三个 ranges来获取相应的CT slice images,然后对这3幅images encode 生成相应的RGB 图像。

通过对caffe已有模型进行finetune 实现医学图像CT肺 结节的预测与检测,并实现可视化!

思路--出发点是?

如果将CNN应用于医学图像,首要面对的问题是训练数据的缺乏。因为CNN的训练数据都需要有类别标号,这通常需要专家来手工标记。要是标记像ImageNet这样大规模的上百万张的训练图像,简直是不可想象的。
对于医学图像而言,得到大规模的训练数据是比较不容易的,那么可否使用finetune利用现成的ImageNet的图像来帮助医学图像的识别呢?ImageNet里面的图像(二维,彩色)没有医学图像,包含一些诸如鸟类、猫、狗、直升机等物体的识别,与医学图像(二维或三维,非彩色)相差很大。如果回答是肯定的话,是一件令人非常振奋的事情。

方案--怎么做?

首先是医学图像彩色化:http://blog.csdn.net/dcxhun3/article/details/51777794 其实这也是得到大师的指点的
然后是对样本的data augmentation,方可获得较多样本
再就是对彩色化的图像进行finetune训练

预测

利用finetune后的模型进行结节预测与检测。
caffe预测、特征可视化python接口调用
http://nbviewer.jupyter.org/url/www.openu.ac.il/home/hassner/projects/cnn_agegender/cnn_age_gender_demo.ipynb

代码和结果

借助 jupyter 也就是ipython notebook  现在还不知道怎么将imagenet_classify.ipynb源码上传 等学会了上传。你可以在相应路径下输入ipython notebook 启动 然后逐一将下面的路径复制运行
[python] view plain copy    
  1. import os
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. %matplotlib inline
  5. #设置caffe源码所在的路径
  6. caffe_root = '/usr/local/caffe/'
  7. import sys
  8. sys.path.insert(0, caffe_root + 'python')
  9. import caffe
  10. plt.rcParams['figure.figsize'] = (10, 10)
  11. plt.rcParams['image.interpolation'] = 'nearest'
  12. plt.rcParams['image.cmap'] = 'gray'
  13. #加载均值文件
  14. mean_filename='./imagenet_mean.binaryproto'
  15. proto_data = open(mean_filename, "rb").read()
  16. a = caffe.io.caffe_pb2.BlobProto.FromString(proto_data)
  17. mean  = caffe.io.blobproto_to_array(a)[0]
  18. #创建网络,并加载已经训练好的模型文件
  19. nodule_net_pretrained='./mytask_train_iter_8000.caffemodel'
  20. nodule_net_model_file='./deploy.prototxt'
  21. nodule_net = caffe.Classifier(nodule_net_model_file, nodule_net_pretrained,
  22. mean=mean,
  23. channel_swap=(2,1,0),#RGB通道与BGR
  24. raw_scale=255,#把图片归一化到0~1之间
  25. image_dims=(256, 256))#设置输入图片的大小
(10, 3, 227, 227)
[python] view plain copy    
  1. #预测分类及其可特征视化
  2. nodule_list=['bg','nodule'] #类别表
  3. example_image = './2.bmp'
  4. input_image = caffe.io.load_image(example_image)#读取图片
  5. _ = plt.imshow(input_image)#显示原图片
  6. #预测结果
  7. prediction = nodule_net.predict([input_image])
  8. print 'predict bg or nodule:', nodule_list[prediction[0].argmax()]
predict bg or nodule: bg

[python] view plain copy    
  1. #预测分类及其可特征视化
  2. nodule_list=['bg','nodule'] #类别表
  3. example_image = './136.bmp'
  4. input_image = caffe.io.load_image(example_image)#读取图片
  5. _ = plt.imshow(input_image)#显示原图片
  6. #预测结果
  7. prediction = nodule_net.predict([input_image])
  8. print 'predict bg or nodule:', nodule_list[prediction[0].argmax()]
predict bg or nodule: nodule

[python] view plain copy    
  1. def showimage(im):
  2. if im.ndim == 3:
  3. im = im[:, :, ::-1]
  4. plt.set_cmap('jet')
  5. plt.imshow(im)
  6. def vis_square(data, padsize=1, padval=0):
  7. data -= data.min()
  8. data /= data.max()
  9. # force the number of filters to be square
  10. n = int(np.ceil(np.sqrt(data.shape[0])))
  11. padding = ((0, n ** 2 - data.shape[0]), (0, padsize), (0, padsize)) + ((0, 0),) * (data.ndim - 3)
  12. data = np.pad(data, padding, mode='constant', constant_values=(padval, padval))
  13. # tile the filters into an image
  14. data = data.reshape((n, n) + data.shape[1:]).transpose((0, 2, 1, 3) + tuple(range(4, data.ndim + 1)))
  15. data = data.reshape((n * data.shape[1], n * data.shape[3]) + data.shape[4:])
  16. showimage(data)
  17. age_net = caffe.Classifier(nodule_net_model_file, nodule_net_pretrained,
  18. channel_swap=(2,1,0),
  19. raw_scale=255,
  20. image_dims=(256, 256))
  21. prediction = nodule_net.predict([input_image])
[python] view plain copy    
  1. _ = plt.imshow(input_image)

[python] view plain copy    
  1. filters = nodule_net.params['conv1'][0].data[:49] #conv1滤波器可视化
  2. vis_square(filters.transpose(0, 2, 3, 1))

[python] view plain copy    
  1. feat = nodule_net.blobs['conv1'].data[4, :49]  #The first Conv layer output, conv1 (rectified responses of the filters above)
  2. vis_square(feat, padval=1)

哇塞,可视化成功~不得不佩服Python的强大

caffe finetune predict and classify the lung nodule( 肺结节的分类)相关推荐

  1. Knowledge-based Collaborative Deep Learning for Benign-Malignant Lung Nodule Classification论文阅读

    作者信息: Yutong Xie, Yong Xia, Member, IEEE, Jianpeng Zhang, Yang Song, Member, IEEE, Dagan Feng, Fel l ...

  2. caffe fine-tune策略

    caffe fine-tune策略 现在随着深度学习技术的迅速发展,深度学习技术在图像和语音方向的应用已经很成熟了.目前工程上应用深度学习一般源于数据的限制都是在ImageNet pre-traine ...

  3. 如何用深度学习进行CT影像肺结节探测(附有基于Intel Extended Caffe的3D Faster RCNN代码开源)

    近期宜远智能参加阿里天池医疗AI大赛,用3D Faster RCNN模型在CT影像的肺结节探测上,取得了较好的成绩,特别是在计算资源充足的情况下,模型效果表现优异.这是他们的经验分享(https:// ...

  4. caffe将用训练好的caffemodel和train_val.prototxt文件分类新的一张图片-下篇--caffe学习(7)

    接上篇caffe将用训练好的caffemodel和train_val.prototxt文件分类新的一张图片-上篇 得到deploy.prototxt文件之后,我们可以自己编写python代码实现对单个 ...

  5. 学习Caffe(二)使用Caffe:Caffe加载模型+Caffe添加新层+Caffe finetune

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u014230646/article/details/51934150 如何使用Caffe Caffe ...

  6. caffe学习笔记(十七)--用caffemodel进行批量图片分类

    接上篇文章,这次进行批量图片处理,在/examles/images文件中有四张图片如下所示 接下来另外创建classifiy2.py文件,进行批量图片处理,事实上,这次的处理流程和上篇笔记基本类似,上 ...

  7. Caffe、TensorFlow、MXnet三个开源库对比+主流分类模型对比

    库名称 开发语言 支持接口 安装难度(ubuntu) 文档风格 示例 支持模型 上手难易 Caffe c++/cuda c++/python/matlab *** * *** CNN ** MXNet ...

  8. 用caffe自带的训练好的模型测试图片的分类结果,实现啦啦啦

    1.caffemodel文件下载 可以直接在浏览器里输入地址下载,也可以运行脚本文件下载.下载地址为:http://dl.caffe.berkeleyvision.org/bvlc_reference ...

  9. 基于CNN的性别、年龄识别及Demo实现

    一.相关理论 本篇博文主要讲解2015年一篇paper<Age and Gender Classification using Convolutional Neural Networks> ...

最新文章

  1. 主机配置_分享几套电脑主机配置
  2. 直播预告 | STC单车拉力组专题培训
  3. java一个接口执行结束释放内存_java的灵魂--JVM虚拟机
  4. “伪基站”任意冒用手机号短信诈骗
  5. ios7以后隐藏状态栏
  6. ios::sync_with_stdio(true);
  7. php 后端调试,一般如何调试php程序
  8. IntelliJ IDEA For Mac 快捷键,够骚,速度收藏!
  9. Linux系统调用之open(), close() (转载)
  10. 定时任务发展史(二)
  11. 教学管理系统数据库设计Mysql_教务管理系统数据库设计方案.docx
  12. java连接Hbase操作数据库的全过程---搭建hbase数据库
  13. 第三方支付竞争走向下半场 汇付天下构建多方共赢新生态
  14. 三张图片怎么拼成一张?
  15. 【马司机带带我】电话骚扰自动化及其对策
  16. SQL--超键、候选键、主键、外键的认识和区分
  17. 如何提升自身能力?不再平庸
  18. 共享内存shmget的郁闷
  19. 8月8日,今天是个好日子。
  20. Excel学习笔记:P30-如何制作一个让老板眼睛为之一亮的甘特图

热门文章

  1. android 选择ppt模板,微软Office安卓手机版使用攻略:巧用模板可事半功倍
  2. 【c语言】求两数之和
  3. 实现php实现价格的排序,php 数组动态添加实现代码(最土团购系统的价格排序)_PHP教程...
  4. Tido 习题-二叉树-树状数组求逆序对
  5. 数据分析模块pandas
  6. 用css绘制各种形状
  7. 4.4、Bootstrap V4自学之路------组件---表单
  8. MapReduce Shuffle优化方向
  9. Hover States - 有趣的用户界面及交互设计
  10. 通过关闭swap来提高win7运行速度