2018-01-16 12:08:12 u011956004 阅读数 8793
  • 转深度学习实战教程

    玩转深度学习视频培训课程,详细讲解深度学习的原理和利用深度学习框架TensorFlow进行项目实战。课程通过Kaggle竞赛平台的Titanic问题讲解TensorFlow的基本用法以及问题处理的常用技巧,讲解深度学习图像领域的卷积神经网络CNN和多个经典的网络架构、CNN的应用,讲解自然语言处理领域的RNN、LSTM以及它们的多种变种结构,构建语言模型和对话机器人,介绍损失函数和优化深度学习算法在TensorFlow中的实现。

    2987 人正在学习 去看看 王而川

编译CTPN、crnn、sceneReco深度学习图片文字定位识别遇到的坑

图片文字定位:https://github.com/tianzhi0549/CTPN
图片文字识别: https://github.com/bgshih/crnn
综合两者并支持中文:https://github.com/bear63/sceneReco

硬件要求

  1. 我使用的是Ubuntu 14.04.5 LTS(因为crnn作者的这句话The software has only been tested on Ubuntu 14.04 (x64). CUDA-enabled GPUs are required. )其它版本的Ubuntu按理说也是可以的,不过遇到的坑可能会有些不一样.
  2. 编译CTPN可以没有显卡(没有显卡至少需要5G的内存,虚拟机也可以)
  3. 编译crnn和sceneReco项目必须要有能支持cuda的NVIDIA显卡
  4. 虚拟机中无法识别显卡驱动,所以虚拟机中可以编译运行CTPN,无法编译crnn和sceneReco

首先需要安装Nvidia显卡驱动和cuda,cudnn(我选择的是cuda7.0,cuDNN V3,因为CTPN的README.md有说明,作者是基于这个来测试的)

但是,如果想顺利编译运行sceneReco的话,我强烈建议选择更高版本的的cuda(但是此时的cuDNN会不支持,因为编译caffe会出错,同时需要更多的显存,按照作者的说法是至少5G显存),因为编译sceneReco需要依赖pytorch,而pytorch管方只支持cuda7.5及以上的版本,我最开始使用的cuda7.5测试的,所以能安装pytorch,但是为了看看使用cuDNN的效果(作者的说法是使用cuDNN后,只需要1.5G显存),降到了cuda7.0

cuda和cuDNN下载网址(https://developer.nvidia.com/)
cuda下载
cudnn下载

下载cudnn需要注册账号
我最开始尝试使用cuda7.5和cuDNN6.0,不过编译caffe会报错(https://github.com/tianzhi0549/CTPN/issues/75)
而且CTPN作者说了这句话(Note: To use CUDNN, you need to download CUDNN from NVIDIA’s official website, and install it >in advance. The CUDNN version we use is 3.0.)
根据(https://github.com/tianzhi0549/CTPN/issues/8) 来说,不用cuDNN貌似影响也不是很大,只是会消耗更多的GPU Memory

我这里是事先下好cuda7.0,cuDNN V3的离线包,再进行安装的
安装cuda(参考官方教程)

sudo dpkg -i cuda-repo-ubuntu1404-7-0-local_7.0-28_amd64.deb
sudo apt-get update
sudo apt-get install cuda

安装cudnn

tar xvzf cudnn-7.0-linux-x64-v3.0.8-prod.tgz
sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

编译运行CTPN遇到的坑:

错误1

编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
解决方案:
sudo apt-get install python-numpy

错误2

运行python tools/demo.py时
ImportError: No module named cv2
apt-get install python-opencv

错误3

运行python tools/demo.py时
ImportError: No module named skimage.io
sudo apt-get install python-skimage

错误4

运行python tools/demo.py时
ImportError: No module named google.protobuf.internal
pip install protobuf
如果没有安装pip
sudo apt-get install python-pip

错误5

运行python tools/demo.py时
ImportError: No module named yaml
sudo apt-get install python-yaml

编译crnn遇到的坑

安装Torch遇到的坑

官方教程http://torch.ch/docs/getting-started.html
我使用TORCH_LUA_VERSION=LUA50 ./install.sh安装的Torch,

经过我的测试:
使用TORCH_LUA_VERSION=LUA52 ./install.shTORCH_LUA_VERSION=LUA51 ./install.sh安装Torch时,都可以成功编译crnn,但是demo无法运行起来,应该是老版本的thpp无法兼容新版Lua的问题.

安装依赖库遇到的坑

这里由下面的坑,使用crnn提供的install_all.sh脚本一键安装时,thpp和fblualib会安装失败,所以这里建议分开来安装folly,fbthrift,thpp,fblualib.
由于我的系统是Ubuntu14,所以根据crnn提供的安装脚本(https://github.com/bgshih/crnn/blob/master/install_all.sh) 来看,我需要安装以下版本的依赖库:

git clone -b v0.35.0  --depth 1 https://github.com/facebook/folly
git clone -b v0.24.0  --depth 1 https://github.com/facebook/fbthrift
git clone -b v1.0 https://github.com/facebook/thpp
git clone -b v1.0 https://github.com/facebook/fblualib

以及以下库:

sudo apt-get update && sudo apt-get install -y \
    git \
    curl \
    wget \
    g++ \
    automake \
    autoconf \
    autoconf-archive \
    libtool \
    libboost-all-dev \
    libevent-dev \
    libdouble-conversion-dev \
    libgoogle-glog-dev \
    libgflags-dev \
    liblz4-dev \
    liblzma-dev \
    libsnappy-dev \
    make \
    zlib1g-dev \
    binutils-dev \
    libjemalloc-dev \
    $extra_packages \
    flex \
    bison \
    libkrb5-dev \
    libsasl2-dev \
    libnuma-dev \
    pkg-config \
    libssl-dev \
    libedit-dev \
    libmatio-dev \
    libpython-dev \
    libpython3-dev \
    python-numpy

由于我的是Ubuntu14,所以上面的$extra_packages值为libiberty-dev
即:apt-get install -y libiberty-dev

安装folly和fbthrift的时候没有出现什么问题,直接调用folly和fbthrift的安装脚本即可.

安装thpp遇到的问题

注意由于上面我下载的是v1.0(git clone -b v1.0 https://github.com/facebook/thpp)的thpp,而这个版本的thpp的/thpp/thpp/build.sh安装脚本有点小问题,如下(最新版的thpp已经修复,不过使用最新版的会遇到其它问题,我没找到解决方案):

#!/bin/bash -e
#
#  Copyright (c) 2014, Facebook, Inc.
#  All rights reserved.
#
#  This source code is licensed under the BSD-style license found in the
#  LICENSE file in the root directory of this source tree. An additional grant
#  of patent rights can be found in the PATENTS file in the same directory.
#
#
set -o pipefail

if [[ ! -r ./Tensor.h ]]; then
  echo "Please run from the thpp subdirectory." >&2
  exit 1
fi

rm -rf gtest-1.7.0 gtest-1.7.0.zip
curl -JLO https://googletest.googlecode.com/files/gtest-1.7.0.zip
if [[ $(sha1sum -b gtest-1.7.0.zip | cut -d' ' -f1) != \
      'f85f6d2481e2c6c4a18539e391aa4ea8ab0394af' ]]; then
  echo "Invalid gtest-1.7.0.zip file" >&2
  exit 1
fi
unzip gtest-1.7.0.zip

# Build in a separate directory
mkdir -p build
cd build

# Configure
cmake ..

# Make
make

# Run tests
ctest

# Install
sudo make install

注意:这里是从(https://googletest.googlecode.com/files/gtest-1.7.0.zip) 上下载的googletest,实际上这个地址的googletest已经不存在了,我在网上找了一个,下载地址在这里,使用sha1sum -b gtest-1.7.0.zip命令测试以后,等于'f85f6d2481e2c6c4a18539e391aa4ea8ab0394af',与上述shell脚本给出的值一致,说明是能用的.
接下来就不能直接调用build.sh安装了,我们只需要按照build.sh脚本中给出的步骤,手动安装thpp即可.

安装fblualib也只需要调用安装脚本即可
最后记得安装LMDB:apt-get install liblmdb-dev

新版Torch接口变动

编译的过程中可能会遇到以下问题:

这是由于新版的Torch7改了某些方法增加了参数(THTensor_方法)导致的:
解决方案如下:
https://github.com/facebook/thpp/commit/d9f982c68d7522db9e77e50d135eaa86d84bab85#diff-22577c98d557ea9eca089e8e84d7f98d
没错:就是修改thpp/detail/TensorGeneric.h文件,把缺少的参数补上整数1即可

运行th demo.lua

错误:module ‘bit’ not found:No LuaRocks module found for bit
(https://github.com/deepmind/torch-hdf5/issues/57)

luarocks install luabitop
ldconfig

运行sceneReco的demo

ImportError: No module named caffe
sceneReco/CTPN/目录缺少caffe,在该目录放入CTPN项目中的caffe,并编译(参考CTPN的caffe的编译)
也可以使用最新版本的caffe,不过会遇到这个问题(https://github.com/bear63/sceneReco/issues/20)
CTPN作者的说法是:

If you may want to use other Caffe instead of the one we ship for some reasons, you need to migrate the following layers into the Caffe.
- Reverse
- Transpose
- Lstm

ImportError: No module named torch
原因:(https://github.com/bear63/sceneReco/issues/26)
由于我的电脑运行pip install --upgrade torchvision会失败(https://github.com/pytorch/pytorch/issues/566)
所以这里参考官方安装教程(http://pytorch.org)
根据自己的配置进行选择,我选择的是Linux->pip->Python2.7->cuda7.5所以官方生成的安装命令如下

pip install http://download.pytorch.org/whl/cu75/torch-0.3.0.post4-cp27-cp27mu-linux_x86_64.whl 
pip install torchvision   

# if the above command does not work, then you have python 2.7 UCS2, use this command 
pip install http://download.pytorch.org/whl/cu75/torch-0.3.0.post4-cp27-cp27m-linux_x86_64.whl

由于第一句命令下载速度实在太慢,建议先用迅雷下载好这个文件(http://download.pytorch.org/whl/cu75/torch-0.3.0.post4-cp27-cp27mu-linux_x86_64.whl) 注意Python版本和cuda的版本,的然后依次执行

pip install torch-0.3.0.post4-cp27-cp27mu-linux_x86_64.whl  
pip install torchvision 

注意:这里如果是先用迅雷先下好的话,不要修改文件名,否者安装的时候会报错,参考(https://www.cnblogs.com/nice-forever/p/5371906.html)

ImportError: No module named lmdb
sudo pip install lmdb

ImportError: No module named mahotas
sudo pip install mahotas

ImportError: No module named cv2
sudo pip install opencv-python

ImportError: No module named skimage.io
sudo pip install scikit-image

ImportError: No module named google.protobuf.internal
pip install protobuf

ImportError: No module named _caffe
make pycaffe

RuntimeError: dimension out of range (expected to be in range of [-2, 1], but got 2)
解决方案(https://github.com/bear63/sceneReco/issues/24)

2019-03-27 21:56:46 dollyisme 阅读数 144
  • 转深度学习实战教程

    玩转深度学习视频培训课程,详细讲解深度学习的原理和利用深度学习框架TensorFlow进行项目实战。课程通过Kaggle竞赛平台的Titanic问题讲解TensorFlow的基本用法以及问题处理的常用技巧,讲解深度学习图像领域的卷积神经网络CNN和多个经典的网络架构、CNN的应用,讲解自然语言处理领域的RNN、LSTM以及它们的多种变种结构,构建语言模型和对话机器人,介绍损失函数和优化深度学习算法在TensorFlow中的实现。

    2987 人正在学习 去看看 王而川

一、特征提取

作者放弃了边缘检测和腐蚀膨胀,通过聚类、分割、去噪、池化等步骤,得到了比较良 好的文字部分的特征。这些特征甚至可以直接输入到文字识别模型中进行识别,而不用做额外的处理。

预处理

将原始图片以灰度图像的形式读入,得到一个 m×n 的灰度矩阵 M,其中 m,n 是图像的长、 宽。这样读入比直接读入 RGB 彩色图像维度更低,同时没有明显损失文字信息。
如果直接处理已处理的灰度图,会导致文字笔画过小,容易被当成噪音处理掉,因此为了保证文字的笔画有一定的厚度,可以先将图片进行放大两倍就会有较好的效果。
放大后的图像区分度减少,为了增大区分度,使用次数为 2 的“幂次变换”。

灰度聚类

聚类:将相近的色阶归为一类,从而减少颜色分布,有效地降低噪音。
鉴于一些通用聚类方法缺陷较多,作者自行设计了聚类方法,使用的是“核概率密度估计”(简单地将它看成一种函数平滑(使函数连续可导)方式)的思路,通过求颜色密度极值的方式来聚类。
对预处理后的图像进行灰色阶统计,色阶的分布形成了几个比较突出的峰,换言之,存在一定的聚类趋势(这表现为它有几个明显的极大值和极小值点,有多少个极大值点,就分为多少层,并且以极小值点作为类别之间的边界)。

逐层识别:每一层的图像是由若干连通区域(邻接的像素则被定义为同一个连通区域)组成的,文字本身是由笔画较为密集组成的,因此往往文字也能够组成一个连通区域。每个图层被分割为若干个连通区域,逐步地将原始图像进行分解。开始识别哪些区域是可能的文字区域,要求文字具有一定的抗腐蚀能力(腐蚀是一种图像上的形态学变换,一般针对于二值图像,对于二值图像中的非零像素 (即取值为1的像素),如果它邻接的像素都为 1,则保持不变,否则变为 0。如果连通区域的边界线越长,那么腐蚀运算对它的“伤害”就越大)。

池化(池化相关解释):得到了 5 个特征层,作者使用的图片中文字主要集中在第 5 个特征层。
将 5 个特征层进行叠加,得到一幅整体的图像特征,使用类似“最大值池化”的方式整合特征(图像区域的最大值作为该区域池化后的值)。

密度排除:排除高/低/孤立密度区。
1.连通区域密度 :从一个连通区域出发,可以找到该连通区域的水平外切矩形,该区域的密度定义 为连通区域密度 = (连通区域的面积 /外切矩形的面积) × (原图像总面积 /外切矩形的面积
)
;
2.低密度区: 如果一个连通区域的密度小于 16,那么这个连通区域定义为低密度区;
3.高密度区:如果一个连通区域以水平外切矩形反转后的区域是一个低密度区;
4.孤立密度区(很多噪音点都是孤立区): 从一个连通区域出发,可以找到该连通区域的水平外切矩形,将这个矩形中心对称地向外扩张为原来的 9 倍 (长、宽变为原来的 3 倍),扩展后的区域如果没有包含其他的连通区域,那么原来的连通区域称为孤立区。

二、文字定位

邻近搜索

邻近搜索的目的是进行膨胀,以把可能成字的区域“粘合”起来。通过搜索邻近区域来确定膨胀方向 (上、下、左、右)。

文本切割

基于方块汉字的假设,事实上最简单的切割方法是均匀切割,也就是说不加任何判断,直接按照高度来将 单行文本切割为一个个的正方形图片. 这种思路可以应对大部分的单行文本。

三、光学识别

建立卷积神经网络模型对单字进行识别,使用计算机自动生成一批训练数据。

四、语言模型

为了减少识别错误率,可以将识别问题跟统计语言模型结合起来,通过动态规划的方法给出最优的识别结果。(看不懂:)

2019-10-28 11:18:09 weixin_40546602 阅读数 390
  • 转深度学习实战教程

    玩转深度学习视频培训课程,详细讲解深度学习的原理和利用深度学习框架TensorFlow进行项目实战。课程通过Kaggle竞赛平台的Titanic问题讲解TensorFlow的基本用法以及问题处理的常用技巧,讲解深度学习图像领域的卷积神经网络CNN和多个经典的网络架构、CNN的应用,讲解自然语言处理领域的RNN、LSTM以及它们的多种变种结构,构建语言模型和对话机器人,介绍损失函数和优化深度学习算法在TensorFlow中的实现。

    2987 人正在学习 去看看 王而川

之前没有接触过OCR文字识别,本文主要对使用深度学习算法完成文字识别的整体步骤进行一下梳理。

一般来说,OCR文字识别是检测+识别,首先将可能在文字的区域检测出来,然后在进行识别。本质是识别图片中的文字,即在复杂的图片背景下对所需目标文字进行识别提取。

 

1、文字识别基础步骤

      ①  detection:检测存在文字的区域,得到proposal。

      ②  recognation:识别proposal中的文字。

2、文字区域 detection

       对文字存在区域的detection方法,与目标检测领域的常用检测方法相当,分为one-stage和two-stage方法,(后续也可以考虑使用anchor free的方法对文字propsal进行检测)。

(1) 在文字识别领域,常用的two-stage方法为faster rcnn,one-stage方法主要有yolo系列方法。相比之下,前者的精度更好,后者速度更快。

(2)在文字识别领域,与传统目标检测的不同还在于文字的方向、扭曲程度等。

    ①  对于水平文字的检测。水平文字文本框是规则的四边形(四个自由度),类似于物体检测。水平文字检测效果较好的算法为CPTN:Detecting Text in Natural Image with Connectionist Text Proposal Network, ECCV, 2016。

    ② 文本框是不规则的四边形,拥有八个自由度,倾斜文字检测较好的算法有cvpr2017提出的EAST和Seglink。一般的检测套路为:检测文本框 --> 采用Radon Hough变换等方法进行文本矫正  --> 通过投影直方图分割单行文本图片 --> 对单行文本进行OCR。

 

3、文字recognation:classification model,可以对字符进行分割后单独识别,也可以进行序列识别,容易想见的是,序列识别才是真正有意义的。

(1)定长文字,各个字符之间看作是独立的,需事先选定可预测的sequence的最大长度,比较适用于门牌检测或车牌号码检测。典型算法In Goodfellow2013年提出的multi-digit number classification,[1312.6082] Multi-digit Number Recognition from Street View Imagery using Deep Convolutional Neural Networks

(2)不定长文字,可以产生任意长度的文字

   ① CNN+RNN/LSTM/GRU+CTC,CRNN算法描述较清楚 链接 bgshih/crnn

        CTC详解: Framewise and CTC Training of Neural Networks for Handwriting Recognition

   ②引入注意力机制(CNN+RNN+Attention),其中attention可以分为hard attention和soft attention。其中hard attention能够直接给出hard location,通常是bounding box的位置 (https://arxiv.org/pdf/1412.7755.pdf), 想法直观,缺点是不能直接暴力bp。soft attention通常是rnn/lstm/gru encoder-decoder model (https://arxiv.org/abs/1603.03101), 可以暴力bp。

    这两种模型均不需要对文字进行预先分割(end-to-end)。

以前的文字识别算法将检测和识别分为两个阶段来训练,现在较火的方向是将文字检测和识别放到一个网络中进行联合训练joint train。ICCV2017文章Towards End-to-end Text Spotting with Convolutional Recurrent Neural Networks,在水平文字检测中,将检测和识别进行端到端训练,这个方向会是未来一两年的热点。

4、 文字识别常用数据集:https://blog.csdn.net/u011489887/article/details/79804498

(1)、[英文] ICDAR 2017 Robust Reading Competiton,主页有11年至今的所有竞赛。

      [非中文数据集] 参考:https://www.cnblogs.com/lillylin/p/6893500.html

(2)、[中文] CTW data(Chinese Text in the Wild),超大街景图片中文文本数据集,包含 32,285 张图像和 1,018,402 个中文字符。

     资源链接:https://ctwdataset.github.io/ 。在相关论文《Chinese Text in the Wild》中,清华大学的研究人员以该数据集为基础训练了多种目前业内最先进的深度模型进行字符识别和字符检测。这些模型将作为基线算法为人们提供测试标准。这些图像源于腾讯街景,从中国的几十个不同城市中捕捉得到,不带任何特定目的的偏好。由于其多样性和复杂性,使得该数据集的收集很困难。它包含了平面文本、凸出文本、城市街景文本、乡镇街景文本、弱照明条件下的文本、远距离文本、部分显示文本等。对于每张图像,数据集中都标注了所有中文字符。对每个中文字符,数据集都标注了其真实字符、边界框和 6 个属性以指出其是否被遮挡、有复杂的背景、被扭曲、3D 凸出、艺术化,和手写体等。

(3)、[中文] 华中科技大学中文数据集 http://www.icdar2017chinese.site:5080/dataset/

                icdar2017比赛结果分析https://blog.csdn.net/rabbithui/article/details/79107208

(4)、[中文]  ICPR WTMI2018中文数据集(天池比赛数据集)

     https://tianchi.aliyun.com/competition/entrance/231685/information

(5)、[中文]  ICDAR2019 数据集  http://rrc.cvc.uab.es/?ch=12

 

5、文字识别模型资源

    https://github.com/bear63/sceneReco

   Crnn中文end-to-end识别 :  http://blog.csdn.net/u01329375

6、当前图像文本检测和识别领域研究热点

    白纸黑字的扫描文档识别技术已经很成熟;

    自然场景图像文本识别效果不是很理想。倾斜字、艺术字、变形字、模糊字、形似字、残缺字、光影遮蔽、多语言混合文本等应用落地面临的技术难题还没被彻底解决。

                                 preview

                              (本图摘自新浪微博《光学字符识别技术:让电脑像人一样阅读》)

7、OCR(Optical Charactor Recognition)文字识别和STR(Scene Text Rcognition)场景文字识别

    当前较多的认为OCR文字识别泛指所有的图像文字检测和识别技术,包括传统的OCR文档图像分析和场景文字识别技术。场景文字识别技术可以看作传统OCR技术的自然演进与升级换代。

传统解决方案:分别训练文字检测和文本识别两个模型,然后再服务实施阶段将这两个模型串联到数据流水线中组成文字识别系统。

当前流行的技术解决方案:用一个多目标网络训练出一个端到端模型。

 (1)训练阶段

          模型输入:训练图像、图像中文本坐标、文本内容;

          模型优化目标:输出端文本边框坐标预测误差,文本内容预测误差,二者加权和。

(2)服务实施阶段(测试)

        原始图片流经训练好的端到端模型,直接输出预测文本信息。

 

总结:文本检测和识别是CV和NLP两个领域的交叉,即需要使用CV技术来提取图像中文字区域的图像特征向量,也需要借助NLP技术来解码图像特征向量为文字结果。

 

参考文章:

http://www.sohu.com/a/224777048_129720

https://zhuanlan.zhihu.com/p/38655369

2019-07-11 12:02:52 wangwei19871103 阅读数 101
  • 转深度学习实战教程

    玩转深度学习视频培训课程,详细讲解深度学习的原理和利用深度学习框架TensorFlow进行项目实战。课程通过Kaggle竞赛平台的Titanic问题讲解TensorFlow的基本用法以及问题处理的常用技巧,讲解深度学习图像领域的卷积神经网络CNN和多个经典的网络架构、CNN的应用,讲解自然语言处理领域的RNN、LSTM以及它们的多种变种结构,构建语言模型和对话机器人,介绍损失函数和优化深度学习算法在TensorFlow中的实现。

    2987 人正在学习 去看看 王而川

提出问题

如果我们要做输入一段文字生成图片,比如:
在这里插入图片描述
传统的方法是将文字放入一个神经网络,然后输出一张图片,希望图片跟真实的图片越接近越好:
在这里插入图片描述
但是这么做产生的图片会模糊,甚至很奇怪,比如说,输入的文字是train火车,真实的图片可能有好多张:
在这里插入图片描述
那为了减小跟真实图片的差距,就会产生模糊的图片,因为他要跟所有真实图片尽可能的差距小,只能取他们的平均啦,所以就会模糊。这个时候就有让人提出来了CGAN。

Conditional GAN

在这里插入图片描述
如果用传统的GAN就是将图片跟文字一起输入生成器,然后输出一张图片,然后再弄个判别器,来判别生成的图片是真是假,但是这样可能会忽略了输入的文字,生成器为了骗过判别器而直接不管输入的文字了,就生成真实的图片,生成出来的图片或许够真实,但是可能跟输入的文字没关系。

所以就需要CGAN出场啦:
在这里插入图片描述
同样还是一样的生成器和输入,但是判别器这里需要将图片和文字一起输入,然后同时判断图片的真实,以及图片的真实和文字是否匹配,也就是有个匹配对,我们需要的是(火车,火车图片),不需要(其他文字,真实火车)和(火车,其他真实图片),这样就能保证是文字和图片的搭配。

所以基本的改变在判别器,那对于判别器的结构,又有两种不同的:
在这里插入图片描述
很多基本都是第一种方式,2个网络,将2个输入编码成2个向量,然后输入到另一个网络中,然后输入一个数,来表示输入的图片是否真实,输入的文字和图片是否匹配。

第二种方式是图片先输入到一个网络,判断是否真实,然后将文字和刚才输出的结果再输入一个网络,破案端是否匹配。

貌似第二种方式更加直观,能知道是是什么原因导致图片的问题,是因为真实性不够,还是因为文字不匹配,只需要调整某一个网络参数即可。第一种可能出现2种不匹配的情况(真实图+不匹配的文字,不真实的图+匹配文字),他给出的都是不好的分数,但是无法分别是那种情况,那可能需要调整多个网络参数了。

我们的弘毅老是喜欢动漫,所以拿了个动漫头像的例子,输入的头发和眼睛的描述,输出头像:
在这里插入图片描述

Stack GAN

如果要生成分辨率大的图,用普通的GAN很难,分辨率太大,参数就多了,很容易过拟合,坏掉。
所有提出了Stack GAN,分成2步去做,这样就等于渐进的去训练,结果应该会比较好,据说英伟达可以承受1024x1024的图片,就是类似的思路。

在这里插入图片描述

Image-to-image

前面说的是文字产生图片,当然也可以图片产生图片啦:
在这里插入图片描述
传统做法就是弄张图片扔进网络里,希望他能生成真实的图片,但是往往会比较模糊,因为产生平均结果,道理跟文字一样的:
在这里插入图片描述
所以我们也跟图片的思路一样,给判别一对数据,希望他生成的图片既真实又符合我们输入的图片:
在这里插入图片描述

Patch GAN

在图片转图片过程中,因为图片太大,很容易出现参数过多,过拟合,或者训练过慢,因此提出了分块检测的方案,让判别器每次都判别一块区域当然这个区域大小是可以选择的,如果区域是整个图片,那估计效果也不会好,跟传统的GAN一样了,如果是小到一个像素,那就是PixelGAN了,所以这个区域基本是要调出来的。
在这里插入图片描述

Speech Enhancement

当然前面的技术也可以用于音频处理,用来去噪。
传统的做法是拿清楚的音频,然后加噪声,将加噪声后的图片输入网络,然后输出,希望输出的和清楚的音频越近越好,中间都是用梅尔语谱图(频谱图),用CNN网络。可想而知这样出来的声音跟图片一样,也比较模糊。
在这里插入图片描述
所以我们要加上GAN,跟前面一样,需要一对数据,相匹配:
在这里插入图片描述

Video Generation

同样的,也可以用在视频上:
在这里插入图片描述
上图是用GA生成小精灵的视频,如果不用GAN,会出现小精灵走着走着消失了,因为走到一个口子上,小精灵可能向左走,也可能向右走,都是对的,然后一平均就消失了。

总结

总的来说,CGAN就是我们希望对输出的东西有所约束,不至于出现不可控的情况,所以输入和输出都需要有匹配的数据。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵,图片来自李宏毅课件,侵删。

2017-03-19 00:48:22 u012986684 阅读数 434
  • 转深度学习实战教程

    玩转深度学习视频培训课程,详细讲解深度学习的原理和利用深度学习框架TensorFlow进行项目实战。课程通过Kaggle竞赛平台的Titanic问题讲解TensorFlow的基本用法以及问题处理的常用技巧,讲解深度学习图像领域的卷积神经网络CNN和多个经典的网络架构、CNN的应用,讲解自然语言处理领域的RNN、LSTM以及它们的多种变种结构,构建语言模型和对话机器人,介绍损失函数和优化深度学习算法在TensorFlow中的实现。

    2987 人正在学习 去看看 王而川

想要学习deep learning ,首先我们应该对机器学习的基本概念有所了解

1、什么是深度学习?

深度学习是基于机器学习延伸出来的一个新的领域,由以人脑结构为启发的神经网络算法为起源加之模型结构深度的增加发展。

2、鼻祖人:Geoffrey Hinton。

3、深度学习的应用展示:

  3.1无人驾驶中路标识别

  3.2Google Now中的语音识别

  3.3 百度识图

  3.5 针对图片,自动生成文字的描述。

--------------------------------------------------------------------------------

一、基本概念:训练集、测试集、特征值、监督学习、非监督学习、半监督学习、分类、回归

二、概念学习:人类学习概念:鸟,车,计算机

定义:概念学习是指从有关某个布尔函数的输入输出训练的样例中推断出布尔函数、

三、例子

小明进行水上运动,是否享受运动取决与很多因素

天气:晴 阴 雨

温度 :暖冷

湿度: 普通 大

风力:强 弱

水温:暖 冷

预报:一样 变化

享受运动:是否

概念定义在实例(instance)集合上,这个集合表示为x.

X:所有可能的日子,每个日子的值由天气、温度、湿度、风力、水温、预报 6个属性表示

待学习的概念或目标函数成为目标概念(target concept)记为:c.

C(x)=1 当享受运动时,C(x)=0 当不享受运动时,C(x)也可以叫做y

x: 每个实例

X:样例。所有实例的集合

学习目标:f : X -> Y

四、概念:

训练集(training set/data):用来进行训练,也就是产生模型或者算法的数据集。

测试集( testing set/data):用来专门进行测试已经学习好的模型或者算法的数据集。

特征向量(feature vector/features):属性的集合

标记(label):学习的目标是什么,需要被标记c(x)

正例(positive example):好的例子

反例(negative example): 坏的例子

五、例子

美国硅谷房价因素:面积(平方米)、学区(评分0-10)

其中的面积、学区 就是特征值

学习的感念,或者叫学习的目标就是房价的值,也就是上面的概念标记(label)

实例:对面积、学区、房价 实例化, 也就是数据集


六、分类(classification):目标标记为类别型数据(category)

回归(regression):目标标记为连续性数值(continous numeric value)


七、例子:研究肿瘤良性,恶性因素:肿瘤的尺寸、颜色的关系

特征值:肿瘤尺寸、颜色

标记:良性/恶性

这种方式:聚类的方式,引出下面的问题。


监督学习(supervised learning):训练集有类别标记(class label)

无监督学习(unsupervised learning):无类别标记

半监督学习(semi-learning):有类别标记的训练集+无标记的训练集

 

八、步骤

1、数据拆分出:训练集和测试集

2、用训练集和训练集的特征向量来训练算法

3、用学习来的算法运用在测试集上来评估(调参,验证集)

 


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