遥感旋转目标检测模型:R3Det 实验记录

配置环境:

RTX3090 

PyTorch 1.9.0

CUDA 11.3 

cudnn 8.2.0

mmcv 0.5.9(旧版本)

opencv 3.4.4.19(旧版本)

DOTA数据集下载:DOTA

R3Det训练好的checkpoints(用于test测试,u8bj):百度网盘 请输入提取码

项目地址:GitHub - SJTU-Thinklab-Det/r3det-on-mmdetection: R3Det: Refined Single-Stage Detector with Feature Refinement for Rotating Object

论文:https://arxiv.org/abs/1908.05612

实验步骤:

一、安装

下载项目:

git clone https://github.com/SJTU-Thinklab-Det/r3det-on-mmdetection

运行安装脚本:

python setup.py install

卸载mmcv和opencv,重新安装配置要求的旧版本,否则后面会报错。

pip3 uninstall mmcv

pip3 uninstall opencv-python

输入指令查看是否安装成功项目的修改版mmdet

pip3 list
#包含以下库,即安装成功
mmdet (2.1.0+unknown, /usr/local/lib/python3.6/dist-packages/mmdet-2.1.0+unknown-py3.6-linux-x86_64.egg)

二、训练train

图片裁剪:修改dota_image_split.py中关于存储DOTA1.0数据集的位置

if __name__ == '__main__':
    trainsplit = DOTAImageSplitTool('../data/dota/train',
                                    '../data/dota/trainsplit',
                                    tile_overlap=(150, 150),
                                    tile_shape=(600, 600))
    trainsplit.split()
    valsplit = DOTAImageSplitTool('../data/dota/val',
                                  '../data/dota/valsplit',
                                  tile_overlap=(150, 150),
                                  tile_shape=(600, 600))
    valsplit.split()

运行图片裁剪脚本

python dota_image_split.py

修改./r3det-on-mmdetection/configs/r3det/datasets/dotav1_rotational_detection.py下的代码为裁剪后的数据集地址

data_root = '/home/slz/桌面/r3det-on-mmdetection-master/data/dota/'
trainsplit_ann_folder = 'trainsplit/labelTxt'
trainsplit_img_folder = 'trainsplit/images'
valsplit_ann_folder = 'valsplit/labelTxt'
valsplit_img_folder = 'valsplit/images'
val_ann_folder = 'val/labelTxt'
val_img_folder = 'val/images'
test_img_folder = 'test/images'

在根目录运行脚本文件,其中可能会出现一些路径问题,稍加修改可以解决

#在rtools目录下运行
python3 ../tools/train.py ../configs/r3det/r3det_r50_fpn_2x_CustomizeImageSplit.py

三、测试test

在根目录创建work_dirs目录,将下载好的checkpoints放到该目录下

#在rtools目录下运行
python tools/test.py configs/r3det/r3det_r50_fpn_2x_CustomizeImageSplit.py work_dirs/r3det_r50_fpn_2x_20200616/epoch_24.pth --format-only --options submission_dir=work_dirs/r3det_r50_fpn_2x_20200616/submission

结果以test文件输出

sudo python3 test.py ../configs/r3det/r3det_r50_fpn_2x_CustomizeImageSplit.py ../work_dirs/epoch_24.pth --eval mAP

结果以mAP表格形式输出

四、可视化Visualize

在rootls目录下直接运行

python3 ./dota_result_visualize.py ../configs/r3det/r3det_r50_fpn_2x_CustomizeImageSplit.py ../work_dirs/r3det_r50_fpn_2x_20200616/epoch_24.pth

会导致随机只输出一张图片,还需手动保存。

解决方法:

修改mmdet库,以下为本机mmdet位置,不要修改项目中的mmdet

'/usr/local/lib/python3.6/dist-packages/mmdet-2.1.0+unknown-py3.6-linux-x86_64.egg/mmdet/apis/rtest.py' 

修改single_gpu_mergetiles_visualize方法成如下:

def single_gpu_mergetiles_visualize(model,
                                    data_loader,save_dir,
                                    show_score_thr=0.3):
    model.eval()
    dataset = data_loader.dataset
    prog_bar = mmcv.ProgressBar(len(dataset))
    for i, data in enumerate(data_loader):
        with torch.no_grad():
            result = model(return_loss=False, rescale=True, **data)
        img_show = image_merge(data)
        model.module.show_result(
            img_show,
            result,
            show=True,
            out_file=save_dir+'{}.png'.format(i),
            score_thr=show_score_thr)

        prog_bar.update()

添加了一个save_dir参数

修改rtools目录下的dota_result_visualize.py中的main函数下调用single_gpu_mergetiles_visualize方法代码添加并修改为

    save_dir='/home/slz/桌面/r3det-on-mmdetection-master/resultPNG/'
    single_gpu_mergetiles_visualize(model=model, data_loader=data_loader,save_dir=save_dir, show_score_thr=0.3)

再在rtools目录下运行

python3 ./dota_result_visualize.py ../configs/r3det/r3det_r50_fpn_2x_CustomizeImageSplit.py ../work_dirs/r3det_r50_fpn_2x_20200616/epoch_24.pth

即可保存结果到resultPNG目录下

五、一些常见问题整理

 R3Det中test无法出现mAP检验结果问题 

原因1:没有正确设置有标注的数据进行mAP计算检验(DOTA-test数据集无标注)

解决方法:将/home/slz/Desktop/r3det-on-mmdetection-master/configs/r3det/datasets/dotav1_rotational_detection.py设置testann_fileimg_prefix数据路径为val_ann_folderval_img_folder

 

原因2:没有正确使用mAP计算的指令

解决方法:sudo python3 test.py ../configs/r3det/r3det_r50_fpn_2x_CustomizeImageSplit.py ../work_dirs/epoch_24.pth --eval mAP

原因3:多线程死锁问题

解决方法:将/usr/local/lib/python3.6/dist-packages/mmdet-2.1.0+unknown-py3.6-linux-x86_64.egg/mmdet/core/evaluation/rmean_ap.py下面的多线程计算去掉

 训练无法保存结果

原因1:workflow设置的过大,导致无法保存

解决方法:/home/slz/Desktop/r3det-on-mmdetection-master/configs/r3det/r3det_r50_fpn_2x_CustomizeImageSplit.py下的workflow保存为1

原因2:运行train指令时没有指定输出路径

解决方法:运行train指令末尾记得添加--work-dir 路径

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 26
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值