2017论文阅读:Learning a Rotation Invariant Detector with Rotatable Bounding Box

2023-05-16

文章代码已开源

文章目录

  • 文章贡献
  • 1. Rotatable bounding box
  • 2. Rotation invariant detection
    • 2.1 模型结构总览
    • 2.2 模型训练
    • 2.3 实现的细节
  • 3 实验&结果

文章贡献

提出了一种新型检测方法DRBox(Detector using RBox) ——应用了rotatable bounding box,DRBox在图片中物体方向随机的情况下可以准确识别(并且生成准确的bbox),与当时的Faster R-CNN、SSD相比,有较大的提升。
在这里插入图片描述

1. Rotatable bounding box

在这里插入图片描述由于加入了角度,RBoxes比传统的bbox更加复杂:

  • 传统的IoU计算:
    I o U ( A , B ) = a r e a ( A ∩ B ) / a r e a ( A ∪ B ) IoU (A,B) = area (A ∩ B) /area (A ∪ B) IoU(A,B)=area(AB)/area(AB)
  • 带有角度的IoU计算: θ A θ_A θA θ B θ_B θB分别是RBox A 和B的角度,但 A ^ \hat{A} A^是中心点位置以及大小(x,y,w,h)与A相等,但是角度与B相等的RBox。
    在这里插入图片描述

上述两个ArIoU的定义的差异体现在A、B的角度接近180度时,第二个定义在物体的头尾难以区分的时候,会忽略物体的头尾角度。

ArIoU和IoU有不同的应用时机。ArIoU用在训练中,可促使检测模型学习到正确的角度,而IoU用在非极大值抑制时,因此角度不正确的预测boxes会被有效排除。

2. Rotation invariant detection

2.1 模型结构总览

在这里插入图片描述
1.前面的若干个卷积层都是用来提取特征的,最后一层的prediction层输出预测值;

2.最后一层的prediction层有K个通道,对应每个位置的K个预先定义的RBoxes(就是图中各种固定角度和大小的RBoxes),对每一个RBox,prediction层输出:

  • 置信度vector(即 该RBox是“target object”的概率和是“背景”的概率);
  • 一个5维vector(预测的RBox与预先定义的RBox的偏置值,正好5个参数);

3.需要decoding过程:将偏置值转变成精确的预测RBox;

4.非极大值抑制

Multi-angle prior RBox在模型中的作用非常关键,在每个位置上prior RBoxes可以旋转一系列的角度;RBoxes比例根据物体类型取固定的值,这可以减少prior RBoxes的总数。(但是可能无法适应更多种类的物体,不同种类的物体有不同的长宽比)

利用预定义Multi-angle prior RBoxes的策略,网络模型经过训练后将检测任务分成一系列子任务(对应一系列角度):每个子任务集中在一个小的角度范围,这可以减少物体旋转带来的困难。

2.2 模型训练

总体上:从SSD的训练过程引入“角度估计”,得到DRBox的训练方法。

  • 训练时,每个ground truth RBox会被分配几个预定义的RBoxes,具体怎么分配由两者之间的ArIoU决定;ArIoU是一个不满足交换律的函数,虽然cosin函数是偶函数,但是 A ^ \hat{A} A^的定义使其式子中A和B的地位不等,不满足交换律。
  • 对一系列预定义的RBox,计算它们与ground truth RBox G G G的ArIoU值,当一个RBox P P P G G G A r I o U ( P , G ) > 0.5 ArIoU(P, G) > 0.5 ArIoU(P,G)>0.5 P P P被分配(assigned)到 G G G,用原文的话说: P P P G G G已经“match”。
  • 分配之后,与真值match的RBoxes被认为是正样本,在后续用于计算位置(x,y)和角度损失。

ArIoU的引入对于在训练过程中选择match的预定义RBoxes有帮助,经过训练,模型可以学习到角度这一信息。

经过分配过程后,大部分预定义的RBoxes是负样本,正样本是小部分,如果直接使用它们来训练模型是不好的。作者为了平衡正负样本的数量,应用了hard negative mining(从预定义的RBoxes中挖掘一些false positive样本,它们是容易被模型误以为是正样本的负样本——也就是hard negative,用它们来作为负样本的一部分对模型的分类能力提升更好),引用原文:

We apply hard negative mining to decrease the number of the negative samples.

DRBox模型的objective loss函数是在SSD模型的基础上新增了一个与角度有关的项:
在这里插入图片描述

  • N是RBoxes的个数;
  • 置信度损失函数 L c o n f ( c ) L_{conf(c)} Lconf(c)是一个针对所有被选择的正样本和负样本的两类softmax损失函数(two class softmax loss over all selected positive and negative samples), c c c是二维的置信度向量;
  • L r b o x ( x , l , g ) L_{rbox(x, l, g)} Lrbox(x,l,g)这一项与SSD和Faster R-CNN的相似,它是预测值RBox l l l 与真值RBox g g g之间的smooth L1损失
    在这里插入图片描述
    • x i j x_{ij} xij是一个预测器,其取值是0或者1,它是对“第i个预定义RBox和第j个Rbox之间是否匹配”进行判断,匹配则取值为1。
    • l ^ \hat{l} l^ g ^ \hat{g} g^分别是 l l l g g g与它们对应的预定义RBox p p p的偏置参数(我的理解是: l l l g g g对应一个相同的预定义RBox p p p,但是 l l l g g g的位置不是完全相同的,它们对RBox p p p的偏置参数分别是 l ^ \hat{l} l^ g ^ \hat{g} g^;这说明 l ^ \hat{l} l^ g ^ \hat{g} g^都是向量)
    • 6a , 6b和6c分别是位置回归项、大小回归项、角度回归项,角度回归项使用了tangent函数来适应角度的周期性变化,
      在这里插入图片描述

2.3 实现的细节

  • PYRAMID INPUT:原图被缩放成不同分辨率的图像,然后裁剪出一系列300×300大小的重叠的子图像,DRBox模型对每个子图像都进行推理,但是只检测出尺寸合适的目标;对全图的检测结果应用了非极大值抑制,这可以抑制子图像的重复检测结果;pyramid input输入策略方便检测网络在大型物体和小型物体之间共享特征(因为它们可能是相同的物体);在
  • CONVOLUTION ARCHITECTURE:DRBox使用阉割版VGG网络作检测,其全连接层、以及conv4_3后的卷积层、池化层被阉割。在阉割版VGG的conv4_3后接一个3 × 3卷积层。DRBox的容纳范围是108×108像素,比108像素大的目标可能无法检测到。
  • PRIOR RBOX SETTINGS:pyramid input策略确保了预定义的RBoxes可以覆盖绝大部分不同尺寸的目标,从而保证模型能检测出不同大小尺寸的物体。作者对汽车识别、船舶识别、飞机识别分别训练了三个不同的DRBox模型——由于船的头尾方向不容易辨别,其角度是0:30:180。而汽车和飞机的头尾方向容易辨别,所以其角度设置成0:30:330。

3 实验&结果

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2017论文阅读:Learning a Rotation Invariant Detector with Rotatable Bounding Box 的相关文章

  • JavaCV 录像机方向在纵向模式下不正确

    嗨 我正在使用https github com bytedeco javacv https github com bytedeco javacv 用于录制视频 使用横向模式时方向很好 但当我将方向更改为纵向模式时 视频旋转 90 度 任何人
  • 使用 Three.js 和 tween.js 以 90 度增量旋转对象以创建 360 度循环

    我有一个工作动画 但不是我想要的方式 我希望对象延迟旋转 90 度 有效 然后继续旋转 90 度 最终永远循环 无论我做什么 它总是会重置 即使我设置了 4 个补间 将我带到 360 最后一个重置为零的补间也会使整个对象向相反方向旋转 Th
  • 顺时针旋转数组

    我有一个二维数组 需要顺时针旋转 90 度 但是我不断收到 arrayindexoutofbounds public int rotateArray int arr first change the dimensions vertical
  • 如何检测 iPhone 正面朝上放在桌子上时是否正在旋转?

    有没有办法检测面朝上放在桌子上的 iPhone 是否正在旋转 我确实意识到这种运动不会由加速度计报告 也不会报告给 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrienta
  • SVG 圆起点

    如何更改 svg 圆的起始点 使其从 0 点钟开始逐渐动画化 默认圆形 svg 从 3 点钟开始 我当前的圈子 悬停动画 timeline position fixed width 500px height 500px top 50 lef
  • iPhone 旋转和全屏视频

    我遇到了一个奇怪的问题 需要帮助解决 我的应用程序始终以纵向模式运行 我明确希望它是这样的 在应用程序的一处 我有一个 UIWebView 它工作得很好 正如预期的那样 此 Web 视图并非始终显示 而是动态添加到主视图并根据用户操作删除
  • 在容器视图中均匀分布多个视图

    自动布局让我的生活变得困难 理论上 当我切换时它会非常有用 但我似乎一直在与之抗争 我制作了一个演示项目来尝试寻求帮助 有谁知道如何在调整视图大小时使视图之间的空间均匀增加或减少 以下是三个标签 手动垂直均匀间隔 我想要的是让他们在旋转时均
  • Android 将位图旋转 90 度会导致图像被压扁。需要在纵向和横向之间进行真正的旋转

    我正在尝试将位图图像旋转 90 度 以将其从横向格式更改为纵向格式 例子 A B C D e f g h i j k l 顺时针旋转90度变成 i e a j f b k g c l h d 使用下面的代码 来自在线示例 图像旋转 90 度
  • Android 旋转位图而不进行复制

    有没有办法旋转位图而不复制它 或者也许是保存位图的图像视图 现在我有类似的东西 Bitmap bm BitmapFactory decodeFile get the orientation Matrix m new Matrix m pos
  • iOS 6 中视图控制器的旋转不正确

    在我的应用程序中 我一直在使用现已弃用的 shouldAutoRotateToFace 方法 现在 当使用 iOS 6 模拟器时 当设备处于横向时 我的所有子视图都会旋转到纵向 有谁知道这可能是什么原因造成的 我已经尝试使用supporte
  • 根据已知的边界框坐标计算旋转矩形的大小

    我读了从旋转的矩形计算边界框坐标 https stackoverflow com questions 622140 calculate bounding box coordinates from a rotated rectangle了解如
  • 在android中使用多点触控进行旋转、缩放和移动

    我想在多点触摸事件上旋转 缩放和移动图像 它似乎工作正常 但工作不完美 我真的很想修复我的错误代码 所以请帮助我 我的代码在那里 public class ImageControl extends Activity DragView dra
  • 如何使用 jquery 旋转悬停图像?

    我试图在悬停时将 返回顶部 按钮旋转 360 度 而在鼠标离开时不取消旋转 我已经尝试了多种 jQuery 代码变体 但我似乎仍然无法让它工作 这是迄今为止我所得到的真实示例 CSS 悬停在图像之间 我尝试将 jQuery 更改为mouse
  • HTML5 文本画布在文本宽度大于允许的最大宽度时旋转

    朋友们 我发现旋转文本画布对象有点棘手 问题是 我正在绘制一个图形 但有时每个条形的宽度小于该条形的 值 所以我必须将 值 评定为 90 度 在大多数情况下它都会起作用 我正在做以下事情 a function x y text maxWid
  • 小米Exif方向标签错误

    我在用着ExifInterface对于通过检测方向标签从图库中选取的旋转图像 它正在工作 最近我在小米9 SE上测试了应用程序 发现相机拍摄的照片有方向标签8 旋转270 但照片方向是正确的 不需要旋转 为什么方向标签错误 如何找到正确的旋
  • 用于计算井字游戏独特状态的高效算法

    我正在尝试构建一个井字游戏来演示和实验机器学习算法 并且我发现了一个有趣的问题 例如 井字棋板可以是mirrored 但出于机器学习的目的 这两种状态是等效的 x o o x o o x x o o 同样地旋转 x o x o o o x
  • Java旋转非方形JPanel组件

    由于操作系统限制 我正在尝试旋转填充有文本标签的 GridLayout 以模拟纵向视图 它们所在的 JPanel 不是方形的 因此当旋转 90 度时 标签会根据 JPanel 的尺寸被切断 是否可以根据旋转调整布局大小以仍然适合 JPane
  • 为什么我的 FPS 相机一劳永逸地滚动?

    如果我忽略四元数代数的肮脏细节 我想我理解了旋转和平移变换背后的数学 但仍然不明白我做错了什么 为什么我的相机一劳永逸地滚动 更具体地说 我应该如何从相机的方向 旋转矩阵 计算相机视图矩阵 我正在用 Python 编写一个简约的 3d 引擎
  • 旋转设备后 Android 对话框重新打开

    我正在编写一个非常简单的应用程序来打开我的自定义共享对话框 XML 布局仅包含 1 个按钮
  • Unity Transform.LookAt 仅在一个轴上

    我一直在开发一款游戏 进展非常顺利 从这里得到了一些帮助 我再次需要它 所以我正在制作一个 2D 自上而下的射击游戏 我需要我的敌人看着玩家 显然敌人会在所有轴上旋转 因此是无敌的 或者看起来很奇怪 那么 如何让它只在Z轴上旋转呢 另外 如

随机推荐