深度学习的学习

By Lart, 2019-01-13

pixels.com

入门深度学习已经好几个月了, 从去年的暑假下旬, 也就是8月后半段, 从吴恩达的机器学习课程入门, 之后历经UFLDL, CS231n算是正式进入了深度学习的大门, github上整理的笔记, 也已经有好几十个文档了, 基础的深度学习的知识也已经具备, 之后也看了好多的论文, 分类网络, 目标检测网路, 语义分割网络, 在深度学习图像处理这一块, 更多的是图像分类任务推动了其他任务的进一步改进与发展.

对于深度学习的理解, 目前最直观的感受就是使用深度网络在特定任务的真值的监督约束下, 不断地逼近拟合出训练集在这种任务下的特征映射关系, 也就是所谓的深度网络的普适近似定理.

但是对于深度学习黑盒子, 这样的深度网络的使用还是大多数处于模糊混沌的状态, 目前的学习, 只能在其他学者的已有架构的基础上进行改进, 但是所谓改进, 更多的是随机性的尝试, 没有什么指导性的方针.

就拿目前遇到的一个问题而言, 在处理高分辨率的输入图像时候, (接下来是个人理解), 由于图像太大, 直接缩小送入网络, 会导致很多细节信息的丢失, 不利于最终结果的预测. 所以在考虑实际的操作的时候, 就会想到一个切块的操作, 这里就收到了U-Net的启发, 它当初是为了处理高分辨率的医学图像来进行开发的, 它的输入是切片过得, 一块一块的送入网络中, 为了更多的考虑最后的边缘的拼接的时候的不连贯的问题, 送入网络的输入是要比实际输出的要大的, 相当于有重复的切块采样, 网路中更是使用的valid方式的卷积, 每卷一次就会少一圈像素, 所以最后的输出正好只保留了实际需要的那部分区域的大小, 最后可以直接拼接起来. 但是对于输入和输出一样大的时候, 就像我们现在的网络, 以及其他在应用U-Net结构的时候, 多是一样大的, 这个时候, 如果要多重复裁一部分, 那么输出就得考虑怎么裁剪了. 这是一个问题, 而且真值也得考虑剪裁的问题, 因为写代码的时候, 是都要送到DataLoader类里的, 要保证计算损失的时候, 二者是一样大的.

目前的结果中, 拼接后的效果和直接放缩图像输入网络后的结果, 拿真值观察比对, 可以看出, 各有优劣, 前者确实细节上有些优势, 保留的还不错, 但是整体来看, 拼接痕迹很重, 而且有些区域连贯性不好, 会出现漏洞, 而后者更多的像是很多细节被更大范围的显著性区域主体所淹没. 看着这样的结果, 最直接的想法就是是否可以将二者直接融合呢? 以获得二者所同时具有的优势? 兼顾全局与局部细节?

想法很好, 可是该如何去做呢? 这个时候, 对于深度学习的那种迷茫的感觉就出来了, 如何下手呢? 缺乏更多的直观的理性的知识, 感觉目前所建立的知识体系, 更多的是建立在感性的基础上, 虽然想是可以尝试再搭一个小的融合模块网络, 可是细节又有很多, 如何融合这两个可以说基于不同尺度的信息, 如何利用这些基于不同位置的信息, 对于前者, 直接的, 上卷积网络, 差别就是直接放一起还是先对局部切块的输出卷积操作后再放一起进行整体预测. 对于后者是直接拼接, 还是可以参考@代季峰的RFCN中提到的那种位置敏感得分图的结构, 不同位置的特征图可以放到不同的通道上?

都是需要思考的问题.

关于图像分割任务的一些思考

因为有这样的常识, 保留的相关信息越多, 对于结果的预测也越好.

在语义分割这个任务里, 很多的深度网络架构, 都在尽可能的获得更多的上下文信息, 充分利用全局和局部的信息, 利用更多的低级空间结构信息和高级的更抽象的语义信息, 进而实现更为细致, 更为连续的边缘和显著性目标检测, 这里有一些手段, 就是为了实现这样的目的, 比如利用先前网络的特征输出, 结合多级, 多尺度特征, 比如利用CRF后处理, 进一步利用概率图模型, 综合考量特征图之间的统计特性, 使得相似的像素预测更为趋于一致的预测, 还有利用RNN(这个和毕设有关)来代替CRF进行像素之间的关联性信息的利用, 效果也很好, 还有利用扩张卷积来在一定程度上代替池化操作, 在不需要降低分辨率的基础上, 扩大感受野, 获得更多的上下文信息. 同时, 为了更多的考量, 上采样这部分也是一个关键的操作, 因为在恢复空间分辨率和提取更为高层的语义信息间存在着一定的联系, 因为深度网络的架构中, 池化操作和大步长卷积的操作, 对于提取更为抽象的更为高层的信息来说是有一定的必要的, 正所谓, 浓缩的都是精华…

快要睡觉了

深度学习感觉…很随意的样子, 缺少实际的可靠地理论性的知识体系, 这让我有时候真的很不开心, 学习如此迷茫…