当前位置:   article > 正文

Oriented R-CNN完整复现HRSC2016以及训练自己的HBB数据集(DIOR)_dior数据集

dior数据集

一、复现前言

这个代码我硬生生的撸了3天,具体原因很简单适用于Linux系统,我尝试过自己笔记本的RTX3060显卡,前期OBBDetection安装老是出错。我还在一些服务器尝试,但都是windows的系统,都GG了,所以花钱跑在了平台,才运行了起来。

这个工程是适用于OBB标注的格式,一些博客的讲解也都是关于跑OBB标注的数据集,如果不知道OBB和HBB的标注区别请自行搜索。【代码工程本就有HBB的程序,稍微改一下即可】

 二、环境安装

 2.1、新建环境

  1. #新建obbdetection 环境
  2. conda create -n obbdetection python=3.6 -y
  3. source activate obbdetection
  4. #安装pytorch(请根据自己的cuda进行安装)
  5. conda install pytorch==1.6.0 torchvision==0.7.0 cudatoolkit=10.1 -c pytorch

2.2、OBBDetection和BboxToolkit

(1)将官方的https://github.com/jbwang1997OBBDetection和BboxToolkit打包下来,将OBBDetection里面的BboxToolkit替换掉即可,先安装BboxToolkit再安装OBBDetection。

  1. #安装BboxToolkit(默认主目录在OBBDetection下)
  2. cd BboxToolkit
  3. pip install -v -e . # or "python setup.py develop"
  4. cd ..


(2)安装mmcv和mmpycocotools,将{mmcv_version}替换为1.4.0我测的没有问题记得换掉后面的配置,mmpycocotools安装的时候有爆红,但是不影响我这边。

  1. pip install mmcv-full=={mmcv_version} -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.6.0/index.html --no-cache-dir
  2. pip install mmpycocotools

(3)安装OBBDetection,如果这一步没有问题,就配置ok!

  1. pip install -r requirements/build.txt
  2. pip install -v -e . # or "python setup.py develop"

三、Demo、训练、测试

3.1、跑Demo

(1)下载预训练权重,可以下载faster_rcnn_orpn_r50_fpn_3x_hrsc_epoch36.pth,我按照这个继续,进行测试。linux如果有界面的话,是有show image的,代码在mmdet/apis/inference.py下

plt.imshow(mmcv.bgr2rgb(img))
plt.show()

(2)如果没有界面的话,在这个程序后加上下面的代码,运行完以后会保存在主目录下

plt.savefig('./demo.jpg')

(3)下面是结果,挺不错的

 3.2、训练

(1)将HRSC2016数据集放在OBBDetection/data/HRSC2016,修改训练的数据集路径文件在configs/obb/base/datasets/hrsc.py,可在configs/obb/_base_/schedules/schedule_3x.py对跑的轮数进行修改。

total_epochs = 200

(2)重头训练和继续训练

  1. #重新训练
  2. python tools/train.py configs/obb/oriented_rcnn/faster_rcnn_orpn_r50_fpn_3x_hrsc.py --work-dir work_dirs
  3. #继续训练
  4. python tools/train.py configs/obb/oriented_rcnn/faster_rcnn_orpn_r50_fpn_3x_hrsc.py --work-dir work_dirs >xxxcbtrain202204051625.log 2>&1 &

3.3、测试

对第5轮进行测试

python tools/test.py configs/obb/oriented_rcnn/faster_rcnn_orpn_r50_fpn_3x_hrsc.py /root/OBBDetection/work_dirs/epoch_5.pth --eval mAP

四、跑自己的数据集,包括HBB类型的数据集(DIOR)

4.1、将数据集放在data下DIOR

4.2、进入到BboxToolkit\BboxToolkit\datasets\misc.py下,查看根据自己的需求修改,如果跑别的数据集的话,在DIOR的基础上修改

4.3、进入到configs\obb\_base_\datasets\dior.py下,修改代码obb改成hbb,修改自己的数据集路径

  1. data = dict(
  2. samples_per_gpu=2,
  3. workers_per_gpu=4,
  4. train=dict(
  5. type=dataset_type,
  6. xmltype='hbb',
  7. imgset=data_root + 'ImageSets/Main/trainval.txt',
  8. ann_file=data_root + 'Annotations',
  9. img_prefix=data_root + 'JPEGImages/',
  10. pipeline=train_pipeline),
  11. test=dict(
  12. type=dataset_type,
  13. xmltype='hbb',
  14. imgset=data_root + 'ImageSets/Main/test.txt',
  15. ann_file=data_root + 'Annotations',
  16. img_prefix=data_root + 'JPEGImages/',
  17. pipeline=test_pipeline))
  18. evaluation = None

4.4、在configs\obb\oriented_rcnn下新建模型文件faster_rcnn_orpn_r50_fpn_3x_dior.py,直接复制faster_rcnn_orpn_r50_fpn_3x_hrsc.py的代码,直接修改数据集即可!

  1. _base_ = [
  2. '../_base_/datasets/dior.py',
  3. '../_base_/schedules/schedule_3x.py',
  4. '../../_base_/default_runtime.py'
  5. ]
  6. model = dict(
  7. type='OrientedRCNN',
  8. pretrained='torchvision://resnet50',
  9. backbone=dict(
  10. type='ResNet',
  11. depth=50,
  12. num_stages=4,
  13. out_indices=(0, 1, 2, 3),
  14. frozen_stages=1,
  15. norm_cfg=dict(type='BN', requires_grad=True),
  16. norm_eval=True,
  17. style='pytorch'),
  18. neck=dict(
  19. type='FPN',
  20. in_channels=[256, 512, 1024, 2048],
  21. out_channels=256,
  22. num_outs=5),
  23. rpn_head=dict(
  24. type='OrientedRPNHead',
  25. in_channels=256,
  26. feat_channels=256,
  27. anchor_generator=dict(
  28. type='AnchorGenerator',
  29. scales=[8],
  30. ratios=[0.5, 1.0, 2.0],
  31. strides=[4, 8, 16, 32, 64]),
  32. bbox_coder=dict(
  33. type='MidpointOffsetCoder',
  34. target_means=[.0, .0, .0, .0, .0, .0],
  35. target_stds=[1.0, 1.0, 1.0, 1.0, 0.5, 0.5]),
  36. loss_cls=dict(
  37. type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0),
  38. loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)),
  39. roi_head=dict(
  40. type='OBBStandardRoIHead',
  41. bbox_roi_extractor=dict(
  42. type='OBBSingleRoIExtractor',
  43. roi_layer=dict(type='RoIAlignRotated', out_size=7, sample_num=2),
  44. out_channels=256,
  45. extend_factor=(1.4, 1.2),
  46. featmap_strides=[4, 8, 16, 32]),
  47. bbox_head=dict(
  48. type='OBBShared2FCBBoxHead',
  49. start_bbox_type='obb',
  50. end_bbox_type='obb',
  51. in_channels=256,
  52. fc_out_channels=1024,
  53. roi_feat_size=7,
  54. num_classes=1,
  55. bbox_coder=dict(
  56. type='OBB2OBBDeltaXYWHTCoder',
  57. target_means=[0., 0., 0., 0., 0.],
  58. target_stds=[0.1, 0.1, 0.2, 0.2, 0.1]),
  59. reg_class_agnostic=True,
  60. loss_cls=dict(
  61. type='CrossEntropyLoss',
  62. use_sigmoid=False,
  63. loss_weight=1.0),
  64. loss_bbox=dict(type='SmoothL1Loss', beta=1.0,
  65. loss_weight=1.0))))
  66. # model training and testing settings
  67. train_cfg = dict(
  68. rpn=dict(
  69. assigner=dict(
  70. type='MaxIoUAssigner',
  71. pos_iou_thr=0.7,
  72. neg_iou_thr=0.3,
  73. min_pos_iou=0.3,
  74. match_low_quality=True,
  75. gpu_assign_thr=200,
  76. ignore_iof_thr=-1),
  77. sampler=dict(
  78. type='RandomSampler',
  79. num=256,
  80. pos_fraction=0.5,
  81. neg_pos_ub=-1,
  82. add_gt_as_proposals=False),
  83. allowed_border=0,
  84. pos_weight=-1,
  85. debug=False),
  86. rpn_proposal=dict(
  87. nms_across_levels=False,
  88. nms_pre=2000,
  89. nms_post=2000,
  90. max_num=2000,
  91. nms_thr=0.8,
  92. min_bbox_size=0),
  93. rcnn=dict(
  94. assigner=dict(
  95. type='MaxIoUAssigner',
  96. pos_iou_thr=0.5,
  97. neg_iou_thr=0.5,
  98. min_pos_iou=0.5,
  99. match_low_quality=False,
  100. ignore_iof_thr=-1,
  101. iou_calculator=dict(type='OBBOverlaps')),
  102. sampler=dict(
  103. type='OBBRandomSampler',
  104. num=512,
  105. pos_fraction=0.25,
  106. neg_pos_ub=-1,
  107. add_gt_as_proposals=True),
  108. pos_weight=-1,
  109. debug=False))
  110. test_cfg = dict(
  111. rpn=dict(
  112. nms_across_levels=False,
  113. nms_pre=2000,
  114. nms_post=2000,
  115. max_num=2000,
  116. nms_thr=0.8,
  117. min_bbox_size=0),
  118. rcnn=dict(
  119. score_thr=0.05, nms=dict(type='obb_nms', iou_thr=0.1), max_per_img=2000))

4.5、按照第三部分进行最后的训练,测试即可!

结语:感谢您的观看,如果有什么疑问或者文章有什么不妥欢迎提出问题,以上内容仅用于学习!!!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/679201
推荐阅读
相关标签
  

闽ICP备14008679号