DeepLearning

神经网络基础

图像数据 图像是像素点组成的矩阵, [0-255]越小越暗越大越亮 RGB通道,彩色图。 32X32X3 彩色图 32X32X1 灰度图 线性分类: 得分函数: 像素点做一个转换,拉长。矩阵变成一个列向量。 对每一个像素点来说都有权重参数。使用神经网络的时候,W的shape是多大的必须明确给出。分类——分几类。 b参数,影响很小,有几个分类有几个b。 损失函数: 错误分类得分-正确得分>0 有损失,只对正数算有损失,对负数是没有损失的 所有损失加在一起 +1(可以容忍的范围区间) -0.9本来不计损失,但是不在容忍范围之内,所以计算损失值。 通过损失值衡量权重参数是否达到标准。 在迭代的时候可能是一个batch一个batch的迭代的。 不一定我们是对一个数据计算损失函数,可能输入一批数据进行计算损失函数。 一次迭代样本不是一个的时候,我们要考虑样本个数,为了消除样本个数对损失函数的影响,我们需要除以样本个数。 消除样本个数对损失函数的影响 正则化: 得到相同结果的W,这里我们需要正则化惩罚项,我希望W模型越平稳越好。 4个像素点 W1X.T=W2X.T 结果相同,两种模型表达效果一样。正则化惩罚项λW^2。 W1只利用了一个像素点,但是对于W2来说,它利用了四个像素点,综合的考虑了每一个像素点的值,得到了一个更好的模型。所以对W1惩罚的更严重些。 损失函数=自身的损失值+正则化的损失值 softmax分类器: 每一个类别有一个明确的分值,我们将分值转换成概率。 softmax输出的是概率。 softmax是多分类的分类器。 e^x扩大数值,更好的进行分类任务,然后归一化,得分值转换成概率值。 正确类别概率越小,损失值越大。 LOSS值的不同 SVM loss: 对于上面的loss来说,它的结果是1.58。而下面的loss是0.452。上面的LOSS值有可能会等于0. Softmax loss: 对于唯一的概率值,它得到的loss值永远会存在不会存在损失值为0的情况。 最优化: 归一化后就是一个概率的结果值了。sigmoid函数。 对于神经网络来说,无法求驻节,我们需要进行一个迭代优化的操作,最优化问题。 求得loss值后我们就可以进行最优化的操作了。 X->loss:这一系列过程称为前向传播过程,通常神经网络是由BP算法来求解的,BP算法主要是通过前向传播求得loss值,再经历反向传播,去优化loss参数。 梯度下降算法,每一次迭代,优化W参数,loss降低,达到优化作用。 epoch 是迭代完所有数据, 一次迭代是指跑完一个batch 学习率: W不太好的时候,我们想要让它向好的方向学,一次学多大?就是用学习率额,更新多大。W-=ΔW+LR 学习率不能过大,通常为0.001、0.0001一次少走一些,多一些迭代。学习率影响非常大,不同的学习率会模型发生翻天覆地变化。学习率必须慎重。

TensorFlow学习(十):图像预处理

更新时间: 2018.6.2 增加了通过 tf.image 进行数据增强的内容,非常重要,可以直接跳到第四节。 之前做的一些任务都是从.csv文件里面读取数据来处理,这些元素都已经是处理好的值了,所以很方便。但是更多时候,我们是要从硬盘上的图片直接来做处理,所以,这里需要用到一些基本的图像处理有关的函数了。OpenCV肯定是可以使用的,但是tensorflow本身也提供了一些好用的函数。 因为通过Tensorflow完成图像有关的任务太多了,所以了解一点Tensorflow中自带的图像处理有关的函数是很有必要的。 Tensorflow中内置的图像处理的函数肯定没有OpenCV那么多那么强大啦,但是仅仅是作为简单的预处理的话,完全是够用了。 主要使用的模块就是tf.image,所以首先要是先把官方文档列出来:Module: tf.image,然后接下来就是按照图片处理的顺序来分别讲解各个函数的使用。 本节的完整测试代码,可以在我的GitHub:LearningTensorFlow/12.ImageProcess/上找到。 一.图像的编解码 Ⅰ.概览 下面是tensorflow自带编解码部分的函数,这里一起列出来,但是并不会全部都详细讲,因为使用方式大同小异,在例子中只是详细讲其中一个,其他的都可以类比或者看文档写出来,实在是很简单,就不需要多花笔墨。 decode_gif(…): Decode the first frame of a GIF-encoded image to a uint8 tensor. decode_jpeg(…): Decode a JPEG-encoded image to a uint8 tensor. decode_png(…): Decode a PNG-encoded image to a uint8 or uint16 tensor. decode_image(…): Convenience function for decode_gif, decode_jpeg, and decode_png. encode_jpeg(…): JPEG-encode an image. encode_png(…): PNG-encode an image. 在这一步,要是只是想把某个或者某些个文件读到ndarray中去,推荐更加高效的做法,就是使用matplot.image中的imread()方法,或者opencv中的方法,都是很简单无脑的。 比如在这里,我文件夹下面有个叫做“1.jpg”的文件,那么就可以用比较简单的方法得到: 二.数据转化和形状变换 这一步的目的是什么呢?首先,很多图像像素默认是int类型的,在tensorflow里面,float类型的数据更加适合处理,然后形状来说,我们知道,对于图片来说,一个网络的输入尺寸是固定的,而训练的时候图片的尺寸确不一定是固定的,所以有必要用各种方式把图片尺寸转换为固定的适合网络输入的格式。 Ⅰ.数据类型转化 convert_image_dtype(image,dtype,saturate=False,name=None)

深度抠图–Deep Image Matting

CVPR2017 https://arxiv.org/abs/1703.03872 GitHub: https://github.com/Joker316701882/Deep-Image-Matting 抠图问题还是比较难的,简单的用一个公式表达如下: 左边是图像位置 i 的 RGB 值,右边是 前景和背景的线性组合。 matte estimation alpha 是未知的。对于每个像素,有3个已知量,7个未知量,所以这个一个 underconstrained 问题,即变量个数大于方程个数。 当前针对抠图问题的方法主要有两个问题: 1)当前方法将 matting equation 设计为两个颜色的线性组合,即将抠图看做一个 color problem染色问题,这种方法基于一个假设就是颜色是一个可区分的特征,distinguishing feature(通常还加入了位置信息)。但是当背景和前景的颜色空间分布重叠时,这种方法的效果就不是很好了。 2) 当前基于抠图的数据库很小。 the alphamatting.com dataset 只有27张训练图像,8张测试图像。 本文解决了上述两个问题。针对数据库问题,我们建立了一个大的抠图数据库。建立方式如下: 找一些背景比较单一的图像,这些图像的真值比较容易得到。将人扣出来,然后再将其放到背景比较复杂的图中去。 4 Our method 整个网络分两个部分,一个是 deep convolutional encoder-decoder network,is penalized by the alpha prediction loss and a novel compositional loss 输入图像块和对应的 trimap,输出 alpha prediction。第二部分是一个小的卷积网络用于 refines 前面个网络的输出 alpha prediction。 4.1. Matting encoder-decoder stage Losses: 我们这里设计了两个 Losses: 第一个loss 是 the alpha-prediction loss,是 预测的 alpha values 和alpha values的真值的绝对差。第二个loss是 the compositional loss ,预测的RGB颜色值和对应的真值绝对差。.

Ubuntu 16.04+Gtx1050Ti+cuda 8.0+cudnn 5.1 tensorflow 安装

现在tensorflow 终于支持高版本(cuda 8.0)一键安装了,今天尝试了一下,很爽。不用折腾那么多东西。 建议安装 anaconda ,一个特别好的Python包管理器,清华大学的源有其镜像,安装速度,更新也挺快的。 其独有的虚拟环境可以将一个个环境隔离开来,互不影响,这个特别好。 我们首先安装anaconda ,这个官网有教程,整个安装过过程傻瓜化。 首先创建虚拟环境: conda create -n tensoflow python=3.7 conda create -n tensoflow python=3.4 conda create -n tensoflow python=3.5 根据习惯选一个Python版本。 tf的gpu版本现在支持直接用pip直接安装,前提是安装好cuda8.0和cudnnv5.1(必须是8.0和5.1不然会报错),然后直接在命令行下pip install tensorflow-gpu 这里说一下cuda 的安装,官网给出的安装教程前提是没有安装官方N卡驱动的。按照官网方法一步步来可以安装成功,并且很快,不需要选择就可以安装好,然后根据CUDA 的sample进行测试。一般都会安装成功 如果之前单独安装过N卡的驱动,就不要按照官网的来进行安装了,安装的时候,后面不写参数,然后到第二步骤的时候,选择不安装驱动,如果选择安装的话,会出错。

图像处理之灰度模糊图像与彩色清晰图像的变换

针对模糊图像的处理,个人觉得主要分两条路,一种是自我激发型,另外一种属于外部学习型。接下来我们一起学习这两条路的具体方式。 第一种 自我激发型 基于图像处理的方法,如图像增强和图像复原,以及曾经很火的超分辨率算法。都是在不增加额外信息的前提下的实现方式。 1. 图像增强 图像增强是图像预处理中非常重要且常用的一种方法,图像增强不考虑图像质量下降的原因,只是选择地突出图像中感兴趣的特征,抑制其它不需要的特征,主要目的就是提高图像的视觉效果。先上一张示例图: 图像增强中常见的几种具体处理方法为: 直方图均衡 在图像处理中,图像直方图表示了图像中像素灰度值的分布情况。为使图像变得清晰,增大反差,凸显图像细节,通常希望图像灰度的分布从暗到亮大致均匀。直方图均衡就是把那些直方图分布不均匀的图像(如大部分像素灰度集中分布在某一段)经过一种函数变换,使之成一幅具有均匀灰度分布的新图像,其灰度直方图的动态范围扩大。用于直方均衡化的变换函数不是统一的,它是输入图像直方图的积分,即累积分布函数。 灰度变换 灰度变换可使图像动态范围增大,对比度得到扩展,使图像清晰、特征明显,是图像增强的重要手段之一。它主要利用图像的点运算来修正像素灰度,由输入像素点的灰度值确定相应输出像素点的灰度值,可以看作是“从像素到像素”的变换操作,不改变图像内的空间关系。像素灰度级的改变是根据输入图像f(x,y)灰度值和输出图像g(x,y)灰度值之间的转换函数g(x,y)=T[f(x,y)]进行的。 灰度变换包含的方法很多,如逆反处理、阈值变换、灰度拉伸、灰度切分、灰度级修正、动态范围调整等。 图像平滑 在空间域中进行平滑滤波技术主要用于消除图像中的噪声,主要有邻域平均法、中值滤波法等等。这种局部平均的方法在削弱噪声的同时,常常会带来图像细节信息的损失。 邻域平均,也称均值滤波,对于给定的图像f(x,y)中的每个像素点(x,y),它所在邻域S中所有M个像素灰度值平均值为其滤波输出,即用一像素邻域内所有像素的灰度平均值来代替该像素原来的灰度。 中值滤波,对于给定像素点(x,y)所在领域S中的n个像素值数值{f1,f2,…,fn},将它们按大小进行有序排列,位于中间位置的那个像素数值称为这n个数值的中值。某像素点中值滤波后的输出等于该像素点邻域中所有像素灰度的中值。中值滤波是一种非线性滤波,运算简单,实现方便,而且能较好的保护边界。 图像锐化 采集图像变得模糊的原因往往是图像受到了平均或者积分运算,因此,如果对其进行微分运算,就可以使边缘等细节信息变得清晰。这就是在空间域中的图像锐化处理,其的基本方法是对图像进行微分处理,并且将运算结果与原图像叠加。从频域中来看,锐化或微分运算意味着对高频分量的提升。常见的连续变量的微分运算有一阶的梯度运算、二阶的拉普拉斯算子运算,它们分别对应离散变量的一阶差分和二阶差分运算。 2. 图像复原 其目标是对退化(传播过程中的噪声啊,大气扰动啊好多原因)的图像进行处理,尽可能获得未退化的原始图像。如果把退化过程当一个黑匣子(系统H),图片经过这个系统变成了一个较烂的图。这类原因可能是光学系统的像差或离焦、摄像系统与被摄物之间的相对运动、电子或光学系统的噪声和介于摄像系统与被摄像物间的大气湍流等。图像复原常用二种方法。当不知道图像本身的性质时,可以建立退化源的数学模型,然后施行复原算法除去或减少退化源的影响。当有了关于图像本身的先验知识时,可以建立原始图像的模型,然后在观测到的退化图像中通过检测原始图像而复原图像。 3. 图像超分辨率 一张图我们想脑补细节信息好难,但是相似的多幅图我们就能互相脑洞了。所以,我们可以通过一系列相似的低分辨图来共同脑补出一张高清晰图啊,有了这一张犯罪人的脸,我就可以画通缉令了啊。。。 超分辨率复原技术的目的就是要在提高图像质量的同时恢复成像系统截止频率之外的信息,重建高于系统分辨率的图像。继续说超分辨,它其实就是根据多幅低质量的图片间的关系以及一些先验知识来重构一个高分辨的图片。示例图如下: 第二种 外部学习型 外部学习型,就如同照葫芦画瓢一样的道理。其算法主要是深度学习中的卷积神经网络,我们在待处理信息量不可扩充的前提下(即模糊的图像本身就未包含场景中的细节信息),可以借助海量的同类数据或相似数据训练一个神经网络,然后让神经网络获得对图像内容进行理解、判断和预测的功能,这时候,再把待处理的模糊图像输入,神经网络就会自动为其添加细节,尽管这种添加仅仅是一种概率层面的预测,并非一定准确。 本文介绍一种在灰度图像复原成彩色RGB图像方面的代表性工作:《全局和局部图像的联合端到端学习图像自动着色并且同时进行分类》。利用神经网络给黑白图像上色,使其变为彩色图像。稍作解释,黑白图像,实际上只有一个通道的信息,即灰度信息。彩色图像,则为RGB图像(其他颜色空间不一一列举,仅以RGB为例讲解),有三个通道的信息。彩色图像转换为黑白图像极其简单,属于有损压缩数据;反之则很难,因为数据不会凭空增多。 搭建一个神经网络,给一张黑白图像,然后提供大量与其相同年代的彩色图像作为训练数据(色调比较接近),然后输入黑白图像,人工智能按照之前的训练结果为其上色,输出彩色图像,先来看一张效果图: 本文工作 • 用户无干预的灰度图像着色方法。 • 一个新颖的端到端网络,联合学习图像的全局和局部特征。 • 一种利用分类标签提高性能的学习方法。 • 基于利用全局特征的风格转换技术。 • 通过用户研究和许多不同的例子深入评估模型,包括百年的黑白照片。 着色框架 模型框架包括四个主要组件:低级特征提取网络,中级特征提取网络,全局特征提取网络和着色网络。 这些部件都以端对端的方式紧密耦合和训练。 模型的输出是图像的色度,其与亮度融合以形成输出图像。 与另外两个工作对比 • Gustav Larsson, Michael Maire, and Gregory Shakhnarovich. Learning Representations for Automatic Colorization. In ECCV 2016. •Richard Zhang, Phillip Isola, and Alexei A.

Drools6.5部署Drools Workbench

最近两天看了一下规则引擎drools,看官方介绍所以手痒,本地部署了一下Drools Workbench,这一下部署让我掉进了深坑,不得不说,这个配置有点麻烦,请听我细细道来。 安装环境 jdk tomcat mysql 本地部署Drools Workbench首先我门得有一个tomcat。和mysql 数据库 这是基础,关于tomcat的安装使用我就不多说了。 其他的还需要这些步骤: 1.下载kie-drools-wb-6.5.0.Final-tomcat7.war 包 2.给tomcat添加所需依赖 3.添加配置文件btm-config.properties 4.添加配置文件resources.properties 5.修改配置文件context.xml 6.修改配置文件tomcat-users.xm 7.修改配置文件server.xml 8.添加脚本setenv.sh 9.修改配置文件persistence.xml 10.启动验证 开始部署 1. kie-drools-wb-6.5.0.Final-tomcat7.war 进入官网 传送门,不信你不点 下载kie-drools-wb-6.5.0.Final-tomcat7.war 下载后解压war包,并修改名字为kie-drools-wb 将其放在tomcat的webapp目录下 2.给tomcat添加所需依赖 将所需的jar包添加到tomcat下的lib 目录下 所需jar包地址,点我下载jar,不信你不点 copy following libs into TOMCAT_HOME/lib * btm-2.1.4.jar * btm-tomcat55-lifecycle-2.1.4.jar * h2-1.3.161.jar * jta-1.1.jar * slf4j-api-1.7.2.jar * slf4j-jdk14-1.7.2.jar 3.添加配置文件btm-config.properties 在tomcat的conf文件夹下新建文件btm-config.properties,并添加如下配置: 切记/Users/yangyibo/Software/apache-tomcat-7.0.70/ 改为你自己的tomcat地址。 bitronix.tm.serverId=tomcat-btm-node0 bitronix.tm.journal.disk.logPart1Filename=/Users/yangyibo/Software/apache-tomcat-7.0.70/work/btm1.tlog bitronix.tm.journal.disk.logPart2Filename=/Users/yangyibo/Software/apache-tomcat-7.0.70/work/btm2.tlog bitronix.tm.resource.configuration=/Users/yangyibo/Software/apache-tomcat-7.0.70/conf/resources.properties 4.添加配置文件resources.properties 在tomcat的conf文件夹下新建文件resources.properties,并添加如下配置: 切记 resource.ds1.driverProperties.user=root resource.ds1.driverProperties.password=admin 改为你自己的mysql 账号密码。并在本地的mysql数据库中创建一个名字为 drools 的数据库 resource.ds1.className=bitronix.tm.resource.jdbc.lrc.LrcXADataSource resource.

图像检索系列一:Deep Learning of Binary Hash Codes for Fast Image Retrieval

Deep Learning of Binary Hash Codes for Fast Image Retrieval 这篇文章发表在2015CVPR workshop 文章链接:http://www.cv-foundation.org/openaccess/content_cvpr_workshops_2015/W03/papers/Lin_Deep_Learning_of_2015_CVPR_paper.pdf 代码链接:https://github.com/kevinlin311tw/caffe-cvprw15 图一 算法框架流程 这篇文章的想法很巧妙,在一个深层CNN的最后一个全连接层(fc8)和倒数第二个全连接层(fc7)之间加了一层全连接隐层,就是图一中绿色的latent layer (H)。这样一来,既可以得到深层的CNN特征,文中主要用的是fc7的特征,还可以得到二分的哈希编码,即来自H。这个隐层H不仅是对fc7的一个特征概括,而且是一个连接CNN网络的中层特征与高层特征的桥梁。 1. Domain Adaption 为了让一个网络能够对某一类物体高鲁棒,即target domain adaption,用一类主题目标数据集来整定(fine-tune)整个网络。fc8的节点数由目标类别数决定,H的节点数在文中有两种尝试:48和128。这两个层在fine-tune时,是随机初始化的,其中H的初始化参考了LSH[1]的方法,即通过随机映射来构造哈希位。通过这样训练,得到的网络能够产生对特定物体的描述子以及对应的哈希编码。 2. Image Retrieval 主要提出了一种从粗糙到细致的检索方案(coarse-to-fine)。H层首先被二值化: 粗糙检索是用H层的二分哈希码,相似性用hamming距离衡量。待检索图像设为I,将I和所有的图像的对应H层编码进行比对后,选择出hamming距离小于一个阈值的m个构成一个池,其中包含了这m个比较相似的图像。 细致检索则用到的是fc7层的特征,相似性用欧氏距离衡量。距离越小,则越相似。从粗糙检索得到的m个图像池中选出最相似的前k个图像作为最后的检索结果。每两张图128维的H层哈希码距离计算速度是0.113ms,4096维的fc7层特征的距离计算需要109.767ms,因此可见二值化哈希码检索的速度优势。 3. 实验结果 作者在MINIST,CIFAR-10,YAHOO-1M三个数据集上做了实验,并且在分类和检索上都做了实验,结果都很不错,特别是在CIFAR-10上图像检索的精度有30%的提升。 (1)MINIST 左边第一列是待检索图像,右边是48和128位H层节点分别得到的结果。可以看到检索出的数字都是正确的,并且在这个数据集上48位的效果更好,128位的太高,容易引起过拟合。 (2)CIFAR-10 在这个数据集上128位的H层节点比48位的效果更好,比如128检索出更多的马头,而48位的更多的全身的马。 (3)YAHOO-1M 作者在这个数据集上比较了只用fc7,只用H和同时用两者(粗糙到细致)的结果,实验结果表明是两者都用的效果更好。 可以看到如果只用alexnet而不进行fine-tune的话,检索出的结果精度很低。 4. 总结 这个方法整篇文章看下来给人的感觉比较工程,全篇讲理论和方法的部分很少,几乎没有什么数学公式,但是效果好,这个最重要。想法很简单,但是很巧妙,值得学习。代码已经开源,准备尝试。 [1] Gionis A, Indyk P, Motwani R. Similarity search in high dimensions via hashing[C]//VLDB. 1999, 99(6): 518-529.

我和我的小伙伴们

Who am I 我只是一个普普通通的OI. 我的学校:Sun Yat-Sen Memorial Middle School 年级:G2 My Partners DDX LJF LYZ(这人非常牛!) XHM(大学霸) YYK HHN HXY CTY(这个人非常的牛%%%%%%) ZZ LH CH HZJ LYD LZH Infleaking DH LYH WYT

Deep Reinforcement Learning 深度增强学习资源

1 学习资料 增强学习课程 David Silver (有视频和ppt): http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Teaching.html 最好的增强学习教材: Reinforcement Learning: An Introduction https://webdocs.cs.ualberta.ca/~sutton/book/the-book.html 深度学习课程 (有视频有ppt有作业) https://www.cs.ox.ac.uk/people/nando.defreitas/machinelearning/ 深度增强学习的讲座都是David Silver的: ICLR 2015 part 1 https://www.youtube.com/watch?v=EX1CIVVkWdE ICLR 2015 part 2 https://www.youtube.com/watch?v=zXa6UFLQCtg UAI 2015 https://www.youtube.com/watch?v=qLaDWKd61Ig RLDM 2015 http://videolectures.net/rldm2015_silver_reinforcement_learning/ 其他课程: 增强学习 Michael Littman: https://www.udacity.com/course/reinforcement-learning–ud600 AI(包含增强学习,使用Pacman实验) Pieter Abbeel: https://www.edx.org/course/artificial-intelligence-uc-berkeleyx-cs188-1x-0#.VKuKQmTF_og Deep reinforcement Learning: Pieter Abbeel http://rll.berkeley.edu/deeprlcourse/ 高级机器人技术(Advanced Robotics): Pieter Abbeel: http://www.cs.berkeley.edu/~pabbeel/cs287-fa15/ 深度学习相关课程: 用于视觉识别的卷积神经网络(Convolutional Neural Network for visual network) http://cs231n.github.io/ 机器学习 Machine Learning Andrew Ng https://www.coursera.org/learn/machine-learning/ http://cs229.stanford.edu/

基于深度学习的图像去噪(论文总结)

2015 深度学习、自编码器、低照度图像增强 Lore, Kin Gwn, Adedotun Akintayo, and Soumik Sarkar. “LLNet: A Deep Autoencoder Approach to Natural Low-light Image Enhancement.” arXiv preprint arXiv:1511.03995 (2015). 利用深度学习的自编码器方法训练不同低照度图像信号的特征来实现自适应变亮和去噪,主要是通过非线性暗化和添加高斯噪声的方法来模拟低照度环境,进行图像对比度增强和去噪。 2014 深度学习、深度卷积神经网络、图像去卷积 Xu, Li, et al. “Deep convolutional neural network for image deconvolution.”Advances in Neural Information Processing Systems. 2014. 利用深度卷积神经网络进行图像去卷积,实现图像复原,优点:相比于当前其他方法,有更好的PSNR值和视觉效果。 2014 深度学习、稀疏编码、自编码器、图像去噪 Li, HuiMing. “Deep Learning for Image Denoising.” International Journal of Signal Processing, Image Processing and Pattern Recognition 7.3 (2014): 171-180. 利用稀疏编码(sparsecoding)与自编码器(Auto-encoder)两种方法结合来实现图像去噪,不足之处是只对图像进行处理,没有涉及视频。 2014