yangjun dfa27afb39 提交PaddleDetection develop 分支 d56cf3f7c294a7138013dac21f87da4ea6bee829 hai 1 ano
..
fcosr dfa27afb39 提交PaddleDetection develop 分支 d56cf3f7c294a7138013dac21f87da4ea6bee829 hai 1 ano
ppyoloe_r dfa27afb39 提交PaddleDetection develop 分支 d56cf3f7c294a7138013dac21f87da4ea6bee829 hai 1 ano
s2anet dfa27afb39 提交PaddleDetection develop 分支 d56cf3f7c294a7138013dac21f87da4ea6bee829 hai 1 ano
tools dfa27afb39 提交PaddleDetection develop 分支 d56cf3f7c294a7138013dac21f87da4ea6bee829 hai 1 ano
README.md dfa27afb39 提交PaddleDetection develop 分支 d56cf3f7c294a7138013dac21f87da4ea6bee829 hai 1 ano
README_en.md dfa27afb39 提交PaddleDetection develop 分支 d56cf3f7c294a7138013dac21f87da4ea6bee829 hai 1 ano

README.md

简体中文 | English

旋转框检测

内容

简介

旋转框常用于检测带有角度信息的矩形框,即矩形框的宽和高不再与图像坐标轴平行。相较于水平矩形框,旋转矩形框一般包括更少的背景信息。旋转框检测常用于遥感等场景中。

模型库

模型 mAP 学习率策略 角度表示 数据增广 GPU数目 每GPU图片数目 模型下载 配置文件
S2ANet 73.84 2x le135 - 4 2 model config
FCOSR 76.62 3x oc RR 4 4 model config
PP-YOLOE-R-s 73.82 3x oc RR 4 2 model config
PP-YOLOE-R-s 79.42 3x oc MS+RR 4 2 model config
PP-YOLOE-R-m 77.64 3x oc RR 4 2 model config
PP-YOLOE-R-m 79.71 3x oc MS+RR 4 2 model config
PP-YOLOE-R-l 78.14 3x oc RR 4 2 model config
PP-YOLOE-R-l 80.02 3x oc MS+RR 4 2 model config
PP-YOLOE-R-x 78.28 3x oc RR 4 2 model config
PP-YOLOE-R-x 80.73 3x oc MS+RR 4 2 model config

注意:

  • 如果GPU卡数或者batch size发生了改变,你需要按照公式 lrnew = lrdefault * (batch_sizenew * GPU_numbernew) / (batch_sizedefault * GPU_numberdefault) 调整学习率。
  • 模型库中的模型默认使用单尺度训练单尺度测试。如果数据增广一栏标明MS,意味着使用多尺度训练和多尺度测试。如果数据增广一栏标明RR,意味着使用RandomRotate数据增广进行训练。

数据准备

DOTA数据准备

DOTA数据集是一个大规模的遥感图像数据集,包含旋转框和水平框的标注。可以从DOTA数据集官网下载数据集并解压,解压后的数据集目录结构如下所示:

${DOTA_ROOT}
├── test
│   └── images
├── train
│   ├── images
│   └── labelTxt
└── val
    ├── images
    └── labelTxt

对于有标注的数据,每一张图片会对应一个同名的txt文件,文件中每一行为一个旋转框的标注,其格式如下:

x1 y1 x2 y2 x3 y3 x4 y4 class_name difficult

单尺度切图

DOTA数据集分辨率较高,因此一般在训练和测试之前对图像进行离线切图,使用单尺度进行切图可以使用以下命令:

# 对于有标注的数据进行切图
python configs/rotate/tools/prepare_data.py \
    --input_dirs ${DOTA_ROOT}/train/ ${DOTA_ROOT}/val/ \
    --output_dir ${OUTPUT_DIR}/trainval1024/ \
    --coco_json_file DOTA_trainval1024.json \
    --subsize 1024 \
    --gap 200 \
    --rates 1.0

# 对于无标注的数据进行切图需要设置--image_only
python configs/rotate/tools/prepare_data.py \
    --input_dirs ${DOTA_ROOT}/test/ \
    --output_dir ${OUTPUT_DIR}/test1024/ \
    --coco_json_file DOTA_test1024.json \
    --subsize 1024 \
    --gap 200 \
    --rates 1.0 \
    --image_only

多尺度切图

使用多尺度进行切图可以使用以下命令:

# 对于有标注的数据进行切图
python configs/rotate/tools/prepare_data.py \
    --input_dirs ${DOTA_ROOT}/train/ ${DOTA_ROOT}/val/ \
    --output_dir ${OUTPUT_DIR}/trainval/ \
    --coco_json_file DOTA_trainval1024.json \
    --subsize 1024 \
    --gap 500 \
    --rates 0.5 1.0 1.5

# 对于无标注的数据进行切图需要设置--image_only
python configs/rotate/tools/prepare_data.py \
    --input_dirs ${DOTA_ROOT}/test/ \
    --output_dir ${OUTPUT_DIR}/test1024/ \
    --coco_json_file DOTA_test1024.json \
    --subsize 1024 \
    --gap 500 \
    --rates 0.5 1.0 1.5 \
    --image_only

自定义数据集

旋转框使用标准COCO数据格式,你可以将你的数据集转换成COCO格式以训练模型。COCO标准数据格式的标注信息中包含以下信息:

'annotations': [
    {
        'id': 2083, 'category_id': 9, 'image_id': 9008,
        'bbox': [x, y, w, h], # 水平框标注
        'segmentation': [[x1, y1, x2, y2, x3, y3, x4, y4]], # 旋转框标注
        ...
    }
    ...
]

需要注意的是bbox的标注是水平框标注,segmentation为旋转框四个点的标注(顺时针或逆时针均可)。在旋转框训练时bbox是可以缺省,一般推荐根据旋转框标注segmentation生成。 在PaddleDetection 2.4及之前的版本,bbox为旋转框标注[x, y, w, h, angle],segmentation缺省,目前该格式已不再支持,请下载最新数据集或者转换成标准COCO格式

安装依赖

旋转框检测模型需要依赖外部算子进行训练,评估等。Linux环境下,你可以执行以下命令进行编译安装

cd ppdet/ext_op
python setup.py install

Windows环境请按照如下步骤安装:

(1)准备Visual Studio (版本需要>=Visual Studio 2015 update3),这里以VS2017为例;

(2)点击开始-->Visual Studio 2017-->适用于 VS 2017 的x64本机工具命令提示;

(3)设置环境变量:set DISTUTILS_USE_SDK=1

(4)进入PaddleDetection/ppdet/ext_op目录,通过python setup.py install命令进行安装。

安装完成后,可以执行ppdet/ext_op/unittest下的单测验证外部op是否正确安装