open-mmlab labelImg mmdetection

本文介绍了数据标注工具labelImg的安装与使用,以及mmdetection框架的配置、运行和数据集微调过程。首先通过pip或源码安装labelImg,然后使用labelme进行标注并生成COCO格式数据。接着,详细阐述了mmdetection的环境配置、预训练模型下载、数据集转换、配置文件修改、训练和测试的步骤。最后提及了mmsegmentation的相关信息。

数据标柱工具介绍

labelImg

git地址: https://github.com/tzutalin/labelImg

安装(两种方法都适用于linux和mac上的conda虚拟环境下安装)

根据git上介绍,有两种安装方法:

pip包安装

pip包安装(linux上最简单的安装方法),安装命令及使用命令如下:

# 环境准备
conda create -n labelImg_1 python=3.7
conda activate labelImg_1
# linux安装
pip3 install labelImg
# linux使用vnc打开可视化界面。命令行输入如下:
labelImg
#
labelImg [IMAGE_PATH] [PRE-DEFINED CLASS FILE]

使用pip list查看安装包

pip list
Package    Version
---------- ---------
certifi    2021.10.8
labelImg   1.8.6
lxml       4.6.3
pip        21.0.1
PyQt5      5.15.5
PyQt5-Qt5  5.15.2
PyQt5-sip  12.9.0
setuptools 58.0.4
wheel      0.37.0

软件截图如下
在这里插入图片描述

从源码安装

下载源代码,准备虚拟环境

# 环境准备
conda create -n labelImg_2 python==3.7
conda activate labelImg_2
pip install PyQt5
pip install lxml
pyrcc5 -o libs/resources.py resources.qrc
# 下载
git clone https://github.com/tzutalin/labelImg
cd labelImg
# 使用
python3 labelImg.py
#
python3 labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]

使用pip list查看安装包

pip list
Package    Version
---------- ---------
certifi    2021.10.8
lxml       4.6.3
pip        21.2.2
PyQt5      5.15.5
PyQt5-Qt5  5.15.2
PyQt5-sip  12.9.0
setuptools 58.0.4
wheel      0.37.0

软件截图如下
在这里插入图片描述

labelme

git地址: https://github.com/wkentaro/labelme

安装

安装命令如下:

conda create --name=labelme python=3.6
source activate labelme
pip install labelme

使用

直接在环境下键入

labelme

出现界面如下,此时可以打开图片路径进行标注:
在这里插入图片描述
点击Create Polygons进行标注,输入标签

在这里插入图片描述

在这里插入图片描述
点击左侧菜单栏保存,保存为json文件。

生成label数据

# 运用命令
labelme_json_to_dataset DJI_20210414132518_0423_Z.json

生成文件夹DJI_20210414132518_0423_Z_json,内容如下:
在这里插入图片描述

注:可以把多个labelme_json_to_dataset aa.json写入批处理文件中

mmdetection

git地址: https://github.com/open-mmlab/mmdetection

git clone https://github.com/open-mmlab/mmdetection

下载到服务器,更新到本地,用pycharm编辑器打开(参考https://blog.youkuaiyun.com/fighting_Kitty/article/details/121023315

配置环境

找到readme中Installation,get_started.md中详细写了环境安装,主要命令如下:

# 创建虚拟环境
conda create -n openmmlab python=3.7 -y
conda activate openmmlab
# 安装PyTorch and torchvision
#(按照自己的cuda版本(nvcc -V)
# 去pytorch官网上选https://pytorch.org/get-started/previous-versions/)
# CUDA 11.0
pip install torch==1.7.1+cu110 torchvision==0.8.2+cu110 torchaudio==0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
# Install MMDetection(自动或者手动,自动简单,手动适合调试研究代码)
pip install openmim
mim install mmdet

# 手动
pip install torch==1.7.0+cu110 torchvision==0.8.1+cu110 torchaudio==0.7.0  -f https://download.pytorch.org/whl/torch_stable.html
pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu110/1.7.1+cu110/index.htm



附:cuda查看nvcc -V

nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Thu_Jun_11_22:26:38_PDT_2020
Cuda compilation tools, release 11.0, V11.0.194
Build cuda_11.0_bu.TC445_37.28540450_0

运行

mkdir checkpoints
cd checkpoints
wget https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth
wget https://github.com/open-mmlab/mmdetection/tree/master/configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py

代码

from mmdet.apis import init_detector, inference_detector

config_file = '../configs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py'
# download the checkpoint from model zoo and put it in `checkpoints/`
# url: https://download.openmmlab.com/mmdetection/v2.0/faster_rcnn/faster_rcnn_r50_fpn_1x_coco/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth
checkpoint_file = '../checkpoints/faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth'
device = 'cuda:0'
# init a detector
model = init_detector(config_file, checkpoint_file, device=device)
# inference the demo image
inference_detector(model, '../demo/demo.jpg')

用自己的数据集微调

下载预训练模型

mmdetection里提供了丰富的预训练权重模型,本文使用faster_rcnn_r50_fpn_1x_coco_20200130-047c8118.pth,下载后放到checkpoints路径下

voc数据修改为标准的coco格式

用labelImg标注检测图片,标注数据格式为PASCAL VOC的格式,一个图片对应一个XML注文件。COCO数据格式,所有的图像数据标注信息都保存在一个JSON文件中。转换代码如下:

import json
import os, sys
import xml.etree.ElementTree as ET
import pdb;pdb.set_trace()
mode = 'test' # 这里可以改成train、val
DATA_DIR = '/home/qian/caojie/software/mmdetection/data/hotel/' + mode + '/'
ANN_DIR = DATA_DIR + 'annotations/'

# ==================== 需要修改 train or val ========================
COCO_JSON_FILE = DATA_DIR + 'hotel_' + mode + '.json'  # json save path
VOC_XMLS_DIR = DATA_DIR + 'annotations/'
# ==================================================================

if not os.path.exists(ANN_DIR):
    os.makedirs(ANN_DIR)

# coco images 的列表
images = []

# coco annotations 的列表
annotations = []

# coco categories 的列表
# If necessary, pre-define category and its id
PRE_DEFINE_CATEGORIES = {
   
   "background": 0, "bed": 1, "chair": 2, "curtain": 3}
categories = [
    {
   
   
        'id': 0,
        'name': 'background',
        'supercategory': 'object',
    
### 使用 MMDetection 进行数据集准备、加载和处理 #### 数据集格式支持 MMDetection 支持多种常见的目标检测数据集格式,包括 COCO 和 VOC。对于特定的数据集格式,如Pascal VOC,需要按照一定的结构来组织文件并配置相应的参数[^1]。 #### 环境依赖项设置 为了确保能够顺利运行 MMDetection 并处理数据集,建议环境中的软件包版本与项目兼容。具体来说: - Python 版本应为 3.7.x 或更高; - CUDA 应匹配 GPU 的架构,并且 cuDNN 需要正确安装以加速计算; - PyTorch 及其扩展库 `torchvision` 是核心依赖之一; - 安装完整的 MMCV (OpenMMLab's fundamental library),这可以通过 pip 来完成。 ```bash pip install mmcv-full==1.6.0 -f https://download.openmmlab.com/mmcv/dist/cu113/torch1.12/index.html ``` #### 数据集准备工作流程 当使用 Pascal VOC 格式的图像标注时,需遵循以下步骤来进行数据预处理工作: 1. **创建目录结构** 创建符合 MMDetection 要求的标准文件夹布局,通常包含子文件夹用于存放不同用途的图片(train, val, test)及其对应的标签文件。 2. **转换标注文件** 如果原始数据是以 XML 形式存储,则可能需要用脚本来批量转存这些记录到 JSON 文件中去适应 COCO API 接口的要求[^2]。 3. **编写配置文件** 编辑或新建 `.py` 结尾的配置文档指定模型架构细节以及训练超参设定等内容;同时也要指明输入源的位置信息以便读取样本。 4. **验证数据集路径** 修改默认路径指向本地实际存在的位置,在某些情况下还需要调整类别名称列表使它们对应上当前任务所涉及的对象种类。 #### 示例代码片段展示如何定义一个新的数据集类 下面给出了一段简单的例子说明怎样继承自 BaseDataset 类来自定义新的数据集类型: ```python from mmdet.datasets.builder import DATASETS from .base_dataset import BaseDataset @DATASETS.register_module() class CustomVOCDataset(BaseDataset): CLASSES = ('aeroplane', 'bicycle', ... ) # 用户自行补充其余分类名 def load_annotations(self, ann_file): """Load annotation from XML style ann_file. Args: ann_file (str): Path of Annotations file. Returns: list[dict]: Annotation info from XML file. """ data_infos = [] img_ids = mmcv.list_from_file(ann_file) for img_id in img_ids: filename = f'JPEGImages/{img_id}.jpg' xml_path = osp.join(self.img_prefix, 'Annotations', f'{img_id}.xml') tree = ET.parse(xml_path) root = tree.getroot() width = int(root.find('size/width').text) height = int(root.find('size/height').text) bboxes = [] labels = [] for obj in root.findall('object'): name = obj.find('name').text label = self.cat2label[name] difficult = int(obj.find('difficult').text) bnd_box = obj.find('bndbox') bbox = [ float(bnd_box.find('xmin').text), float(bnd_box.find('ymin').text), float(bnd_box.find('xmax').text), float(bnd_box.find('ymax').text) ] ignore = False if self.min_size is not None and ( bbox[2] - bbox[0]) < self.min_size or ( bbox[3] - bbox[1]) < self.min_size: ignore = True if difficult or ignore: continue bboxes.append(bbox) labels.append(label) gt_bboxes = np.array(bboxes, dtype=np.float32).reshape(-1, 4) gt_labels = np.array(labels, dtype=np.int64) anno_info = { 'filename': filename, 'width': width, 'height': height, 'ann': dict( bboxes=gt_bboxes, labels=gt_labels) } data_infos.append(anno_info) return data_infos ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值