mmdetection新增自定义分支(0):mmdetection的安装和基本介绍

此篇是初始篇

        mmdetection是非常知名的目标检测的框架,他集成了很多知名的深度神经网络,简单来讲就是可以通过配置文件的配置来使用各种不同的网络。

        不过使用起来是很方便,但是对于初学者来说,他把各种网络都封装起来了,就很难找到相应的实现代码,不太利于学习。

mmdetection的安装:

        一般从github上下载下来就可以了,他有比较详细的install.md,写的还是比较详细的,以上的链接是目前最新的,我当时安装的版本是2.1的版本,安装的时候有一些环境的问题,在git上没有明说,还是要安装的时候看报错。不过这些方法也不是不可解的,在文件包中,也提供了一个Dockerfile,可以直接安装docker,不过这种类似的提供的Dockerfile的项目不少,但是能用其顺利安装的没多少,不是这有问题就是那有问题,而且往往会因为大家懂的原因,很多环境利用他的代码是装不上的。不过可以明确的是,docker的环境安装都是从空白系统中开始一步步安装的,所以完全可以参考这个dockerfile文件来安装。具体可以按照当前的文件来,只要执行RUN之后的语句就可以了,以下是当初2.1的版本的安装脚本,不同版本可以根据install.md来修改,比如目前最新版不再需要mmcv,而是mmcv-full,总之各种结合看看,不过个人觉得还是利用dockerfile还是会简单很多。

sudo apt-get update && apt-get install -y git ninja-build libglib2.0-0 libsm6 libxrender-dev libxext6
sudo apt-get clean
sudo rm -rf /var/lib/apt/lists/*

pip install --upgrade cython mmcv==0.6.2 opencv-python==4.2.0.34 numpy==1.16.4 torch torchvision flask requests --no-cache-dir

pip install "git+https://github.com.cnpmjs.org/open-mmlab/cocoapi.git#subdirectory=pycocotools"
pip install --no-cache-dir -e .

其中,mmcv是当时mmdetection的指定版本,numpy可以用更高的版本,只不过似乎是用太高的版本似乎是对其他的项目有不兼容的情况,flask和requests是我的任务需要,可以不需要;--no-cache-dir是pip安装时避免生成缓存。

mmdetection的配置文件:

        他的配置文件一般是放在文件夹中的configs,想具体使用什么网络,通过文件名就可知道。具体的说明在每个文件夹中有一个readme.md可以查看,比如1x,3x,20e等,这三个都指的是训练次数和学习率衰减的step设置,他们在模型设置上应该是一样的

cascade_mask_rcnn_r50_fpn_1x_coco.py为例,其内容为

_base_ = [
    '../_base_/models/cascade_mask_rcnn_r50_fpn.py',
    '../_base_/datasets/coco_instance.py',
    '../_base_/schedules/schedule_1x.py', '../_base_/default_runtime.py'
]

可见其主要是集成了一些基础文件,具体的介绍网上可以查的到,这里只是简要说明一下。

他的模型文件以字典的形式,每个字段中,type表示该字段会使用这个函数,函数需要先注册才能被识别到,在新增分支的时候需要用到,type下其他的字段都是该函数的参数,他就是利用这样的方式来利用配置文件来使用不同的网络的。至于其是如何实现的可以不用去查看,其调用还是很复杂的。

mmdetection的数据格式:

mmdetection有提供一些教程,不过其写的有一点简略。

这部分主要对教程该部分的简单的说明,有兴趣的,可以仔细看看这部分

https://mmdetection.readthedocs.io/en/latest/tutorials/new_dataset.html

mmdetection主要是支持coco和voc数据集格式,一般情况下,自己的数据集转成这两个格式就行了,不过这两个就是很麻烦嘛,所以mmdetection也提供了一个中间格式。具体的可以参考教程,只是教程写的很模糊,虽然没有什么用,但是还是简要提一下。

[
    {
        'filename': 'a.jpg',
        'width': 1280,
        'height': 720,
        'ann': {
            'bboxes': <np.ndarray, float32> (n, 4),
            'labels': <np.ndarray, int64> (n, ),
            'bboxes_ignore': <np.ndarray, float32> (k, 4),
            'labels_ignore': <np.ndarray, int64> (k, ) (optional field)
        }
    },
    ...
]

这个中间格式,所有文件都放在一个列表中,其中每张图片是一个字典,基本字段基本上看名字就懂,主要是,ann字段中,bboxes,格式是numpy,size是n*4,n是具体有多个框,4是两个点的坐标,一般是左上角和右下角

labels就不用提了,都是一一对应的

我也加过masks字段,不过似乎有点问题。

按照教程的流程来说,后面说的是,自己的数据可以在代码中直接转换成这个格式,然后用CustomDataset来读取,或者是直接转成这个格式在使用CustomDataset来读取。

是的CustomDataset就是type。

其他的,教程中还提供了一些例子,不过那些例子说的都比较简单,感觉价值不大,后面我会再提,然后他还提了些数据集的联合之类的,不过后面自定义数据类型,自定义加载方式,这些都不太重要了,有需要也可以直接看源码。

非常麻烦的是,比如我的数据除了这些常用的字段外,还有其他的自己的数据,此时只能通过自己写的代码来加载读取了,具体就请看下文吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值