深度学习:乳腺检测abnormality detection in mammography +CAM

论文:Abnormality detection in mammography using deep convolutional Neural Networks

数据集:CBIS-DDSM (CC+MLO)*(right +left) one person ==》 (753钙化)+(891肿块)  数据增扩rotation 

任务:二分类:calcification钙化+mass肿块

定位:CAM 

网络结构:AlexNet / VGGNET/GOOGLENET/RESNET+two classification

训练流程:

  • 1、用掩码获取patch,将两种patch送入网络训练(resize224*224) train ,input mammorgram full-size test
  • 2、经过CAM->heatmap

名词解释

1、CAM(Class Activation Mapping)

参考:CAM:https://blog.csdn.net/weixin_40955254/article/details/81191896

参考:凭什么相信你的模型CAM:https://www.jianshu.com/p/1d7b5c4ecb93

在Learning Deep Features for Discriminative Localization这篇文章中,作者提出了CNN网络除了具有很强的图片处理,分类能力;同时还能够针对图片中的关键部分进行定位,这个过程被称为Class Activation Mapping,简称CAM。

那么什么叫做CAM呢,如下图所示,第一组输入图片,训练的标签式刷牙,那么通过based model+CAM之后,我们可以得到如下图第二行所示的热度图,在对最后结果影响比较大的地方生成的热度就比较高,我们可以看到在这两张图片中对于嘴以及牙刷的热度都比较高,我们可以得出这两个部分对于最后刷牙的结果有着比较大的影响。对于第三列和第四列的结果,我就不多描述了,很好懂。

下面就来讲讲CAM的网络架构,如下图所示。输入一张图片,然后进过CNN网络提取出许多feature map,每个fearure map都能够表示出整个网络的部分特征。这里的CNN网络可以使用VGG啊,或者google net系列的例如inception等等,但是有这样一个问题,我们认为feature map还保留着图片的空间信息,这也是为什么最后通过ifeature map的叠加可以得到class activation map的原因。而通常的网络中会选择全连接层进行图片特征图向特征向量的转换在这个转换过程中就会丢失空间信息

所以文中采用global average pooling(GAP)(可以把GAP视为一个特殊的average pool层,只不过其pool size和整个特征图一样大,其实说白了就是求每张特征图所有像素的均值。)来代替fully connected。然后将生成的这个值,最后通过一个全连接层实现相应的分类结果,相应的全连接层的权重称为相应的权重w1,w2.。。。。。

我们这样想最后生成的结果分类结果,其实就是pool之后的值与相应权重的乘积,相应的这个pool值是由GAP生成的,所以最后分类的结果可以看为是特征图与权重的乘积,这时候权重就代表了每个特征图对于最后结果的贡献程度,那么假如我们将特征图乘以权重直接相加,那么对于最后结果影响大的地方因该有相对较大的值,小的地方有相对较小的值,这个过程也就是CAM的原理讲解。具体的过程可以看图二的下面部分,了解具体操作。

在卷积层之后,使用了一个叫GAP的池,全称是global average pooling。全局平均池的优点就是大量减少参数量,以及保持图像的空间结构。尾端使用全连接层full connected layer进行分类输出。该层能够针对每一个分类有一套权重。

当然这里有几个地方需要说明,首先就是应用之前需要对模型进行预训练,才能够进行CAM接下来的操作。其次过于最后生成特征图的大小对于不同的基模型有不同的方案,比如Alexnet的13*13,vgg的14*14,Googlenet的14*14.所以对于我们所希望获得的原图,最后是需要进行resize的。

PS也许有同学要问,全局池化为什么要使用average这种方法呢,max不行嘛?

答案是有一种CAM就是基于max pooling(GMP)的,但是他存在一些问题,就是基于average的CAM可以标出重要影响的所有区域,而基于max的CAM却只能标注出ROI区域的右下方的一个关键点。这个使得基于GMP的CAM在分类效果上与基于GAM的差不多,但是在定位问题上就要显得逊色一点。

使用 Inception V3 举例:
该网络经过卷积层后,大小为(8x8x2048),经过GAP层后(1x1x2048),全连接层权重为(2048x10)。10个类别分别对应着10个全连接层权重,每个类别对应2048个权重。
生成热力图时,将图片卷积后的(8x8x2048)和某一类别全连接层权重(1x2048)的乘积后得到热力图(8x8)。将该热力图暴力展开成所需要的大小即可。

代码:github中,可自行下载查看,欢迎交流,欢迎star。(https://github.com/wpydcr/tf-slim-Class-Activation-Map)

我们重点看下经过GAP之后与输出层的连接关系(暂不考虑softmax层),实质上也是就是个全连接层,只不过没有了偏置项,如图所示:

从图中可以看到,经过GAP之后,我们得到了最后一个卷积层每个特征图的均值,通过加权和得到输出(实际中是softmax层的输入)。需要注意的是,对每一个类别C,每个特征图k的均值都有一个对应的w,记为w_k^c。CAM的基本结构就是这样了,下面就是和普通的CNN模型一样训练就可以了。训练完成后才是重头戏:我们如何得到一个用于解释分类结果的热力图呢?其实非常简单,比如说我们要解释为什么分类的结果是羊驼,我们把羊驼这个类别对应的所有w_k^c取出来,求出它们与自己对应的特征图的加权和即可。由于这个结果的大小和特征图是一致的,我们需要对它进行上采样,叠加到原图上去,如下所示。


这样,CAM以热力图的形式告诉了我们,模型是重点通过哪些像素确定这个图片是羊驼了。

猜你喜欢

转载自blog.csdn.net/weixin_41108334/article/details/84396625