复现 MMDetection
创始人
2024-03-16 04:35:55
0

文章目录

  • 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 文件类型

  • 字典长度
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 ArgumentParserfrom mmdet.apis import (async_inference_detector, inference_detector,init_detector, show_result_pyplot)
import os
import tqdmdef 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 argsdef main(args):# build the model from a config file and a checkpoint filemodel = 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

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...