作者:碎碎念囧雷 | 来源:互联网 | 2023-09-02 15:47
目标检测
- 一、何谓目标检测?
- 二、两个阶段
- 二、工具介绍
- 三、构建一个传统的目标检测方法流程
- 1、提供待检测图片
- 2、选取候选区域
- 3、特征提取
- 4、特征分类
- 5、非极大值抑制
一、何谓目标检测?
目标检测包含两个方面:
1、使计算机能够识别图片中的目标(物体、动物等)是什么。
2、检测出这个目标的位置在哪里。
目标检测已经在自动驾驶、安保监控、医疗影像、机器视觉等领域大量应用。但目标检测在实时性、抗干扰性、工业应用等方面还存在很多阻碍。
二、两个阶段
传统检测算法
步骤 |
方法 |
问题 |
效果 |
---|
候选区域的选取 |
滑动窗口法 |
选择策略无针对性 |
性能低下 |
特征提取 |
人工设计的特征HOG |
鲁棒性不强 |
准确性不高 |
使用分类器进行分类 |
使用SVM分类器 |
|
|
非极大值抑制 |
NMS |
|
|
基于深度学习的检测算法。
基于深度学习的检测算法可分为两类:
一类是基于候选区域(Region Proposal)的方法:
步骤 |
方法 |
---|
候选区域的选取 |
选择性搜索算法 (Selective Search ) |
特征提取 |
卷积神经网络(CNN) |
使用分类器进行分类 |
使用SVM分类器 |
非极大值抑制 |
NMS |
另一类是基于回归分类的目标检测算法:
直接使用卷积神经网络预测目标所属类别的概率和其在图片中的位置坐标。
二、工具介绍
OpenCV 是一个基于 C++ 编写的轻量级高效的开源许可发行的跨平台计算机视觉库,可运行在多种操作系统上:Windows、Mac OS、linux、Android。同时其还提供 Python、Ruby 等语言的接口方便开发者调用。
NumPy 是一个支持处理多维度大型矩阵的 Python 科学计算包。在对图像进行处理时经常会用到 NumPy,OpenCV 中读取存储图片都是以 NumPy 形式完成的。利用 NumPy 我们可以轻松的以多维数据的形式呈现图片,并对图片进行重组、计算、数值分析等操作。
TensorFlow 是一个开源的机器学习框架,其广泛应用于机器学习和深度学习算法实现上。其可运行在多种平台上,如 PC、移动和分布式平台。支持多种计算机语言:C++、Python、java、Go等。由于其灵活、便捷、高性能以及活跃的社区等因素使得 TensorFlow 成为目前最受欢迎的机器学习开源框架之一。
scikit-learn 是基于 Python 的开源机器学习工具,其涵盖大部分机器学习算法,包括分类、回归、非监督分类、数据降维、数据预处理等,是一款高效的数据挖掘和分析的工具。其通过 NumPy、SciPy 和 Matplotlib 等实现多种算法并且可在各种环境中使用。
scikit-image 是一个基于 Python 的开源图像处理工具,其将图片作为 NumPy 数组,并包括分割、几何变换、过滤等处理方法。
三、构建一个传统的目标检测方法流程
1、提供待检测图片
2、选取候选区域
然后将滑动窗口(Sliding Windows)和图像金字塔(Image Pyramid)这两种方法相结合,从图片中选择出一些区域。
3、特征提取
接下来通过一些算法提取出这些区域的特征信息。
4、特征分类
然后通过机器学习的分类器对提取的特征分类。
5、非极大值抑制
目标检测的输出结果一般是使用矩形框标记出要检测的目标,但是使用滑动窗口和图像金字塔时在同一个目标上会标记出多个矩形框,所以我们需要使用非极大值抑制(Non-maxima suppression)来剔除多余的矩形框,确保每个目标只用一个矩形框标记。