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之前,表示形式为
角度的由宽W与x轴所成的负的锐角或者直角。
OpenCV新版本定义(>=4.5.1)
OpenCV在版本4.5.1之后修改了角度定义范围,表示形式为
角度的由宽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,目前还在调整代码,目前没有遇到问题
本博客所有文章均采用 CC BY-NC-SA 4.0 协议 ,禁止商用,转载请注明出处!