DL
skyfengye
研究机器学习,图像处理,图形处理的小菜鸟
展开
-
keras 实验细节分析
最近在训练imagenNet 数据集,在使用keras 训练时需要多GPU 训练。因此我使用了keras 里面的多GPU训练,在训练的时候不管使用几个GPU发现速度并没有提升多少,然后我查看了GPU使用情况,发现第一个GPU占用率最大。其他的你说他没有运行吧,它也在运行使用率都是个位数。这时候,我发现这才是导致训练的时间没有变化的原因。因此我找了很多方法,各种动态调试。最后我发现解决这个问题的办法竟然时keras tensorflow 的版本问题。我原来使用了tensorflow 1.14.0版本,然后我降原创 2020-10-15 11:24:45 · 226 阅读 · 0 评论 -
精简网络结构
最近在看一些网络精简结构的相关的文章,对于网络的加速,结构的精简看了一些文章。我在知乎上面看到了一片很好的文章。他总结了各种精简结构比如ShuffleNet和MobileNet对于结构精简的提升。文章名字是深入剖析MobileNet和它的变种(例如:ShuffleNet)为什么会变快?整篇文章可以用下面一幅图概括。这里面介绍了相关的结构精简的原因,大家可以去看看。...原创 2020-09-08 11:38:06 · 640 阅读 · 0 评论 -
ResNet 各个版本的区别
最近在研究分类问题,提到分类那就是必须要提到ResNet 这个经典的模型了。这个模型也分成了很多个版本。每个版本区别如下这就是每一个版本ResNet的区别。我们可以看到主要的区别就是每一个卷积的多少的区别。这里又一个keras 的简单实现。 def ResNet50(include_top=True, weights='imagenet', input_tensor=None, input_shape=None, pooling=Non原创 2020-08-17 16:54:06 · 10234 阅读 · 2 评论 -
Depth-wise Convolution keras 运行时间缓慢原因
提到depth-wise conv2D 大家都如数家珍,这里我就简单的介绍一下,用两张图就可以概述出来了,大家想要看具体的介绍可以看A Basic Introduction to Separable Convolutions这篇文章介绍的很清楚。上图是一个正常的卷积操作,是一个12×12×3的特征图经过256个卷积核大小为5×5×3的卷积得到了一个8×8×256的特征图。这是正常的卷积。参数量为256 x 5 x 5 x 3 = 19200,乘法次数为256 x 5 x 5 x 3 x 8 x.原创 2020-06-24 11:02:40 · 1852 阅读 · 0 评论 -
多尺度特征的融合操作
在目标检测和分割的任务中,我们都喜欢用多尺度 特征融合操作来提高准确率。以语义分割为例,大家在看到U-Net 以后想到的第一个自认为的创新就是加上 ASPP 结构。加上一个特征金字塔结构。然后做实验发现整个效果还是不错的。其实这个特征金字塔的结构就是一个多尺度特征融合的例子。在这里也可以证明了多尺度特征融合在深度学习中的好处。那为什么多尺度融合有效果呢。 我们知道现在的检测和分割网络基本都喜欢用卷积神经网络通过逐层抽象的方式来提取目标的特征,我们可以知道高层网络的感受野比较大,语义信息表征...原创 2020-06-19 11:06:29 · 55100 阅读 · 4 评论 -
模型过参数化在医学图像中的影响 个人看法
在神经网络训练中,模型参数越多,虽然越容易导致过拟合,但是也可以容易的训练。在进行transfer learning时,可以看出过参数化是网络可以成功的关键。The Utility of Feature Reuse和Transfusion这两篇论文讨论了这些问题。...原创 2020-05-25 16:42:32 · 1473 阅读 · 0 评论 -
ResNeSt 新的ResNet的变体
在现在语义分割、分类上面的操作的时候Backbone 使用ResNet网络的有很多,这也是一种很成功的网络。对于提高网络的准确率有很好的作用。但是随着现在技术的发展人们提出了各种的新的ResNet的变体。这里是一种的新的变体ResNeSt.这种新的变体到底有多强,在这里我就不细说了,大家可以去论文中看看。ResNeSt 的全称是:Split-AttentionNetworks,也就是特别...原创 2020-04-19 11:32:07 · 1686 阅读 · 2 评论 -
GhostNet 幽灵网络结构,keras 实现
由于疫情在家,基本没有什么事情干。在看看论文在CVPR2020中我看到了一篇比较有趣的论文,大家在跑CNN网络的时候,如果你去看一下不同通道的特征图,你会发现有一些特征图很类似,用肉眼看大家也不会觉得有什么区别。当时对于我们这些小菜鸟来说,这也没有什么问题,只要我们要的结果出来就好,准确度上去就可以了。我们也不会去在意这些事,这个时候我们就和大牛体现出差距了,大牛观察到这些问题,想到这些什么原因,...原创 2020-03-23 16:38:45 · 2946 阅读 · 2 评论 -
视网膜分支动脉阻塞分割框架
因为疫情的原因,到现在还么有去院里正式工作,在家里老师也催着我写研究方案,最近看到一篇论文是讲视网膜分支动脉阻塞分割的。论文题目是 “A Framework for Classification and Segmentationof Branch Retinal Artery Occlusion in SD-OCT”。我看了一下发现这个视网膜动脉分割的水挺深的,原以为也是跟普通的医学图像分割一样,...原创 2020-02-22 16:21:13 · 614 阅读 · 0 评论 -
基于条件的对抗生成网络 Conditional Generative Adversarial Nets
最近在看对抗生成网络的相关论文,发现一些比较有趣的论文,在这里跟大家分享一下的。在经典的生成对抗模型中,往往有两个模型一个生成模型,它去获取数据的分布,然后一个判别模型,它去评估这个样本来自训练集的概率。这两个和模型都是同时训练,他去调整参数使模型去最小化然后去调整参数使模型去最小化最后这个损失函数为而在条件生成对抗网络中需要加入一个额外的信息.这个可以是各种辅助的信息,比如类别...原创 2019-12-17 11:17:01 · 1609 阅读 · 0 评论 -
GAN 网络六年总结
今天看到很好的一篇论文,总结了整个GAN六年的发展,主要以计算视觉为主。论文题目是The Six Fronts of the Generative Adversarial Networks。大家可以参考一下。如果大家是搞医学图像的,还可以参考这篇文章:GANs for Medical Image Analysis也是一个总结。可以让大家有一个综合的概念。...原创 2019-12-10 21:43:17 · 575 阅读 · 0 评论 -
anaconda spyder could not Could not Initialize GLX 已放弃(核心转存)
今天手贱安装了依赖包,突然把整个anaconda 环境搞奔溃了。然后只能重新安装,安装完了以后 打开spyder 出现了could not Could not Initialize GLX已放弃的(核心转移之类的错误)然后科学上网找了一些方法。看网上分析原因是因为 QT的原因 现在我列举出来给大家参考一下conda install qt=5.6* pyqt=5.6*这是一种方法,我试了效...原创 2019-10-19 23:09:35 · 2044 阅读 · 0 评论 -
为什么卷积神经网络中一般用奇数的卷积核
今天看到一篇比较有意思的文章,也解开了我一直一个疑问:为什么现在卷积神经网络中卷积核都是奇数的。比如3×3,5×5,7×7.3×3的卷积核也是在VGG证明了用两个可以代替一个7*7效果更好,且参数还更少。那么为什么没有人用两个2×2的卷积核代替3×3的卷积核,或者就是直接用2×2的卷积代替3×3呢?今天看到的文章,Convolution with even-sized kernels an...原创 2019-10-15 09:33:18 · 2420 阅读 · 0 评论 -
医学图像分割--U-Net的颅内血管的分割 keras 实现
最近在进行医学图像的处理研究,主要是进行了颅内血管的CT图像的分割研究。 现阶段进行深度学习的图像分割的研究基本就是几种比较成熟的几个方法,FCN,u-net deeplab等一些方法。具体方法的操作,我这里就不细说了。大家可以自己去看看论文。 现阶段进行医学图像的深度学习处理的方法,最大的瓶颈就是数据量比较少,导致网络训练不是很理想。由于进行颅内血管的数据量也比较少,所以需要进行一定的数据量...原创 2018-05-03 11:06:27 · 7469 阅读 · 7 评论 -
3月实验总结
三月继续从事颅内血管的分割操作了。在上个月实现了注意力机制加入网络。也成功分割出了血管。但是整个网络存在一些噪点。3月进行实验发现,channel attention 的加入对于噪点有很大的影响。因此在3月份进行了整个网络的优化。整体效果还是不错的。还有在在提高网络鲁棒性的操作上,发现正则化对于效果有很好的影响。大家可以试试。...原创 2019-03-30 20:45:30 · 167 阅读 · 0 评论 -
keras 图像分割 图像增强函数的使用
在使用keras 进行图像分割时,当数据量不大时,我们需要进行图像增加。在keras 中有专门的函数可以进行增强。这里进行简单的介绍一下。keras 中图像增强的函数是ImageDataGenerator 类keras.preprocessing.image.ImageDataGenerator(featurewise_center=False, ...原创 2019-04-09 15:20:49 · 2180 阅读 · 2 评论 -
Non-local Networks Meet Squeeze-Excitation Networks and Beyond 论文解读。
最近关注到了这篇论文,发现这篇论文挺有意思的。因此在这里按我的理解说说这篇论文。这里不做论文完整的翻译。GCNet 网络结构结构了non-local network和Squeeze-excitation networks.我们知道non-local network(NLNet)可以捕获长距离依赖关系。可以发现NLnet的网络结构采用的是自注意力机制来建模像素对关系。在这篇文章中non-l...原创 2019-05-09 16:02:47 · 2826 阅读 · 0 评论 -
卷积神经网络的理解 Squeeze-and-Excitation (SE)网络
对于CNN网络来说,其核心计算是卷积算子,其通过卷积核从输入特征图学习到新特征图。从本质上讲,卷积是对一个局部区域进行特征融合,这包括空间上(H和W维度)以及通道间(C维度)的特征融合我们可以发现卷积实际上是对局部区域进行的特征融合。 这也导致了普通卷积神经网络的感受野不大,当然你也可以设计出更多的通道特征来增加这个,但是这样做导致了计算量大大的增加。因此为了空间上融合更多特征融合,或者是...原创 2019-05-14 16:05:04 · 6555 阅读 · 1 评论 -
RAM: Residual Attention Module 新的注意力模型
现在注意力模型在计算机视觉领域应用的越来越广泛了。不光在图像分割,其他领域也应用的比较多。RAM这篇文章是应用在图像超分辨率上。这是因为应用到图像超分辨领域的注意力模型大都没有考虑超分辨和其它高层计算机视觉问题的天然不同。作者提出了一个新的注意力模型,由针对 SR 问题优化的新的通道和空间注意力机制以及将这两者结合起来的融合机制组成上图就是这种模型的结构图。在以前的方法中,通道注意力...原创 2019-05-15 16:52:29 · 3037 阅读 · 1 评论 -
GAN 算法
GAN是基于可微生成器网络的另一种生成建模方式。实际是通过对先验分布施加一个运算G, 来拟合一个新的分布如果从传统的判别式网络的思路出发,只要选定合适的loss,就可以使生成分布和真实分布之间的距离尽可能逼近。这里通常使用了KL散度。其实现在在图像分割领域GAN网络也达到了了大量的应用了。在上述描述中我们可以发现可以增加一个loss函数来拟合一个数据的分布。因此后期我想到了应用这种方法来...原创 2019-07-04 17:46:12 · 2087 阅读 · 0 评论 -
交叉熵、KL散度问题。
最近在研究GAN算法。这其中使用了KL散度等一些概念问题。在网上发现了一个很精彩的解释。目前分类损失函数为何多用交叉熵,而不是KL散度。首先损失函数的功能是通过样本来计算模型分布与目标分布间的差异,在分布差异计算中,KL散度是最合适的。但在实际中,某一事件的标签是已知不变的(例如我们设置猫的label为1,那么所有关于猫的样本都要标记为1),即目标分布的熵为常数。而根据下面KL公式可以看到...原创 2019-07-25 15:43:46 · 1086 阅读 · 0 评论 -
segnet keras 实现
segnet 是早期的一个图像分割网络,虽然现在相比于deeplab 等一些大牛的网络结构的准确度有一定的的下降。但是这是segnet,在早期是有一个很好的图像分割思路。其中segnet 和其他网络最大的区别是使用了一个池化索引的方法,进行了上采样。这里使用了keras 进行了实现,其中最主要的就是池化索引和上采样这个操作。其他网络的结构用keras 是很容易实现的。from...原创 2019-08-09 16:30:06 · 2892 阅读 · 9 评论 -
Batch Normalization 对于神经网络的影响
在知乎上面看到一篇很好的文章关于 batch Normalization的。对于Batch Noremalization的理解很深刻。我这里贴出一个主要的部分。要看完整版请Batch Normalization感谢作者。BN的基本思想其实相当直观:因为深层神经网络在做非线性变换前的激活输入值(就是那个x=WU+B,U是输入)随着网络深度加深或者在训练过程中,其分布逐渐发生偏移或者变动,之...原创 2019-03-08 16:26:23 · 325 阅读 · 0 评论 -
dropout 对于整个深度神经网络的影响
在进行图像分割时,发现一个问题,在不加dropout 时整个模型的训练准确率可以很快的提升,但是验证集的准确率很难提升上去。但是在加了dropout 之后,发现模型训练集准确率提升就会很慢,也很难达到没有加入dropout的效果。验证集的准确率提升的并没有想象的那么明显。所以怀疑dropout的加入对于整个网络模型的提升到底有多大。看了相关文章说dropout对于模型准确度的提升没有想象的那么有作...原创 2019-02-26 09:59:55 · 4625 阅读 · 1 评论 -
keras 运行出现AttributeError: 'NoneType' object has no attribute 'load_weights'
今天在运行一个新的程序时发现 读取参数时出现了上述的问题 说是找不到 load_weights。一直也想不明白为啥会出现这种情况。然后在网上找了一下。发现类似的问题,我也试了一下。使用了load_model 来代替试试了。最后发现还是出现了问题。这次是我定义的新层找不到了。最后我打开程序认真看了看最后发现问题出在在我一开始定义模型时 我把 return model 这句话弄丢了。从而导致出现了...原创 2018-08-26 10:39:07 · 7752 阅读 · 0 评论 -
spyder 出现 An error ocurred while starting the kernel 问题 解决方法
我在使用spyder 运行keras 程序时每次都出现了An error ocurred while starting the kernel 。最后查了好几种方法,才解决了。下面我就分享一下。第一种方法:在终端中输入spyder --reset,重置spyder配置,问题得以解决。这种方法我试了一下 发现问题没有解决。各位可以试试看。也许你的可以解决。第二种方法在终端输入了c...原创 2018-08-02 09:59:37 · 52966 阅读 · 19 评论 -
[Keras] 使用Keras调用多GPU时出现无法保存模型的解决方法
在使用keras 的并行多路GPU时出现了模型无法保存,在使用单个GPU时运行完全没有问题。运行出现can't pickle的问题随后在网上找了很多解决方法。下面列举一些我实验成功的方法。方法一class ParallelModelCheckpoint(ModelCheckpoint): def __init__(self,model,filepath, monitor='val_loss...原创 2018-07-03 16:20:41 · 2214 阅读 · 2 评论 -
keras 和tensorflow 运行ParallelModel出现Variable batch_normalization_1
在使用多GPU运行相关程序时出现了下面问题。ValueError: Variable batch_normalization_1/moving_mean/biased already exists, disallowed. Did you mean to set reuse=True in VarScope? Originally defined at:在网上找了一下 这是由于keras 和ten...原创 2018-06-30 17:07:00 · 2050 阅读 · 0 评论 -
keras从1.0更新到2.0出现的问题。 Update your `Model` call to the Keras 2 API: `Model(inputs=
在更新了keras达到2.1.4之后运行原来的代码出现了下面的错误。虽然不影响整个运行结果。但是对于强迫症来说看着特别难受。运行出现下面的问题其实出现这个问题也很容易解决。把原来的input改为inputs.可以参考网页keras更新这个里面介绍了一些这个问题。...原创 2018-06-29 22:24:09 · 3634 阅读 · 0 评论 -
基于深度学习的图像分割和keras 的实现
图像分割 深度学习尤其是卷积神经网络在图像处理的许多领域都获得了很大的成功,在分类,识别等方面都已经获得了很大的成功.在深度学习把图像分类和识别达到极致之后。深度学习开始在图像分割方面开始进行收割了。图像分割的意思就是对于图像中每个像素进行分类操作。 提到深度学习用在图像分割上不得不提的一篇文章是FCN 这篇文章。这算一个开创性的文章吧。整个文章采用的模型是基于VGG16的模型。原创 2018-03-25 17:15:39 · 10112 阅读 · 0 评论 -
FCN于反卷积(Deconvolution)、上采样(UpSampling)
最近在研究图像分割方面的内容,图像分割是对图像进行像素进行分类。在这里提到分类,首先想到了 使用深度学习的方法进行分类操作的。 在这里以前的一些传统的方法进行的操作,这里就不细说了。这样使用了深度学习的方法,提到使用深度学习的方法进行图像分割的话。必须要提到 Fully Convolutional Networks for Semantic Segmentation。这篇文章。这也算是深度学原创 2018-03-01 20:02:52 · 57757 阅读 · 16 评论 -
卷积神经网络(CNN)的一些简单思考
上篇CNN入门在宏观上介绍了CNN的卷积和运算。但是由于我不是数学专业的,所以对卷积的理解还是不是很深刻。因为想到为什么对图像进行卷积操作可以学习到图像的特征,这其中到底什么原因。Pooling的作用是什么,还有CNN的网络结构必须要是像 Yann LeCun提出的那样。Convolutions,Pooling,Full Connection这样交替吗?还有卷积网络有那些改进。所以我才有了这篇文章...原创 2018-02-27 20:17:23 · 1261 阅读 · 0 评论 -
(SPP-net)Spatial Pyramid Pooling in deep convolutional networks for visual recognition
这篇文章很有意思,它解决了在卷积神经网络中一直存在的一个问题,那就是输入图片的大小必须统一大小的问题,在一开始训练和检验的图片大小一般都是固定的,这里有两个方法的原因,第一卷积作用,第二就是最后输入的全连接的图片大小需要进行分类操作。第一个问题基本不算问题,因为在进行滑动窗口操作的卷积操作对于图片大小基本没有什么要求,第二个问题才是最主要的问题,因为当你输出的大小不一样,在后面的softmax,S原创 2018-01-28 15:40:40 · 247 阅读 · 0 评论 -
keras 运行出现 TypeError: softmax() got an unexpected keyword argument 'axis'.
今天在运行一个简单的keras 程序时出现了 TypeError: softmax() got an unexpected keyword argument 'axis'. 第一个办法:网上一看是keras 版本和tendorflow 版本出现了问题。建议 tensorflow 版本是1.4.0 pip install tensorflow-gpu==1.4.0keras 版本...原创 2018-08-21 14:46:59 · 6393 阅读 · 2 评论 -
dcm2nii.多张dcm 文件转换成nii等其他格式的存储。
在进行医学图像处理的时候往往遇到多张dcm 文件合并成一个文件。或者要使用3D数据进行相关的处理。但是我在网上找了一个往往都是一些软件直接进行了操作。这样对于程序来说不是很友好。最后我自己写了一个基于python的小程序这样可以直接使用了。 import SimpleITK as sitk reader = sitk.ImageSeriesReader() dicom_...原创 2018-09-12 10:30:44 · 14885 阅读 · 29 评论 -
deep_learning_object_detection 深度学习目标检测学习
整个基于深度学习的目标检测 学习过程都可以按这个进程来学习。图片出处deep_learning_object_detection。大家可以去看看里面有更为详细的介绍。还有上面文献的下载链接。...原创 2019-01-22 15:51:30 · 626 阅读 · 0 评论 -
Linux下Anaconda的安装并且安装keras和tensorflow
实验室最近买了一个服务器,又需要重新安装 keras 和tensorflow 之类的深度学习框架。所以我就简单的写一下安装的步骤。实验室里安装的是linux 18.08.里面的python 默认版本是2.7的。但是现在基本都是3.6.x的版本了。因此我选择了anaconda 来进行操作。先下载对应版本的ancaconda .到官网下载对应的版本文件:anaconda 官网下载好了以...原创 2019-01-05 17:07:03 · 2020 阅读 · 0 评论 -
keras 中获取张量 tensor 的维度大小。
在进行keras 网络计算时,有时候需要获取输入张量的维度来定义自己的层。但是由于keras是一个封闭的接口。因此在调用由于是张量不能直接用numpy 里的A.shape()。这样的形式来获取。这里需要调用一下keras 作为后端的方式来获取。当我们想要操作时第一时间就想到直接用 shape ()函数。其实keras 中真的有shape()这个函数。shape(x)返回一个张量的符号shape...原创 2019-01-04 16:36:25 · 16467 阅读 · 0 评论 -
语义分割(semantic segmentation)、实例分割(instance segmetation)、全景分割(panoptic segmentation)
在读一些论文是经常出现上面几个概念。语义分割、实例分割。以及新出的全景分割。对于上面几个概念可以使用coco数据集中的一张图来进行分辨上面的this work表示的就是实例分割(instance segmentation).要理清这几个概念,需要明白图像分割中的things 和 stuff的区别。图像中内容可以按照有没有固定形状分成things和stuff.其中 人车等有固定形状的物体属...原创 2018-12-24 21:00:48 · 13746 阅读 · 2 评论 -
pytorch 中的view 参数使用方法
最近在看pytorch 代码时发现了使用了view 这个参数。一开始还不知道是啥。查看之后发现原来跟 keras 中的flat和reshape 类似。class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 6, 5) ...原创 2018-12-19 17:18:42 · 3350 阅读 · 1 评论