用labelImg制作VOC2007数据集进行faster-rcnn的训练

用labelImg制作VOC2007数据集进行faster-rcnn的训练

  • 下载
    • 安装
    • labelImg快捷键和快速标记的一些小技巧
  • 制作自己的VOC数据集
    • 文件重命名
    • 制作Main里的txt文档
  • 结束

下载

labelImg可以制作COCO和VOC数据集,不过我只用他来制作了VOC数据集
我是linux上进行标注的,labelImg的下载地址这里

安装

安装的步骤README写的很清楚了
我是python2+pyqt4

sudo apt-get install pyqt4-dev-tools
sudo pip install lxml
make qt4py2
#运行labelImg
python labelImg.py
#或者运行这个,这个是运行的时候不用去改图片地址的,不过我通常是运行上面一行,莫得办法,懒得打字
python labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]

labelImg快捷键和快速标记的一些小技巧

保存:Ctrl + s
上一张:a
下一张:d
画框:w
选择要标注的图片路径:Ctrl + u
选择xml的保存路径:Ctrl + r
自动保存:view->自动保存模式,这个是下一张的时候自动保存xml
用labelImg制作VOC2007数据集进行faster-rcnn的训练_第1张图片

预设标签:自动选择框的类别
用labelImg制作VOC2007数据集进行faster-rcnn的训练_第2张图片

制作自己的VOC数据集

创建下面这样的目录

  • VOC2007
    • Annotations #存放xml
    • ImageSets
      • Main #存放 train.txt test.txt val.txt trainval.txt
    • JPEGImages #存放图像

文件重命名

#coding=utf-8
import os
path = "/path/to/VOC2007/JPEGImages/"

filelist = os.listdir(path) #该文件夹下所有的文件(包括文件夹)
i=0
for file in filelist:   #遍历所有文件
    Olddir=os.path.join(path,file)   #原来的文件路径
    if os.path.isdir(Olddir):   #如果是文件夹则跳过
        continue
    filename=os.path.splitext(file)[0]   #文件名
    filetype=os.path.splitext(file)[1]   #文件扩展名
    Newdir="/path/to/VOC2007/JPEGImages/"+ format(str(i), '0>6s') + filetype  #以0补全所需位数
    os.rename(Olddir,Newdir)#重命名
    i=i+1

制作Main里的txt文档

#coding=utf-8
import os  
import random  
 #可以更改这些参数
trainval_percent = 0.66  
train_percent = 0.5  
xmlfilepath = 'Annotations'  
txtsavepath = '/path/to/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('/path/to/VOC2007/ImageSets/Main/trainval.txt', 'w')  
ftest = open('/path/to/VOC2007/ImageSets/Main/test.txt', 'w')  
ftrain = open('/path/to/VOC2007/ImageSets/Main/train.txt', 'w')  
fval = open('/path/to/VOC2007/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()  

结束

然后你就得到了自己的VOC2007数据集,可以进行训练了

你可能感兴趣的:(深度学习,制作数据集)