计算机视觉入门笔记

什么是计算机视觉?

了解一下计算机视觉的基础知识。
常用的编程语言、硬件、常用的开源软件 (越早学越好), 和机器学习之间的关系。

计算机视觉的应用:

  • 无人驾驶
  • 无人安防
  • 人脸识别
  • 文字识别
  • 车辆车牌识别
  • 以图搜图
  • VR/AR
  • 3D 重构
  • 医学图像分析
  • 无人机
  • 等等

图像和视频的基本概念

  • 图像
    一张图片包含了: 维度、高度、宽度、深度 (存储每一个像素所用到的位数, 可以搜索一下图像的深度)、通道数、颜色格式、数据首地址、结束地址、数据量等等。
    此外, 图像深度、图像压缩格式 和 图像的通道数。

  • 视频
    原始视频 = 图片序列, 视频中的每张有序图片称为 「 帧 」(frame)。压缩后的视频, 会采取各种算法减少数据的容量, 其中 IPB 就是常见的。码率、帧率、分辨率、清晰度、带宽。

例如要对图像、视频做分析的话。
先不想什么算法, 没多大意义。 先要了解视频的结构, 特点。 例如帧率很低、码率很低、你用别人的方法不一定适合。

IPB, 原始的视频可以理解为一些图片的序列, 视频里有序的图片就理解为一帧, 所以一个视频就理解为有序的图片序列。怎样做压缩存储呢? 图片都要做压缩处理, 更别说视频。

做压缩里面, IPB 是最常见的, 代表的是在压缩完成之后只会带表的三中帧。 I 帧、P 帧、B 帧。I 帧, 叫做关键帧, 它会吧一张图片完整的保存下来, 所以 I 帧 不能出错, 出错就白费了; P 帧, 指跟上一帧之间的差别, 保留的是跟上一个帧的差别; B 帧 是双向的, 代表了跟上一帧和下一帧的差别。

码率, 码率越大视频体积越大, 码率越小体积就越小。 码率值数据传输的时候, 单位时间传输的单位数, 一般会用单位 kbps 。

摄像机分类

  • 监控摄像机 (网络摄像机和模拟摄像机)。
  • 不同行业需求的摄像机 (超宽动态摄像机、红外摄像机、热成像摄像机等)。
  • 智能摄像机。
  • 工业摄像机。(例如高精密仪器里面用的多)。

CPU & GPU (硬件和性能相关)

CPU 和 GPU 的差别是什么?

性能 (低延时性 Latency, 延时性越低性能越好) 与吞吐量 (Throughput)。
如下图 :

  • Cache, local memory: CPU > GPU
  • Threads(线程数) : GPU > CPU
  • Registers : GPU > CPU

计算机视觉和其他学科之间的关系

这张图来自 wiki 。

编程语言 & 数学基础

要入门和一些数学基础, 一些要学的东西。 Stanford CS231N 课程里面的已经详细说明了。

  • 懂 Python、最好精通 C/C++ (哈哈哈, 精通谈不上)、当然会一些其他 MATLAB、JavaScript 更好。

  • 数学基础, 概率学统计学不可少。微积分, 线性代数。等等, 数学必不可少。

  • 最好也懂一些机器学习和

  • <>, 入门后可以看看。

计算机视觉入门的公开课

Stanford 课程都被大家推荐, 不适合自己, 上知乎看看各位老师、前辈的推荐。找到适合自己的课程。

一个很有用的网站 : http://www.visionbib.com/bibliography/contents.html

如果关心深度学习, 也不需要看太多。 选择一、两本已经足够。 https://www.amazon.com/Deep-Learning-Adaptive-Computation-Machine/dp/0262035618/ref=sr_1_1?ie=UTF8&qid=1472485235&sr=8-1&keywords=deep+learning+book

入门计算机视觉, 可以了解和学习开源的软件。

  • OpenCV, 这个肯定要会的。
  • Tensorflow : Google 开源机器学习深度学习框架。
  • Caffe : 深度学习卷积神经网络开源框架。
  • (Torch & MXNet): 其他深度学习开源框架。 可以上 GitHub 搜。
  • ffmpeg : 强大的视频处理工具。 难度低, 很快学习主要的使用方法。

入门计算机视觉, 如何阅读相关的文献

  • 先熟悉所在方向的发展历程, 历程中里程碑式的文献, 肯定是要必读的。

例如, 深度学习做目标检测, RCNN、Fast RCNN、 Faster RCNN、SPPNET、SSD 和 YOLO 这些模型肯定是要知道的。

又例如, 深度学习做目标跟踪, DLT、SO-DLT 等等。

再例如, 对抗网络 GAN、GAN、CGAN、DCGAN、LAPGAN 等等。

  • https://arxiv.org/list/cs.CV/recent 每天去更新一下别人的工作。

  • 阅读论文, 搞明白以下几点:

      1. 解决了什么问题.
      1. 用了什么方法.
      1. 效果如何.
      1. 还存在什么问题.