2015-10-28 14:17:57 zhang0311 阅读数 10895
  • 3小时掌握深度学习(经典算法+实战案例)

    深度学习视频教程,包括经典算法与具体案例实战,该系列教程旨在帮助同学们掌握深度学习基础知识点,对复杂的神经网络模型进行通俗解读,逐步迈向深度学习两大核心模型-卷积与递归神经网络。使用当下主流深度学习框架进行实战任务,实例演示如何使用tensorflow进行建模任务。课程风格通俗易懂,接地气的方法带你走进深度学习的世界。

    4688 人正在学习 去看看 CSDN讲师

1.       深度学习

        深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。深度学习典型应用为图像识别和语音识别。(由于本人不是深度学习专业人士,对深度学习理论知识不多介绍,说多了就班门弄斧了,后面主要介绍下这些深度学习算法如何进行并行化设计和优化)

2.       CPU+GPU异构协同计算简介

         近年来,计算机图形处理器(GPU,GraphicsProcess Unit)正在以大大超过摩尔定律的速度高速发展(大约每隔半年 GPU 的性能增加一倍),远远超过了CPU 的发展速度。

         CPU+GPU异构协同计算模式(图1),利用CPU进行复杂逻辑和事务处理等串行计算,利用 GPU 完成大规模并行计算,即可以各尽其能,充分发挥计算系统的处理能力。

图1 CPU+GPU异构体系结构

        目前,主流的GPU具有强大的计算能力和内存带宽,如图2所示,无论性能还是内存带宽,均远大于同代的CPU。对于GPU, Gflop/$和Gflops/w均高于CPU。

图2 GPU计算能力

3.       深度学习中的CPU+GPU集群架构

        CPU+GPU集群工作模式(图3),每个节点内采用CPU+GPU异构模式,并且每个节点可以配置多块GPU卡。节点间采用高速InfiniBand网络互连,速度可以达到双向56Gb/s,实测双向5GB/s。后端采用并行文件系统。采用数据划分、任务划分的方式对应用进行并行化,适用于大规模数据并行计算。

图3 CPU+GPU集群架构

4.       利用GPU加速深度学习算法


4.1.       单GPU并行

图4 单GPU计算流程

        针对每次训练数据,模型内计算通过多次GPU 内核的调用完成计算。权重W值一直存在GPU内存中,直到所有训练数据计算完毕之后回传到系统内存中。Data为图像或语音数据。

4.2.       多GPU卡并行

       多GPU并行计算时,各GPU有自己独立的内存,卡之间的并行属于分布式计算模式。针对深度学习算法,采用多GPU卡计算可以采用两种并行方法:数据并行和模型并行。

4.2.1.       数据并行

       数据并行是指不同的GPU计算不同的训练数据,即把训练数据划分给不同的GPU进行分别计算,由于训练是逐步训练的,后一个训练数据的计算需要前一个训练数据更新的W,数据并行改变了这个计算顺序,多GPU计算需要进行W的互相通信,满足训练的特点,使训练可以收敛。

       数据并行如图5所示,多GPU训练不同的数据,每训练一次需要同步W,使得后面的训练始终为最新的W。

图5 数据并行

数据并行的特点:

1)        优点

            a)        实现比较容易,也比较容易扩展

            b)        只需要进行W的通信,模型内的数据不需要通信

2)        缺点

           a)        当模型较大时,GPU内存无法满足存储要求,无法完成计算

        根据多GPU卡之间的W通信,下面介绍两种通信方法:主从模式和令牌环模式。

1)        主从模式

       主从模式:选择一个进程或线程作为主进程或线程,各个GPU把每次训练得到的ΔW发给主进程或线程,主进程或线程进行W更新,然后再发送给GPU,GPU再进行下一个数据的训练。如图6所示。

图6 主从模式

2)        令牌环模式

       令牌环模式:每个GPU把自己训练得到的ΔW更新到W上,并且发送到下一个GPU,保证令牌环上的W始终为最新的W。如图7所示。

图7 令牌环模式

两种模式对比如表1

表1 主从模式和令牌环模式对比

模式

优点

缺点

主从模式

收敛速度更快

GPU计算需要等待,影响GPU计算;主进程或线程压力较大

令牌环模式

GPU计算不需要等待通信,性能更好

通信速度影响收敛的速度

4.2.2.       模型并行

        模型并行是指多个GPU同时计算同一个训练数据,多个GPU对模型内的数据进行划分,如图8所示。Kernel计算和通信流程如图9所示,在一次训练数据多层计算过程中,每个GPU内核计算之后需要互相交换数据才能进行下一次的计算。

图8 模型并行

图9 模型并行:多GPU计算内核和通信示意图

模型并行特点:

1)        优点

           a)        可以处理大模型的情况

2)        缺点

           a)        需要更频繁的通信,增加通信压力

           b)        实现难度较大

4.3.       GPU集群并行

          GPU集群并行模式即为多GPU并行中各种并行模式的扩展,如表2所示。节点间采用InfiniBand通信,节点间的GPU通过RMDA通信,节点内多GPU之间采用P2P通信。

表2 GPU集群并行模式

模式

节点间

节点内

特点

模式1

令牌环

单一模式的缺点放大

模式2

主从

模式3

模型并行

模式4

令牌环

主从

结合各种模式的有点,避免某一模式的缺点放大

模式5

主从

令牌环

模式6

令牌环

模型并行

模式7

主从

模型并行

4.4.       性能分享

4.4.1.       基于GPU集群的Caffe并行加速

图10 Caffe性能

8节点GPU服务器,2 K20mGPU/节点,56Gb/s InfiniBand网络,Lustre并行文件系统

4.4.2.       基于GPU集群的DNN并行加速

图11 DNN测试性能

4节点GPU服务器,4 K20mGPU/节点,56Gb/s InfiniBand网络

5.       CPU+FPGA协同计算加速线上计算

        相对于训练计算,线上识别的计算是小而众多的任务计算,每次请求的计算比较小,但请求的任务数十分庞大,GPU计算虽然获得很好的性能,但功耗仍然是个严峻的问题。

        目前主流的FPGA卡功耗只有主流GPU的十分之一,性能相差2-3倍,FPGA相对于GPU具有更高的GFlops/W。

利用FPGA解决线上识别计算可以采用分布式+FPGA计算的模式,如图12所示,上层可以采用Hadoop或Spark调度,底层利用FPGA进行计算。

图12 分布式计算+FPGA计算

        目前,FPGA已开始支持高级语言,如AlteraFPGA支持OpenCL,Xilinx FPGA支持HLS,这对程序员利用FPGA开发减低了难度。这些新平台的支持还有很多问题,也许后面会支持的越来越好。

 

备注:由于对深度学习算法了解比较肤浅,以上内容难免无误,请大家理解并提出修改意见。

 QQ:331526010

Email:zhang03_11@163.com

 

 

 

2019-11-07 21:17:38 weixin_42795611 阅读数 245
  • 3小时掌握深度学习(经典算法+实战案例)

    深度学习视频教程,包括经典算法与具体案例实战,该系列教程旨在帮助同学们掌握深度学习基础知识点,对复杂的神经网络模型进行通俗解读,逐步迈向深度学习两大核心模型-卷积与递归神经网络。使用当下主流深度学习框架进行实战任务,实例演示如何使用tensorflow进行建模任务。课程风格通俗易懂,接地气的方法带你走进深度学习的世界。

    4688 人正在学习 去看看 CSDN讲师

这段时间一直在找工作,经过两个月的面试经验,感觉比我三年学到的东西都多,在这里做一下总结。这四个岗位其实都是相同的,问的问题也都大差不差,主要从传统的图像算法和深度学习进行提问。

1.传统图像算法问题

  1. 图像预处理有哪些方法?
  2. 图像增强有哪些方法?
  3. 直方图均衡介绍。
  4. 膨胀和腐蚀含义?开运算和闭运算先后顺序。
  5. 传统的边缘检测算子有哪些?
  6. Canny算法介绍。如何极大值抑制?(重点必问)
  7. hog和haar介绍。
  8. 高斯滤波器原理。
  9. 如何对图像进行90度旋转?(笔试题)
  10. 给你一个图如何提取想要的目标。
    (这是一个开放性的题目,需要对传统图像算法有一定的理解 )

2.机器学习问题

  1. 列举常用的机器学习算法。(说的越多问的越多)
  2. 决策树原理介绍。预剪枝和后剪枝处理简介。
  3. 决策树与Adaboost区别。
  4. SVM介绍,如何理解最大支持向量,核函数作用。
  5. 贝叶斯分类器简绍。
  6. sigmoid和relu区别和优点,以及运用场合。
  7. 逻辑回归介绍。(有一个小公司变态到让我手写逻辑回归推理)
  8. k-means和knn介绍,并说明两者区别。
  9. 无监督学习和有监督学习区别并列举各有哪些算法。(笔试题)
  10. bp神经网络介绍。

3.深度学习问题

  1. ResNet网络介绍,与其余网络区别,手写ResNet残差块。(重点必问)
  2. 激活函数有哪些及作用。为什么使用relu不使用sigmoid?
  3. 梯度消失和梯度爆炸阐述,并讲解如何解决。
  4. 如何知道网络训练有没有过拟合,并如何解决。(重点必问)
  5. 分割网络有哪些?各有什么特点。
  6. 检测网络有哪些,各有什么特点。
  7. 阐述Faster-Rcnn,YOLO和SSD网络,并介绍各有什么优缺点。
  8. OpenCV和Halcon是加分项。(我对这块接触的不多,每次问道这个问题我都懵圈了,但是一定要表达一下自己自学过,只是没有在项目中用到过。面试官就不会为难你了)
  9. 计算网络参数量以及特征图输出计算公式。
  10. RNN和LSTM 介绍。
  11. 除了CNN网络还了解哪些网络?
  12. BN层如何对数据处理。作用是什么?

4.总结

以上都是我在面试的时候被问到的所有问题,当然除了那些BAT或者大公司问的会更细致之外,以上问题基本上可以应付 很多公司了。当然面试的时候能回答出这些基础问题不是最重要的,最重要的是你简历上写的项目,但凡写在简历上的东西一定 要弄懂,否则卡壳会很丢分。我在找工作最初只是想把简历做的漂亮一些,没想到被问得无地自容。还有一些笔试题基本上都是C语言基础,只要刷牛客网题目就行,编程题刷剑指offer就行。数据链表一定要会。冒泡,快排等排序算法一定要会。

2019-10-23 11:30:23 weixin_44569689 阅读数 75
  • 3小时掌握深度学习(经典算法+实战案例)

    深度学习视频教程,包括经典算法与具体案例实战,该系列教程旨在帮助同学们掌握深度学习基础知识点,对复杂的神经网络模型进行通俗解读,逐步迈向深度学习两大核心模型-卷积与递归神经网络。使用当下主流深度学习框架进行实战任务,实例演示如何使用tensorflow进行建模任务。课程风格通俗易懂,接地气的方法带你走进深度学习的世界。

    4688 人正在学习 去看看 CSDN讲师

前言:
深度学习是包含在机器学习里的一个特殊领域,他是基于人工神经网络的一种特征学习算法的领域。自卷积神经网络现世以来深度学习开始迅速发展,相比于机器学习它更适合处理超高维特征。现如今深度学习在图像、语音、自然语言方面颇有建树。能运用好深度学习算法去处理实际的事是很多人的一个目标,这里我想分享下我进入深度学习邻域后的一些见解。
这里我主要说的训练一个深度学习算法的基础或前提。主要以python编程语言,pycharm编程软件,anaconda编程环境,目标检测的深度学习算法为线来展开讲解。目标检测在我的训练自己的yolov3算法中,以yolo算法为例实现检测,训练。

搭建环境

  • 环境匹配
    python是一款简便与速度兼备得编程语言,anaconda是python的一个发行版本,其包含了python在内的多个科学包及其依赖项,所以一般直接装anaconda就ok了,但是如果想安装一个新的python环境需要考虑兼容性问题,图1是anaconda与python的版本兼容性:
    图1
    这里要做深度学习那么还需要一个深度学习框架,像这种框架的话有很多比如theano、pytorch、tensorflow(keras)等等,theano是一个比较老牌而且非常稳定的框架,由于太底层在目前来说用的人会比较少,大部分是国企;pytorch是基于Python的科学计算包,在实现和构建深层神经网络体系结构充分展现了便捷性和速度,内有GPU加持,更加适用于科研;tensorflow其实跟theano也差不多,比较底层,但是2.0版本的tensorflow结合了keras,keras是一个以tensorflow为基础的高级框架,这跟pytorch的便捷性有的一拼,这也使得tensorflow具有灵活,便捷等特性,所以受到了广大顾客朋友们的喜爱,该框架更加适用于深度学习产品开发;
    这里要叙述的是关于tensorflow的相关配置说明。它做深度学习时有个非常大的亮点就是在做图像任务时cpu和gpu可以无缝衔接处理,所以有个tensorflow-gpu版【前提是你计算机有gpu】,下载tensorflow-gpu有些小小麻烦,就是需要配置CUDA,当然如果麻烦可以直接下载tensorflow就好。图2是tensorflow、python与CUDA的版本兼容性:
    图2
    下面是CUDA和你电脑支持的驱动版本匹配,需要大于表中驱动版本才能安装对应的CUDA。查看自己电脑CUDA的驱动版本在路径:控制面板=>硬件和声音=>NVIDIA控制面板=>左下角的系统信息,这可以看到你电脑所装显卡的所有信息,在组件这一栏会给你推荐最新的CUDA版本。
    在这里插入图片描述
    一般安装tensorflow后需要充分发挥其强大优势则建议安装keras,然而keras和tensorflow也会有版本上的一些兼容问题,下面这张长图可做为安装tensorflow和keras的一个参考:
    在这里插入图片描述
  • 下载
    anaconda官网下载页面:https://www.anaconda.com/distribution/
    anaconda官网早期版本:https://repo.anaconda.com/archive/
    tensorflow官网安装:https://www.tensorflow.org/install
    NVIDIA驱动程序下载:https://www.nvidia.com/Download/index.aspx?lang=en-us
    NVIDIA驱动程序早期版本下载:https://www.nvidia.com/Download/Find.aspx?lang=en-us
    CUDA官网安装指南:https://docs.nvidia.com/cuda/#installation-guides
    CUDA官网下载:https://developer.nvidia.com/cuda-toolkit-archive
    CUDNN官网下载:https://docs.nvidia.com/deeplearning/sdk/cudnn-install/index.html#installwindows
    pycharm官网下载页面:https://www.jetbrains.com/pycharm/download/
    pycharm早期版:https://www.jetbrains.com/pycharm/download/other.html
  • 注意
    在做深度学习项目或是学习、创新一个比较大的算法网络时,可能需要到github上去寻找一些算法网络,但这有个痛点就是有一定的环境限制,这就会导致版本冲突的一个风险。所以在这里我推荐写这样一个网络时独立在anaconda创一个新的环境,这个环境可以在anaconda/envs找到,相当于他是一个新领域,不受电脑上其他环境影响。如果第二次想创建一个新的环境,可以直接把第一次创建的环境clone创建第二个独立环境就好,在根据版本需要进行添删。

了解软件

  • 介绍两款标图像数据的程序软件:labelimg、labelme
    labelimg是用矩形框出目标图像,以及打好标签,他主要适用于目标检测比如Fast(er)-RCNN、SSD、YOLO等等;(labelimg安装教程
    labelme是用折线框出目标图像轮廓,以及对应目标打标签,它主要适用于图像分割,比如FCN、U-net【语义分割】、mask-rcnn、yolact【实列分割】等等。(labelme安装教程
  • 介绍两款python编程软件:pycharm,jupyter_notebook
    pycharm是款非常强大的软件,它里面可以设置其他python环境,或继承conda环境,他可以在环境设置里面下载其他库或包,当然有时会报安装不了,里面还可以创建多种文件如下:
    图3
    它主要适用于查看和修改代码,里面有大量源代码可供学习理解,编译一次性运行代码能够cmd调用,非常省事。缺点就是运行完后变量不能保存不适合局部操作或理解代码。
    jupyter_notebook是anaconda下的一个区块编程软件,功能与pycharm有互补之处,可以区块运行代码保存变量,可供下次使用。他主要适用于工程模块化的编写,比如做特征工程,数据处理等等很不错。缺点就是代码不好查看。

了解数据集

深度学习数据集有很多平台,比如MNISTMS-COCOImageNetPASCAL VOCcifar-10(100)等等,下面我简单其中的三个深度学习用得较多的三个数据集。
MNIST可以说是一个非常常见的数据集,里面包含70000张图片被分成了10个组,有60000张训练集数据和10000张测试集数据,用于在实际数据中尝试学习技术和识别模式【图像识别,分类,比如vggnet、Resnet、Googlenet等等】。
MS-COCO是一个大型的、丰富的目标检测,图像分割和字幕数据集,里面包含 330000张图像、80个对象类别。
PASCAL VOC主要有两个版本分别是VOC2007,VOC2012,目前图片数据总共约33000张,检测,分割,人体布局,动作识别。

制作数据集

  • labelImg制作数据集

    下面是描述使用labelimg标注目标并打上标签图4
    labelimg标注完保存的是一个xml文件,已经是voc数据格式了,所以可以直接用voc格式数据去做目标检测。也可以转coco数据集格式,这里是voc数据格式转coco数据格式

  • labelme制作数据集
    labelme标注工具和labelImg标注工具界面基本相同,不同的点是创建标注框,这里是点线标出目标物,标出的目标物是一个json文件,这里要转换成coco形式的json文件即把所有用于训练的图或用于验证以及用于测试的图片放入同一文件下,在这里将所有json文件转为coco格式的一个json文件。点击这里获得转换代码

从环境到数据制作就到这了,后面我会推出一个图像分割深度学习算法的流程。
有什么好的建议或疑惑可以多多交流,希望这篇文章对读者深度学习理解有帮助。

2019-07-17 23:12:32 demongwc 阅读数 365
  • 3小时掌握深度学习(经典算法+实战案例)

    深度学习视频教程,包括经典算法与具体案例实战,该系列教程旨在帮助同学们掌握深度学习基础知识点,对复杂的神经网络模型进行通俗解读,逐步迈向深度学习两大核心模型-卷积与递归神经网络。使用当下主流深度学习框架进行实战任务,实例演示如何使用tensorflow进行建模任务。课程风格通俗易懂,接地气的方法带你走进深度学习的世界。

    4688 人正在学习 去看看 CSDN讲师

本文课题构建一个深度学习算法实验平台,是为颈动脉医疗图像深度学习识别斑块提供服务的。制作一个集成的深度学习工具包,颈动脉医疗图像的深度学习代码都可以在本平台上运行,平台基于TensorFlow、Caffe、CNTK、Keras、Theano等多种深度学习框架并可以部署在同一硬件环境,因此可以测试颈动脉医疗图像深度学习在不同深度学习框架上的准确率和效率。

深度学习在语音、图像识别,自然语言处理等多个领域都取得了可观的成果,无论是大众和媒体的目光,或是产业界和资本,都在疯狂地追逐着“深度学习”这一概念。深度学习框架的不断涌现,深度学习的热潮正在掀起。

对于上述问题,该文尝试构建一个深度学习算法实验平台,旨在为深度学习用户提供一站式服务,为其在深度学习领域的探索降低门槛并提供流畅的体验。在现今软件配置和管理部署复杂的背景下,以简化应用部署,方便扩展,平台基于Docker容器技术,设计实现一种轻量级的应用平台。

关键词:Docker,深度学习,实验平台

 

点击此处下载文档和源码

2014-06-07 10:46:19 zhuangxiaobin 阅读数 2434
  • 3小时掌握深度学习(经典算法+实战案例)

    深度学习视频教程,包括经典算法与具体案例实战,该系列教程旨在帮助同学们掌握深度学习基础知识点,对复杂的神经网络模型进行通俗解读,逐步迈向深度学习两大核心模型-卷积与递归神经网络。使用当下主流深度学习框架进行实战任务,实例演示如何使用tensorflow进行建模任务。课程风格通俗易懂,接地气的方法带你走进深度学习的世界。

    4688 人正在学习 去看看 CSDN讲师

这是利用数学算法,进行高难度图像处理的一个例子。事实上,图像处理的数学算法,已经发展到令人叹为观止的地步。

Scriptol列出了几种神奇的图像处理算法,让我们一起来看一下。

一、像素图生成向量图的算法

数字时代早期的图片,分辨率很低。尤其是一些电子游戏的图片,放大后就是一个个像素方块。Depixelizing算法可以让低分辨率的像素图转化为高质量的向量图。

二、黑白图片的着色算法

让老照片自动变成彩色的算法

三、消除阴影的算法

不留痕迹地去掉照片上某件东西的阴影的算法

四、HDR照片的算法

  

 

 

 

所谓"HDR照片",就是扩大亮部与暗部的对比效果,亮的地方变得非常亮,暗的地方变得非常暗,亮暗部的细节都很明显。

实现HDR的软件有很多,这里推荐G'MIC。它是GIMP图像编辑软件的一个插件,代码全部开源。

五、消除杂物的算法

所谓"消除杂物",就是在照片上划出一块区域,然后用背景自动填补。Resynthesizer可以做到这一点,它也是GIMP的一个插件。

六、自动合成照片的算法

根据一张草图,选择原始照片,然后把它们合成在一起,生成新照片。这是清华大学的科研成果

七、美容算法

自动对容貌进行"美化"的算法

 

转载自:http://www.ruanyifeng.com/blog/2011/08/amazing_algorithms_of_image_processing.html

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