2019-02-24 20:18:22 fjsd155 阅读数 1095
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    40480 人正在学习 去看看 唐宇迪

本文转自:使用深度学习进行生存分析

相关资源

原论文地址:here

论文中使用的深度生存分析库:DeepSurv,是基于Theano 和 Lasagne库实现的,支持训练网络模型,预测等功能。

考虑到DeepSurv库中存在着一些错误以及未实现的功能,博主使用目前主流的深度学习框架Tensorflow实现了深度生存分析库:TFDeepSurv。欢迎有兴趣的同学Star和Fork,指出错误,相互交流!

TFDeepSurv简介:基于tensorflow的深度生存分析框架,经过模拟数据和真实数据的测试。支持生存分析数据事件时间出现ties的建模,自定义神经网络结构及参数,可视化训练过程,输入训练数据特征重要性分析,病人生存函数的估计。还有支持使用科学的贝叶斯超参数优化方法来调整网络参数。

博主有空会给出TFDeepSurv各个功能实现参考的源论文!

前言

本文主要的目的为了介绍深度学习是如何运用到生存分析中的,包括其基本原理。然后介绍目前实现了利用深度学习进行生存分析的开源软件包 DeepSurv,它实现了生存分析模型,使用Deep Neural Networks来训练学习参数,并且还实现了风险人群的划分。

还是一样的,强烈建议你去读一下原论文DeepSurv: Personalized Treatment Recommender System Using A Cox Proportional Hazards Deep Neural Network.,相信你会收获很大,至少比看我的好一万倍。写这篇文章的动力有几点,一是不想自己学过的知识什么很快就忘了,感觉记录一下比较重要(博主比较蠢),当作是看论文的笔记吧;二是看完文章之后,觉得我们平时还是要多思考,论文里的思想其实也不是完全原创的,神经网络不是,生存分析cox比例风险模型1972年就有了,但是别人就能洞察到使用深度学习的思想去学习COX模型中需要估计的参数,个人觉得这是一个有科学素养的人才能做到的吧;三是博主在为了PR收集生存分析资料的时候,深感不易,这方面的中文的介绍很少,所以为了方便大家的交流讨论,还是写一下吧。

博主知识水平有限,不吝赐教!欢迎提出错误!

问题来源

假设你已经知道了生存分析主要是在做哪些工作。我们都知道在进行生存分析的时候,有这么几种方法:

  • 参数法:当生存时间符合某一个已知分布时,知道了分布函数,那么剩下的就是求解该分布的参数了。
  • 非参数法:用KM估计去求生存函数,作生存曲线,这里面不涉及任何参数,主要思想就是频率代替概率。
  • 半参数法:也就是使用COX比例风险模型来求生存函数,这个也是本文的重点。

关于COX比例风险模型是怎么提出的,这个是1972年前辈的智慧,本文不打算介绍,这里给出一个链接:hazard-curve,可以帮助你快速了解生存分析和生存函数以及风险曲线的数学定义,然后你就可以去看COX比例风险模型是怎么提出来的了。确保自己懂了COX比例风险模型的原理,可以问自己几个问题:比例两个字是体现在那个地方?为什么风险函数会是h(t)=h0(t)eθxh(t) = h_0(t)\cdot e^{\theta \cdot x} 这种形式?

COX比例风险模型,直接给出了风险函数的数学表达式(假设你已经学会了懂了其背后的数学原理):
h(t)=h0(t)eθxh(t) = h_0(t)\cdot e^{\theta \cdot x}
其中,θ=(θ1,,θm)θ=(θ_1,…,θ_m)是线性模型的系数或未知参数,h0(t)h_0 (t)是基准风险函数。eθxe^{θx}描述了患者观察到回归变量xx时的死亡风险比例。对∀i∈N,θ_i>0,表示该协变量是危险因素,越大使生存时间越短。 ∀i∈N,θ_i < 0表示该协变量是保护因素,越大使得生存时间越长。

现在需要去求取参数θ\theta,其思想就是偏似然估计法。假定在某死亡时间没有重复事件发生,设t1t2tkt_1<t_2<⋯<t_k 表示在观察数据中有kk个不同的死亡事件。设xix_i的观察协变量。设R(ti)R(t_i)时间仍然处于观察研究的个体集合。则风险函数h(t)h(t)的参数估计可以用以下偏似然概率估计方法:
pl(θ)=i=1keθxijR(ti)eθxjpl(\theta) = \prod_{i=1}^{k}\frac{e^{\theta x_i}}{\sum_{j \in R(t_i)}e^{\theta x_j}}

其中qi=eθxijR(ti)eθxjq_i = \frac{e^{\theta x_i}}{\sum_{j \in R(t_i)}e^{\theta x_j}}个死亡个体,其死亡条件概率。其实通俗一点的解释就是:我已经观察到时间tit_i了,现在有一群人,我可以利用风险公式h(ti)h(t_i) 求出这群人每一个个体的死亡风险,其中有一个人恰好在tit_i时刻发生了死亡事件,那么这个人的死亡条件概率就写为:
qi=hi(ti)jR(ti)hj(ti)=eθxijR(ti)eθxjq_i = \frac{h_i(t_i)}{\sum_{j \in R(t_i)}h_j(t_i)} = \frac{e^{\theta x_i}}{\sum_{j \in R(t_i)}e^{\theta x_j}}

现在就是利用偏似然估计的思想,将所有死亡时刻t1,t2,...,tkt_1,t_2,...,t_k的死亡条件概率相乘,求取是这个乘积最大的参数值θ\theta,把它作为估计量。

注意COX模型给出的前提:假设协变量的总影响可以表示为它们的线性组合。例如,我评价一个人的颜值vv,你告诉我颜值可以这么计算v=2x1+9x2+1.3x3v=2x_1 + 9x_2+1.3x_3x1,x2,x3x_1,x_2,x_3表示眼睛大小,脸型,鼻子高度(当然,这里是打个比方QAQ)。事实上,很多情况下,协变量的线性组合不能准确衡量它们对某个目标值的影响! 关于这点例子很多(例XOR问题),就不一一介绍了。

问题根源就是在θx\theta \cdot x,我们把它记为rr。那么我们可不可以把它表示为非线性组合呢?但是好像它的数学表达式公式不太好给出,无论我们怎么表示rr,其目标都是使pl(θ)pl(\theta)最小。这个时候,神经网络的作用就显现出来了,它对于表示一组协变量的非线性组合简直太擅长了!假设网络的输入为一组协变量x=(x1,x2,...,xn)x=(x_1,x_2,...,x_n),那么网络的输出表示为r^w,b\hat r_{w,b}为神经网络的参数。然后,损失函数就很显而易见了:
L=log(pl(r^w,b))=log(i=1ker^w,bijR(ti)er^w,bj)L = -log(pl(\hat r_{w,b})) = -log(\prod_{i=1}^{k}\frac{e^{\hat r_{w,b}^i}}{\sum_{j \in R(t_i)}e^{\hat r_{w,b}^j}})
h(x)h(x)表示为网络的输出,那么上式可以化简为:
L=i=1k[hi(x)log(jR(ti)ehj(x))]L = -\sum_{i=1}^{k}[h_i(x)-log(\sum_{j\in R(t_i)}e^{h_j(x)})]
剩下的工作就交给神经网络去训练样本学习到这样的非线性组合&lt;r^w,b=f(x,θ)&lt;\hat r_{w,b}=f(x,\theta)。其实思路还是很好懂的嘛。

DeepSurv网络框架实现

DeepSurv 的工作就是实现了上面介绍的所有内容(最重要的是损失函数),还实现了一些其他的功能(比如划分风险人群)。下面介绍一下这个框架的实现。

这里是DeepSurv类下面定义的方法:

class DeepSurv:
    def __init__()
    # 计算Loss function值
    def _negative_log_likelihood()
    # 得到当前网络的loss值同时更新网络参数
    def _get_loss_updates()
    # 得到可调用的函数:训练集上,网络进行一次正向和反向传播
    #                验证集上,一遍正向传播,计算Loss function值
    def _get_train_valid_fn()
    # 计算评估指标:C Index
    def get_concordance_index()
    def _standardize_x()
    def prepare_data()
    def train()
    def to_json()
    def save_model()
    def save_weights()
    def load_weights()
    # 得到网络的输出值
    def risk()
    def predict_risk()
    # 划分风险人群
    def recommend_treatment()
    def plot_risk_surface()

初始化函数:初始化网络结构,并且记录一些参数

def __init__(self, n_in,
    learning_rate, hidden_layers_sizes = None,
    lr_decay = 0.0, momentum = 0.9,
    L2_reg = 0.0, L1_reg = 0.0,
    activation = "rectify",
    dropout = None,
    batch_norm = False,
    standardize = False,
    ):

按照给定hidden_layers_sizes的搭建指定的网络结构:
输入层:network = lasagne.layers.InputLayer(shape=(None,n_in),input_var = self.X)
隐藏层:network = lasagne.layers.DenseLayer(network, num_units = n_layer, nonlinearity activation_fn, W = W_init)(参数决定该层是否dropout或者BatchNorm)
输出层:network = lasagne.layers.DenseLayer(network, num_units = 1, nonlinearity = lasagne.nonlinearities.linear, W = lasagne.init.GlorotUniform())

训练函数:在给定的训练数据上进行训练,并且在验证集上进行评估

def train(self,
    train_data, valid_data= None,
    n_epochs = 500,
    validation_frequency = 250,
    patience = 2000, improvement_threshold = 0.99999, patience_increase = 2,
    logger = None,
    update_fn = lasagne.updates.nesterov_momentum,
    verbose = True,
    **kwargs):

训练函数里的内容就是通用的一套了:

  • 准备好训练数据
  • 每个epoch迭代训练网络
  • 计算Loss,反向传播更新网络参数

具体地,源代码里还有很多细节的地方,自己亲身学习一下还不错啊!

原博客作者另外还写了一篇实战的总结:【论文笔记】Deep Survival: A Deep Cox Proportional Hazards Network ,值得借鉴。

2017-12-12 16:42:39 u010821666 阅读数 20609
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    40480 人正在学习 去看看 唐宇迪

整理了部分近两年深度学习结合SLAM的一些研究成果(参考知乎帖子https://www.zhihu.com/question/66006923 和泡泡机器人公众号,附上论文链接和已找到的源代码/数据集链接,大多简单看了一下摘要。仅为自己学习所用,确实翻译得很烂…………

1. 深度学习跟SLAM的结合点

深度学习和slam的结合是近几年比较热的一个研究方向,具体的研究方向,我简单分为三块,如下。


1.1 深度学习结合SLAM的三个方向

用深度学习方法替换传统SLAM中的一个/几个模块

  • 特征提取,特征匹配,提高特征点稳定性,提取点线面等不同层级的特征点。
  • 深度估计
  • 位姿估计
  • 重定位
  • 其他

在传统SLAM之上加入语义信息

  • 图像语义分割
  • 语义地图构建

端到端的SLAM

其实端到端就不能算是SLAM问题了吧,SLAM是同步定位与地图构建,端到端是输入image输出action,没有定位和建图。
- 机器人自主导航(深度强化学习)等



1.2 相关的部分论文整理

1.2.1 用深度学习方法替换传统SLAM中的一个/几个模块。

替换多个模块
  • Tateno K, Tombari F, Laina I, et al. CNN-SLAM: Real-time dense monocular SLAM with learned depth prediction[J]. arXiv preprint arXiv:1704.03489, 2017.
    * 在有预测深度下的实时单目稠密SLAM*
    (输入:彩色图 LSD-SLAM NYUDv2数据集 ICL-NUIM数据集)
    摘要:
    基于使用卷积神经网络CNN进行深度预测的最新进展,本文研究了深度神经网络生成的深度预测地图,如何用于精确而稠密的重建,我们提出了一种直接法单目SLAM中得到的深度度量,如何与CNN预测得到的稠密深度地图自然地融合在一起的方法。我们的融合方法在图像定位这一单目SLAM方法效果不佳的方面有优势。比如说低纹理区域,反之亦然。我们证明了深度预测在估计重建的绝对尺度中应用可以克服单目SLAM的主要限制。最后,我们提出了高效融合稠密SLAM中单帧得到的语义标签的方法 ,从单视角中得到了语义连贯的场景重建。基于两个参照数据集的评测结果表明我们的方法有良好的鲁棒性和准确性。
    这里写图片描述
    注:
    NYUDv2数据集 数据集下载链接
    用于室内场景语义分割的RGB-D图像数据集,来自Kinect,1449对已标注的RGB-Depth图像,40万张未标注图像。
    ICL-NUIM数据集 数据集下载链接
    包含两个场景的图像:起居室和办公室 与TUM RGB-D 数据集的评测工具兼容。帧率30,每段大概几十秒,所以一共几千张图吧。

  • Li R, Wang S, Long Z, et al. UnDeepVO: Monocular Visual Odometry through Unsupervised Deep Learning[J]. arXiv preprint arXiv:1709.06841, 2017.
    UnDeepVO:使用无监督深度学习的单目视觉里程计
    (双目图像训练数据集 单目图像测试 KITTI数据集)
    摘要:
    我们在本文中提出了一种名叫UnDeepVO的新型的单目视觉里程计系统,UnDeepVO可以估计单目相机的6自由度位姿以及使用深度神经网络估计单目视角的深度。UnDeepVO有两个显著的特性:一个是无监督深度学习方法,另一个是绝对尺度回复。特别的,我们使用了双目的图像对训练UnDeepVO来恢复尺度,然后使用连续的单目图像进行了测试。因此,UnDeepVO是一个单目系统。训练网络的损失函数是基于时间和空间稠密信息定义的。图一是系统的概览图。基于KITTI数据集的实验表明UnDeepVO在位姿估计方面,准确性高于其他的单目VO方法。
    这里写图片描述


特征相关(特征提取匹配等)
  • DeTone D, Malisiewicz T, Rabinovich A. Toward Geometric Deep SLAM[J]. arXiv preprint arXiv:1707.07410, 2017.
    面向几何的深度SLAM
    (两个CNN,角点提取和匹配 ,实时,单核CPU30FPS)
    摘要:
    我们展示了一个使用了两个深度卷积神经网络的点跟踪系统。第一个网络,MagicPoint,提取单张图像的显著性2D点。这些提取出来的点可以用作SLAM,因为他们在图像中相互独立且均匀分布。我们比较了这个网络和传统的点检测方法,发现两者在图像有噪声存在是存在明显的性能差异。当检测点是几何稳定的时候,转换估计会变得更简单,我们设计了第二个网络,名为MagicWarp,它对MagicPoint的输出,一系列点图像对进行操作,然后估计跟输入有关的单应性。这种转换引擎和传统方法的不同在于它只是用点的定位,而没有使用局部点的描述子。两个网络都使用了简单的合成数据进行训练,不需要安规的外部相机建立ground truth和先进的图形渲染流水线。系统速度快且轻量级,可以在单核CPU上达到30帧每秒的速度。
    这里写图片描述

  • Lecun Y. Stereo matching by training a convolutional neural network to compare image patches[M]. JMLR.org, 2016.
    通过训练比较图像块的卷积神经网络进行立体匹配
    (输入:左右图 KITTI数据集 Middlebury数据集)
    摘要:
    我们提出了一种从已校正过的图像对中提取深度信息的方法。我们的方法侧重于大多数stereo算法的第一步:匹配开销计算。我们通过使用卷积神经网络从小图像块中学习相似性度量来解决这个问题。训练采用有监督方式,使用相似和不相似的成对图像块构建了一个二分类数据集。我们研究了用于此项任务的两种网络架构:一个针对速度进行调整,另一个针对精度。卷积神经网络的输出被用来初始化stereo立体匹配开销。在这之后,进行一系列后处理操作:基于交叉的开销聚合,半全局匹配,左右图一致性检验,亚像素增强,中值滤波和双边滤波。我们在KITTI2012,KITTI2015数据集,Middlebury双目数据集上评测了自己的方法,结果显示我们的方法优于此三个数据集上的其他同类方法。

这里写图片描述
注:Middlebury Stereo Datasets
数据集下载链接


  • Kwang Moo Yi, Eduard Trulls, Vincent Lepetit, et al. LIFT: Learned Invariant Feature Transform[J]. 2016:467-483.
    LIFT:通过学习生成的不变特征变换
    (比SIFT特征更加稠密,已开源)
    摘要:
    我们提出了一种新型的深度网络架构,实现了完整的特征点处理流水线:检测,方向估计和特征描述。虽然之前的工作已经分别成功地解决了这几个问题,但我们展示了如何将这三个问题结合起来,通知保持端到端的可微性。我们证明了我们的深度流水线方法,性能优于许多基准数据集的state-of-the-art的方法,且不需要再训练。

这里写图片描述
这里写图片描述
左边是SIFT,右边是LIFT
源代码 https://github.com/cvlab-epfl/LIFT



位姿估计,深度估计
  • Clark R, Wang S, Wen H, et al. VINet: Visual-Inertial Odometry as a Sequence-to-Sequence Learning Problem[C]//AAAI. 2017: 3995-4001.
    VINet:将视觉-惯性里程计看做一个序列到序列的学习问题(……这个怎么翻)
    (使用了图像和IMU数据,CNN和RNN)
    摘要:
    本文中我们提出了一种使用视觉和惯性数据做运动估计的,流形上的?序列到序列的学习方法。在中间特征表示这一级别上融合数据的视觉-惯性里程计进行端到端训练,是我们已知的最好的方法(?)。我们的方法相比传统方法有很多优势。具体来说,它不需要相机和IMU数据之间进行冗长乏味的人工同步,也同样不需要IMU和相机数据之间进行人工标定。另一个优点是我们的模型可以自然且巧妙地结合特定区域的信息,可以显著减少漂移。在标定数据准确的情况下,我们的方法跟传统的state-of-the-art的方法效果旗鼓相当,在存在标定和同步误差的情况下,我们的方法可以通过训练达到比传统方法更好的的效果。
    这里写图片描述

  • Garg R, Vijay K B G, Carneiro G, et al. Unsupervised CNN for Single View Depth Estimation: Geometry to the Rescue[J]. 2016:740-756.
    用于单视角深度估计的无监督CNN:??
    (KITTI数据集 无监督学习)
    摘要:
    当前深度卷积神经网络的一个显著缺点就是需要使用大量人工标注的数据来进行训练。本项研究中,我们提出了一种无监督的框架来使用深度卷积神经网络进行单视角深度预测,不需要先行训练和标注过的ground-truth深度。我们通过一种类似于自编码的方式训练网络。训练过程中,我们认为有着微小且已知的相机运动的源图像和目的图像是一个stereo对。我们训练卷积编码器来预测源图像的深度图。为此,我们显式构造了一个使用预测深度和已知的视角间位移的目的图像的inverse warp反变换?,用于重建源图像。重建过程中的光测误差是编码器的重建损失。以这样的方法获取训练数据比同类系统要简单得多,不需要人工标注和深度传感器与相机之间的标定。在KITTI数据集上,执行单视角深度估计任务时,我们的网络,在保证相同性能情况下,训练时间比其他state-of-the-art的有监督方法少一半。

这里写图片描述


  • Xu J, Ranftl, René, Koltun V. Accurate Optical Flow via Direct Cost Volume Processing[J]. 2017.
    光流法不太关注,这个名字也是翻译不出来…………
    英文摘要:
    We present an optical flow estimation approach that operates on the full four-dimensional cost volume. This direct
    approach shares the structural benefits of leading stereo matching pipelines, which are known to yield high accuracy. To this day, such approaches have been considered impractical due to the size of the cost volume. We show that the full four-dimensional cost volume can be constructed in a fraction of a second due to its regularity. We then exploit this regularity further by adapting semi-global matching to the four-dimensional setting. This yields a pipeline that achieves significantly higher accuracy than state-of-the-art optical flow methods while being faster than most. Our approach outperforms all published general-purpose optical flow methods on both Sintel and KITTI 2015 benchmarks.
    这里写图片描述

  • Liao Y, Huang L, Wang Y, et al. Parse Geometry from a Line: Monocular Depth Estimation with Partial Laser Observation[J]. 2017.
    一条线上的解析几何:使用部分激光观测的单目深度估计
    (输入:单目图像和2D激光距离数据 NYUDv2数据集 KITTI数据集)
    激光的也不太关注。
    Abstract— Many standard robotic platforms are equipped with at least a fixed 2D laser range finder and a monocular camera. Although those platforms do not have sensors for 3D depth sensing capability, knowledge of depth is an essential part in many robotics activities. Therefore, recently, there is an increasing interest in depth estimation using monocular images. As this task is inherently ambiguous, the data-driven estimated depth might be unreliable in robotics applications. In this paper, we have attempted to improve the precision of monocular
    depth estimation by introducing 2D planar observation from the remaining laser range finder without extra cost. Specifically, we construct a dense reference map from the sparse laser range data, redefining the depth estimation task as estimating the distance between the real and the reference depth. To solve the problem, we construct a novel residual of residual neural network, and tightly combine the classification and regression losses for continuous depth estimation. Experimental results suggest that our method achieves considerable promotion compared to the state-of-the-art methods on both NYUD2 and KITTI, validating the effectiveness of our method on leveraging the additional sensory information. We further demonstrate the potential usage of our method in obstacle avoidance where our methodology provides comprehensive depth information compared to the solution using monocular camera or 2D laser range finder alone。
    这里写图片描述
    这里写图片描述

  • Zhou T, Brown M, Snavely N, et al. Unsupervised learning of depth and ego-motion from video[J]. arXiv preprint arXiv:1704.07813, 2017.
    视频深度和自运动的无监督学习 SFM-learner
    (训练使用未标注单目视频片段,已开源)
    摘要:我们提出了一个用非结构化视频序列进行单目深度和相机运动估计的无监督学习网络。和最近的几项研究相同的是,我们使用了端到端的方法,用视图合成作为监督信号,不同的是,我们的方法是完全无监督的,只需要少量的单目视频序列即可训练。我们的方法使用了单视角深度和多视角位姿两个网络,使用计算出的深度和位姿将附近视图变换为目标视图生成损失函数(?)。因此,训练过程中网络通过损失函数连接在一起,但是测试时,两个网络可以独立用于应用。KITTI数据集上的经验评测证明我们的方法有以下优点:1)与使用ground-truth位姿或深度进行训练的有监督方法相比,在估计单目深度是效果相当。2)与有可比较输入设置的现有SLAM系统相比,位姿估计性能良好。
    这里写图片描述
    源代码 https://github.com/tinghuiz/SfMLearner

  • Vijayanarasimhan S, Ricco S, Schmid C, et al. SfM-Net: Learning of Structure and Motion from Video[J]. arXiv preprint arXiv:1704.07804, 2017.
    SFM-Net:从视频中学习结构与运动
    SfM-Net是SfM-learner的升级版
    摘要:
    我们提出了SfM-Net,一个geometry-aware几何敏感?的神经网络用于视频中的运动估计,此网络分解了基于场景和对象深度的帧间像素运动,相机运动,3D对象旋转和平移。给定一个帧的序列,SfM-Net预测深度,分割,相机和刚体运动,然后将这些转换为稠密帧间运动场(光流),可微的扭曲帧最后做像素匹配和反向传播。模型可以通过不同程度的监督方法进行训练:1)自监督的投影光测误差(photometric error)(完全无监督)的方式,2)用自运动(相机运动)进行有监督训练的方式,3)使用深度(比如说RGBD传感器提供的)进行有监督训练的方式。SfM-Net提取了有意义的深度估计并成功地估计了帧间的相机运动和评议。它还能在没有监督信息提供的情况下,成功分割出场景中的运动物体。
    这里写图片描述
    这里写图片描述



重定位

可能重定位用深度学习比较难做吧,毕竟是个偏几何的问题,暂时不太关注
- Wu J, Ma L, Hu X. Delving deeper into convolutional neural networks for camera relocalization[C]// IEEE International Conference on Robotics and Automation. IEEE, 2017.
- Alex Kendall, Matthew Grimes, Roberto Cipolla. PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization[J]. 2015, 31:2938-2946.
PoseNet:用于实时六自由度相机重定位的卷积神经网络。
PoseNet是2015年的研究成果,算是SLAM跟深度学习结合的比较有开创性的成果。
这里写图片描述
源代码 https://github.com/alexgkendall/caffe-posenet


另有一篇很有意思的论文
- Vo N, Jacobs N, Hays J. Revisiting IM2GPS in the Deep Learning Era[J]. 2017.
深度学习时代图像-GPS的重定位
思路很有意思,使用一张照片在全世界范围内进行定位。
这里写图片描述

2019-05-11 20:20:09 H_hei 阅读数 241
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    40480 人正在学习 去看看 唐宇迪

dataScience

闲话 ?:每个人都应在学习的方向一定是需要经过各方面的考虑、斟酌、权衡的。

这里旨在分享一些我在学习的过程中所收集使用到的一些书籍和资料,其中包括 数据挖掘 、算法、数据分析、机器学习、深度学习、深度学习框架、和一些大牛的笔记以及老师们的讲义供大家学习。

github地址https://github.com/mmkliuzhiliang/dataScience

这方面的学习实则为交叉学科下面分类仅仅供参考

机器学习

数据挖掘

数据分析

深度学习

python

链接:https://pan.baidu.com/s/1t_kwkidQ1dLALhQq3sZjtg
提取码:ew4a

插入一张图谱 供大家参考
在这里插入图片描述


如有侵权,请及时联系、谢谢(。・_・。)ノI’m sorry~

2019-03-31 18:13:05 u012343685 阅读数 1674
  • 机器学习&深度学习系统实战!

    购买课程后,可扫码进入学习群,获取唐宇迪老师答疑 数学原理推导与案例实战紧密结合,由机器学习经典算法过度到深度学习的世界,结合深度学习两大主流框架Caffe与Tensorflow,选择经典项目实战人脸检测与验证码识别。原理推导,形象解读,案例实战缺一不可!具体课程内容涉及回归算法原理推导、决策树与随机森林、实战样本不均衡数据解决方案、支持向量机、Xgboost集成算法、神经网络基础、神经网络整体架构、卷积神经网络、深度学习框架--Tensorflow实战、案例实战--验证码识别、案例实战--人脸检测。 专属会员卡优惠链接:http://edu.csdn.net/lecturer/1079

    40480 人正在学习 去看看 唐宇迪

深度学习的情感分析

基于机器学习与深度学习方法的情感分析算法实现与对比,包括决策树,贝叶斯,KNN, SVM ,MLP, CNN, LSTM实现

预处理:

1.语料
电影评论,训练集合20000(正向10000,负向10000)
电影评论,测试集合20000(正向3000,负向3000)
2、语料处理
使用jieba进行分词
3、输入向量化
使用预先训练的wordvector.bin文件进行向量化
对于传统机器学习算法,要求输入的是N维向量, 采用句子向量求和平均
对于CNN,RNN深度学习算法,要求输入的是N*M维向量,分别对应查找并生成向量

———————————————————————————————————

深度神经网络(DNN)模型与前向传播算法

从感知机到神经网络

感知机是线性变化+激活函数,只有一个神经元

 

DNN是感知机扩展:

加入了隐藏层,隐藏层可以有多层,增强模型的表达能力;

输出层的神经元也可以不止一个输出,可以有多个输出,这样模型可以灵活的应用于分类回归,以及其他的机器学习领域比如降维和聚类等。

DNN的基本结构

上一节我们了解了神经网络基于感知机的扩展,而DNN可以理解为有很多隐藏层的神经网络。这个很多其实也没有什么度量标准, 多层神经网络和深度神经网络DNN其实也是指的一个东西,当然,DNN有时也叫做多层感知机(Multi-Layer perceptron,MLP), 名字实在是多。后面我们讲到的神经网络都默认为DNN。

从DNN按不同层的位置划分,DNN内部的神经网络层可以分为三类,输入层,隐藏层和输出层,一般来说第一层是输入层,最后一层是输出层,而中间的层数都是隐藏层。从小的局部模型来说,还是和感知机一样,即一个线性关系z=∑wixi+bz加上一个激活函数σ(z)

DNN前向传播算法数学原理

DNN前向传播算法

 

DNN前向传播算法小结

单独看DNN前向传播算法,似乎没有什么大用处,而且这一大堆的矩阵WW,偏倚向量bb对应的参数怎么获得呢?怎么得到最优的矩阵WW,偏倚向量bb呢?这个我们在讲DNN的反向传播算法时再讲。而理解反向传播算法的前提就是理解DNN的模型与前向传播算法。

————————————————————————————

深度神经网络(DNN)反向传播算法(BP)

 

DNN反向传播算法要解决的问题

对DNN的损失函数用梯度下降法进行迭代优化求极小值的过程即为我们的反向传播算法。

DNN反向传播算法的基本思路

梯度下降,修改权重,反向传播

————————————————————————————

深度神经网络(DNN)损失函数和激活函数的选择

 均方差损失函数+Sigmoid激活函数的问题

均方差+Sigmoid的反向传播算法中,每一层向前递推都要乘以σ′(z)σ′(z),得到梯度变化值。Sigmoid的这个曲线意味着在大多数时候,我们的梯度变化值很小,导致我们的W,bW,b更新到极值的速度较慢,也就是我们的算法收敛速度较慢。

使用交叉熵损失函数+Sigmoid激活函数改进DNN算法收敛速度

使用对数似然损失函数和softmax激活函数进行DNN分类输出

比如假设我们有一个三个类别的分类问题,这样我们的DNN输出层应该有三个神经元,假设第一个神经元对应类别一,第二个对应类别二,第三个对应类别三,这样我们期望的输出应该是(1,0,0),(0,1,0)和(0,0,1)这三种。即样本真实类别对应的神经元输出应该无限接近或者等于1,而非改样本真实输出对应的神经元的输出应该无限接近或者等于0。或者说,我们希望输出层的神经元对应的输出是若干个概率值,这若干个概率值即我们DNN模型对于输入值对于各类别的输出预测,同时为满足概率模型,这若干个概率值之和应该等于1。

梯度爆炸梯度消失与ReLU激活函数

学习DNN,大家一定听说过梯度爆炸和梯度消失两个词。尤其是梯度消失,是限制DNN与深度学习的一个关键障碍,目前也没有完全攻克。

简单理解,就是在反向传播的算法过程中,由于我们使用了是矩阵求导的链式法则,有一大串连乘,如果连乘的数字在每层都是小于1的,则梯度越往前乘越小,导致梯度消失,而如果连乘的数字在每层都是大于1的,则梯度越往前乘越大,导致梯度爆炸。

DNN其他激活函数

DNN损失函数和激活函数小结

重要的点有:1)如果使用sigmoid激活函数,则交叉熵损失函数一般肯定比均方差损失函数好。2)如果是DNN用于分类,则一般在输出层使用softmax激活函数和对数似然损失函数。3)ReLU激活函数对梯度消失问题有一定程度的解决,尤其是在CNN模型中。

————————————————————————————

深度神经网络(DNN)的正则化

 和普通的机器学习算法一样,DNN也会遇到过拟合的问题,需要考虑泛化,这里我们就对DNN的正则化方法做一个总结。

DNN的L1&L2正则化

DNN通过dropout 正则化

DNN通过增强数据集正则化

————————————————————————————

卷积神经网络(CNN)模型结构

CNN的基本结构

初识卷积

CNN中的卷积层

 对于卷积后的输出,一般会通过ReLU激活函数,将输出的张量中的小于0的位置对应的元素值都变为0。

CNN中的池化层

————————————————————————————

卷积神经网络(CNN)前向传播算法

回顾CNN的结构

CNN输入层前向传播到卷积层

隐藏层前向传播到卷积层

 和上一节唯一的区别仅仅在于,这里的输入是隐藏层来的,而不是我们输入的原始图片样本形成的矩阵。

隐藏层前向传播到池化层

隐藏层前向传播到全连接层

————————————————————————————

卷积神经网络(CNN)反向传播算法

CNN的反向传播算法思想

————————————————————————————

循环神经网络(RNN)模型与前向反向传播算法

————————————————————————————

LSTM模型与前向反向传播算法

从RNN到LSTM

————————————————————————————

————————————————————————————

————————————————————————————

————————————————————————————

————————————————————————————

———————————————————————————————————

TextCNN:

在“卷积神经⽹络”⼀章中我们探究了如何使⽤⼆维卷积神经⽹络来处理⼆维图像数据。在之前的语⾔模型和⽂本分类任务中,我们将⽂本数据看作是只有⼀个维度的时间序列,并很⾃然地使⽤循环神经⽹络来表征这样的数据。其实,我们也可以将⽂本当作⼀维图像,从而可以⽤⼀维卷积神经⽹络来捕捉临近词之间的关联。本节将介绍将卷积神经⽹络应⽤到⽂本分析的开创性⼯作之⼀:textCNN

textCNN模型主要使⽤了⼀维卷积层可以二维多通道和时序最⼤池化层。假设输⼊的⽂本序列由n个词组成,每个词⽤d维的词向量表⽰。那么输⼊样本的宽为n,⾼为1,输⼊通道数为d。textCNN的计算主要分为以下⼏步。

1. 定义多个⼀维卷积核,并使⽤这些卷积核对输⼊分别做卷积计算。宽度不同的卷积核可能会捕捉到不同个数的相邻词的相关性。

2. 对输出的所有通道分别做时序最⼤池化挑出最大特征可以异步实现,再将这些通道的池化输出值连结送入全连接层

3. 通过全连接层将连结后的向量变换为有关各类别的输出。这⼀步可以使⽤Dropout层应对模型过拟合。通过softmax做二分类或多分类。

• 可以使⽤⼀维卷积来表征时序数据。

• 多输⼊通道的⼀维互相关运算可以看作单输⼊通道的⼆维互相关运算。

• 时序最⼤池化层的输⼊在各个通道上的时间步数可以不同。

• textCNN主要使⽤了⼀维卷积层和时序最⼤池化层。

———————————————————————————————————

深度学习总结

阅读数 26956

没有更多推荐了,返回首页