【AI目标检测】MMROTATE踩坑记录

MMROTATE介绍

MMRotate 是一款基于 PyTorch 的旋转框检测的开源工具箱,是 OpenMMLab 项目的成员之一。

【AI目标检测】MMROTATE踩坑记录

; MMROTATE安装

mmrotate的安装同mmdet等类似
参考mmrotate安装

  1. 创建环境
conda create -n openmmlab python=3.7 -y
conda activate openmmlab
  1. 安装pytorch
conda install pytorch==1.7.0 torchvision==0.8.0 cudatoolkit=10.1 -c pytorch
  1. pip install 必要的包

首先是mmcv-full

pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu111/torch1.9.0/index.html

然后要安装mmdet

pip install mmdet

mmrotate建议从源码安装

git clone https://github.com/open-mmlab/mmrotate.git
cd mmrotate
pip install -r requirements/build.txt
pip install -v -e .

其中 pip install -v -e .or python setup.py develop将会安装为开发模式,所有对源码的修改都将生效。( pip install -v -e .最后的 .表示当前路径,不要漏掉!)

训练测试

根据自己的要求写配置文件,修改为自己的数据集路径和类别以及类别数目


_base_ = '../r3det/r3det_r50_fpn_1x_dota_oc.py'

evaluation = dict(interval=1, metric='mAP')
runner = dict(type='EpochBasedRunner', max_epochs=200)
checkpoint_config = dict(interval=100)

dataset_type = 'DOTADataset'
classes = ('comp', 'procl')
data = dict(
    samples_per_gpu=2,
    workers_per_gpu=2,
    train=dict(
        type=dataset_type,

        classes=classes,
        ann_file='/home/wd337/projects/mmrotate/data/dota/annotations/train',
        img_prefix='/home/wd337/projects/mmrotate/data/dota/images/train'),
    val=dict(
        type=dataset_type,

        classes=classes,
        ann_file='/home/wd337/projects/mmrotate/data/dota/annotations/val',
        img_prefix='/home/wd337/projects/mmrotate/data/dota/images/val'),
    test=dict(
        type=dataset_type,

        classes=classes,
        ann_file='/home/wd337/projects/mmrotate/data/dota/annotations/test',
        img_prefix='/home/wd337/projects/mmrotate/data/dota/images/test'))

model = dict(
    bbox_head=dict(

        num_classes=2))

训练(单卡):

python tools/train.py configs/my_config/my_config.py --work-dir=work_dirs/my_model

测试:

python ./tools/test.py \
  configs/my_config/my_config.py \
  work_dirs/my_model/my_model_pth.pth --show-dir work_dirs/vis

出现的错误

error 1

ValueError: could not convert string to float: 'imagesource:null'

原因:由于在查看DOTA数据集的时候发现有标注文件都有imagesource和gsd信息,在转换时加上了这两行信息,去掉即可

error 2

File "/home/wd337/projects/mmrotate/mmrotate/datasets/dota.py", line 199, in evaluate
    mean_ap, _ = eval_map(
TypeError: eval_map() got an unexpected keyword argument 'version'

原因:
在mean_ap传参时的version=self.version在构建eval_map时并未使用,将其注释掉

mean_ap, _ = eval_map(
                results,
                annotations,
                scale_ranges=scale_ranges,
                iou_thr=iou_thr,
                dataset=self.CLASSES,

                logger=logger,
                nproc=nproc)

def eval_map(det_results,
             annotations,
             scale_ranges=None,
             iou_thr=0.5,
             dataset=None,
             logger=None,
             nproc=4):

后续0.1.1版本官方版本已经解决

error 3

  File "/home/wd337/projects/mmrotate/mmrotate/datasets/dota.py", line 199, in evaluate
    mean_ap, _ = eval_map(
  File "/home/wd337/projects/mmrotate/mmrotate/datasets/dota.py", line 454, in eval_map
    print_map_summary(
  File "/home/wd337/projects/mmrotate/mmrotate/datasets/dota.py", line 516, in print_map_summary
    label_names[j], num_gts[i, j], results[j]['num_dets'],
IndexError: tuple index out of range

配置文件中的class没有改完全,使用的r3det配置文件中在model中的refine_heads中也有num_class参数,修改为自己的class数即可

error 4

Traceback (most recent call last):
  File "tools/train.py", line 182, in <module>
    main()
  File "tools/train.py", line 171, in main
    train_detector(
  File "/home/wd337/projects/mmrotate/mmrotate/apis/train.py", line 156, in train_detector
    runner.run(data_loaders, cfg.workflow)
  File "/home/wd337/anaconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/runner/epoch_based_runner.py", line 127, in run
    epoch_runner(data_loaders[i], **kwargs)
  File "/home/wd337/anaconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/runner/epoch_based_runner.py", line 47, in train
    for i, data_batch in enumerate(self.data_loader):
  File "/home/wd337/anaconda3/envs/openmmlab/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 359, in __iter__
    return self._get_iterator()
  File "/home/wd337/anaconda3/envs/openmmlab/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 305, in _get_iterator
    return _MultiProcessingDataLoaderIter(self)
  File "/home/wd337/anaconda3/envs/openmmlab/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 944, in __init__
    self._reset(loader, first_iter=True)
  File "/home/wd337/anaconda3/envs/openmmlab/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 975, in _reset
    self._try_put_index()
  File "/home/wd337/anaconda3/envs/openmmlab/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 1209, in _try_put_index
    index = self._next_index()
  File "/home/wd337/anaconda3/envs/openmmlab/lib/python3.8/site-packages/torch/utils/data/dataloader.py", line 512, in _next_index
    return next(self._sampler_iter)
  File "/home/wd337/anaconda3/envs/openmmlab/lib/python3.8/site-packages/torch/utils/data/sampler.py", line 226, in __iter__
    for idx in self.sampler:
  File "/home/wd337/anaconda3/envs/openmmlab/lib/python3.8/site-packages/mmdet/datasets/samplers/group_sampler.py", line 36, in __iter__
    indices = np.concatenate(indices)
  File "", line 180, in concatenate
ValueError: need at least one array to concatenate

原因:
配置文件中的数据集路径写错了,一定要仔细检查

error 5

Traceback (most recent call last):
  File "/home/wd337/anaconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/utils/registry.py", line 52, in build_from_cfg
    return obj_cls(**args)
  File "/home/wd337/projects/mmrotate/mmrotate/models/detectors/r3det.py", line 48, in __init__
    self.refine_head.append(build_head(refine_head))
  File "/home/wd337/projects/mmrotate/mmrotate/models/builder.py", line 37, in build_head
    return ROTATED_HEADS.build(cfg)
  File "/home/wd337/anaconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/utils/registry.py", line 212, in build
    return self.build_func(*args, **kwargs, registry=self)
  File "/home/wd337/anaconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/cnn/builder.py", line 27, in build_model_from_cfg
    return build_from_cfg(cfg, registry, default_args)
  File "/home/wd337/anaconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/utils/registry.py", line 24, in build_from_cfg
    raise KeyError(
KeyError: 'cfg or default_args must contain the key "type", but got {\'num_classes\': 2, \'train_cfg\': {\'assigner\': {\'type\': \'MaxIoUAssigner\', \'pos_iou_thr\': 0.6, \'neg_iou_thr\': 0.5, \'min_pos_iou\': 0, \'ignore_iof_thr\': -1, \'iou_calculator\': {\'type\': \'RBboxOverlaps2D\'}}, \'allowed_border\': -1, \'pos_weight\': -1, \'debug\': False}, \'test_cfg\': {\'nms_pre\': 2000, \'min_bbox_size\': 0, \'score_thr\': 0.05, \'nms\': {\'iou_thr\': 0.1}, \'max_per_img\': 2000}}\nNone'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "tools/train.py", line 182, in
    main()
  File "tools/train.py", line 152, in main
    model = build_detector(
  File "/home/wd337/projects/mmrotate/mmrotate/models/builder.py", line 55, in build_detector
    return ROTATED_DETECTORS.build(
  File "/home/wd337/anaconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/utils/registry.py", line 212, in build
    return self.build_func(*args, **kwargs, registry=self)
  File "/home/wd337/anaconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/cnn/builder.py", line 27, in build_model_from_cfg
    return build_from_cfg(cfg, registry, default_args)
  File "/home/wd337/anaconda3/envs/openmmlab/lib/python3.8/site-packages/mmcv/utils/registry.py", line 55, in build_from_cfg
    raise type(e)(f'{obj_cls.__name__}: {e}')
KeyError: 'R3Det: \'cfg or default_args must contain the key "type", but got {\\\'num_classes\\\': 2, \\\'train_cfg\\\': {\\\'assigner\\\': {\\\'type\\\': \\\'MaxIoUAssigner\\\', \\\'pos_iou_thr\\\': 0.6, \\\'neg_iou_thr\\\': 0.5, \\\'min_pos_iou\\\': 0, \\\'ignore_iof_thr\\\': -1, \\\'iou_calculator\\\': {\\\'type\\\': \\\'RBboxOverlaps2D\\\'}}, \\\'allowed_border\\\': -1, \\\'pos_weight\\\': -1, \\\'debug\\\': False}, \\\'test_cfg\\\': {\\\'nms_pre\\\': 2000, \\\'min_bbox_size\\\': 0, \\\'score_thr\\\': 0.05, \\\'nms\\\': {\\\'iou_thr\\\': 0.1}, \\\'max_per_img\\\': 2000}}\\nNone\''

原因,配置文件的写法不规范

error 6

最后的结果都是歪的,但是mAP却很高
原因:
在确认框的方向的时候将坐标系搞错,从而在转换数据集的时候缺少了一个负号,因此框全都少了同样的角度

error 7

修改backbone中的ReResNet不起作用
原因:
默认的配置是使用的ResNet和FPN,并不是仓库中用e2cnn重写的ReResNet和ReFPN

Original: https://blog.csdn.net/jaz_y/article/details/123983506
Author: 陈梦酱汁
Title: 【AI目标检测】MMROTATE踩坑记录

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/680247/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • OLAP数据分析特点及分类

    啊哦~你想找的内容离你而去了哦 内容不存在,可能为如下原因导致: ① 内容还在审核中 ② 内容以前存在,但是由于不符合新 的规定而被删除 ③ 内容地址错误 ④ 作者删除了内容。 可…

    人工智能 2023年7月17日
    050
  • Python安装教程

    Python、PyCharm安装详细图文教程,以及在PyCharm中安装Python的包 近来换了个电脑,Python等一众环境都要重装,加上身边有些朋友会写代码,但配环境总是遇到…

    人工智能 2023年7月4日
    059
  • 安装pytorch 与conda 常用语句

    遇到的问题:1.CUDA可以装好多个版本,按官网推荐的装就行2.EnvironmentNotWritableError: The current user does not hav…

    人工智能 2023年5月25日
    0142
  • Data Mining:图聚类(Graph clustering)

    Betweenness Centrality (from wikipedia) 在图论中, 介数中心性(英語:Betweenness Centrality)是基于最短路径针对网络图…

    人工智能 2023年5月31日
    096
  • 自然语言处理入门

    自然语言处理(Natural Language Processing, 简称NLP)是计算机科学与语言学中关注于计算机与人类语言间转换的领域. 语音助手 机器翻译 搜索引擎 智能问…

    人工智能 2023年5月27日
    068
  • 电脑怎么设置扬声器播放麦克风的声音

    什么是实用技巧,就是那种能经常用得着的值得收藏起来的应用方法。本文 中笔者就将向大家介绍35种Windows操作系统技巧,招招实用,招招值得你把 他保存到你的 电脑_中或者把这篇文…

    人工智能 2023年5月25日
    0216
  • EVT 极值理论

    EVT:Extreme Value Theory;预测小概率时间发生的可能,如大洪水,评估海事安全等。 EVT 中心思想是概率分布,可给出事件发生概率的数学公式。 例如常用的高斯分…

    人工智能 2023年6月15日
    070
  • 一阶差分单位根检验_论文之路3:单位根检验ADF

    国庆假期呆瓜居然还瘦了几斤,虽然吃吃喝喝不少,但大部分都没吃饱,真羡慕那些假期还能长肉的!! 假期里,呆瓜在论文上的进展几乎没有,不是没有时间,而是呆瓜偷懒去思考一些其他的问题和问…

    人工智能 2023年6月18日
    071
  • 基于SVM(支持向量机)对鸢尾花进行分类

    支持向量机方法也是一种强大的机器学习分类方法。在感知器算法中,我们的目标是最小化分类误差,而在SVM中,我们的优化目标是最大化分类间隔。较大的分类间隔意味着模型有较小的泛化误差,较…

    人工智能 2023年6月16日
    065
  • JVM-GC

    JVM组成 ; 栈 指的是java虚拟机栈,是一块线程私有的内存空间,每个线程包含一个栈区,栈中只保存基本数据类型的数据和自定义对象的引用, 堆 java堆是java虚拟机所管理的…

    人工智能 2023年6月28日
    059
  • VS 2019安装及配置opencv

    VS 2019下载链接:https://visualstudio.microsoft.com/zh-hans/downloads/ 1、 打开下载的软件,点击继续 2、 进行安装下…

    人工智能 2023年6月19日
    058
  • FS2K人脸素描属性识别

    人脸素描属性识别 代码:https://github.com/linkcao/FS2K_extract 问题分析 需要根据FS2K数据集进行训练和测试,实现输入一张图片,输出该图片…

    人工智能 2023年6月4日
    089
  • 机器学习——线性判别分析原理及python代码实现

    《机器学习:公式推导与代码实践》鲁伟著读书笔记。线性判别分析(Linear Discriminant Analysis,LDA)是一种经典的线性分类方法,其基本思想是将数据投影到低…

    人工智能 2023年6月16日
    082
  • Neo4j的下载与安装(完整详细版)

    简要1.jdk安装2.neo4j下载3.neo4j环境配置4.cmd启动 neo4j.bat console 注意jdk的版本要11以上才可以和neo4j匹配但我安装时用了16.0…

    人工智能 2023年6月10日
    0108
  • 机器学习强基计划1-1:图文详解感知机算法原理+Python实现

    目录 0 写在前面 1 什么是线性模型? 2 感知机概述 3 手推感知机原理 4 Python实现 * 4.1 创建感知机类 4.2 更新权重与偏置 4.3 判断误分类点 4.4 …

    人工智能 2023年7月5日
    067
  • linux用户信息

    1.用户登录Linux系统的时候,需要一个用户名和密码,登录成功后,进入一个shell,得到一个uid,这是一个整数,相当于一个人的身份证号码。获取uid:uid_t getuid…

    人工智能 2023年6月26日
    064
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球