本文按照VOC数据集的格式,制作出自己的数据集,此外介绍一款使用方便且能够标注多类别并能直接生成xml文件的标注工具——labelImg工具。
VOC数据集的介绍:https://blog.csdn.net/tttabcgy/article/details/80191889
Ubuntu源码安装
由于Ubuntu系统自带python,这款软件在Ubuntu环境下的安装是最方便的。软件要求python版本在2.6以上,同时需要PyQt和lxml的支持。
(1)下载代码
git clone https://github.com/tzutalin/labelImg
( 2 )安装Python3+QT5(github上的安装步骤太慢 ,可以使用下面的代码)
1 安装:
sudo apt-get install pyqt5-dev-tools
sudo pip3 install lxml# 安装lxml,如果报错,可以试试下面语句
sudo apt-get install python-lxml
2 打开终端,进入LabelImg目录后使用make编译:
cd LabelImg
make all
3 使用
在labelImg目录下使用终端执行
python3 labelImg.py
(3)建立自己的文件
按照VOC格式建立3个文件夹,Annotataions里是要放生成的XML文件,ImageSets里再建立Main文件,Main文件要放入生成的四个text文件,IPEGImages放入自己要图片,格式是000001.jpg。
(4)labelimg窗口的使用方法:(运行 python3 labelImg.py会出现画图窗口)
“Open Dir”打开需要标注的样本图片文件夹,会自动打开第一张图片,开始进行标注。
使用“Create RectBox”开始画框。
完成一张图片后点击“Save”,此时XML文件要保存到Annotations中。
点击“Next Image”转到下一张图片。
标注过程中可随时返回进行修改,后保存的文件会覆盖之前的。
完成标注后打开XML文件,发现确实和PASCAL VOC所用格式一样。此外,还可以转换成yolo格式的(点击PASCAL VOC切换)。
注意:
• 修改默认的XML文件保存位置,可以用“Ctrl+R”,改为自定义位置,这里的路径不能包含中文,否则无法保存。
• 源码文件夹中使用notepad++打开data/predefined_classes.txt,可以修改默认类别,比如改成bus、car、building三个类别。
类别名称请用小写字母。(pascal.py中读取.xml文件的类别标签的代码:cls = self._class_to_ind[obj.find('name').text.lower().strip()]写的只识别小写字母,如果你的标签含有大写字母,可能会出现KeyError的错误)
•每个图片和标注得到的xml文件,JPEGImages文件夹里面的一个训练图片,对应Annotations里面的一个同名XML文件,一 一 对应,命名一致。
此时,Annotations里面的已经自动保存XML文件。
然后就是搞定ImageSets文件夹中的Main文件夹中的四个文件。如下面代码:
import os
import random
trainval_percent = 0.66
train_percent = 0.5
xmlfilepath = '/media/lee/data/xm/labelImg/RS2018/Annotations'
txtsavepath = '/media/lee/data/xm/labelImg/RS2018/ImageSets\Main'
total_xml = os.listdir(xmlfilepath)
num=len(total_xml)
list=range(num)
tv=int(num*trainval_percent)
tr=int(tv*train_percent)
trainval= random.sample(list,tv)
train=random.sample(trainval,tr)
ftrainval = open('/media/lee/data/xm/labelImg/RS2018/ImageSets/Main/trainval.txt', 'w')
ftest = open('/media/lee/data/xm/labelImg/RS2018/ImageSets/Main/test.txt', 'w')
ftrain = open('/media/lee/data/xm/labelImg/RS2018/ImageSets/Main/train.txt', 'w')
fval = open('/media/lee/data/xm/labelImg/RS2018/ImageSets/Main/val.txt', 'w')
for i in list:
name=total_xml[i][:-4]+'\n'
if i in trainval:
ftrainval.write(name)
if i in train:
ftrain.write(name)
else:
fval.write(name)
else:
ftest.write(name)
ftrainval.close()
ftrain.close()
fval.close()
ftest .close()
只要把上面出现的所有路径换成自己的路径就可以运行。运行成功后就可以发现Main文件夹中出现了四个文件。
到此,制作数据集结束。可以进行下一步训练。
参考的文章:
https://blog.csdn.net/cgt19910923/article/details/80211220
https://blog.csdn.net/u011574296/article/details/78953681
https://blog.csdn.net/tsq292978891/article/details/78720157
https://blog.csdn.net/jesse_mx/article/details/53606897
https://blog.csdn.net/xunan003/article/details/78720189
https://github.com/tzutalin/labelImg
————————————————
版权声明:本文为CSDN博主「weixin_38385446」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38385446/article/details/81081172