当前位置: 首页 > news >正文

物体检测算法:R-CNN,SSD,YOLO

这,只是一段简短的介绍

目标检测

下面简单讲解目标检测里面使用的常用算法。

区域卷积神经网络

R-CNN

在这里插入图片描述

  • 使用启发式搜索算法来选择锚框
  • 使用预训练模型来对每个锚框抽取特征
  • 训练一个SVM来对类别分类
  • 训练一个线性回归模型来预测边缘框偏移

但是上述选择有个问题,就是锚框每次选到的大小不一样,这样如何使得这些锚框最后变成一个 batch?下面介绍 RoI Pooling

兴趣区域(RoI)池化层

  • 给定一个锚框,均匀分割成 n × m n×m n×m 块,输出每块里的最大值
  • 不管锚框多大,总是输出 n m nm nm 个值
  • 可能切的不是很均匀,这样就需要取整
  • 让每个锚框都可以变成自己想要的形状
    在这里插入图片描述

Fast RCNN

  • 使用 CNN 对图片抽取特征
  • 使用 RoI 池化层对每个锚框生成固定长度特征
    在这里插入图片描述

Faster R-CNN

  • 使用一个区域提议网络来替代启发式搜索来获得更好的锚框
    在这里插入图片描述
    用一个神经网络来替代之前的选择性搜索的算法。

Mask R-CNN

  • 如果有像素级别的标号,使用FCN来利用这些信息
    在这里插入图片描述

总结

  • R-CNN 是最早、也是最有名的一类基于锚框和 CNN 的目标检测算法
  • Fast/Faster R-CNN 持续提升性能
  • Faster R-CNN 和 MaskR-CNN 是在最求高精度场景下的常用算法

单发多框检测(SSD)

生成锚框

  • 对每个像素,生成多个以它为中心的锚框
  • 给定 n n n 个大小 s 1 , … , s n s_1, \ldots, s_n s1,,sn m m m 个高宽比,那么生成 n + m − 1 n + m - 1 n+m1 个锚框,其大小和高宽比分别为:
    • ( s 1 , r 1 ) , ( s 2 , r 1 ) , … , ( s n , r 1 ) , ( s 1 , r 2 ) , … , ( s 1 , r m ) (s_1, r_1), (s_2, r_1), \ldots, (s_n, r_1), (s_1, r_2), \ldots, (s_1, r_m) (s1,r1),(s2,r1),,(sn,r1),(s1,r2),,(s1,rm)

SSD模型

  • 一个基础网络来抽取特征,然后多个卷积层块来减半高宽
  • 在每段都生成锚框
    • 底部段来拟合小物体,顶部段来拟合大物体
  • 对每个锚框预测类别和边缘框
    在这里插入图片描述

总结

  • SSD通过单神经网络来检测模型
  • 以每个像素为中心的产生多个锚框
  • 在多个段的输出上进行多尺度的检测

YOLO(你只看一次)

  • SSD 中锚框大量重叠,因此浪费了很多计算
  • YOLO 将图片均匀分成 S × S S×S S×S 个锚框
  • 每个锚框预测 B B B 个边缘框
  • 后续版本 (V2,V3,V4…) 有持续改进

QA 思考

Q1:测试数据增强做平均,是结果做平均还是概率做平均?还是看实际情况选择?
A1:概率做平均,也就是基本上会在 softmax 上面做平均。

Q2:RoI 会不会把图片压变形?这样的话对预测有影响吗?
A2:RoI 操作本身并不直接导致图像压变形。RoI操作通常用于从图像中提取感兴趣的特定区域,以便进一步处理或分析。然而,在处理过程中如果RoI的提取或者后续处理(如resize到固定大小)不注意保持原始的比例,可能会导致所提取区域的图像被拉伸或压缩,从而出现变形的情况。
这种变形是否会影响预测结果取决于具体情况。对于大部分物体而言,由于其宽高比在一定范围内变化不大,因此即使发生轻微变形也可能不会对最终的预测结果造成显著影响。但对于一些对形状特别敏感的任务或对象(例如长颈鹿这类具有明显比例特征的对象),图像的变形可能会干扰模型的判断能力,进而影响预测准确性。
为了避免这种情况,可以在设计算法时采取措施来保证RoI操作后图像的比例不变,比如通过适当的填充或是采用能够适应不同比例输入的网络结构等方法。这样可以最大限度地减少因图像变形带来的不利影响。

Q3:锚框的位置怎么在训练过程中越来越接近目标框?
A3:在训练过程中,锚框的位置通过最小化定位损失逐渐接近目标框,利用梯度下降算法根据损失函数的反馈调整锚框的坐标偏移量,同时结合分类损失确保锚框正确分类,随着迭代优化,锚框不仅位置逼近目标框,其大小和形状也逐步调整以匹配目标框的实际尺寸,从而实现精准的目标检测。

相关文章:

  • Qt 交叉编译详细配置指南
  • Vue进行前端开发流程
  • 图解Java运行机制-JVM、JRE、JDK区别
  • 方法的重写
  • ubuntu安装openWebUI和Dify【自用详细版】
  • 【多源BFS】01 矩阵 / 飞地的数量 / 地图中的最高点 / 地图分析 / 腐烂的苹果
  • 01-JVM 内存模型与 GC 原理
  • 蓝桥杯-蓝桥幼儿园(并查集)
  • 采用小程序远程控制LED灯亮灭
  • 数据库中的数组: MySQL与StarRocks的数组操作解析
  • Pytorch的安装和使用
  • 深入解析 Jenkins Agent 的 .jnlp 启动文件
  • MuJoCo 仿真 + TOPPRA 最优时间轨迹规划!机械臂运动效率拉满(附代码)
  • 小刚说C语言刷题——第18讲 循环之while和do-while语句
  • 深入理解Spring IoCDI
  • Pandas 库
  • Streamlit性能优化:缓存与状态管理实战
  • Elasticsearch:加快 HNSW 图的合并速度
  • 自己搭建cesium应用程序
  • 河道违建检测数据集VOC+YOLO格式223张1类别
  • “苏河超级管”调研:桥下公园“留白”很好,指引差点
  • 巴基斯坦称成功拦截印度导弹,空军所有资产安全
  • 最快3天开通一条定制公交线路!上海推出服务平台更快响应市民需求
  • 追光|铁皮房、土操场,这有一座“筑梦”摔跤馆
  • 毗邻三市人均GDP全部超过20万元,苏锡常是怎样做到的?
  • 《2025城市青年旅行消费报告》发布,解码青年出行特征