持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情
前言
我们知道,目标检测 (object detection
) 的输出是目标的边界框,其中边界框用于定位图像中的目标对象。要构建算法检测图像中目标周围的边界框,就必须首先创建输入-输出
映射,其中输入是图像,而输出是给定图像中目标周围的边界框。 当我们检测到边界框时,我们需要检测图像周围边界框左上角的像素位置,以及边界框的相应宽度和高度。要训练能够输出边界框的模型,我们需要训练集图像以及训练数据集图像中所有对象的相应边界框坐标和类别标签。
创建自定义目标检测数据集
在本节中,我们将介绍如何创建训练数据集的方法,其中将图像作为输入,并将相应的边界框存储在XML文件中。我们将学习使用labelImg包来标注边界框和相应目标对象的类。在不同操作系统中有不同的方式使用 labelimg
包标注图像中对象的边界框,不同操作系统的安装教程可以参考官方网页。最为通用的方法是使用 pip
进行安装,与其它第三方库安装方法相同:
$ pip3 install labelImg
windows
通过官方链接下载 labelImg
的可执行文件,解压后打开 labelImg.exe
程序,其界面如下图所示:
在 data
文件夹的 predefined_classes.txt
文件包含了图像中所有可能的标签,我们需要确保每个类别都占据单独一行,如下所示:
单击 “Open
” 打开图像,然后单击 “Create RectBox
” 为图像绘制边界框。绘制边界框完成后,将弹出为目标对象选择的类别窗口,为标记的对象选择所属类别,如下所示:
单击 Ok
完成此对象的标注,标注图中所有对象后,单击 Save
并保存 XML
文件:
保存完成后,可以检查 XML
文件。绘制矩形边界框后,XML
文件的内容如下所示:
在上图中,可以看到,bndbox
包含图像中对象相对应的 x
和 y
坐标的最小值和最大值的坐标,即边界框左上角和右下角坐标。此外,我们可以通过 name
提取到边界框中对象相对应的类别标签。
Ubuntu
在 Ubuntu
中,可以通过运行以下命令来使用 labelimg
包:
$ sudo apt-get install pyqt5-dev-tools
$ sudo pip3 install -r requirements/requirements-linux-python3.txt
$ make qt5py3
$ python3 labelImg.py
可以在 GitHub 链接中找到脚本labelImg.py。执行上述命令后,接下来使用 labelimg
包标注目标对象边界框和类别的用法与 Windows
中相同。
MacOS
在 macOS
中,可以通过执行以下命令来使用 labelimg
包:
$ brew install qt
$ brew install libxml2
$ make qt5py3
$ python3 labelImg.py
可以在 GitHub 链接中找到脚本 labelImg.py
。执行了以上命令之后,接下来使用 labelimg
包标注目标对象边界框和类别的用法与 Windows
中相同。