https://antkillerfarm.github.io/

Fast Image Processing(续)

这个课题一般使用MIT-Adobe FiveK Dataset作为基准数据集。网址:

http://groups.csail.mit.edu/graphics/fivek_dataset/

这个数据集包含了5K张原始照片,并雇用了5个专业修图师,对每张图片进行修图。

众所周知,多层神经网络只要有足够的深度和宽度,就可以任意逼近任意连续函数。然而从Fast Image Processing的目的来说,神经网络的深度和宽度注定是有限的,否则肯定快不了。而这也是该课题的研究意义所在。

本文只使用了MIT-Adobe数据集中的原始图片,并使用了10种常用的算子对图片进行处理。因此,该网络训练时的输入是原始图片,而输出是处理后的图片。

上图是本文模型的网络结构图。它的设计特点如下:

1.采用Multi-Scale Context Aggregation作为基础网络。MCA的内容参见《深度学习(九)》。

2.传统MCA一般有下采样的过程,但这里由于网络输入和输出的尺寸维度是一样的,因此,所有的feature maps都是等大的。

3.借鉴FCN的思想,去掉了池化层和全连接层。

4.L1~L3主要用于图片的特征提取和升维,而L4~L5则用于特征的聚合和降维,并最终和输出数据的尺寸维度相匹配。

在normalization方面,作者发现有的operators经过normalization之后,精度会上升,而有的精度反而会下降,因此为了统一模型,定义如下的normalization运算:

Ψs(x)=λsx+μsBN(x)Ψs(x)=λsx+μsBN(x)

\Psi^s(x)=\lambda_sx+\mu_sBN(x)

Loss函数为:

l(,)=∑i1Ni‖f̂ (Ii;,)−f(Ii)‖2l(K,B)=∑i1Ni‖f^(Ii;K,B)−f(Ii)‖2

\mathcal{l(K,B)}=\sum_i\frac{1}{N_i}\|\hat f (I_i;\mathcal{K,B})-f(I_i)\|^2

这实际上就是RGB颜色空间的MSE误差。

为了检验模型的泛化能力,本文还使用RAISE数据集作为交叉验证的数据集。该数据集的网址:

http://mmlab.science.unitn.it/RAISE/

RAISE数据集包含了8156张高分辨率原始照片,由3台不同的相机拍摄,并给出了相机的型号和参数。

TNG

Tiny Network Graphics是图鸭科技推出一种基于深度学习的图片压缩技术。由于商业因素,这里没有论文,技术细节也不详,但是下图应该还是有些用的。

参考:

https://mp.weixin.qq.com/s/WYsxFX4LyM562bZD8rO95w

图鸭发布图片压缩TNG,节省55%带宽

SVDF

SVDF是UCB和Google Speech Group的作品,主要用于简化Speech模型的计算量。

论文:

《Compressing Deep Neural Networks using a Rank-Constrained Topology》

代码:

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/speech_commands/models.py

音频数据通常是一个[time, frequency]的二维tensor,直接放入FC网络,会导致较大的计算量。(下图左半部分所示)

SVDF将每个time的frequency作为一组,进行FC之后,再和其他组的结果进一步FC。上图右半部分所示的是time的filters为1的时候的SVDF。当然filters也可以为其他值,和CNN类似,filters越多,提取的特征越多。

从原理来说,SVDF相当于用两层FC来拟合1层FC,即:

w(m)i,j≈α(m)iβ(m)iwi,j(m)≈αi(m)βi(m)

w_{i,j}^{(m)}\approx \alpha_i^{(m)}\beta_i^{(m)}

SVDF将运算量从CdCdCd变为(C+d)k(C+d)k(C+d)k,这里的k为filters numbers。

这实际上就是2维tensor的SVD,只不过SVD是线性变换,而这里是非线性变换而已。(参见《机器学习(十五)》中的ALS算法部分)

实际上,SVDF和之前在《深度学习(十六)》中提到的Fast R-CNN的FC加速,原理是基本一致的。

LCNN

LCNN是华盛顿大学和Allen AI研究所的作品。后者是微软创始人Paul Allen投资兴建的研究机构。

论文:

《LCNN: Lookup-based Convolutional Neural Network》

代码:

https://github.com/hessamb/lcnn

我们知道一个Conv层的weight是一个n×m×kw×khn×m×kw×khn\times m\times k_w \times k_h的tensor,这里的m,n分别是input和output的channel数,kw,khkw,khk_w,k_h则是kernel的宽和高。

LCNN将这个巨大的weight tensor拆解成若干小tensor的运算:

1.建立一个包含k个m×kw×khm×kw×khm\times k_w \times k_h大小的tensor的字典D。

2.一个用于选择字典条目的矩阵I。

3.权值矩阵C。

然后按照下图所示的方法,计算得到W:

用数学公式表示,则为:

W[:,r,c]=∑t=1sC[t,r,c]⋅D[I[t,r,c],:],∀r,cW[:,r,c]=∑t=1sC[t,r,c]⋅D[I[t,r,c],:],∀r,c

W_{[:,r,c]}=\sum_{t=1}^sC_{[t,r,c]}\cdot D_{[I_{[t,r,c]},:]},\forall r,c

上图是LCNN的前向运算示意图,其中:

S[i,:,:]=X∗D[i,:]S[i,:,:]=X∗D[i,:]

S_{[i,:,:]}=X*D_{[i,:]}

这个过程实际上等效于S∗PS∗PS*P,而参数P就是我们需要训练的模型参数。

可以看出LCNN和SVDF都是采用稀疏表示的方法来减少运算量,只是实现方式和用途略有不同而已。

参考:

http://blog.csdn.net/feynman233/article/details/69785592

LCNN论文阅读笔记

LSTM进阶

《Long short-term memory》

这是最早提出LSTM这个概念的论文。这篇论文偏重数学推导,实话说不太适合入门之用。但既然是起点,还是有列出来的必要。

《LSTM Neural Networks for Language Modeling》

这也是一篇重要的论文。

《Sequence to Sequence - Video to Text》

https://vsubhashini.github.io/s2vt.html

《Long-term Recurrent Convolutional Networks for Visual Recognition and Description》

Long-term Recurrent Convolutional Networks是LSTM的一种应用方式,它结合了LSTM、CNN、CRF等不同网络组件。

上图展示了LSTM在动作识别、图片和视频描述等任务中的网络结构。

上图展示了图片描述任务中几种不同的网络连接方式:

1.单层LRCN。

2.双层LRCN。CNN连接在第一个LSTM层。传统的LSTM只有一个输入,这里的CNN是第二个输入,也就是所谓的静态输入。可参看caffe的LSTM实现。

2.双层LRCN。CNN连接在第二个LSTM层。

这是视频描述任务中LSTM和CRF结合的示例。

《Training RNNs as Fast as CNNs》

这篇论文提出了如下图所示的Simple Recurrent Unit(SRU)的新结构:

由于普通LSTM计算步骤中,很多当前时刻的计算都依赖ht−1ht−1h_{t-1}的值,导致整个网络的计算无法并行化。SRU针对这一点去掉了当前时刻计算对于ht−1ht−1h_{t-1}的依赖,而仅保留Ct−1Ct−1C_{t-1}(这个计算较为廉价)以记忆信息,大大改善了整个RNN网络计算的并行性。

但是SRU的精度没有LSTM高,需要通过增加layer和filter的数量来达到相同的精度,当然即使这样,计算时间仍然小于LSTM。

《Neural Machine Translation in Linear Time》

该论文是Deepmind的作品,它提出的ByteNet,计算复杂度为线性,也是LSTM的优化方案之一。

《Long Short-Term Memory Based Recurrent Neural Network Architectures for Large Vocabulary Speech Recognition》

it=δ(Wixxt+Wimmt−1+Wicct−1+bi)ft=δ(Wfxxt+Wfmmt−1+Wfcct−1+bi)ct=ft⊙ct−1+it⊙g(Wcxxt+Wcmmt−1+bc)ot=δ(Woxxt+Wommt−1+Wocct+bo)mt=ot⊙h(ct)yt=Wymmt+byit=δ(Wixxt+Wimmt−1+Wicct−1+bi)ft=δ(Wfxxt+Wfmmt−1+Wfcct−1+bi)ct=ft⊙ct−1+it⊙g(Wcxxt+Wcmmt−1+bc)ot=δ(Woxxt+Wommt−1+Wocct+bo)mt=ot⊙h(ct)yt=Wymmt+by

i_t=\delta(W_{ix}x_t+W_{im}m_{t-1}+W_{ic}c_{t-1}+b_i)\\ f_t=\delta(W_{fx}x_t+W_{fm}m_{t-1}+W_{fc}c_{t-1}+b_i)\\ c_t=f_t\odot c_{t-1}+i_t\odot g(W_{cx}x_t+W_{cm}m_{t-1}+b_c)\\ o_t=\delta(W_{ox}x_t+W_{om}m_{t-1}+W_{oc}c_{t}+b_o)\\ m_t=o_t\odot h(c_t)\\ y_t=W_{ym}m_t+b_y

上式是LSTM的公式(其中的最后一步在多数模型中,往往直接用yt=mtyt=mty_t=m_t代替。),从中可以看出类似Wixxt+Wimmt−1+Wicct−1+biWixxt+Wimmt−1+Wicct−1+biW_{ix}x_t+W_{im}m_{t-1}+W_{ic}c_{t-1}+b_i的FC运算占据了LSTM的绝大部分运算量。其中W的参数量为:

W=nc×nc×4+ni×nc×4+nc×no+nc×3W=nc×nc×4+ni×nc×4+nc×no+nc×3

W=\color{blue}{n_c\times n_c\times 4}+n_i\times n_c\times 4+\color{red}{n_c\times n_o}+n_c\times 3

为了精简相关运算,Google的Hasim Sak于2014年提出了LSTMP。

Hasim Sak,土耳其伊斯坦布尔海峡大学博士,Google研究员。

LSTMP的结构图如下:

改写成数学公式就是:

it=δ(Wixxt+Wimrt−1+Wicct−1+bi)ft=δ(Wfxxt+Wfmrt−1+Wfcct−1+bi)ct=ft⊙ct−1+it⊙g(Wcxxt+Wcmrt−1+bc)ot=δ(Woxxt+Womrt−1+Wocct+bo)mt=ot⊙h(ct)rt=Wrmmtpt=Wpmmtyt=Wyrrt+Wyppt+byit=δ(Wixxt+Wimrt−1+Wicct−1+bi)ft=δ(Wfxxt+Wfmrt−1+Wfcct−1+bi)ct=ft⊙ct−1+it⊙g(Wcxxt+Wcmrt−1+bc)ot=δ(Woxxt+Womrt−1+Wocct+bo)mt=ot⊙h(ct)rt=Wrmmtpt=Wpmmtyt=Wyrrt+Wyppt+by

i_t=\delta(W_{ix}x_t+W_{im}r_{t-1}+W_{ic}c_{t-1}+b_i)\\ f_t=\delta(W_{fx}x_t+W_{fm}r_{t-1}+W_{fc}c_{t-1}+b_i)\\ c_t=f_t\odot c_{t-1}+i_t\odot g(W_{cx}x_t+W_{cm}r_{t-1}+b_c)\\ o_t=\delta(W_{ox}x_t+W_{om}r_{t-1}+W_{oc}c_{t}+b_o)\\ m_t=o_t\odot h(c_t)\\ r_t = W_{rm}m_t\\ p_t = W_{pm}m_t\\ y_t = W_{yr}r_t + W_{yp}p_t + b_y

LSTMP的主要思想是对mtmtm_t做一个映射,只有部分数据rtrtr_t参与recurrent运算,其余部分ptptp_t直接输出即可(这一步是可选项,所以用虚框表示)。

这样W的参数量为:

W=nc×nr×4+ni×nc×4+nr×no+nc×nr+nc×3W=nc×nr×4+ni×nc×4+nr×no+nc×nr+nc×3

W=\color{blue}{n_c\times n_r\times 4}+n_i\times n_c\times 4+\color{red}{n_r\times n_o+n_c\times n_r}+n_c\times 3

参数量公式用蓝色和红色标出修改前后对应的部分,可以看出计算量有了明显下降。

参考:

http://blog.csdn.net/xmdxcsj/article/details/53326109

模型压缩lstmp

《Video Summarization with Long Short-term Memory》

这是一篇用于提取视频关键帧(也叫静态视频摘要)的论文,是南加州大学沙飞小组的作品。

上图是该文提出的DPP LSTM的网络结构图。它的主体是一个BiLSTM,算是中规中矩吧。

该文的创新点在于提出了DPP loss的概念。上图中的ytyty_t表示帧的分值(越大表示越重要),ϕtϕt\phi_t表示帧之间的相似度。该文的实验表明,将两个特征分开抽取,有助于提升模型的准确度。

这篇论文主要用到了3个数据集:

TVSum dataset:

https://github.com/yalesong/tvsum

这个需要Yahoo账号和一个高校的邮件地址才行。

SumMe dataset:

https://people.ee.ethz.ch/~gyglim/vsum/#benchmark

OVP and YouTube datasets:

https://sites.google.com/site/vsummsite/

需要翻墙。

IndRNN

https://mp.weixin.qq.com/s/cAqpclkkeVrTiifz07HC1g

新型循环神经网络IndRNN:可构建更长更深的RNN

https://mp.weixin.qq.com/s/7-K-nZTijoYCaprRNYXxFg

新型RNN:将层内神经元相互独立以提高长程记忆

参考

https://mp.weixin.qq.com/s/4IHzOAvNhHG9c8GP0zXVkQ

Simple Recurrent Unit For Sentence Classification

https://mp.weixin.qq.com/s/h3fF6Zvr1rSzSMpqdu8B0A

电子科大提出BT-RNN:替代全连接操作而大幅度提升LSTM效率

https://mp.weixin.qq.com/s/fCzHbOi7aJ8-W9GzctUFNg

LSTM文本分类实战

http://mp.weixin.qq.com/s/3nwgft9c27ih172ANwHzvg

从零开始:如何使用LSTM预测汇率变化趋势

https://mp.weixin.qq.com/s/M18c3sgvjV2b2ksCsyOxbQ

Nested LSTM:一种能处理更长期信息的新型LSTM扩展

https://www.zhihu.com/question/62399257

如何理解LSTM后接CRF?

https://mp.weixin.qq.com/s/XAbzaMXP3QOret_vxqVF9A

用深度学习LSTM炒股:对冲基金案例分析

https://mp.weixin.qq.com/s/eeA5RZh35BvlFt45ywVvFg

可视化LSTM网络:探索“记忆”的形成

https://mp.weixin.qq.com/s/h-MYTNTLy7ToPPEZ2JVHpw

阿里巴巴论文提出Advanced LSTM:关于更优时间依赖性刻画在情感识别方面的应用

https://mp.weixin.qq.com/s/SeR_zNZTu4t7kqB6ltNrmQ

从循环到卷积,探索序列建模的奥秘

https://mp.weixin.qq.com/s/_q69BV1r46S9X5wnLuFPSw

关于序列建模,是时候抛弃RNN和LSTM了

深度学习(二十三)——Fast Image Processing, SVDF, LCNN, LSTM进阶相关推荐

  1. 花书+吴恩达深度学习(十三)卷积神经网络 CNN 之运算过程(前向传播、反向传播)

    目录 0. 前言 1. 单层卷积网络 2. 各参数维度 3. CNN 前向传播反向传播 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔~我会非常开心的~ 花书+吴恩达深度学习(十)卷积神经网络 ...

  2. 深度学习二(Pytorch物体检测实战)

    深度学习二(Pytorch物体检测实战) 文章目录 深度学习二(Pytorch物体检测实战) 1.PyTorch基础 1.1.基本数据结构:Tensor 1.1.1.Tensor数据类型 1.1.2. ...

  3. 知识图谱论文阅读(八)【转】推荐系统遇上深度学习(二十六)--知识图谱与推荐系统结合之DKN模型原理及实现

    学习的博客: 推荐系统遇上深度学习(二十六)–知识图谱与推荐系统结合之DKN模型原理及实现 知识图谱特征学习的模型分类汇总 知识图谱嵌入(KGE):方法和应用的综述 论文: Knowledge Gra ...

  4. OpenCV学习(二十三) :模板匹配:matchTemplate(),minMaxLoc()

    OpenCV学习(二十三) :模板匹配:matchTemplate() 1.概述 模板匹配是一种最原始.最基本的模式识别方法,研究某一特定对象物的图案位于图像的什么地方,进而识别对象物,这就是一个匹配 ...

  5. 【毕业设计】深度学习二维码识别系统 - python opencv

    文章目录 0 前言 2 二维码基础概念 2.1 二维码介绍 2.2 QRCode 2.3 QRCode 特点 3 机器视觉二维码识别技术 3.1 二维码的识别流程 3.2 二维码定位 3.3 常用的扫 ...

  6. 23.深度解密二十三:自媒体影视视频剪辑号的运营思路及整体操作过程

    网络营销推广技术.技巧深度解密(二十三)指南: 1.本文档适合零基础以及互联网营销推广工作者,主要讲解自媒体中的影视剪辑号的问题. 2.原创版权文档,任何抄袭或者全部.部分模仿都是侵权行为. 3.敬畏 ...

  7. 深度学习入门系列21:项目:用LSTM+CNN对电影评论分类

    大家好,我技术人Howzit,这是深度学习入门系列第二十一篇,欢迎大家一起交流! 深度学习入门系列1:多层感知器概述 深度学习入门系列2:用TensorFlow构建你的第一个神经网络 深度学习入门系列 ...

  8. 深度学习模型的准备和使用教程,LSTM用于锂电池SOH预测(第一节)(附Python的jypter源代码)

    本Python笔记本显示和分析了如何处理NASA获得的电池充电/放电数据集. 对于这个模型的训练阶段,需要安装Python 3.x以及以下库: Tensorflow 2.0 Numpy Pandas ...

  9. 深度学习(十三)——花式池化, Batch Normalization

    https://antkillerfarm.github.io/ 花式池化 池化和卷积一样,都是信号采样的一种方式. 普通池化 池化的一般步骤是:选择区域P,令Y=f(P)Y=f(P).这里的f为池化 ...

最新文章

  1. 基于稀疏表示的人脸识别 (SRC,LASRC,RASL,MRR)
  2. stl list(转)
  3. oracle 语句 在线测试,2017年Oracle数据库基础测试答案.doc
  4. 【简洁写法】剑指 Offer 30. 包含min函数的栈
  5. 程序设计语言基础-知识点
  6. php代码最佳实践,分享几个 PHP 编码的最佳实践
  7. 教你如何拒绝带病毒的恶意网页陷阱
  8. cartographer环境配置及运行
  9. 用python给游戏加上音效_添加声音到你的Python游戏
  10. 【复旦微】国产MCU学习(持续更新)
  11. 阿里ICON图标,使用教程
  12. 千字文(粱敕员外散骑侍郎周兴嗣撰)
  13. VMware vCenter Converter Standalone
  14. 2022年最该收藏的8个数据分析模型
  15. 计算机网路基础课后习题答案 主编刘建友
  16. 2020年,这个算法团队都干了啥?
  17. Playbooks 简介
  18. css实现文字左右添加横线
  19. 巨简单又好用的pygame游戏暂停继续方法
  20. mysql端口号3306被占用_使用pandas将excel表格数据导入到mysql中

热门文章

  1. 前端js vue遇到的一些简单的数据处理-持续更新
  2. 零中频接收机频率转换图_接收机抗噪声技术
  3. java最大内存_JAVA:测试java虚拟机支持的最大内存 Xmx 值?Tomcat 内存溢出?
  4. StyleAI:白度-物理上,怎样才算白?
  5. 一次合同违约复盘(一)
  6. 《The Corporate Startup》作者访谈
  7. python练习笔记——分解质因数
  8. 调试技巧--Windows端口号是否被占用
  9. GlusterFS架构与维护
  10. 编程问题难解决,学会提问是关键!