旋转目标检测【1】如何设计深度学习模型

本文涉及的产品
实时计算 Flink 版,1000CU*H 3个月
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: 平常的目标检测是平行的矩形框,“方方正正”的;但对于一些特殊场景(遥感),需要倾斜的框,才能更好贴近物体,旋转目标检测来啦~

 前言

平常的目标检测是平行的矩形框,“方方正正”的;但对于一些特殊场景(遥感),需要倾斜的框,才能更好贴近物体,旋转目标检测来啦~

image.gif


一、如何定义旋转框

常见的水平框参数表达方式为(x,y,w,h),四个参数分别表示水平框中心的横纵坐标、宽度以及高度。常用的YOLOv5也是用这边表示方式的。

旋转框参数表示目前有两种:

    1. 五参数表示法 (𝑥,𝑦,ℎ,𝑤,𝜃),它在原来基础上添加多了一个角度𝜃,表示框的旋转情况。
    2. 八参数表示法量(𝑥1,𝑦1,𝑥2,𝑦2,𝑥3,𝑦3,𝑥4,𝑦4),分别表示框的四个顶点。


    1.1 五参数表示法 (𝑥,𝑦,ℎ,𝑤,𝜃)

    五参数旋转框表示法相比水平框多了旋转角度的信息,边界框参数可由一个5d向量(𝑥,𝑦,ℎ,𝑤,𝜃)确定,其中:

    (𝑥,𝑦) 为待检测目标最小外接矩形的中心

    ℎ 为该外接矩形的高

    𝑤 为该外接矩形的宽

    𝜃 为该外接矩形的高与x轴所呈角度

    常见的五参数表示法根据角度周期的不同可分为

      • Opencv定义法
      • 长边定义法

      image.gif

        • opencv法中,将与x轴成锐角的矩形边视为高,此时𝜃的取值范围为[0,𝜋⁄2),在此种定义法中,当旋转角度跨越𝜋⁄2时,定义的宽和高将进行互换,网络的回归目标也将发生突变,影响网络的收敛。
        • 针对这个问题,长边法将矩形框的长边定义为高,矩形框的短边定义为宽,此时𝜃的取值范围为[0,𝜋)。长边法能够有效的避免宽和高的互换问题。(推荐长边法

        注意:五参数表示法对边界框形状进行了限制,任何形状的边界框均表示成矩形。


        1.2 八参数表示法量(𝑥1,𝑦1,𝑥2,𝑦2,𝑥3,𝑦3,𝑥4,𝑦4)

        八参数表示法中并没有直接表示角度值,而是利用有序四边形四个角坐标的方式表达旋转框,也叫有序四边形定义法

        旋转边界框可以由一个8d向量(𝑥1, 𝑦1, 𝑥2, 𝑦2, 𝑥3, 𝑦3, 𝑥4, 𝑦4)唯一确定,其中(𝑥𝑛, 𝑦𝑛)表示边界框四个顶点的坐标

        image.gif

        旋转框基于一个最小的外接矩形,并将左边的点看作起始点,逆时针对外接矩形相交的四个点依次表达:

        image.gif

        优点:这种表示方法的灵活性高,边框形状可以表示为任意四边形。

        缺点:但是其需要回归的参数较多,计算复杂度较高,并且四个顶点之间不存在显著的区分关系,可能需要额外的后处理算法确定顶点的顺序。


        1.3 存在问题与待改进

        各种表示方法待改进地方:

          • 长边表示法中角度在边界值0°和180°会重合,但此时数值上却相差180,由于角度的周期性问题而导致损失值,影响了角度的预测精度。
          • Opencv表示法不仅会在边界值由于角度的周期性问题产生突变,旋转框的宽和高也会在边界处发生交换,由此产生边的交换问题进而导致旋转框角度和形状预测都会受到影响产生突变。
          • 有序四边形定义法虽然可以以设定的起始点进行表示,但是同样在临界处起始点容易发生位移现象,从而产生突变影响最终四边形的预测。

          解析一下,什么是边的交换性(Opencv表示法存在的问题

          下图在预测目标框时,发生了宽高互换现象,Opencv定义法规定的角度值是指目标框与x轴所成的锐角。范围为[-90°, 0°),由于理想的回归方式超出了角度设定范围,需要顺时针旋转至过渡框,再进行边的交换得到最终预测框,这样的回归方式导致损失值较大。

          image.gif

           解析一下,什么是角度周期性问题(长边表示法Opencv表示法存在的问题

          下图中蓝框是标签位置,角度为0°,当蓝框逆时针旋转2°时到达红框位置,此时检测框的角度为2°;当蓝框顺时针旋转2°时到达绿框的位置,此时检测框的角度为178°,这两种旋转方式的实际角度误差值很小,损失值却产生了一个周期的突变,增加了稳定收敛的难度.

          image.gif

          提出了问题,有解决方案吗?有的,后面文章结合具体的模型设计再介绍。



          二、如何设计深度学习模型

          2.1 模型损失函数

          如果采用五参数表示法 (𝑥,𝑦,ℎ,𝑤,𝜃),那么我们重点考虑𝜃角度,如何衡量计算损失函数,有两种思路:

            • 𝜃角度,采用分类思路,把角度划分为180个类别,每间隔一个度,划分为一个类别;所用的损失函数,可以用交叉熵损失
            • 𝜃角度,采用回归思路,把角度值先转为弧度值,然后对弧度值进行映射(sin、cos等函数),制作为标签;然后损失函数,可以用L1(绝对值损失)或L2(均方差损失)

            这样会存在问题吗,当前有一些问啦,后面再解释原理和方案,还结合具体的案例。

            如果采用八参数表示法量(𝑥1,𝑦1,𝑥2,𝑦2,𝑥3,𝑦3,𝑥4,𝑦4),那么我们可以直接四个边框顶点坐标进行回归,然后损失函数,可以用L1(绝对值损失)或L2(均方差损失)

            这样会存在问题吗,也是会的,后面再解释原理和方案。


            2.2 模型结构

            目标检测通常分为单阶段(YOLO、FCOS)和两阶段(R-CNN、Faster R-CNN)。

            这里以单阶段YOLO为示例,看看是如何设计模型结构的,来自百度的PP-YOLOE-R

            论文名称:PP-YOLOE-R: An Efficient Anchor-Free Rotated Object Detector

            论文地址:https://arxiv.org/abs/2211.02386

            image.gif


            它是采用五参数表示法 (𝑥,𝑦,ℎ,𝑤,𝜃),在检测头的分支中,添加多一个分支进行角度𝜃预测。

            image.gif


            image.gif


            后面再详细解释,这篇文章先作入门啦~

            后面介绍在YOLOv5、FOCS、R-CNN等基础上实现旋律目标检测。

            相关文章
            |
            3月前
            |
            机器学习/深度学习 算法 定位技术
            Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现裂缝的检测识别(C#代码UI界面版)
            本项目基于YOLOv8模型与C#界面,结合Baumer工业相机,实现裂缝的高效检测识别。支持图像、视频及摄像头输入,具备高精度与实时性,适用于桥梁、路面、隧道等多种工业场景。
            312 27
            |
            2月前
            |
            机器学习/深度学习 数据可视化 算法
            深度学习模型结构复杂、参数众多,如何更直观地深入理解你的模型?
            深度学习模型虽应用广泛,但其“黑箱”特性导致可解释性不足,尤其在金融、医疗等敏感领域,模型决策逻辑的透明性至关重要。本文聚焦深度学习可解释性中的可视化分析,介绍模型结构、特征、参数及输入激活的可视化方法,帮助理解模型行为、提升透明度,并推动其在关键领域的安全应用。
            239 0
            |
            17天前
            |
            机器学习/深度学习 存储 PyTorch
            Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
            Neural ODE将神经网络与微分方程结合,用连续思维建模数据演化,突破传统离散层的限制,实现自适应深度与高效连续学习。
            54 3
            Neural ODE原理与PyTorch实现:深度学习模型的自适应深度调节
            |
            3月前
            |
            机器学习/深度学习 人工智能 PyTorch
            AI 基础知识从 0.2 到 0.3——构建你的第一个深度学习模型
            本文以 MNIST 手写数字识别为切入点,介绍了深度学习的基本原理与实现流程,帮助读者建立起对神经网络建模过程的系统性理解。
            319 15
            AI 基础知识从 0.2 到 0.3——构建你的第一个深度学习模型
            |
            3月前
            |
            机器学习/深度学习 人工智能 自然语言处理
            AI 基础知识从 0.3 到 0.4——如何选对深度学习模型?
            本系列文章从机器学习基础出发,逐步深入至深度学习与Transformer模型,探讨AI关键技术原理及应用。内容涵盖模型架构解析、典型模型对比、预训练与微调策略,并结合Hugging Face平台进行实战演示,适合初学者与开发者系统学习AI核心知识。
            285 15
            |
            10月前
            |
            机器学习/深度学习 数据采集 TensorFlow
            使用Python实现智能食品消费模式分析的深度学习模型
            使用Python实现智能食品消费模式分析的深度学习模型
            270 70
            |
            3月前
            |
            机器学习/深度学习 人工智能 自然语言处理
            深度学习模型、算法与应用的全方位解析
            深度学习,作为人工智能(AI)的一个重要分支,已经在多个领域产生了革命性的影响。从图像识别到自然语言处理,从语音识别到自动驾驶,深度学习无处不在。本篇博客将深入探讨深度学习的模型、算法及其在各个领域的应用。
            479 3
            |
            4月前
            |
            机器学习/深度学习 存储 PyTorch
            PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统
            本文通过使用 Kaggle 数据集训练情感分析模型的实例,详细演示了如何将 PyTorch 与 MLFlow 进行深度集成,实现完整的实验跟踪、模型记录和结果可复现性管理。文章将系统性地介绍训练代码的核心组件,展示指标和工件的记录方法,并提供 MLFlow UI 的详细界面截图。
            146 2
            PyTorch + MLFlow 实战:从零构建可追踪的深度学习模型训练系统
            |
            8月前
            |
            机器学习/深度学习 数据采集 自然语言处理
            深度学习实践技巧:提升模型性能的详尽指南
            深度学习模型在图像分类、自然语言处理、时间序列分析等多个领域都表现出了卓越的性能,但在实际应用中,为了使模型达到最佳效果,常规的标准流程往往不足。本文提供了多种深度学习实践技巧,包括数据预处理、模型设计优化、训练策略和评价与调参等方面的详细操作和代码示例,希望能够为应用实战提供有效的指导和支持。
            |
            10月前
            |
            机器学习/深度学习 数据可视化 TensorFlow
            使用Python实现深度学习模型的分布式训练
            使用Python实现深度学习模型的分布式训练
            394 73