[YOLO系列③] YOLOv3和YOLOv4优化策略
[YOLO系列②] YOLOv2十大改进点解析
[YOLO系列①] 物体检测评估指标和YOLO-v1实现思路
OpenCV之目标追踪
1.目标追踪
目标追踪(Object Tracking)是指在视频序列中持续追踪目标的位置,这是计算机视觉中的核心难点,其核心挑战包括遮挡、光照变化和快速运动。在视频分析、自动驾驶、智能监控、人机交互等领域中应用广泛。
1.按任务类型分类
- 单目标追踪(SOT, Single Object Tracking):只追踪一个初始帧中给定的目标,典型方法如:
- Siamese-based Tracking(孪生网络)
- Transformer-based Tracking
- 多目标追踪(MOT, Multi-Object Tracking):同时追踪多个目标,通常包括目标检测与数据关联两个阶段,典型方法如:
- 基于检测的跟踪(Tracking-by-Detection)
- 端到端方法
- 多摄像头追踪(MTMC, Multi-Camera Multi-Object Tracking):跨视角数据关联,更复杂的特征匹配,常结合ReID、时空建模、图神经网络等
2.传统目标追踪算法
除了基于深度学习的追踪算法,还有依赖传统的机器学习的目标追踪算法,它们适用于某些轻量级、实时或资源受限的场景(如嵌入式设备)。
OpenCV之停车场车位识别
1.实现流程
- 训练基于VGG16的迁移学习图像分类模型,使其能够分类每个车位有车或者没车
- 通过OpenCV处理停车场图片,分割成单个车位图像数据
- 基于训练模型识别并绘制出空车位
2.模型训练
1.VGG16
VGG16 是由牛津大学 Visual Geometry Group(VGG)在 2014 年提出的经典卷积神经网络(CNN)模型,主要用于图像分类任务。其核心特点是:
- 结构简单但深度大:由 16 层(13 个卷积层 + 3 个全连接层)组成,使用 3x3 小卷积核堆叠(通过多层小卷积核模拟大感受野)。
- ImageNet 竞赛的里程碑:在 2014 年 ImageNet 大规模视觉识别挑战赛(ILSVRC)中取得第二名(Top-5 错误率 7.3%),证明了深度网络对视觉任务的重要性。
- 标准化设计:所有卷积层使用相同配置(3x3 卷积核,步长 1,填充 same),全连接层统一为 4096 个神经元。
OpenCV之全景图像拼接
1.实现流程
通过提取图像中的特征点并匹配这些特征点来找到图像间的对应关系,再通过透视变换(Homography)将两幅图像拼接成一幅完整的图像,大致流程:
- 特征点检测与描述
- 使用 SIFT 算法检测两张图像中的关键点,并计算特征描述子(局部特征向量)
- 特征匹配
- 采用 KNN 近邻匹配(k=2)找到两张图像间的最佳匹配点对
- 使用 比值测试(ratio test) 过滤掉低质量的匹配点,减少误匹配
- 单应性矩阵计算
- 通过 RANSAC 算法 计算 单应性矩阵 (Homography, H),剔除误匹配点
- 单应性矩阵用于 透视变换,使一张图像对齐另一张图像
- 图像变换与拼接
- 利用 cv2.warpPerspective() 对图像A进行透视变换,使其尽可能与图像B对齐
- 将图像B放入最终结果中,合成拼接图像
- 可视化匹配结果
- 在两张图像上绘制匹配点连线,帮助观察特征匹配的效果
2.相关算法
1.SIFT(尺度不变特征变换)
SIFT (Scale-Invariant Feature Transform) 是一种 关键点检测和描述算法,能够在 不同尺度、旋转、光照变化 下仍然保持稳定的特征匹配。
OpenCV之信用卡卡号识别
1.OpenCV概述
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和图像处理库,主要用于 图像处理、视频分析、机器视觉、深度学习 等领域。它最初由 Intel 研发,现在由 OpenCV 组织 维护,目前支持 C++、Python、Java 等多种语言。擅长领域有:
- 图像处理
- 去噪:去掉照片上的噪点,让图像更清晰
- 平滑 & 锐化:模糊处理(比如美颜相机的磨皮)、增强边缘(让模糊的字变得更清楚)
- 颜色调整:可以把彩色图转换成黑白图(灰度化),或者增强对比度
- 图像分割:把图片中的不同区域分开,比如把人的头像从背景中抠出来(绿幕抠像)
- 物体检测与识别
- 人脸检测:找到照片或视频里的人脸,并画出边框(Haar 级联分类器、DNN)
- 车牌识别:用于交通监控,自动读取车牌号码
- 目标检测:找出图片中的特定物体,比如识别商店里的商品、扫描条形码等
基于循环神经网络的文本分类实践
1.循环神经网络(RNN)
环神经网络(Recurrent Neural Network, RNN)也叫递归神经网络,是专门处理序列数据的神经网络架构,其核心思想是通过循环连接使网络具备“记忆”能力,从而构建序列中时序之间的依赖关系。而处理具有时序或顺序关系的数据(如语言、语音、基因序列等)的核心挑战是理解序列中的上下文依赖关系。
RNN有隐藏状态(hidden state),可以保留和传递之前时刻的信息,也就是有记忆功能,从而可实现有上下文依赖性的数据处理:
通俗一点就像是人在读一句话:
- 读到 “我” → 记住
- 读到 “今天” → 结合前面的信息
- 读到 “很” → 继续理解上下文
- 读到 “开心” → 知道整体含义”我今天很开心“
1.RNN结构
RNN 通过隐藏状态(Hidden State) 存储历史信息,并通过时间步(Time Step)进行递归计算
- 输入层:接收当前时间步的输入 $x_t$
- 隐藏层:包含一个循环连接,用于存储历史信息:$h_t = f(W_h h_{t-1} + W_x x_t + b)$
- 输出层:根据隐藏状态计算输出 $y_t$
