查看全课大纲(第 4 / 93 节)
  1. 1.计算机视觉概述
  2. 2.计算机视觉应用场景
  3. 3.困难与挑战
  4. 4.开源库介绍
  5. 5.图像显示与存储
  6. 6.CLAHE
  7. 7.腐蚀膨胀与开闭运算
  8. 8.滤波与边缘填充
  9. 9.各种滤波
  10. 10.图像金字塔
  11. 11.傅里叶变换
  12. 12.短时傅里叶变换与小波变换
  13. 13.颜色特征与颜色直方图
  14. 14.几何特征_边缘
  15. 15.几何特征-角点与斑点
  16. 16.局部特征-SIFT特征描述子
  17. 17.局部特征-SURF特征描述子
  18. 18.局部特征-ORB特征描述子
  19. 19.其他特征描述子
  20. 20.传统图像分割技术
  21. 21.GraphCut
  22. 22.GrabCut
  23. 23.人脸检测的传统方法
  24. 24.行人检测的传统方法HOG+SVM
  25. 25.行人检测DPM
  26. 26.人工神经网络的架构
  27. 27.目标函数与梯度下降
  28. 28.误差反向传播
  29. 29.可手算的神经网络
  30. 30.改进目标函数与克服梯度消散
  31. 31.神经网络之传统神经网络与深度网络的差异
  32. 32.各种梯度下降算法
  33. 33.如何选择合适的梯度下降算法
  34. 34.避免过适应
  35. 35.CNN的架构
  36. 36.CNN的误差反向传播_卷积层
  37. 37.CNN的误差反向传播_池化层
  38. 38.分类所用的数据集
  39. 39.Alexnet详解
  40. 40.VGG详解
  41. 41.GoogLeNet_v1
  42. 42.BatchNormalization
  43. 43.GoogLeNet_v3v4
  44. 44.ResNet
  45. 45.ResNeXt
  46. 46.CNN设计准则
  47. 47.图像检索与推土机距离
  48. 48.基于颜色相似性
  49. 49.基于形状相似性
  50. 50.基于纹理相似性
  51. 51.基于局部特征相似性
  52. 52.DL的二值哈希编码
  53. 53.高维空间中检索KDTree
  54. 54.高维空间中检索LSH
  55. 55.目标识别任务综述
  56. 56.RCNN
  57. 57.SPP-Net
  58. 58.Fast R-CNN
  59. 59.Faster R-CNN
  60. 60.R-CNN系列模型回顾
  61. 61.R-FCN的设计思路
  62. 62.R-FCN的实现
  63. 63.YOLOv1
  64. 64.YOLOv2_9000
  65. 65.YOLOv3
  66. 66.图像分割应用场景与数据集
  67. 67.上采样的实现方式
  68. 68.FCN网络架构的由来
  69. 69.FCN构建细节
  70. 70.DeepLabv1
  71. 71.CRF
  72. 72.DeepLabv2
  73. 73.DeepLabv3
  74. 74.特定的医学影像分割任务
  75. 75.U-Net
  76. 76.3D U-Net
  77. 77.V-Net
  78. 78.DenseNet
  79. 79.病理切片分析任务及数据集
  80. 80.病理切片分析
  81. 81.图说任务及其传统处理方法
  82. 82.深度语言模型与RNN
  83. 83.LSTM及其变种
  84. 84.NIC模型
  85. 85.SAT模型
  86. 86.图说的性能指标
  87. 87.判别模型与生成模型
  88. 88.KL散度与JS散度
  89. 89.VAE
  90. 90.GAN的基本原理
  91. 91.DCGAN与CGAN
  92. 92.Wasserstein GAN
  93. 93.SRGAN

开源库介绍

小象实战讲义 · 基于深度学习的计算机视觉

在开始深入学习计算机视觉与深度学习之前,我们需要了解支撑这些技术研究和应用开发的“利器”——核心的开源软件库。本节将系统介绍计算机视觉领域最基础、最广泛使用的库OpenCV,以及深度学习框架TensorFlow、Keras、PyTorch和Caffe。掌握这些工具是后续所有实践环节的基础。

💡 核心导读

  • OpenCV:跨平台的计算机视觉基础库,提供图像处理、传统机器学习的2500+优化算法。
  • TensorFlow:谷歌发布的深度学习框架,采用数据流图进行数值计算,支持CPU/GPU/TPU及分布式训练。
  • Keras:基于Python的高级神经网络API,对TensorFlow等后端进行封装,强调用户友好和快速实验。
  • PyTorch与Caffe:Facebook的PyTorch提供动态计算图,Caffe则以配置文件定义模型,各有其特色和应用场景。
  • 工具链与参考书:了解完整的开发环境搭建和权威学习资料,为后续学习铺平道路。

OpenCV:计算机视觉的基石

OpenCV(Open Source Computer Vision Library)是一个跨平台的计算机视觉库,可用于开发实时的图像处理、计算机视觉以及模式识别程序。其最大的优势在于开源和免费,广泛应用于商业和研究领域。

OpenCV的函数库非常全面,既包含计算机视觉领域所需的图像处理功能(如滤波、特征提取、形态学操作),也包含一些经典的传统机器学习算法(如SVM、k-means)。它集成了超过2500种优化算法,并支持C、C++、Java、Python和MATLAB等多种编程语言,可以在Windows、Linux、macOS、iOS和Android等主流操作系统上运行。

对于高性能计算,OpenCV支持CUDA和OpenCL等并行计算框架。CUDA是英伟达为其GPU专门设计的并行计算框架,而OpenCL则是一种更靠近底层硬件的开放式并行计算框架,提供了更大的灵活性。对于大多数上层算法应用者,了解CUDA的安装和使用即可。

重要提示:从 OpenCV 3.0 版本开始,一些较新或处于开发状态的算法被拆分到 opencv_contrib 仓库,并以 opencv-contrib-python 扩展包的形式发布。pip 安装时如需 contrib 功能,只需单独安装 opencv-contrib-python(它已包含主模块),不要再同时安装 opencv-python,否则两者都提供 cv2 包会互相覆盖冲突。

# 示例:使用OpenCV进行简单的图像处理(此处用NumPy数组模拟图像)
import numpy as np
import cv2

# 创建一个8x8的模拟灰度图像(一个简单的渐变图案)
# 使用arange生成0-7,再通过tile将这一行复制成8行,形成横向灰度渐变
row = np.arange(8, dtype=np.uint8)
gradient = np.tile(row, (8, 1))  # 每行都是0-7
print("模拟的8x8灰度图像数据:")
print(gradient)
print()

# 应用一个3x3的高斯模糊(需要转换为float32进行计算)
gradient_float = gradient.astype(np.float32)
blurred = cv2.GaussianBlur(gradient_float, (3, 3), sigmaX=1.0)
# 转换回uint8并四舍五入
blurred_uint8 = np.round(blurred).astype(np.uint8)
print("应用3x3高斯模糊后的图像数据:")
print(blurred_uint8)
模拟的8x8灰度图像数据:
[[0 1 2 3 4 5 6 7]
 [0 1 2 3 4 5 6 7]
 [0 1 2 3 4 5 6 7]
 [0 1 2 3 4 5 6 7]
 [0 1 2 3 4 5 6 7]
 [0 1 2 3 4 5 6 7]
 [0 1 2 3 4 5 6 7]
 [0 1 2 3 4 5 6 7]]

应用3x3高斯模糊后的图像数据:
[[1 1 2 3 4 5 6 6]
 [1 1 2 3 4 5 6 6]
 [1 1 2 3 4 5 6 6]
 [1 1 2 3 4 5 6 6]
 [1 1 2 3 4 5 6 6]
 [1 1 2 3 4 5 6 6]
 [1 1 2 3 4 5 6 6]
 [1 1 2 3 4 5 6 6]]

TensorFlow:深度学习的工业级框架

TensorFlow是谷歌发布的用于深度学习的开源软件库。它使用数据流图(Data Flow Graph) 的形式进行数值计算,这是其核心设计理念。在使用TensorFlow时,程序的前半部分是在“定义计算图”(相当于画蓝图),后半部分启动会话(Session)后才开始真正的运算。这种“先定义,后执行”的模式与常见的即时执行程序设计有所不同。

版本提示:本课程录制于 2019 年,本节介绍的框架生态以当时为准。今天 TensorFlow 已进入 2.x(默认即时执行,Keras 已整合为 tf.keras),PyTorch 则是研究与教学的主流选择;阅读时请把 TF1.x 的“先定义图、再开 Session”当作历史演进来理解。

TensorFlow的架构非常灵活,可以轻松部署在多种硬件平台上,包括CPU、GPU和谷歌专用的TPU(张量处理器)。这里简单区分一下这三者:

  • CPU:为通用计算场景设计,适合处理逻辑复杂的串行任务。
  • GPU:拥有大量运算核心,适合进行大规模的并行计算,如矩阵运算,因此能极大加速深度学习训练。
  • TPU:谷歌专门为张量(矩阵)运算设计的处理器,在特定深度学习任务上效率极高,但通用性不如CPU/GPU。

TensorFlow深度整合了CUDA框架。这意味着要在GPU上运行TensorFlow,必须先安装好英伟达的显卡驱动和CUDA工具包。TensorFlow还支持多机多GPU的分布式训练,能够处理超大规模模型和数据集。

此外,TensorFlow提供了一个强大的可视化工具——TensorBoard。它可以将训练过程、计算图结构、损失函数变化等信息可视化,帮助开发者理解和调试模型。

以下为说明 TensorFlow 1.x 计算图模式的伪代码,无法直接运行;在 TensorFlow 2.x 及以后,推荐使用 tf.keras 或 eager execution 模式。

# TensorFlow 1.x 风格伪代码示例
import tensorflow as tf

# 1. 定义计算图(蓝图阶段)
# 定义两个占位符,作为输入节点
a = tf.placeholder(tf.float32, shape=[None], name='input_a')
b = tf.placeholder(tf.float32, shape=[None], name='input_b')
# 定义计算操作:加法
c = tf.add(a, b, name='output_sum')

# 2. 执行计算(会话阶段)
with tf.Session() as sess:
    # 提供具体数据,运行计算图
    result = sess.run(c, feed_dict={a: [1.0, 2.0, 3.0], b: [4.0, 5.0, 6.0]})
    print(result)  # 输出: [5. 7. 9.]

Keras:深度学习的高级API与“积木”

鉴于TensorFlow等底层框架的复杂性,Keras应运而生。它是一个用Python编写的高级神经网络API,能够运行在TensorFlow、Theano或MXNet等后端之上。Keras的核心思想是对底层框架进行二次封装,提供用户友好、高度模块化和可扩展的接口,让开发者能像“搭积木”一样快速构建和实验深度学习模型。

Keras将常用的网络层(如全连接层、卷积层、池化层)、激活函数、优化器、损失函数等都封装成了独立的模块,开发者通过简单的组合和参数传递就能构建出复杂的网络。这极大地降低了深度学习的使用门槛,加快了原型开发速度。

然而,Keras有一个需要注意的问题:向下兼容性不佳。不同的小版本(如2.1.6与2.2.0)之间可能存在较大的API差异,导致旧代码在新版本上无法运行。实践中,我们常常需要为不同的项目创建独立的Python虚拟环境,并安装特定版本的Keras以保证代码兼容性。

其他重要框架:PyTorch与Caffe

除了TensorFlow和Keras,还有两个重要的深度学习框架需要了解。

PyTorch由Facebook发布。它最初是基于Lua语言的Torch框架,后来转向Python并更名为PyTorch。PyTorch最大的特点是采用了动态计算图,这意味着计算图是在代码运行过程中动态构建的,提供了更直观、更灵活的编程体验,尤其适合研究场景。与Keras依赖TensorFlow不同,PyTorch是直接驱动CUDA进行GPU计算的。

Caffe由伯克利视觉与学习中心(BVLC)发布,其核心开发者是贾扬清。Caffe采用C++编写,同时提供Python接口。它的一个显著特色是通过配置文件(prototxt)来定义模型结构,而不是通过硬编码。这种方式使得模型定义清晰、修改方便,代码扩展性强,并且运行速度非常快,在卷积神经网络图像处理任务中曾非常流行。

学习路径与参考资源

工欲善其事,必先利其器。除了掌握工具,建立扎实的理论基础同样重要。以下是一些经典的参考书籍,可以帮助你系统地学习:

  1. Python基础:《Python基础教程》是入门Python语言的优秀选择。
  2. OpenCV实战:《OpenCV 3计算机视觉:Python语言实现》详细讲解了如何使用OpenCV进行计算机视觉开发。
  3. TensorFlow入门:《TensorFlow实战》可以帮助你深入理解TensorFlow框架的使用。
  4. 深度学习理论:
    • 《深度学习》(俗称“花书”):由Ian Goodfellow等人撰写,是深度学习领域的权威教材。内容深入,涉及大量数学推导,阅读起来有一定挑战性,但啃下来后对原理的理解会非常透彻。
    • 《深度学习轻松学 核心算法与视觉实践》:内容相对更易读,涵盖了深度学习和计算机视觉的核心知识,与本课程的主题高度契合,可以作为重要的辅助学习资料。

📝 动手练一练

  1. 概念辨析:TensorFlow的“数据流图”计算模式与普通Python的即时执行模式有何根本区别?这种设计带来了哪些优点和缺点?
  2. 环境思考:如果现在你要为一个2019年编写的、基于Keras 2.1.6和TensorFlow 1.x的深度学习项目配置运行环境,你会采取哪些步骤来避免版本兼容性问题?
👉 点击查看参考答案
  1. 区别与优劣:

    • 根本区别:普通Python是命令式/即时执行,代码写完后立即按顺序计算。TensorFlow 1.x是声明式/符号式执行,先定义包含操作和占位符的计算图(蓝图),然后在会话中提供具体数据并执行整个图。
    • 优点:
      • 优化:框架可以在执行前对整个计算图进行优化(如操作融合、常量折叠)。
      • 部署:计算图可以轻松导出并部署到不同的设备(服务器、移动端)和环境。
      • 分布式:更容易实现跨设备和分布式的计算。
    • 缺点:
      • 调试困难:错误发生在图执行时,但定义图的代码可能早已执行完毕,调试信息不直观。
      • 学习曲线:编程范式与常规Python不同,需要适应。
      • 不灵活:动态控制流(如不同迭代次数不同的if-else)实现起来较复杂。
  2. 环境配置步骤:

    • 使用虚拟环境工具(如venv或conda)创建一个全新的、独立的Python环境。
    • 根据项目文档或requirements.txt,精确安装指定版本的Python、Keras(2.1.6)、TensorFlow(1.x的某个特定版本,如1.15.0)以及其他依赖库。
    • 在运行代码前,先在小段测试代码中验证主要库的版本是否匹配。
    • 如果项目涉及GPU,还需对应地安装特定版本的CUDA和cuDNN,以匹配TensorFlow 1.x的需求。

本章小结

本节我们系统梳理了进入计算机视觉与深度学习领域所必需的核心软件工具链。从处理图像的基础库OpenCV,到构建模型的深度学习框架TensorFlow、PyTorch、Caffe,再到提升开发效率的高级API Keras,每一环都是实践之路上的重要拼图。理解它们的特点、适用场景以及相互关系,是后续开展所有代码实践和模型研究的前提。

📋 行动清单

  • 访问OpenCV、TensorFlow、PyTorch官网,了解其最新文档和社区动态。
  • 在自己的电脑上尝试配置一个包含Python、OpenCV和TensorFlow CPU版本的基础开发环境。
  • 翻阅《深度学习》(花书)或《深度学习轻松学》的目录,对即将学习的理论知识体系建立初步印象。

—— 小象教研组