labelImag安装与使用及构造数据集

在做目标检测任务时,需要进行标注,选择了LabelImg作为标注工具,下面是安装及使用过程。
我们使用Anconda的虚拟环境进行安装,激活环境后,执行:

pip install labelimg -i https://pypi.tuna.tsinghua.edu.cn/simple

在这里插入图片描述
安装结束后,输入labelimg即可。
labelImag安装与使用及构造数据集_第1张图片
然后我们还需要设置一下点击View显示如下图,然后把如下的几个选项勾上:

  • Auto Save mode:当你切换到下一张图片时,就会自动把上一张标注的图片标签自动保存下来,这样就不用每标注一样图片都按Ctrl+S保存一下了
  • Display Labels:标注好图片之后,会把框和标签都显示出来
  • Advanced Mode:这样标注的十字架就会一直悬浮在窗口,不用每次标完一个目标,再按一次W快捷键,调出标注的十字架。

然后我们就可以进行标注了,博主标注格式为VOC,首先需要创建好对应的文件。

  • JPEGImage 目录:存储的图片
  • Annotation 目录:用于存放标注图片的标签文件
  • predefined_classes.txt 文件:定义自己要标注的所有类别

然后我们需要定义好自己想要标注的类别,博主初步定义如下:

bus person car sign light

其中sign包含路牌,交通标识等,light指的是信号灯。
我们先将数据集统一重命名

import os
# 图片存放的路径
path = r"E:/KITTI/jiamusi/VOC/JPEGImage/"
# 遍历更改文件名
num = 1
for file in os.listdir(path):
   os.rename(os.path.join(path,file),os.path.join(path,str(num))+".jpg")
    num = num + 1

完成后labelimg打开 Open Dir 进行标注,w 快捷键进行标注:
labelImag安装与使用及构造数据集_第2张图片
标注完成:

Ctrl+S保存生成的标注文件

<annotation>
	<folder>JPEGImage</folder>
	<filename>1.jpg</filename>
	<path>E:\KITTI\jiamusi\VOC\JPEGImage\1.jpg</path>
	<source>
		<database>Unknown</database>
	</source>
	<size>
		<width>6960</width>
		<height>4640</height>
		<depth>3</depth>
	</size>
	<segmented>0</segmented>
	<object>
		<name>person</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>3106</xmin>
			<ymin>2119</ymin>
			<xmax>3364</xmax>
			<ymax>2907</ymax>
		</bndbox>
	</object>
	<object>
		<name>person</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>3359</xmin>
			<ymin>2225</ymin>
			<xmax>3617</xmax>
			<ymax>2878</ymax>
		</bndbox>
	</object>
	<object>
		<name>car</name>
		<pose>Unspecified</pose>
		<truncated>1</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>5894</xmin>
			<ymin>2307</ymin>
			<xmax>6960</xmax>
			<ymax>3519</ymax>
		</bndbox>
	</object>
	<object>
		<name>car</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>6023</xmin>
			<ymin>2155</ymin>
			<xmax>6700</xmax>
			<ymax>2513</ymax>
		</bndbox>
	</object>
	<object>
		<name>car</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>3641</xmin>
			<ymin>2296</ymin>
			<xmax>3829</xmax>
			<ymax>2419</ymax>
		</bndbox>
	</object>
</annotation>

至此便标注完成了。
labelImag安装与使用及构造数据集_第3张图片
在上面中我们将自己的数据集完成了标注,那么接下来便是使用自己的数据集进行训练了。
我们看一下数据集标注的效果。分为3种,xml为voc格式,txt为yolo格式,json为coco格式。
labelImag安装与使用及构造数据集_第4张图片
这里的文件放置比较杂乱,我们将其分一下:

#将指定文件复制到某个文件夹中
def copyfile():
    import os
    import shutil
    data_path = 'E:/KITTI/jiamusi/VOC/Annotation/'
    for root, dirs, files in os.walk(data_path):
        for file in files:
            if file.endswith("xml"):
                old_file_path = os.path.join(root, file)
                # print(old_file_path)
                new_path = 'E:/KITTI/jiamusi/VOC/COCO_Annotation/'
                if not os.path.exists(new_path):  # 创建新文件夹
                    os.makedirs(new_path)
                new_file_path = new_path + '/' + file
                print(new_file_path)
                shutil.copyfile(old_file_path, new_file_path)  # 复制文件
    print('finished!')

这里我们可以判断下是否有标注遗漏的:

def serach():
    import fnmatch
    import os
    data_path = 'E:/KITTI/jiamusi/VOC/VOC_Annotation/'
    file_path = 'E:/KITTI/jiamusi/VOC/JPEGImage/'
    data_list = []
    file_list = []
    for root, dirs, files in os.walk(data_path):
        for file in files:
            data_list.append(os.path.splitext(file)[0])
    for root, dirs, files in os.walk(file_path):
        for file in files:
            file_list.append(os.path.splitext(file)[0])
    diff = set(data_list).difference(set(file_list))  # 差集,在a中但不在b中的元素
    for name in diff:
        print("no file", name + "in data")
    diff2 = set(file_list).difference(set(data_list))  # 差集,在b中但不在a中的元素
    for name in diff2:
        print("no data", name + "in file")

完成后便可以开始数据集处理了。
我们首先使用voc格式进行实验。
详情可用参考我的博客:
YOLOV7调试记录

你可能感兴趣的:(学习记录,目标检测,深度学习,人工智能)