使用labelImg进行图像标注

lzgnanjing edited this page on 27 Oct 2020 · 1 revision

我们使用labelImg工具来对图像数据集标注。
labelImg是开源的Python工具包,其代码和详细介绍可查阅GitHub labelImg 通过pip install labelImg命令来安装labelImg,注意区分大小写。
该命令跟平台无关,不管在Windows、Linux和MacOS上均可执行。

pip设置

pip默认是从国外网站上下载要安装的工具包,通常会因为网络错误等原因导致下载失败。
为了避免下载失败,我们将pip的镜像源切换为国内的镜像源。

国内常用镜像源:
阿里云:https://mirrors.aliyun.com/pypi/simple 清华:https://pypi.tuna.tsinghua.edu.cn/simple 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣:http:///simple/
镜像源的切换有如下的一些方式:
临时切换:
pip install -i 镜像源 包名,例如: pip install -i https://mirrors.aliyun.com/pypi/simple labelImg 永久切换:
方式1:pip config set global.index-url + 源地址。
例如:pip config set global.index-url https://mirrors.aliyun.com/pypi/simple

方式2:
在linux下,修改 ~/.pip/pip.conf (没有就创建一个文件夹及文件。文件夹要加“.”,表示是隐藏文件夹)
[global]timeout = 300index-url = https://mirrors.aliyun.com/pypi/simple[install]trusted-host=aliyun.com 在window下,在%USERPROFILE%目录下创建pip目录,再新建文件pip.ini。内容同上。
USERPROFILE文件夹路径可通过set USERPROFILE命令查询。\

镜像源设置后可通过pip config list查看。

labelImg标注

标注方法

labelImg安装成功后在控制台输入labelImg可启动labelImg工具。

  1. 点击“Change Save Dir”按钮设置将标注结果存在指定的目录下。
  2. 点击“Create\nRectBox”按钮后开始标注。
  3. 按住Ctrl+鼠标滚轮,放大缩小图片。
  4. “View”菜单点击“Auto Save Mode”可实现标注的自动保存,文件名和图片名一致。
  5. 对已标注的图,点击矩形框的4个顶点拖拽鼠标可对标注结果调整

标注要注意以下几点,会影响训练的效果:

  1. 针对图片中存在多个物体的情形,做到不重标、不漏标。
  2. 需要保证目标框内物体的完整性;要注意将属于该物体的部分都框进去,不属于的部分不框进去。
  3. 标注时将图像放大标,可确保目标框内的完整性。
  4. 活用快捷键。
  5. 注意保存格式从PascalVOC切换为YOLO后,只会将接下来标注的图保存为YOLO格式,已经保存为PascalVOC修改的图是不会自动切换为YOLO格式的。

建议

保存格式建议保存为PascalVOC格式,不要选择YOLO格式。有如下2个原因:

  1. PascalVOC格式保存的是xml文件,YOLO保存的是txt文件。xml里面含有的信息较txt更丰富。
  2. 用YOLO格式在团队协作时针对有多个label情况可能会带来问题。标签的顺序会导致导出的class id不同。

PascalVOC转换为YOLO

我们可以通过python脚本将xml转换为txt格式。

annotation

<annotation>  
    <folder>VOC2012</folder>                             
    <filename>2007_000392.jpg</filename>                             //文件名  
    <source>                                                         //图像来源(不重要)  
        <database>The VOC2007 Database</database>  
        <annotation>PASCAL VOC2007</annotation>  
        <image>flickr</image>  
    </source>  
    <size>                                            //图像尺寸(长宽以及通道数)                        
        <width>500</width>  
        <height>332</height>  
        <depth>3</depth>  
    </size>  
    <segmented>1</segmented>            //是否用于分割(在图像物体识别中01无所谓)  
    <object>                              //检测到的物体  
        <name>horse</name>                                         //物体类别  
        <pose>Right</pose>                                         //拍摄角度  
        <truncated>0</truncated>                                   //是否被截断(0表示完整)  
        <difficult>0</difficult>                                   //目标是否难以识别(0表示容易识别)  
        <bndbox>                                                   //bounding-box(包含左下角和右上角xy坐标)  
            <xmin>100</xmin>  
            <ymin>96</ymin>  
            <xmax>355</xmax>  
            <ymax>324</ymax>  
        </bndbox>  
    </object>  
    <object>              //检测到多个物体  
        <name>person</name>  
        <pose>Unspecified</pose>  
        <truncated>0</truncated>  
        <difficult>0</difficult>  
        <bndbox>  
            <xmin>198</xmin>  
            <ymin>58</ymin>  
            <xmax>286</xmax>  
            <ymax>197</ymax>  
        </bndbox>  
    </object>  
</annotation>