复现 MMDetection

news2024/11/23 18:28:57

文章目录

  • MMDetection 复现
  • 一、环境配置
    • 服务器信息
    • 安装CUDA
      • 下载并安装CUDA
      • 配置环境变量
      • 多个Cuda版本切换 (可选)
    • 安装CUDNN
    • 安装Anaconda
    • 搭建虚拟环境
      • 新建虚拟环境
      • 安装pytorch
    • Pycharm 远程连接
      • 代码同步
      • 配置服务器解释器
  • 二、训练和推理
    • 自制COCO格式数据集
    • 训练
      • 修改数据集相关参数
      • 修改训练相关参数
      • 训练模型
    • 推理
  • 参考

MMDetection 复现

一、环境配置

服务器信息

  • 输入nvidia-smi查看显卡驱动。(或者输入nvidia-smi -a显示更详细的信息)
    在这里插入图片描述

安装CUDA

下载并安装CUDA

cuda10.2官网下载地址

在这里插入图片描述

# 安装cuda10.2
sudo bash cuda_10.2.89_440.33.01_linux.run

在这一步时,一定要按Enter键取消Driver安装,因为我们先前已经安装好了显卡驱动。([ ] 表示不会安装,[X]表示安装)

在这里插入图片描述

配置环境变量

  • 修改~/.bashrc文件
vi ~/.bashrc
  • 添加如下环境变量:
export CUDA_HOME=/usr/local/cuda
export PATH=$PATH:$CUDA_HOME/bin 
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
  • 让环境变量生效
source ~/.bashrc
  • 检查是否安装成功
nvcc -V

在这里插入图片描述

多个Cuda版本切换 (可选)

  • 在安装了多个cuda版本后,可以在/usr/local/目录下查看自己安装的cuda版本
cd /usr/local/
ls

在这里插入图片描述

  • 使用stat命令查看当前cuda软链接指向的哪个cuda版本
stat cuda

在这里插入图片描述

  • 重新建立软链接
# 删除当前的软链接
sudo rm -rf cuda
# 建立新的软链接到cuda9.2版本上
sudo ln -s /usr/local/cuda-9.2 /usr/local/cuda

安装CUDNN

  • 安装Cudnn
# 解压
tar xvf cudnn-10.2-linux-x64-v7.6.5.32.tgz
# 复制cudnn中的一些文件到cuda下
sudo cp cuda/include/cudnn.h /usr/local/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64/
# 改变权限
sudo chmod a+r /usr/local/cuda/include/cudnn.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*

安装Anaconda

  • 选择相应的版本进行下载
wget https://repo.anaconda.com/archive/Anaconda3-2022.05-Linux-x86_64.sh
  • 安装Anaconda
bash Anaconda3-2022.05-Linux-x86_64.sh
# 然后下一步继续就行。
# 说明:中间需要选择的都选yes或enter。
  • 初始化环境变量
cd ~ && source .bashrc
  • 启动Anaconda
conda activate
  • 退出Anaconda
conda deactivate

搭建虚拟环境

新建虚拟环境

# 新建名为open-mmlab的虚拟环境,python=3.8
conda create -n open-mmlab python=3.8 -y
# 查看当前存在的虚拟环境
conda env list
# 进入open-mmlab
conda activate open-mmlab

安装pytorch

pip install torch-1.9.0+cu102-cp38-cp38-linux_x86_64.whl
pip install torchvision-0.10.0+cu102-cp38-cp38-linux_x86_64.whl

Pycharm 远程连接

代码同步

  • 选择toolsdeploymentconfiguration

  • 点击左上方的+号选择SFTP协议传输文件。

  • 配置 ssh configuration, 点击

  • 点击左上角的+号,按自己的服务器填写信息

  • 配置完成后点击test connnection测试连接

在这里插入图片描述

  • 配置mappinglocal path是自己项目的本地地址,deployment path是服务器上我们存放项目的地址。
    在这里插入图片描述

  • 在pycharm中选中要上传的文件,然后点击Upload to Default Server

  • 勾选Automatic Upload,至此我们的文件就不需要手动同步到服务器上了,可以通过upload to命令执行。

配置服务器解释器

  • 选择filesettings

  • 选择projectpython interpreter,点击右上方add interpreter

  • 选择ssh interpreter

  • 选择existing interpreter ,选择我们刚刚添加的服务器

在这里插入图片描述

  • 点击interpreter右边的,找到服务器中安装的anaconda
    路径, 然后在该路径下选择解释器 anaconda/envs/环境名称/bin/python3

  • 点击sync folders并将remote path改成我们服务器上存放项目的地址。

在这里插入图片描述

二、训练和推理

自制COCO格式数据集

coco数据集

├── coco2017: 数据集根目录
     ├── train2017: 所有训练图像文件夹(118287张)
     ├── val2017: 所有验证图像文件夹(5000张)
     └── annotations: 对应标注文件夹
               ├── instances_train2017.json: 对应目标检测、分割任务的训练集标注文件
               ├── instances_val2017.json: 对应目标检测、分割任务的验证集标注文件
               ├── captions_train2017.json: 对应图像描述的训练集标注文件
               ├── captions_val2017.json: 对应图像描述的验证集标注文件
               ├── person_keypoints_train2017.json: 对应人体关键点检测的训练集标注文件
               └── person_keypoints_val2017.json: 对应人体关键点检测的验证集标注文件夹

coco数据集中的标签文件 .json

  • json 文件类型
<class 'dict'>
  • 字典长度
5
  • 字典中的key
dict_keys(['info', 'images', 'licenses', 'annotations', 'categories'])
  • info 对应的键值
{'description': 'This is stable 1.0 version of the 2014 MS COCO dataset.', 
'url': 'http://mscoco.org', 
'version': '1.0', 
'year': 2014, 
'contributor': 'Microsoft COCO group',
 'date_created': '2015-01-27 09:11:52.357475'
 }
  • licenses 对应的键值
[{'url': 'http://creativecommons.org/licenses/by-nc-sa/2.0/', 'id': 1, 'name': 'Attribution-NonCommercial-ShareAlike License'}, 
{'url': 'http://creativecommons.org/licenses/by-nc/2.0/',     'id': 2, 'name': 'Attribution-NonCommercial License'}, 
{'url': 'http://creativecommons.org/licenses/by-nc-nd/2.0/',   id': 3, 'name': 'Attribution-NonCommercial-NoDerivs License'},
{'url': 'http://creativecommons.org/licenses/by/2.0/',        'id': 4, 'name': 'Attribution License'}, 
{'url': 'http://creativecommons.org/licenses/by-sa/2.0/',     'id': 5, 'name': 'Attribution-ShareAlike License'},
{'url': 'http://creativecommons.org/licenses/by-nd/2.0/',     'id': 6, 'name': 'Attribution-NoDerivs License'},
{'url': 'http://flickr.com/commons/usage/',                   'id': 7, 'name': 'No known copyright restrictions'},
{'url': 'http://www.usa.gov/copyright.shtml',                 'id': 8, 'name': 'United States Government Work'}
]
  • **image** 对应的键值

    id : 每一张图片具有唯一的一个独特的编号

    height : 代表的是图片的高

    width:代表的是图片的宽

    file_name:代表的是图片的名字

'images': [
        {
            'file_name': 'COCO_val2014_000000001268.jpg',
            'height': 427,
            'width': 640,
            'id': 1268  
        },
        ...
    ],
  • **annotation** 对应的键值

    id:指的是这个annotation的一个id
    image_id:等同于前面image字段里面的id。
    category_id:类别id
    segmentation:实例分割的区域
    area:标注区域面积
    bbox:标注框,x,y为标注框的左上角坐标。
    iscrowd:决定是RLE格式还是polygon格式。

'annotations': [
        {
            'segmentation': [[192.81,
                247.09,
                ...
                219.03,
                249.06]],  # if you have mask labels
            'area': 1035.749,
            'iscrowd': 0,
            'image_id': 1268,
            'bbox': [192.81, 224.8, 74.73, 33.43],
            'category_id': 16,
            'id': 42986
        },
        ...
    ],
  • categories 对应的键值

    id:类别id

    name:类别名字

'categories': [
        {'id': 0, 'name': 'car'},
     ]

训练

  • 说明
num_classes=13
CLASSES=('Yellow','RedLeft','Red','GreenLeft','Green','off','GreenRight','GreenStraight','GreenStraightRight','RedRight','RedStraight','RedStraightLeft','GreenStraightLeft')

修改数据集相关参数

  1. 修改数据集路径文件:configs/_base_/datasets/coco_detection.py

    1. 修改data_root为自己数据集的路径
    2. 修改data字典中trainvalteat相关路径
  2. 修改模型配置文件:configs/_base_/models/faster_rcnn_r50_fpn.py

    1. 定位到roi_head字典出,修改bbox_head字典中的num_classes13
  3. 修改coco数据集定义文件:mmdet/datasets/coco.py

    1. CLASSES那里的参数修改为:

      CLASSES = (
          'Yellow', 'RedLeft', 'Red', 'GreenLeft', 'Green', 'off', 'GreenRight', 'GreenStraight', 'GreenStraightRight',
          'RedRight', 'RedStraight', 'RedStraightLeft', 'GreenStraightLeft')
      
    2. PALETTE参数随意选13个留下即可,这个参数用来指定每个类别框的显示颜色

  4. 修改class_name:mmdet/core/evaluation/class_names.py

    1. 定位到coco_classes函数,修改return中的参数为:

      def coco_classes():
          return [
              'Yellow', 'RedLeft', 'Red', 'GreenLeft', 'Green', 'off', 'GreenRight', 'GreenStraight', 'GreenStraightRight',
              'RedRight', 'RedStraight', 'RedStraightLeft', 'GreenStraightLeft'
          ]
      

修改训练相关参数

  1. 修改学习率、优化器相关参数:configs/_base_/schedules/schedule_1x.py
    1. 主要修改学习率lr的值,一般按照线性计算,官方8张GPU设置为0.02,则4张为0.01,2张为0.005

训练模型

  • 在训练前要先编译
sudo python3 setup.py develop

mmdetection目录下新建test_work_dirs文件夹

  • 单GPU训练
python tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py --gpus 1 --work-dir test_work_dirs
  • 多GPU训练

不指定GPU训练

python3 tools/train.py configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py --gpus 1 --validate --work_dir test_work_dirs

指定GPU训练

CUDA_VISIBLE_DEVICES=${指定的GPU} tools/dist_train.sh ${configs下面的配置文件} ${GPU个数} --work-dir ${存储输出权重、日志等的目录}

CUDA_VISIBLE_DEVICES=2,3指定使用GPU-3和GPU-4,同时要设置GPUS=2

CUDA_VISIBLE_DEVICES=2,3 tools/dist_train.sh configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py 2 --work-dir test_work_dirs

推理

对批量数据进行标注

# Copyright (c) OpenMMLab. All rights reserved.
import asyncio
from argparse import ArgumentParser

from mmdet.apis import (async_inference_detector, inference_detector,
                        init_detector, show_result_pyplot)
import os
import tqdm


def parse_args():
    parser = ArgumentParser()
    # 存放推理数据的文件夹
    parser.add_argument('--img', default='../data/coco/test2017', help='Image file')
    # 存放配置文件
    parser.add_argument('--config', default='../configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py', help='Config file')
    # 存放权重文件
    parser.add_argument('--checkpoint', default='../test_work_dirs/epoch_45.pth', help='Checkpoint file')
    parser.add_argument('--out-file', default='output/rcnn_45', help='Path to output file')
    parser.add_argument('--device', default='cuda:0', help='Device used for inference')
    parser.add_argument(
        '--palette',
        default='coco',
        choices=['coco', 'voc', 'citys', 'random'],
        help='Color palette used for visualization')
    parser.add_argument('--score-thr', type=float, default=0.2, help='bbox score threshold')
    args = parser.parse_args()
    return args


def main(args):
    # build the model from a config file and a checkpoint file
    model = init_detector(args.config, args.checkpoint, device=args.device)

    for filename in tqdm.tqdm(os.listdir(args.img)):
        img = os.path.join(args.img, filename)
        result = inference_detector(model, img)
        out_file = os.path.join(args.out_file, filename)
        show_result_pyplot(
            model,
            img,
            result,
            palette=args.palette,
            score_thr=args.score_thr,
            out_file=out_file)


if __name__ == '__main__':
    args = parse_args()
    main(args)


参考

  • 数据集

Bosch Small Traffic Lights Dataset

  • 环境配置

ubuntu18.04 安装多个CUDA版本并可以随时切换_平凡中寻找不平凡的博客-CSDN博客

Ubuntu18.04安装CUDA11.0 Installation failed. See log at /var/log/cuda-installer.log for details._English ONly的博客-CSDN博客_cuda installer界面

Pycharm连接服务器中的anaconda环境_LGhoyg的博客-CSDN博客_pycharm使用服务器的conda环境

mmdetection/get_started.md at master · open-mmlab/mmdetection

  • 训练

Bosch Small Traffic Lights Dataset

【ubuntu】如何解压 .zip.001 .zip.002 .zip.003 文件_轮子去哪儿了的博客-CSDN博客_zip.001 zip.002

COCO数据集的 标签文件.json解读、理解_轮子去哪儿了的博客-CSDN博客_coco数据集标签文件

COCO数据集标注格式及意义_梦坠凡尘的博客-CSDN博客_coco标注格式

【MMDetection】v2.22.0入门:训练自己的数据集_嗜睡的篠龙的博客-CSDN博客

mmdetection_周月亮的博客-CSDN博客_mmdetection

https://github.com/ming71/toolbox

https://github.com/spytensor/prepare_detection_dataset

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/59076.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Problem C: 算法10-10,10-11:堆排序

Problem Description 堆排序是一种利用堆结构进行排序的方法&#xff0c;它只需要一个记录大小的辅助空间&#xff0c;每个待排序的记录仅需要占用一个存储空间。 首先建立小根堆或大根堆&#xff0c;然后通过利用堆的性质即堆顶的元素是最小或最大值&#xff0c;从而依次得出…

TMS FixInsight代码评估工具

TMS FixInsight代码评估工具 TMS Fix Insight被认为是Delphi程序员的代码评估工具&#xff0c;它也能够在Delphi的源代码中发现问题。它被认为是一个代码分析工具&#xff0c;用于划分过程以及问题的位置以及Delphi的应用。TMS Fix Insight基本上是一个静态的代码列表&#xff…

Spring - SmartInstantiationAwareBeanPostProcessor扩展接口

文章目录Preorg.springframework.beans.factory.config.SmartInstantiationAwareBeanPostProcessor类关系SmartInstantiationAwareBeanPostProcessor接口方法扩展示例Pre Spring Boot - 扩展接口一览 org.springframework.beans.factory.config.SmartInstantiationAwareBeanPo…

HTML5期末大作业:基于HTML+CSS+JavaScript仿蘑菇街购物商城设计毕业论文源码

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

jdk11新特性——官方的更新列表

目录一、官方的更新列表二、JEP (JDK Enhancement Proposal 特性增强提议)一、官方的更新列表 二、JEP (JDK Enhancement Proposal 特性增强提议) JShell——(java9开始支持)Dynamic Class-File Constants类文件新添的一种结构局部变量类型推断&#xff08;var关键字&#xff…

开荒手册3——构思一篇小论文

0 写在前面 又过了一个gap week&#xff0c;总算想清楚了之前遇到的一些问题&#xff0c;现在需要把之前画的大饼们一个一个消化掉。跳出来就会知道&#xff0c;总有一些something is wrong的人喜欢散播点焦虑&#xff0c;你要做的不是惩戒他们&#xff0c;而是赶紧远离&#…

windows下安装ubuntu linux子系统

windows下安装ubuntu linux子系统一、win10下安装ubuntu linux子系统二、下载ubuntu子系统三、启动ubuntu子系统四、配置ubuntu子系统一、win10下安装ubuntu linux子系统 但我们现在自己的主机上跑linux时&#xff0c;有几种选择 同时安装多个操作系统&#xff0c;每次重启电…

js 代码的运行机制

前言&#xff1a; 自己从一开始学习 javaScript 的时候&#xff0c;踩过很多很多坑&#xff0c;初学之路上也问过很多大佬许多为什么...现在回过头感叹&#xff0c;当时问的某些问题确实是有一丢丢幼稚。但是作为一个过来者&#xff0c;我深知这些问题的对于很多“后来者”来说…

tensorflow的模型持久化

参考 tensorflow的模型持久化 - 云社区 - 腾讯云 目录 1、持久化代码实现 2、持久化原理及数据格式 1、meta_info_def属性 2、graph_def属性 3、saver_def属性 4、collection_def属性 1、持久化代码实现 tensorflow提供了一个非常简单的API来保存和还原一个神经网络模型…

自主式模块化无人机设计

目 录 摘 要 I Abstract II 1 绪论 1 1.1 研究背景与意义 1 1.2 国内外研究现状 1 1.3 主要研究内容 2 2自主式模块化无人机的总体结构设计 3 2.1结构形式 3 2.2工作原理 3 2.3机架及桨叶的选择 5 2.3.1 单个桨叶空气动力分析及桨叶的选择 5 2.3.2材料的选择 6 2.3.3机架结构分…

【教学类-20-01】20221203《世界杯16强国旗》(大班)

展示效果&#xff1a; 单人使用样式&#xff1a; 多页打印样式 ​ 背景需求&#xff1a; 做《蒙德里安》格子画时&#xff0c;我把A4纸分割为正方形画框和长条纸支撑。活动中幼儿询问&#xff1a;为什么我的画站不起来&#xff1f;&#xff08;底边剪的不平整、提手太重、画…

知识直播:时代乐见搜狐的长期主义选择

国内著名商业咨询顾问刘润说&#xff1a;“所有伟大的机会都源自于巨大的结构性改变。大成就背后&#xff0c;一定有涌动的、因商业逻辑巨变而释放出来的红利。” 这话用在当前的互联网行业身上再好不过。面对重重不确定性&#xff0c;如何拨开迷雾&#xff0c;看懂市场趋势&a…

HTTP到底是什么?

文章目录HTTP简介HTTP协议的特点1) 简单快速2) 灵活3) 无连接4) 无状态HTTP协议的发展历程1) HTTP/0.92) HTTP/1.03) HTTP/1.14) HTTP/2.0HTTP的工作流程HTTP简介 HTTP 全称为 Hypertext Transfer Protocol&#xff0c;翻译为中文是“超文本传输协议”的意思&#xff0c;它是互…

Java并发编程—volatile

文章目录volatile的应用volatile的定义与实现原理专业术语&#xff1a;volatile是如何来保证可见性的呢&#xff1f;volatile的原理&#xff1a;volatile的两条实现原则&#xff1a;&#xff08;物理上如何实施&#xff09;volatile的内存语义volatile的特性例&#xff1a;下面…

SpringBoot -集成Druid

文章目录Druid概述使用问题解决Spring监控不生效方式1&#xff1a;修改yml的配置写法方式2&#xff1a;参考DruidSpringAopConfiguration自行注入Bean&#xff0c;灵活&#xff08;更建议&#xff09;Druid 概述 官网&#xff1a; https://github.com/alibaba/druid   文档&a…

校园论坛(Java)—— 用户管理系统模块

校园论坛&#xff08;Java&#xff09;—— 用户管理系统模块 文章目录校园论坛&#xff08;Java&#xff09;—— 用户管理系统模块[toc]1、写在前面2、系统结构设计2.1 各个页面之间的调用关系2.2. 用户管理系统模块各层的设计3、管理员管理用户功能3.1 管理员查看普通用户的…

微服务框架 SpringCloud微服务架构 10 使用Docker 10.1 镜像命令

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构10 使用Docker10.1 镜像命令10.1.1 镜像相关命令10.1.2 镜像操作命令10.1.…

SpringBoot_整合PageHelper

分页插件/PageHelper插件 我们在正常的查询业务之中,只需要加上一行代码就可以实现分页的数据的封装处理 实现原理 PageHelper方法使用了静态的ThreadLocal参数&#xff0c;分页参数和线程是绑定的。内部流程是ThreadLocal中设置了分页参数&#xff08;pageIndex&#xff0c…

TypeScript21(装饰器Decorator)

Decorator 装饰器是一项实验性特性&#xff0c;在未来的版本中可能会发生改变 不仅增加了代码的可读性&#xff0c;清晰地表达了意图&#xff0c;而且提供一种方便的手段&#xff0c;增加或修改类的功能&#xff1b; 若要启用实验性的装饰器特性&#xff0c;你必须在命令行或…

计算机网络 HTTPS

HTTPS HTTPS &#xff08;全称&#xff1a;Hypertext Transfer Protocol Secure &#xff09;&#xff0c;是以安全为目标的 HTTP 通道&#xff0c;在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL&#xff0c;HTTPS 的安全基础是…