在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. 生成ImageSets\Main文件夾下的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] + '\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()

 參考地址:

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

 

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM