1. 磐创AI-开放猫官方网站首页
  2. Medium

Kaggle中的MMDetect教程-最新的对象检测库

重要资源

在开始之前,我将参考、使用或可能帮助您更好地理解MMDettion的一些资源。MMDettion Github RepoMMDettion文档MMDettion自定义数据集TutorialKaggle笔记本。MMDettion Github RepoMMDettion DocumentationMMDettion自定义数据集TutorialKaggle笔记本MMDetection Github Repo MMDetection Documentation MMDetection Custom Dataset Tutorial Kaggle Notebook

安装所需的库

在本教程中,我引用的我写的笔记本就是这本。您需要采取的第一步是安装mmDetection库。在Kaggle中,您应该启动一个GPU笔记本,并检查您所连接的GPU的CUDA版本。 this one

!nvcc -V
!gcc --version

现在在输出中查找CUDA构建版本。

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2020 NVIDIA Corporation
Built on Wed_Jul_22_19:09:09_PDT_2020
Cuda compilation tools, release 11.0, V11.0.221
Build cuda_11.0_bu.TC445_37.28845127_0

gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

接下来,安装与CUDA版本对应的pytorch和torchvision版本。pytorch and torchvision versions that coorespond to the cuda version

!pip install -U torch==1.7.1+cu110 torchvision==0.8.2+cu101 -f https://download.pytorch.org/whl/torch_stable.html

现在您应该安装“mmcv-full”,这是一个MM库,它提供了MMDetect的基础。然后,克隆MMDettion Github存储库并安装需求。

注意:此步骤大约需要15分钟,因此请耐心等待。不要担心它被卡住了,为mmcv-full建造轮子。

!pip install mmcv-full
!rm -rf mmdetection
!git clone https://github.com/open-mmlab/mmdetection.git
%cd mmdetection
!pip install -e .
!pip install Pillow==7.0.0

MMDetect的简单演示

现在您已经安装了所需的库,可以开始尝试MMDetect了。您可以从对MMDettion提供的演示图像进行推断开始。我使用了在Coco数据集上训练的Mask RCNN版本,并从MMDettions下载了Mask RCNN的检查点。然后,使用init_Detector、Insertion_Detector和show_result_pylot的MMDetect函数初始化模型并显示它对图像所做的推断。version of Mask RCNN

import torch, torchvision
import mmdet
from mmdet.apis import inference_detector, init_detector, show_result_pyplot

预处理数据集

您将在本教程中使用的数据集是枪支对象检测数据集。这也是一个有点棘手的问题。它包含txt文件中的注释,因此您需要对其进行预处理。首先,您将把txt文件转换为XML文件(该函数归Siddhesh Sali所有)。为此,您将首先移动,将数据集中的所有txt和img文件复制到新目录。接下来,您将遍历每个txt文件并读取该文件。然后,您将拆分文件并将整数映射到每个拆分部分,并将第0个元素(包含注释数量)指定为n。接下来要做的是创建一个与txt文件同名但作为XML文件的文件。完成所有这些之后,您将开始编写XML文件。您将从使用Pascal VOC注释格式开始。您还将使用CV2读取图像以获得其高度和宽度。对于边界框批注,您需要迭代txt文件中的每个边界框批注,找到xmin、ymin、xmax、ymax,并将它们写入XML文件。最后,您可以通过删除txt文件并将图像移动到单独的目录来清理目录。gun object detection dataset Siddhesh Sali PASCAL VOC annotation format

import os
from mmdet.datasets import build_dataset
from mmdet.models import build_detector
from mmdet.apis import train_detector
import glob
import cv2
import shutil
import random
import os.path as osp
import json
import mmcv
import re
import xml.etree.ElementTree as ET
from typing import Dict, List

培训和验证拆分

这是该过程中相当快的一部分:)。您所需要做的就是为验证图像和注释创建2个新目录,并随机抽取30个图像和注释样本,将其移动到这些新目录中。

!mkdir val-xml-labels
!mkdir val-images

从Pascal VOC转换为CoCo

接下来,您需要将批注格式从Pascal VOC转换为COCO,因为在MMDettion中使用COCO批注更容易。你可以使用Pascal VOC,但我发现使用Coco更容易。首先,您需要编写一个labels.txt文件,其中包含仅为Gun的标签,并编写一个验证和训练文件路径文件,其中包含每个目录中所有XML文件的文件路径。然后,使用yukkyo对此脚本的修改版本将Pascal VOC批注转换为COCO批注。this script yukkyo

%%writefile labels.txt
Gun
#Put the above code in its own separate cell.

创建模型

既然您已经对我们的数据进行了预处理,您就可以创建要使用的模型了。您将通过创建MMDettion配置文件来创建此模型。MMDettion配置文件是可继承的文件,包含有关模型的所有信息,从它的主干到它的丢失,甚至到数据管道。MMDetect的模型动物园中的每个模型都有一个配置文件。您可以在MMDettion存储库的configs目录中签出每个型号可用的不同配置。当您单击一个模型时,您应该会看到一个类似下面这样的自述文件。model zoo of MMDetection configs directory of the MMDetection repository

我选择使用带有ResNet-101主干的RetinaNet。您可以在这里选择任何模型,但是您可能需要做与我稍有不同的下一步(您需要检查模型是否有ROI_HEAD,以及是否有更改它的类数)。在本教程中,我将展示如何使用RetinaNet。您需要下载要使用的特定型号的检查点。这将位于下载列下,并且是自述文件中的模型链接。下载模型后,您将在Kaggle中创建模型的数据集,并将其作为数据集添加到笔记本中。现在您将创建配置文件。您将继承特定型号的配置并进行一些更改。您将更改一些数据集设置、BBox Head中的类数、检查点的文件路径、学习速率、学习速率的步骤、评估间隔和种子。RetinaNet with a ResNet-101 backbone

from mmcv import Config
cfg = Config.fromfile('/kaggle/working/mmdetection/configs/retinanet/retinanet_r101_fpn_1x_coco.py')

列车型号

您终于准备好训练模型了。您需要做的全部工作就是构建数据集、构建模型、将Model.CLASSES设置为用于在推理时进行可视化的类、创建工作目录并训练模型。

datasets = [build_dataset(cfg.data.train)]

推理

训练结束后,我们可以对一些图像进行推理。我选择在开始时创建的验证数据集上进行推断。MMDettion非常好,因为您可以极其快速地可视化推论。您所需要做的就是将模型配置设置为前面的配置文件,对每个映像进行推断,然后显示结果。

model.cfg = cfg


就是这样!您刚刚完成了第一个MMDettion对象检测模型。MMDetect的好处是切换模型相对容易,所以可以尝试使用不同的模型,比如更快的R-CNN作为快速练习!感谢您的阅读!Faster R-CNN

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/07/16/kaggle%e4%b8%ad%e7%9a%84mmdetect%e6%95%99%e7%a8%8b-%e6%9c%80%e6%96%b0%e7%9a%84%e5%af%b9%e8%b1%a1%e6%a3%80%e6%b5%8b%e5%ba%93-2/

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息