制作自己的目标检测数据集再利用tf-faster-rcnn训练

1.制作数据集的工具

我利用数据集标注工具是精灵标注助手,我认为很好用。奉劝一句标注数据集时不要随便找人给你标,如果他没有用心给你标注,你在后面训练会出现很多问题。在一开始标注数据集的时候不要一下子给他标注完,先标注几十张图片,然后用在你的网络里,看看有没有错误,如果没有问题就按这种方式标,如果有,再找出原因,在后面标注的过程中注意。

2.仿照VOC2007制作数据

解压VOC2007数据集后可以看到VOC2007文件夹下有以下5个文件夹:

制作自己的目标检测数据集再利用tf-faster-rcnn训练_第1张图片

(1)JPEGImages
这个文件夹存放的是你目标检测训练和测试用的所有图片,打开JPEGImages文件可以看到下图的图片命名方式,仿照这个格式,因此首先你要把自己的图片重命名为000000.jpg这种格式,然后把图片统一放到JPEGImages文件夹下面。

制作自己的目标检测数据集再利用tf-faster-rcnn训练_第2张图片

注意图片的后缀是.jpg,别的也行,只不过这样修改会减少后面训练时候不必要的麻烦。

(2)Annotations

这个文件夹是JPEGImages文件夹中对应图片的.xml格式,打开可以看到:

制作自己的目标检测数据集再利用tf-faster-rcnn训练_第3张图片

那么对于自己的数据集该怎么做呢,我们用到的就是第一部分提到的标注工具,这个软件有教程,很容易就会,制作完自己的数据集之后导出pascal_voc格式就可以了。

(3)ImageSets

这个文件夹下面有三个文件夹,主要用到的就是Main文件,其余的两个文件我们不用管它,打开Main文件可以看到有好多txt文件,那么在制作我们自己的Main时候真正用到的文件只有4个:

test.txt:测试集
train.txt:训练集
val.txt:验证集
trainval.txt:训练和验证集

这个4个文件的制作方法,我用的是python代码生成:

import os
import random
trainval_percent = 0.66
train_percent = 0.5
xmlfilepath = 'Annotations'  # 绝对路径
txtsavepath = '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('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()

运行完之后就可以得到上面4个文件了。

(4)其余的两个文件SegmentationClass和SegmentationObject直接忽略就可以了,这是用在图像分割的。

3. 在faster rcnn中训练自己的数据集

(1)修改lib/datasets/pascal_voc,py,

# self._classes = ('__background__',  # always index 0
#                  'aeroplane', 'bicycle', 'bird', 'boat',
#                  'bottle', 'bus', 'car', 'cat', 'chair',
#                  'cow', 'diningtable', 'dog', 'horse',
#                  'motorbike', 'person', 'pottedplant',
#                  'sheep', 'sofa', 'train', 'tvmonitor')

(2)修改tools/demo.py

# CLASSES = ('__background__',
#            'aeroplane', 'bicycle', 'bird', 'boat',
#            'bottle', 'bus', 'car', 'cat', 'chair',
#            'cow', 'diningtable', 'dog', 'horse',
#            'motorbike', 'person', 'pottedplant',
#            'sheep', 'sofa', 'train', 'tvmonitor')

net.create_architecture("TEST", (数据集类别+1),
                      tag='default', anchor_scales=[8, 16, 32])

(3)删除data目录下的cache文件夹

4.运行出现的错误

通常遇到的错误是:assert (boxes[:, 2] >= boxes[:, 0]).all() 报错

解决方法再这里说的很详细,会帮你解决。

Faster rcnn的个人理解请转到:https://blog.csdn.net/weixin_42111393/article/details/102687128

你可能感兴趣的:(目标检测,python)