一、复现前言

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

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

二、环境安装

2.1、新建环境

#新建obbdetection 环境conda create -n obbdetection python=3.6 -y
source activate obbdetection#安装pytorch(请根据自己的cuda进行安装)
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。

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

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

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

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

pip install -r requirements/build.txt
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)重头训练和继续训练

#重新训练python tools/train.py configs/obb/oriented_rcnn/faster_rcnn_orpn_r50_fpn_3x_hrsc.py --work-dir work_dirs #继续训练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,修改自己的数据集路径

data = dict(samples_per_gpu=2,workers_per_gpu=4,train=dict(type=dataset_type,xmltype='hbb',imgset=data_root + 'ImageSets/Main/trainval.txt',ann_file=data_root + 'Annotations',img_prefix=data_root + 'JPEGImages/',pipeline=train_pipeline),test=dict(type=dataset_type,xmltype='hbb',imgset=data_root + 'ImageSets/Main/test.txt',ann_file=data_root + 'Annotations',img_prefix=data_root + 'JPEGImages/',pipeline=test_pipeline))
evaluation = None

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

_base_ = ['../_base_/datasets/dior.py','../_base_/schedules/schedule_3x.py','../../_base_/default_runtime.py'
]model = dict(type='OrientedRCNN',pretrained='torchvision://resnet50',backbone=dict(type='ResNet',depth=50,num_stages=4,out_indices=(0, 1, 2, 3),frozen_stages=1,norm_cfg=dict(type='BN', requires_grad=True),norm_eval=True,style='pytorch'),neck=dict(type='FPN',in_channels=[256, 512, 1024, 2048],out_channels=256,num_outs=5),rpn_head=dict(type='OrientedRPNHead',in_channels=256,feat_channels=256,anchor_generator=dict(type='AnchorGenerator',scales=[8],ratios=[0.5, 1.0, 2.0],strides=[4, 8, 16, 32, 64]),bbox_coder=dict(type='MidpointOffsetCoder',target_means=[.0, .0, .0, .0, .0, .0],target_stds=[1.0, 1.0, 1.0, 1.0, 0.5, 0.5]),loss_cls=dict(type='CrossEntropyLoss', use_sigmoid=True, loss_weight=1.0),loss_bbox=dict(type='SmoothL1Loss', beta=1.0 / 9.0, loss_weight=1.0)),roi_head=dict(type='OBBStandardRoIHead',bbox_roi_extractor=dict(type='OBBSingleRoIExtractor',roi_layer=dict(type='RoIAlignRotated', out_size=7, sample_num=2),out_channels=256,extend_factor=(1.4, 1.2),featmap_strides=[4, 8, 16, 32]),bbox_head=dict(type='OBBShared2FCBBoxHead',start_bbox_type='obb',end_bbox_type='obb',in_channels=256,fc_out_channels=1024,roi_feat_size=7,num_classes=1,bbox_coder=dict(type='OBB2OBBDeltaXYWHTCoder',target_means=[0., 0., 0., 0., 0.],target_stds=[0.1, 0.1, 0.2, 0.2, 0.1]),reg_class_agnostic=True,loss_cls=dict(type='CrossEntropyLoss',use_sigmoid=False,loss_weight=1.0),loss_bbox=dict(type='SmoothL1Loss', beta=1.0,loss_weight=1.0))))
# model training and testing settings
train_cfg = dict(rpn=dict(assigner=dict(type='MaxIoUAssigner',pos_iou_thr=0.7,neg_iou_thr=0.3,min_pos_iou=0.3,match_low_quality=True,gpu_assign_thr=200,ignore_iof_thr=-1),sampler=dict(type='RandomSampler',num=256,pos_fraction=0.5,neg_pos_ub=-1,add_gt_as_proposals=False),allowed_border=0,pos_weight=-1,debug=False),rpn_proposal=dict(nms_across_levels=False,nms_pre=2000,nms_post=2000,max_num=2000,nms_thr=0.8,min_bbox_size=0),rcnn=dict(assigner=dict(type='MaxIoUAssigner',pos_iou_thr=0.5,neg_iou_thr=0.5,min_pos_iou=0.5,match_low_quality=False,ignore_iof_thr=-1,iou_calculator=dict(type='OBBOverlaps')),sampler=dict(type='OBBRandomSampler',num=512,pos_fraction=0.25,neg_pos_ub=-1,add_gt_as_proposals=True),pos_weight=-1,debug=False))
test_cfg = dict(rpn=dict(nms_across_levels=False,nms_pre=2000,nms_post=2000,max_num=2000,nms_thr=0.8,min_bbox_size=0),rcnn=dict(score_thr=0.05, nms=dict(type='obb_nms', iou_thr=0.1), max_per_img=2000))

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

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

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

  1. 完整实现利用tensorflow训练自己的图片数据集

    经过差不多一个礼拜的时间的学习,终于把完整的一个利用自己爬取的图片做训练数据集的卷积神经网络的实现(基于tensorflow) 目录 总体思路 第三部分:预处理 第四部分:网络模型 第五部分:训练 2 ...

  2. 完整复现何恺明ICCV获奖论文结果并开源 !(附论文开源代码)

    ICCV 作为计算机视觉的顶级会议,2017年共收到2143篇论文投稿,比上一届ICCV2015的1698篇增加了26.2%.共621篇被选为大会论文,录用比例28.9%:poster.spotlig ...

  3. Faster R CNN

    Faster R CNN 3 FASTER R-CNN 我们的Faster R CNN 由两个模块组成,第一个模块是 proposes regions 的全卷积网络,第二个是使用 proposed r ...

  4. 空间数据可视化地图绘制R语言可复现

    空间数据可视化&地图绘制&R语言可复现 绘制地理空间数据是一项常见的可视化任务,需要专门的工具.通常,问题可以分解为两个问题: 使用一个数据源绘制地图 将来自另一个信息源的元数据添加到 ...

  5. CV:基于Keras利用CNN主流架构之mini_XCEPTION训练性别分类模型hdf5并保存到指定文件夹下

    CV:基于Keras利用CNN主流架构之mini_XCEPTION训练性别分类模型hdf5并保存到指定文件夹下 目录 图示过程 核心代码 图示过程 核心代码 from keras.callbacks ...

  6. CV:基于Keras利用CNN主流架构之mini_XCEPTION训练情感分类模型hdf5并保存到指定文件夹下

    CV:基于Keras利用CNN主流架构之mini_XCEPTION训练情感分类模型hdf5并保存到指定文件夹下 目录 图示过程 核心代码 图示过程 核心代码 def mini_XCEPTION(inp ...

  7. 5_竞赛无人机搭积木式编程——以2021年电赛G题植保无人机国奖标准完整复现为例学习

    竞赛无人机搭积木式编程 --以2021年电赛G题植保无人机国奖标准完整复现为例学习 首先我们需要了解下自动飞行任务执行过程几组关键变量的用法与实际作用效果: flight_subtask_cnt用于控 ...

  8. #今日论文推荐# 千亿参数大模型首次被撬开,Meta复刻GPT-3“背刺“OpenAI,完整模型权重及训练代码全公布

    #今日论文推荐# 千亿参数大模型首次被撬开!Meta复刻GPT-3"背刺"OpenAI,完整模型权重及训练代码全公布 千亿级参数AI大模型,竟然真的能获取代码了?! 一觉醒来,AI ...

  9. 基于逻辑回归,支持向量机,朴素贝叶斯以及简单深度学习文本分类方法(BiLSTM、CNN)实现的中文情感分析,含数据集可直接运行

    基于逻辑回归,支持向量机,朴素贝叶斯以及简单深度学习文本分类方法(BiLSTM.CNN)实现的中文情感分析,含数据集可直接运行 完整代码下载地址:中文情感分析 中文情感分析 本项目旨在通过一个中文情感 ...

  10. 使用SGC训练和测试SEED数据集

    下面所有博客是个人对EEG脑电的探索,项目代码是早期版本不完整,需要完整项目代码和资料请私聊. 主要内容: 1.在EEG(脑电)项目中,使用图神经网络对脑电进行处理,具体包括baseline的GCN图 ...

最新文章

  1. 【JavaScript总结】JavaScript语法基础:DOM
  2. 李铁军教授专访:当数学家遇见人工智能
  3. 每日两SQL(6),欢迎交流~
  4. python输出程序运行时间_叨叨 Python 性能优化工具
  5. java中添加背景_java中如何增加背景图片
  6. Navicat PatchNavicat
  7. 地球物理模型-薄互层-桔灯勘探
  8. 操作系统服务:time时间模块+datetime模块
  9. url中文传参乱码问题
  10. linux下的遥控器软件下载,万能遥控器软件
  11. [NLP]OpenNLP文档分类器的使用
  12. 股票中阿尔法和贝塔都什么意思?
  13. Django 入门:tests.py
  14. 树莓派与ESP8266-MQTT无线通信
  15. Python爬取手机APP
  16. 一个癌症病人的美国求医经历:活人死人如果都得不到尊重,病人也很难被尊重
  17. uCOS2源码分析1-BSP部分-第4季第2部分视频课程-朱有鹏-专题视频课程
  18. 【Ctrl_I】团队日记2:模型训练与HIbernate集成
  19. java-net-php-python-54jspm军舰管理系统计算机毕业设计程序
  20. 用java代码根据html页面生成图片

热门文章

  1. openpyxl 获取worksheet颜色
  2. 抽奖活动的奖品怎么设置?
  3. Ubuntu上安装QQ,无法显示图片和头像
  4. 微信关注公众号跳转关注页面
  5. python多张子图画在一张画布上,显示图例和标题,并保存。
  6. MySQL批量创建测试数据脚本
  7. 12.30天自动登陆
  8. wamp下载和使用PHPDocumentor
  9. P9 android8 第三方,华为P9--第三方安卓8.0ROM--GZOSP Oreo--XDA 已发布!
  10. 业界安全事件最新动态