• 在Ubuntu内制作自己的VOC数据集


    一、VOC数据集的简介

    PASCAL VOC为图像的识别和分类提供了一整套标准化的优秀数据集,基本上就是目标检测数据集的模板。现在有VOC2007,VOC2012。主要有20个类。而现在主要的模型评估就是建立在VOC数据集和COCO数据集上(80个类),其指标主要是mAP和fps(帧率)。

    VOC数据集有五个文件夹

    ├── Annotations              # 存放xml文件,主要是记录标记框位置信息
    ├── ImageSets                # 存放的都是txt文件,txt文件中每一行包含一个图片的名称,末尾会加上+1或者-1表示正负样本
      ├── Action
      ├── Layout
      ├── Main
      └── Segmentation
    ├── JPEGImages           # 存放源图片
    ├── SegmentationClass 
    └── SegmentationObject 


    制作自己的数据集时只需要用到Annotations、ImageSets、JPEGImages三个文件夹

    二、数据制作流程

    1. 把所有图片放入JPEGImages文件中,后缀名一般为 .jpg .png .JPG。需要批量重命名文件夹中图片文件。使用rename.py

    # -*- coding:utf8 -*-
     
    import os
    class BatchRename():
        '''
        批量重命名文件夹中的图片文件
        '''
        def __init__(self):
            self.path = '/home/z/work/train'     #存放图片的文件夹路径
        def rename(self):
            filelist = os.listdir(self.path)
            total_num = len(filelist)
            i = 1
            for item in filelist:
                if item.endswith('.jpg') or item.endswith('.JPG'):  #图片格式为jpg、JPG
     
                    src = os.path.join(os.path.abspath(self.path), item)
                    dst = os.path.join(os.path.abspath(self.path), str(i).zfill(5) + '.jpg')      #设置新的图片名称
                    try:
                        os.rename(src, dst)
                        print ("converting %s to %s ..." % (src, dst))
                        i = i + 1        
                    except:
                        continue
     
            print ("total %d to rename & converted %d jpgs" % (total_num, i))
    if __name__ == '__main__':
        demo = BatchRename()
     
        demo.rename()

    只需要修改图片路径、增添图片格式、zfill(5)表示图片名称从00001~99999,可以按照自己的图片数量进行修改。

    2. 使用LabelImg标注图片

    推荐在Ubuntu内安装LabelImg,Windows中感觉安装有很多bug,安装流程如下:

    二、安装labelImg
    下载地址:https://github.com/tzutalin/labelImg   labelImg-master.zip
    由于我的虚拟机没法解压zip
    安装apt-get install zip
    解压:unzip labelImg-master.zip
    cd labelImg-master/
    我使用的:Python 3 + Qt5
    sudo apt-get install pyqt5-dev-tools
    sudo pip3 install -r requirements/requirements-linux-python3.txt
    还要执行 
    sudo pip3 install lxml(labelImg需要PyQt和lxml的支持)
    
    make qt5py3
        将会执行 pyrcc5 -o resources.py resources.qrc
        
    python3 labelImg.py出现错误
        No module named PyQt5
        
    解决方案:没有将pyqt5设为默认
    sudo apt-get install qt5-default
    再次执行 python3 labelImg.py 成功 建议把labelImg锁定左侧框,方便下次使用

    3. 将标注好的xml文件放到Annotations文件夹下

    4. 生成ImageSetsMain文件夹下的4个txt文件:test.txt,train.txt,trainval.txt,val.txt

    这四个文件存储的是上一步xml文件的文件名。trainval和test内容相加为所有xml文件,train和val内容相加为trainval。使用CreateTxt.py生成。要将该文件与ImageSets和Annotations放在同一目录下

    import os
    import random
    
    trainval_percent = 0.8  # trainval数据集占所有数据的比例
    train_percent = 0.5  # train数据集占trainval数据的比例
    xmlfilepath = 'Annotations'
    txtsavepath = 'ImageSets/Main'
    total_xml = os.listdir(xmlfilepath)
    
    num = len(total_xml)
    print('total number is ', num)
    list = range(num)
    tv = int(num * trainval_percent)
    print('trainVal number is ', tv)
    tr = int(tv * train_percent)
    print('train number is ', tr)
    print('test number is ', num - tv)
    trainval = random.sample(list, tv)
    train = random.sample(trainval, tr)
    
    ftrainval = open('ImageSets/Main/trainval.txt', 'w')
    ftest = open('ImageSets/Main/test.txt', 'w')
    ftrain = open('ImageSets/Main/train.txt', 'w')
    fval = open('ImageSets/Main/val.txt', 'w')
    
    for i in list:
        name = total_xml[i][:-4] + '
    '
        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()

     参考地址:

    https://blog.csdn.net/qq_36301716/article/details/79018170

      

  • 相关阅读:
    [PHP]socket的连接超时 与 读取/写入超时
    [PHP]引用返回与节省内存
    [PHP]实体类基类和序列化__sleep问题
    [PHP]日志处理error_log()函数和配置使用
    [PHP] 使用反射实现的控制反转
    [PHP] debug_backtrace()可以获取到代码的调用路径追踪
    [TCP/IP] TCP的传输连接管理
    [PHP] sys_get_temp_dir()和tempnam()函数报错与环境变量的配置问题
    [PHP] ubuntu下使用uuid扩展获取uuid
    [Linux] host dig nslookup查询域名的DNS解析
  • 原文地址:https://www.cnblogs.com/gezhuangzhuang/p/10539792.html
Copyright © 2020-2023  润新知