MMRotate框架学习(一)

MMRotate框架学习(一)

MMRotate中的旋转框定义

图像空间采用右手坐标系 (y,x) ,即 y轴 是从上->下, x轴是从左->右。 此时存在2种相反的旋转方向,顺时针和逆时针。

旋转变换

顺时针(CW)

顺时针正角度,逆时针负角度。(上负下正)

0-------------------> x (0 rad)
|  A-------------B
|  |             |
|  |     box     h
|  |   angle=0   |
|  D------w------C
v
y (pi/2 rad)
顺时针的旋转矩阵

因为采用的是右手坐标系,所以顺时针的旋转矩阵与普通坐标系逆时针的旋转矩阵是一样的。

{\begin{split}\begin{pmatrix} \cos\alpha & -\sin\alpha \\ \sin\alpha & \cos\alpha \end{pmatrix}\end{split}}

顺时针的旋转变换

通过旋转变换,可以通过目标框中心点,求得旋转后目标框的任意点坐标的公式,在代码中实现。

\begin{split}P_A= \begin{pmatrix} x_A \\ y_A\end{pmatrix} = \begin{pmatrix} x_{center} \\ y_{center}\end{pmatrix} + \begin{pmatrix}\cos\alpha & -\sin\alpha \\ \sin\alpha & \cos\alpha\end{pmatrix} \begin{pmatrix} -0.5w \\ -0.5h\end{pmatrix} \\ = \begin{pmatrix} x_{center}-0.5w\cos\alpha+0.5h\sin\alpha \\ y_{center}-0.5w\sin\alpha-0.5h\cos\alpha\end{pmatrix}\end{split}

逆时针(CCW)

顺时针负角度,逆时针负角度。(上正下负)

0-------------------> x (0 rad)
|  A-------------B
|  |             |
|  |     box     h
|  |   angle=0   |
|  D------w------C
v
y (-pi/2 rad)
逆时针的旋转矩阵

\begin{split}\begin{pmatrix} \cos\alpha & \sin\alpha \\ -\sin\alpha & \cos\alpha \end{pmatrix}\end{split}

逆时针的旋转变换

{\begin{split}P_A= \begin{pmatrix} x_A \\ y_A\end{pmatrix} = \begin{pmatrix} x_{center} \\ y_{center}\end{pmatrix} + \begin{pmatrix}\cos\alpha & \sin\alpha \\ -\sin\alpha & \cos\alpha\end{pmatrix} \begin{pmatrix} -0.5w \\ -0.5h\end{pmatrix} \\ = \begin{pmatrix} x_{center}-0.5w\cos\alpha-0.5h\sin\alpha \\ y_{center}+0.5w\sin\alpha-0.5h\cos\alpha\end{pmatrix}\end{split}}

在MMRotate中,旋转框的旋转方向默认为顺时针(CW)方向

旋转框定义

OpenCV定义法

OpenCV旧版本定义(<4.5.1)

OpenCV在版本4.5.1之前,表示形式为(xoc,yoc,woc,hoc,θoc),θoc[π/2,0){(x_{oc},y_{oc},w_{oc},h_{oc},{\theta}_{oc}),{\theta}_{oc}∈[-\pi/2,0)}

角度的由宽W与x轴所成的负的锐角或者直角

OpenCV新版本定义(>=4.5.1)

OpenCV在版本4.5.1之后修改了角度定义范围,表示形式为(xoc,yoc,woc,hoc,θoc),θoc(0,π/2]{(x_{oc},y_{oc},w_{oc},h_{oc},{\theta}_{oc}),{\theta}_{oc}∈(0,\pi/2]}

角度的由宽W与x轴所成的正的锐角或者直角

新旧版本的转换关系如下图所示:

在MMRotate中,旋转框的定义方式采用OpenCV新版本定义法

MMRotate框架结构

MMRotate主要包括四个部分, datasets, models, core and apis

  • datasets 用于数据加载和数据增强。
  • models 主要包括各类模型和损失函数。
  • core 为模型训练和评估提供工具。
  • apis 为模型训练、测试和推理提供的API接口。

关于Dataset,目前已完成DOTA_v1.5、HRSC2016、SSDD的预处理,还剩下HRSID和DOTA_V1.0

关于Model, 目前在尝试跑Rotated-RetinaNet模型,使用HRSC2016,目前还在调整代码,目前没有遇到问题