0%

本篇记录下我使用使用深度学习做图片检索的过程.
任务背景: 有很多图片, 而且这些图片没有”类”的概念, 也可以说我的每一类都只有一张图片. 所以, 这种情况下不能用常见的基于”识别”的图像检索. 在此之前, 使用 Bag of Visual Words 的方法做出了一个版本, 可以参考这篇.

阅读全文 »

这篇文章是 DeepMind 团队使用深度学习.具体来说是卷积神经网络来做语音生成的一个工作. 基于基本的语音生成, 他们还做了 tts (text to speech), 音乐合成等. 实验效果很好. 我本人一直很喜欢 DeepMind 团队的工作, 因为, 他们对问题的提炼很好, 所用的方法也比较简单实用, 效果常常出人意料地好. 顺着这篇文章, 学习到了 dilate convolution 这个一个概念. dilate convolution 可以使用较少的计算就能 cover 到较大的 receptive field. 而且由于 dilate 本身的原因, 还可以防止 overfitting.

阅读全文 »

在之前的机器学习和神经网络中, 对于非线性变换/激活函数比较常用的是 sigmoid, tanh 等这类比较 smooth 而且 被 bound 住的函数. 然而目前, 在深度学习尤其是卷积神经网络中, 用的最多的是 ReLU 函数. 直观上看, ReLU 是一个分段的线性函数, 因此, 就很容易想到 ReLU 应该不像 sigmoid 和 tanh 等这类 smooth & bounded 的函数那样 powerful, 换句话说, ReLU 的效果应该比较差. 然而, 在实际应用中, ReLU 的效果要比 sigmoid 这类 smooth & bounded 的函数效果要好很多. 经过现实的打脸之后, 不禁要问,底为什么 ReLU 的效果会比 sigmoid 好呢?

阅读全文 »

Backpropagation 算法, 全称是 backward propagation of errors. 首先要说明这里面的逻辑, CNN或者其它的神经网络的优化本质上还是使用的 GD 算法, 而 BP 只是求解 GD 的一种方法. 所以, 要搞明白 BP 算法, 首先要搞明白 GD 算法.

阅读全文 »

Transfer learning 通常在训练数据不足的情况下使用. 所谓 transfer learning 最直观的理解是给模型一个很好初始值. 由于使用的 base model 通常都是在各大 benchmark 上取得 state of the art 效果的模型, 因此, transfer learning 通常能带来事半功倍的效果. 另外, transfer learning 还可以防止网络过早出现过拟合. 当然, 使用 transfer learning 的基础是两个数据集的数据分布是相似的. 本文使用 BOT 2016 计算机视觉大赛的数据, 详细记录了 transfer learning 的过程.

阅读全文 »

MXNet 的 DataIter 输入的 Python 接口, 不仅适用于图片, 而且适用于其它的文件格式. DataIter 比 numpy.array 的巨大的优点是 DataIter 不需要一次性把数据读入到内存. 想象一下在 CNN 的训练中动辄几百 G 的训练数据, 一次性载入内存比较不现实. 另一方面, 通过 MXNet 的 IO 接口调用, 可以更灵活的控制数据的 IO 过程.

阅读全文 »

Ubuntu 16.04 发布有一段时间了, 其中有一个我比较需要的亮点是对 4K 的显示器支持的更好, 一直想升级, 但是, 因为怕坑太多, 一直没有升级. 前几天官方发布了一个新的版本 16.04.1, 修复了大量的 bug, 于是, 忍不住终于升级了. 总体来说, 14.04 到 16.04 的升级还是非常平滑的, 除了 Emacs 使用 spacemacs 的配置出了一点问题, 目前还没有出现影响到工作的问题. 搜狗输入法正常使用, OpenCV 3.1.0 也能正常编译安装, CUDA 和 cudnn 都没问题. chrome 和 virtualbox 也都正常. 这篇 note 就来记录一下在 Ubuntu 16.04 上安装 OpenCV 3.1.0, CUDA8 cudnn 以及编译 MXNet 的过程.

阅读全文 »

LSH (Local Sensitive Hash) 是一种在大规模数据中寻找相似数据的方法. LSH 算是一种随机算法 (Random Algorithm). Random Algorithm 的特点是, 它不能保证每次都返回准确的结果, 但是, 它是已较高的概率保证返回正确的结果, 或者是与正确结果很接近的 value. 而且, 如果计算资源足够, 概率可以 as high as desired. LSH 以小概率的搜索失败为代价, 大幅度降低了搜索时间复杂度.

阅读全文 »

BoVW (Bag of Visual Word) 是在传统图像检索领域里比较常用的一种方法. 大体可以分为三个步骤: 特征提取, 聚类(类似于寻找一组基), 计算图片在基上的坐标. 算法的创新点是对图片的特征寻找基. 这样, 在基固定的情况下, 所有的图片都可以使用这组基来唯一的表示. 而且, 由于基的维数是固定的, 也为相似度计算提供了极大的方便. 根据检索图片的不同, 可以选用不同的特征提取方法.

阅读全文 »

Softmax 是在神经网络的中应用极其普遍的一种操作, 搞清楚 softmax 极其对对应的 cross entropy loss function 的意义及数学推导过程可以有好的帮助理解源码. 在这篇文章中, 详细地记录了 softmax, cross entropy loss, 和其对应的梯度的推导过程, 最后, 附加了 MXNet 中的梯度计算代码, 可以帮助直观的理解开源代码中梯度的计算过程.

阅读全文 »