ImageNet && 医学图像的识别
医学图像识别的问题
如果将CNN应用于医学图像,首要面对的问题是训练数据的缺乏。因为CNN的训练数据都需要有类别标号,这通常需要专家来手工标记。要是标记像ImageNet这样大规模的上百万张的训练图像,简直是不可想象的。
因为CNN的参数多,必须依靠大规模的训练数据才能防止过度拟合(Over Fitting)。在数据量少的情况下,有两种解决方案:一个叫Data Augmentation。就是依赖现有的图像,通过旋转,平移,变形等变化,产生更多的图像。二是使用转移学习(Transfer Learning)。其思想是通过在另一种大规模的数据集上面训练,得到CNN的参数作为初始值,再在目标数据集上训练对参数进行调优(Fine-tuning)。
转移训练的原理是某些特征在不同的训练数据集上是具有通用性的。对于CNN而言,其第一层是提取局部的特征,在后续层通过下采样扩大感知区域, 再往后的层感知区域更大,得到的特征也更加抽象。在前几层的特征通常并不与某一个具体的分类任务直接相关,而是类似于Gabor Filter, 边缘,与方向有关的特征等。这些特征都是比较通用的,因此可以在一个数据集上训练得到而应用在一个与之类似的数据集上。当然,如果训练出的特征对某个训练数据集或者识别任务具有特异性,用它做转移学习就未必有好的效果。
对于医学图像而言,得到大规模的训练数据是比较不容易的,那么可否使用Transfer Learning利用现成的ImageNet的图像来帮助医学图像的识别呢?ImageNet里面的图像(二维,彩色)没有医学图像,包含一些诸如鸟类、猫、狗、直升机等物体的识别,与医学图像(二维或三维,非彩色)相差很大。如果回答是肯定的话,是一件令人非常振奋的事情。
使用ImageNet做转移学习的效果
在NIH的Hoo-Chang Shin ; Holger R. Roth等人最近的一篇文章中研究了这个问题(下载链接)。其全名为:Deep Convolutional Neural Networks for Computer-Aided Detection: CNN Architectures, Dataset Characteristics and Transfer Learning。
该文章除了研究上述问题,还比较了CifarNet (2009年), AlexNet(2012年)和GoogleNet(2014年)这三个一个比一个复杂的网络结构在不同的训练数据量的情况下的性能。这三个网络的结构简图如下:
该文章研究的医学图像应用为CT图像中胸腹部淋巴结(三维)的检测和肺部疾病的分类(二维)。如何让彩色二维图像与医学图像相结合呢?该文采用了两个小技巧:
对于三维CT图像,将通过某一点的冠状面、矢状面和横断面的三个二维图像组合在一起,作为RGB的三个通道,使之与彩色图像兼容。对二维CT图像,分别采用三种不同的CT灰度窗口,得到三张图像,组合成彩色图像。
实验的结果如上图。可以看出,在不使用Transfer Learning的情况下(Random Initialization, RI),AlexNet虽然比GoogleNet简单,但是效果比GoogleNet好,这是因为GoogleNet参数太多,训练数据不够导致过度拟合,使其泛化能力下降,从而分类精度降低。使用了Transfer Learning (TL)后,GoogleNet的性能提高很多,效果比AlexNet要好。
Random Initialization和Transfer Learning 在训练过程中的性能比较如下图:
可见Transfer Learning减少了测试数据上的误差,提高了分类的准确率。
再来看看Transfer Learning学到了那些特征:
上图显示了在CNN的第一层中学习到的特征。可以看出在不使用Transfer Learning的情况下,单从CT图像上学习到的特征都表现出比较模糊的样子,而使用Transfer Learning的CNN相应的特征中包含一些和边缘有关的特征,这些实际上是从ImageNet中学习过来的,但有助于CT图像的分类和识别。
- 顶
- 0
- 踩
ImageNet && 医学图像的识别的更多相关文章
- 刷新神经网络新深度:ImageNet计算机视觉挑战赛微软中国研究员夺冠
微软亚洲研究院首席研究员孙剑 世界上最好计算机视觉系统有多精确?就在美国东部时间12月10日上午9时,ImageNet计算机视觉识别挑战赛结果揭晓——微软亚洲研究院视觉计算组的研究员们凭借深层神经网络 ...
- 深度学习研究理解5:Visualizing and Understanding Convolutional Networks(转)
Visualizing and understandingConvolutional Networks 本文是Matthew D.Zeiler 和Rob Fergus于(纽约大学)13年撰写的论文,主 ...
- 深度学习“引擎”之争:GPU加速还是专属神经网络芯片?
深度学习“引擎”之争:GPU加速还是专属神经网络芯片? 深度学习(Deep Learning)在这两年风靡全球,大数据和高性能计算平台的推动作用功不可没,可谓深度学习的“燃料”和“引擎”,GPU则是引 ...
- 论文阅读(Lukas Neumann——【ICCV2017】Deep TextSpotter_An End-to-End Trainable Scene Text Localization and Recognition Framework)
Lukas Neumann——[ICCV2017]Deep TextSpotter_An End-to-End Trainable Scene Text Localization and Recogn ...
- cuda-convnet在Ubuntu12.04+CUDA5.5下的配置
deep learning近年来非常之火,尤其是在IMAGENET上的识别效果更是惊呆了小伙伴,其所用的Hinton的学生编写的cuda-convet代码早已公开,但是一直没有时间去仔细研究,最近趁着 ...
- CNN更新换代!性能提升算力减半,还即插即用
传统的卷积运算,要成为过去时了. Facebook和新加坡国立大学联手提出了新一代替代品:OctConv(Octave Convolution),效果惊艳,用起来还非常方便. OctConv就如同卷积 ...
- Kaggle上的犬种识别(ImageNet Dogs)
Kaggle上的犬种识别(ImageNet Dogs) Dog Breed Identification (ImageNet Dogs) on Kaggle 在本节中,将解决在Kaggle竞赛中的犬种 ...
- 微软亚洲实验室一篇超过人类识别率的论文:Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification ImageNet Classification
在该文章的两大创新点:一个是PReLU,一个是权值初始化的方法.下面我们分别一一来看. PReLU(paramter ReLU) 所谓的PRelu,即在 ReLU激活函数的基础上加入了一个参数,看一个 ...
- caffe_手写数字识别Lenet模型理解
这两天看了Lenet的模型理解,很简单的手写数字CNN网络,90年代美国用它来识别钞票,准确率还是很高的,所以它也是一个很经典的模型.而且学习这个模型也有助于我们理解更大的网络比如Imagenet等等 ...
随机推荐
- USB的逻辑值和用途值有什么区别?
用途最小值,用途最大值.逻辑最小值,逻辑最大值分别是什么意思?如题: code uint8 ReportDescriptor[]= { //每行开始的第一字节为该条目的前缀,前缀的格式为: //D7~ ...
- delphi根据进程PID获取程序所在路径的函数(用OpenProcess取得句柄,用GetModuleFileNameEx取得程序名)
uses psapi; {根据进程PID获取程序所在路径的函数}function GetProcessExePath(PID: Cardinal): string;varpHandle: THandl ...
- MySQL更新死锁问题
作为一个社交类的 App ,我们有很多操作都会同时发生,为了确保数据的一致性,会采用数据库的事物. 比如现在我们有一个点赞操作,点赞成功后,需要更改文章的热度.以下是 SQL 语句: INSERT I ...
- 【转】android中如何查看某个线程的logcat--不错
原文网址:http://my.oschina.net/u/236164/blog/51022 单一个项目由很多人开发,然后大家各自打各自的log.到最后logcat就根本没法看了. adb自带的参数里 ...
- 【转】用串口登录Beaglebone Black、用usb共享电脑网络、内核模块的本地编译
原文网址:http://bbs.eeworld.com.cn/thread-431507-1-1.html 串口连接BBB使用usb线可以连接BBB和电脑,用ssh就可以登录BBB来进行操作.但有时候 ...
- POJ3294--Life Forms 后缀数组+二分答案 大于k个字符串的最长公共子串
Life Forms Time Limit: 500 ...
- java——Arrays.asList()方法
Arrays.asList() 是将数组作为列表 问题来源于: public class Test { public static void main(String[] args) { int[] a ...
- dojo 学习笔记之dojo.query - query(id) 与query(class)的差别
考虑这个样例:动态创建一个页面的时候,用new listtem()生成多个listitem, 且每一个listitem中都生成一个按钮button. 假设想要给每一个按钮都绑定一个click事件,用d ...
- c++大作业--学籍管理系统--
1.题目描写叙述 学籍管理系统: 依据信息管理系统的业务流程.要求以及所要实现的目标,完毕下面功能: (1)建立学生档案的管理和维护.实现计算机自己主动化管理体制. (2)建立学生成绩管理机制,在计算 ...
- 【iOS开发之C语言】sprintf,strncpy,strcmp三个函数的区别
strncpy 这个函数用于将源字符串的内容拷贝到目标字符串,会覆盖掉目标字符串的之前内容 ] = "love"; char str2[] = "cool"; ...