计算机视觉—— 基础介绍

Posted 大彤小忆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机视觉—— 基础介绍相关的知识,希望对你有一定的参考价值。

1. 计算机视觉概述

  研究理论和应用:
    • 研究如何使机器“看”的科学
    • 让计算机具有人类视觉的所有功能
    • 让计算机从图像数据中,提取有用的信息并解释
    • 重构人眼;重构视觉皮层;重构大脑剩余部分

  模拟人类视觉的优越能力:
    • 识别人、物体、场景
    • 估计立体空间、距离
    • 躲避障碍物进行导航
    • 想象并描述故事
    • 理解并讲解图片

  弥补人类视觉的缺陷:
    • 关注显著内容、容易忽略很多细节
    • 不在乎、不擅长精细感知
    • 容易受幻觉干扰
    • 描述主观、模棱两可
    • 不善于长时间稳定的执行同一个任务
    • 当然,还有视觉障碍人士

  计算机视觉一般使用感知设备(如摄像头)模拟人的眼睛,使用计算设备(如CPU/GPU/FPGA)模拟人的大脑,如下图所示。

在这里插入图片描述

  高度复合学科:
    • 工程
    • 计算机科学
    • 数学
    • 心理学
    • 生物学
    • …
在这里插入图片描述
  2个主要研究维度:
    • 语义感知(semantic)
    • 几何属性(Geometry)

在这里插入图片描述
  感知上的本质差异:

在这里插入图片描述

  人工智能目标: • 解决”像素值”与”语义”之间的鸿沟(Gap)

在这里插入图片描述

2. 研究挑战

挑战举例
视角变化在这里插入图片描述
光照变化在这里插入图片描述
尺度变化在这里插入图片描述
形态变化在这里插入图片描述
背景混淆干扰在这里插入图片描述
遮挡在这里插入图片描述
类内物体的外观差异在这里插入图片描述

3. 内容简介

  部分I:计算机视觉的基础
      ⋄ \\diamond 图像预处理
      ⋄ \\diamond 图像特征及描述
       ⋄ \\diamond 未有深度学习之前
  部分II:深度学习的理论基础
      ⋄ \\diamond BP神经网络详解
      ⋄ \\diamond 深度学习基础
  部分III:深度学习在计算机视觉中的应用
      ⋄ \\diamond 图像分类 ← \\leftarrow 卷积神经网络CNN
      ⋄ \\diamond 图像检测 ← \\leftarrow 区域卷积神经网络R-CNN
      ⋄ \\diamond 图像分割 ← \\leftarrow 全卷积神经网络FCN
      ⋄ \\diamond 图像描述 ← \\leftarrow 迭代神经网络RNN
      ⋄ \\diamond 图像生成 ← \\leftarrow 生成对抗网络GAN

3.1 计算机视觉的基础

  • 图像预处理: 1. 图像显示与存储原理
           2. 图像增强的目标
           3. 点运算:基于直方图的对比度增强
           4. 形态学处理
           5. 空间域处理:卷积
           6. 卷积的应用(平滑、边缘检测、锐化等)
           7. 频率域处理:傅里叶变换、小波变换
  • 图像特征及描述: 1. 颜色特征
               ⋄ \\diamond 量化颜色直方图
               ⋄ \\diamond 聚类颜色直方图
             2. 几何特征
               ⋄ \\diamond Edge,Corner,Blob
             3. 基于关键点的特征描述子
               ⋄ \\diamond SIFT,SURF,ORB
             4. 其他特征提取(LBP、Gabor)
  • 深度学习之前的方法: 1. 图像分割
                 ⋄ \\diamond 基于阈值、基于边缘
                 ⋄ \\diamond 基于区域、基于图论
               2. 人脸检测
                 ⋄ \\diamond Haar-like特征+级联分类器
               3. 行人检测
                 ⋄ \\diamond HOG+SVM
                 ⋄ \\diamond DPM

3.2 深度学习的理论基础

  • 神经网络与深度学习基础: 1. 神经网络
                   ⋄ \\diamond 神经元
                   ⋄ \\diamond 前馈网络
                   ⋄ \\diamond 梯度下降
                   ⋄ \\diamond 误差反向传播
                 2. 深度学习
                   ⋄ \\diamond 与传统神经网络的区别
                   ⋄ \\diamond 目标函数
                   ⋄ \\diamond 改进的梯度下降
                   ⋄ \\diamond 避免过适应

3.3 深度学习在计算机视觉中的应用

  • 识别 → \\rightarrow 内容是什么? 1. 人脸识别
               2. 字符识别
               3. 车牌识别
               4. 行为识别
               5. 步态识别

  • 基于深度学习的方法:图片分类 ← \\leftarrow 有没有?
    卷积神经网络CNN: • 计算机视觉中的基础网络
               • 有监督深度模型时代的起点
               • AlexNet → \\rightarrow VGG → \\rightarrow GoogLeNet → \\rightarrow ResNet → \\rightarrow ResNeXt
               • GoogLeNet
                • Inception V1 → \\rightarrow V2 → \\rightarrow V3 → \\rightarrow V4
                • Inception ResNet V1 → \\rightarrow V2
               • 结构趋势
                • 更深(Depth):8层 → \\rightarrow 1000+层
                • 更宽(Width):1分支 → \\rightarrow 4+分支
                • 更多基数(Cardinality ):1 → \\rightarrow 32

  • 基于深度学习的方法:检测 → \\rightarrow 目标在哪儿? 1. 物体检测
                         2. 人脸检测
                         3. 姿态检测
    区域卷积神经网络R-CNN: • 让基础网络具备区域输出能力
                  • 第1阶段:R-CNN → \\rightarrow SPP-Net → \\rightarrow Fast/Faster R-CNN
                  • 第2阶段:YOLO → \\rightarrow SSD → \\rightarrow R-FCN
                  • 目的
                   • 检测更快、更准确
                  • 工业应用
                   • 智能监控
                   • 辅助驾驶

  • 基于深度学习的方法:图片分割 → \\rightarrow 区域轮廓? 1. 前景分割
                          2. 语义分割
    全卷积神经网络FCN: • 让基础网络做像素输出
               • FCN → \\rightarrow SegNet/DeconvNet → \\rightarrow DeepLab
               • 目的
                • 语义推断
                • 分割更精确
               • 工业应用
                • 辅助驾驶
                • ……
               • 反卷积/转置卷积
    应用: 对医学、生物影像中的器官、 组织或细胞进行分割,即判断出影像中的每一个像素点是否属于器官、组织或细胞。
        生物医疗领域的图像分割。
        U-net和V-net。

  • 视觉&语言: 1. 图片描述 (Captioning)
          2. 图片问答(Question Answering)
    递归神经网络RNN: • 具有记忆功能,构建不定长序列数据的模型
               • Vanilla RNN → \\rightarrow LSTM → \\rightarrow GRU
               • 应用范围
                 • 文本序列
                 • 区域序列
                 • 视频序列
               • 研究问题
                 • 图片描述、问答
                 • 机器翻译

  • 图像生成: 1. 样本分布学习
          2. 超分辨率
          3. 以图生文
          4. 语义分割
    生成对抗网络GAN: • 网络结构
                • 生成器网络( Generator )
                • 判别器网络( Discriminator )
              • 网络改进
                • GAN → \\rightarrow CGAN → \\rightarrow DCGAN → \\rightarrow wGAN
                • SRGAN
              • 应用范围:
                • 样本数据分布(生成)学习
                • 有监督问题的优化

  • 图片检索 → \\rightarrow 相似图片

4. 开源库与应用环境介绍

4.1 实践环境

  • Windows
  • OpenCV 3.4
  • Python 3.6+
  • TensorFlow 1.9+
  • Keras等

4.2 开源库

  • OpenCV
    • 函数库:计算机视觉,机器学习
    • 优化算法:2500+
    • 编程语言:C, C++, Java, Python, MATLAB
    • 系统:Windows, Linus, Mac OS, ios, android
    • 并行计算:CUDA, OpenCL
    • URL:http://opencv.org/
  • Caffe
    • 函数库:深度学习
    • 发布方:Berkeley Vision and Learning Center (BVLC)
    • 编程语言:C++, Python
    • 并行计算:CUDA
    • URL:http://caffe.berkeleyvision.org
    • 特色:
      • 在配置中定义模型并优化,不需要硬编码
      • 代码的可扩展性强
      • 运行速度非常快
  • Torch(PyTorch)
    • 函数库:深度学习
    • 发布方:Facebook
    • 编程语言:Lua(Python)
    • 并行计算:CUDA
    • URL:https://torch.ch(http://pytorch.org/)
    • 特色:
      • 使用动态计算图,提供了更快速的方法
      • 提供了运行在 GPU/CPU 之上、基础的张量操作库
      • 支持共享内存的多进程并发(multiprocessing )库
  • Tensorflow
    • 函数库:深度学习
    • 发布方:Google
    • 编程语言:Python
    • 并行计算:CUDA
    • URL: https://www.tensorflow.org/
    • 特色:
      • 多机、多GPU分布式
      • 适用于超大模型,超大数据集
      • Tensorboard将训练过程可视化
  • Keras
    • 函数库:深度学习
    • 发布方: Franois Chollet
    • 编程语言:Python
    • URL:https://keras.io
    • 特色:
      • 兼容 Theano 和 Tensorflow 的深度学习高级包
      • 用户友好,高度模块化,易扩展性

5. 环境搭建

5.1 安装Tensorflow

  CPU版本Tensorflow安装步骤 → \\rightarrow TensorFlow的安装(Anaconda+TensorFlow+PyCharm)

5.2 安装opencv

  打开命令窗口,输入pip install opencv-python后回车,进行安装。等待一会,出现Successfully installed opencv-python-4.5.2.52后表示安装成功!

在这里插入图片描述
  安装成功后,使用如下所示的代码进行验证。

#导入cv模块
import cv2 as cv
#读取图像,支持 bmp、jpg、png、tiff 等常用格式
img = cv.imread(r"C:\\Users\\Administrator\\Desktop\\test.jpg")
#创建窗口并显示图像
cv.namedWindow("Image")
cv.imshow("Image",img)
cv.waitKey(0)
#释放窗口
cv2.destroyAllWindows()

  运行上述程序,会将C:\\Users\\Administrator\\Desktop\\test.jpg路径下的图片在窗口显示出来,说明opencv安装成功。

以上是关于计算机视觉—— 基础介绍的主要内容,如果未能解决你的问题,请参考以下文章

计算机视觉框架OpenMMLab开源学习:基础介绍

CV学习资料《卷积神经网络与视觉计算》+《深度学习实践计算机视觉》+《视觉SLAM十四讲从理论到实践》电子资料代码分析

计算机视觉框架OpenMMLab开源学习:目标检测基础

计算机视觉概要和卷积神经网络基础概念

计算机视觉框架OpenMMLab开源学习:语义分割基础

机器人学机器视觉与控制:MATLAB算法基础pdf