深度学习目标检测工具箱mmdetection,训练自己的数据

2023-11-01

一、简介

商汤科技(2018 COCO 目标检测挑战赛冠军)和香港中文大学最近开源了一个基于Pytorch实现的深度学习目标检测工具箱mmdetection,支持Faster-RCNN,Mask-RCNN,Fast-RCNN等主流的目标检测框架,后续会加入Cascade-RCNN以及其他一系列目标检测框架。

相比于Facebook开源的Detectron框架,作者声称mmdetection有三点优势:performance稍高、训练速度稍快、所需显存稍小。

我很早就听说了这个工具箱,但是一直没有开源。现在总算是开源了,于是就迫不及待地测试一下这个框架的效果。下面将记录一下我的测试过程,已经期间所遇到的一些坑。

2019.05.26更新了网盘里的demo.py文件,现在的demo应该可以匹配官方的最新代码了。

2019.02.22上传多个mmdetection模型,检测器包括Faster-RCNN、Mask-RCNN、RetinaNet,backbone包括Resnet-50、Resnet-101、ResNext-101,网盘链接:mmdetection(密码:dpyl)

二、安装教程

本人的系统环境:

  • Ubuntu 16.04
  • Cuda 9.0 + Cudnn 7.0.5
  • Python 3.6 (mmdetection要求Python版本需要3.4+)
  • Anaconda 3 (可选)

这里推荐大家使用Anaconda,可以比较方便的创建Python虚拟环境,避免不同的Python库之间产生冲突。在安装mmdetection之前,需要安装以下几个依赖库:

  • PyTorch 0.4.1 和 torchvision
  • PyTorch 1.0 PyTorch 1.1 (Pytorch 0.4.1的版本需要切换branch,在clone了mmdetection的git之后需要git checkout pytorch-0.4.1)
  • Cython
  • mmcv

下面是我的安装和测试步骤,以Anaconda 3为例。

1. 使用conda创建Python虚拟环境(可选)

conda create -n mmdetection python=3.6
source activate mmdetection

这样就创建了名为mmdetection的Python3.6环境,并且在terminal中激活。如果不需要虚拟环境,则将下文的conda install改为pip install

2. 安装PyTorch 1.1

conda install pytorch=1.1 -c pytorch

安装好以后,进入Python环境,输入以下代码测试是否安装成功,不报错则说明安装成功

import torch

3. 安装Cython

conda install cython

4. 安装mmcv

官方代码已更新,直接运行下一步就可以自动安装所有依赖库了

5. 安装mmdetection

git clone https://github.com/open-mmlab/mmdetection.git
cd mmdetection
python setup.py develop

到此,我们就完成了mmdetection及其依赖库的安装

6. 测试Demo

将下方的代码写入py文件,并存放到mmdetection文件夹目录下,然后运行。该代码的功能是检测图片中的目标,测试模型是官方给出的Faster-RCNN-fpn-resnet50的模型,运行代码会自动下载模型。由于模型是存储在亚马逊云服务器上,速度可能会稍慢,如果下载失败可以通过我的网盘链接mmdetection(密码:dpyl)进行下载,存放到mmdetection文件夹目录下,然后修改下方代码的相关部分

from mmdet.apis import init_detector, inference_detector, show_result
 
# 首先下载模型文件https://s3.ap-northeast-2.amazonaws.com/open-mmlab/mmdetection/models/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth
config_file = 'configs/faster_rcnn_r50_fpn_1x.py'
checkpoint_file = 'checkpoints/faster_rcnn_r50_fpn_1x_20181010-3d1b3351.pth'
 
# 初始化模型
model = init_detector(config_file, checkpoint_file)
 
# 测试一张图片
img = 'test.jpg'
result = inference_detector(model, img)
show_result(img, result, model.CLASSES)
 
# 测试一系列图片
imgs = ['test1.jpg', 'test2.jpg']
for i, result in enumerate(inference_detector(model, imgs, device='cuda:0')):
    show_result(imgs[i], result, model.CLASSES, out_file='result_{}.jpg'.format(i))

7. 准备自己的数据

mmdetection支持coco格式和voc格式的数据集,下面将分别介绍这两种数据集的使用方式

  • coco数据集
    官方推荐coco数据集按照以下的目录形式存储,以coco2017数据集为例
mmdetection
├── mmdet
├── tools
├── configs
├── data
│   ├── coco
│   │   ├── annotations
│   │   ├── train2017
│   │   ├── val2017
│   │   ├── test2017

推荐以软连接的方式创建data文件夹,下面是创建软连接的步骤

cd mmdetection
mkdir data
ln -s $COCO_ROOT data

其中,$COCO_ROOT需改为你的coco数据集根目录

  • voc数据集
    与coco数据集类似,将voc数据集按照以下的目录形式存储,以VOC2007为例
mmdetection
├── mmdet
├── tools
├── configs
├── data
│   ├── VOCdevkit
│   │   ├── VOC2007
│   │   │   ├── Annotations
│   │   │   ├── JPEGImages
│   │   │   ├── ImageSets
│   │   │   │   ├── Main
│   │   │   │   │   ├── test.txt
│   │   │   │   │   ├── trainval.txt

同样推荐以软连接的方式创建

cd mmdetection
mkdir data
ln -s $VOC2007_ROOT data/VOCdevkit

其中,$VOC2007_ROOT需改为你的VOC2007数据集根目录
然后,下载 pascal_voc_mod.py 和 voc_classes.txt (上方的模型下载地址中有)存放到mmdetection根目录下,运行以下代码
mmdetection官方代码已更新,不再需要自己生成

如果需要标注自己的数据,推荐使用LabelImg工具标注
然后在运行 pascal_voc_mod.py 之前,修改 voc_classes.txt 里的类别名为你自己设定的类别名,再运行py文件
然后需要修改mmdet/datasets/voc.py文件中的CLASSES为你自己的类别

8. 训练

官方推荐使用分布式的训练方式,这样速度更快,如果是coco训练集,修改CONFIG_FILE中的pretrained参数,改为你的模型路径,然后运行下方代码

./tools/dist_train.sh <CONFIG_FILE> <GPU_NUM> [optional arguments]

如果是voc训练集,还需要修改config文件中的相关参数,可以参考 faster_rcnn_r50_mod.py (上方网盘地址中有),然后再运行上面的代码
mmdetection官方代码已更新,目前已支持voc格式的数据集,不再需要自己修改

如果不想采用分布式的训练方式,或者你只有一块显卡,则运行下方的代码

python tools/train.py <CONFIG_FILE> --gpus <GPU_NUM> --work_dir <WORK_DIR>

至此,如果一切顺利的话,你的模型应该就开始训练了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习目标检测工具箱mmdetection,训练自己的数据 的相关文章

随机推荐

  • make[2]:***没有规则制作目标XXX,由XXX需求。停止。

    记录一次驱动编写中遇到的错误 写了一个简单的驱动 编写Makefile 内容如下 模块名称 obj m xxx o kernel路径 KDIR yyy zzz 获取当前路径 PWD shell pwd all make C KDIR M P
  • 用Python爬虫做一个短视频+评论下载小工具

    成品展示 复制以上代码用于视频下载 按照以上步骤获取评论路径复制 选择要保存到哪个文件夹中 输入复制的视频地址和评论地址 保存完成 获取音视频部分主要代码 只是主要功能代码 def get data urls address respons
  • 基于SpringBoot的冬奥会科普平台

    末尾获取源码 开发语言 Java Java开发工具 JDK1 8 后端框架 SpringBoot 前端 采用Vue和HTML技术开发 数据库 MySQL5 7和Navicat管理工具结合 服务器 Tomcat8 5 开发软件 IDEA Ec
  • 方法-学术翻译工具

    1 推荐谷歌 2 其它
  • python学习笔记03

    函数 def functionname parameters 函数文档字符串 functionsuite return expression args 可变参数 可以是从零个到任意个 自动组装成元组 kw 关键字参数 可以是从零个到任意个
  • numpy

    一 什么是维度 需要几个维度描述一个空间 一维 x 二维 x y 三维 x y z 1 1 创建NumPy数组的多种方式 创建NumPy数组的多种方式 array 将输入数据转换为ndarray 推断dtype或显示指定 arange 类似
  • 机器学习—关联规则分析之Apriori算法及其python实现

    文章目录 引言 一 一些概念 1 关联规则的一般形式 2 最小支持度和最小置信度 3 项集 4 支持度计数 二 Apriori算法 使用候选产生频繁项集 1 Apriori的性质 2 Apriori算法实现过程 3 Apriori算法实现过
  • Pandsa时间序列采样频率滑窗及重采样

    目录 Pandas时间序列采样频率滑窗 1 滑窗函数rolling 获取近7天的销售总量 2 shift 及 diff 重采样 resample pandas时间戳及时间差 pandas日期处理DT对象 Pandas时间序列采样频率滑窗 1
  • SpringBoot发送邮件

    目录 1 获取授权码 2 jar包引入 3 配置application 4 代码实现 1 获取授权码 以126邮箱为例 点开设置 选择POP3 SMTP IMAP 开启POP3 SMTP服务 新增授权密码 扫码二维码 发送要求的短信内容到指
  • 狂神说Mybatis课程笔记

    文章目录 1 第一个Mybatis程序 1 1 搭建环境 1 2 创建一个模块 1 3 编写代码 1 4 测试 2 CURD 增删改查 2 1 namespace 2 2 Select insert update delete 2 3 分析
  • 测试多线程任务

    作业需求 任务1 定义一个全局变量 int a 10 主线程能否访问到 分支线程能否访问到 任务2 分支线程中修改上述的a 20 问主线程中访问该a 是10还是20 任务3 在主线程定义一个局部变量int b 1 分支线程能否访问到b 任务
  • 光纤光缆基础知识

    光纤介绍 光纤布线中使用光波的几个波段 800nm 900nm 短波波段 1250nm 13500nm 短波波段 1500nm 1600nm 短波波段 多模光纤运行波长为850nm或1300nm 而单模光纤运行波长则为1310nm或1550
  • 微服务网关鉴权:gateway使用、网关限流使用、用户密码加密、JWT鉴权

    点击关注 芋道源码 2022 09 05 10 32 发表于上海 收录于合集 芋道源码1000个 点击上方 芋道源码 选择 设为星标 管她前浪 还是后浪 能浪的浪 才是好浪 每天 10 33 更新文章 每天掉亿点点头发 源码精品专栏 原创
  • 使用BPMN和微服务进行编排 ——是好做法还是坏做法?

    马丁 Martin Fowler 在他著名的微服务文章中建议 敏捷的终端和愚笨的管道 他指出 微服务社区赞成另一种方法 敏捷的终端和愚笨的管道 从微服务构建的应用程序旨在尽可能地解耦和衔接 他们拥有自己的域逻辑 而更多地在经典的Unix意义
  • c语言指针实现冒泡排序及其优化

    冒泡排序是一个十分容易实现的算法 简单说明一下 假设数组长度为 N 要求从小到大排序 1从第一个数开始比较相邻两个元素 如果前面的数据大于后面的数据 就将二个数据交换 2对数组元素进行一次第一次遍历后 最大的数据就 沉 到了数组最后一个位置
  • 03_GCC与Makefile的使用

    windows下c语言的编译 1 预处理 把 h c展开形成一个文件 宏定义直接替换 还有头文件 库文件的展开形成 i文件 对应的GCC gcc e hello c o hello i 2 汇编 生成汇编文件 gcc s hello i o
  • 【Elasticsearch】ElasticSearch 7.8 多字段权重排序

    1 概述 转载并且补充 https mp weixin qq com s 0g86s o7kgn8ZUxA3UBc0w 请看原文 读者提问 ES 的权重排序有没有示列 参考参考 刚好之前也稍微接触过 于是写了这篇文章 可以简单参考下 在很多
  • msi文件安装MySQL

    文章目录 步骤如下 1 官网下载msi安装文件 2 运行MySQL installer 3 通过MySQL installer配置服务 4 验证 5 安装目录介绍 6 修改指定的数据文件 步骤如下 1 官网下载msi安装文件 官网地址 上述
  • 爬虫入门(三)连接mongodb

    连接mongodb 虽然说我们前面写了一个比较健壮的爬虫了 但是人生难免有意外 万一中断了 我们又要重新开始爬虫下载图片了 抓狂 那么我们想呢 怎么写一个判断图片有没有下载过呢 显然我们不能在文件夹里遍历 会慢到爆炸的 那么我们就可以借助数
  • 深度学习目标检测工具箱mmdetection,训练自己的数据

    文章目录 一 简介 二 安装教程 1 使用conda创建Python虚拟环境 可选 2 安装PyTorch 1 1 3 安装Cython 4 安装mmcv 5 安装mmdetection 6 测试Demo 7 准备自己的数据 8 训练 一