使用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 = 300
index-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工具。
- 点击“Change Save Dir”按钮设置将标注结果存在指定的目录下。
- 点击“Create\nRectBox”按钮后开始标注。
- 按住Ctrl+鼠标滚轮,放大缩小图片。
- “View”菜单点击“Auto Save Mode”可实现标注的自动保存,文件名和图片名一致。
- 对已标注的图,点击矩形框的4个顶点拖拽鼠标可对标注结果调整
标注要注意以下几点,会影响训练的效果:
- 针对图片中存在多个物体的情形,做到不重标、不漏标。
- 需要保证目标框内物体的完整性;要注意将属于该物体的部分都框进去,不属于的部分不框进去。
- 标注时将图像放大标,可确保目标框内的完整性。
- 活用快捷键。
- 注意保存格式从PascalVOC切换为YOLO后,只会将接下来标注的图保存为YOLO格式,已经保存为PascalVOC修改的图是不会自动切换为YOLO格式的。
建议
保存格式建议保存为PascalVOC格式,不要选择YOLO格式。有如下2个原因:
- PascalVOC格式保存的是xml文件,YOLO保存的是txt文件。xml里面含有的信息较txt更丰富。
- 用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>