TensorFLow object detection API训练数据集

本文介绍了使用TensorFlow Object Detection API进行对象检测时,如何准备自定义训练数据集,包括数据特性、数据拆分、创建目录结构、环境配置等步骤。详细讲解了数据标注、环境文件的拷贝与修改,以及训练过程中的日志查看和训练曲线分析。
摘要由CSDN通过智能技术生成

  在搭建好Tensorflow以及TensorFlow的Object Detection API安装后,我们可以运行一些预训练好的模型进行推理运算,并看到一些效果。但有时候我们需要定制自己的分类。例如我只想识别人(person)和人脸(face),或者一些较多或较少的类别,那么这就需要训练自己的分类模型。

一、数据说明

  在开始之前,可能需要了解深度学习训练的数据。我们从以下内容进行粗略的理解:

数据的特性

  数据应该具有以下几个特性:

  • 数据应该从分布中随机抽取独立同分布 (i.i.d) 的样本。换言之,样本之间不会互相影响。(另一种解释:i.i.d. 是表示变量随机性的一种方式)。
  • 分布是平稳的;即分布在数据集内不会发生变化。
  • 数据是从同一分布的数据划分中抽取。

数据的拆分

  数据拆分,一般只有训练集和测试集两个子集:
在这里插入图片描述
  大致采用如下的工作流程:
在这里插入图片描述
  上图中,“调整模型”指的是调整您可以想到的关于模型的任何方面,从更改学习速率、添加或移除特征,到从头开始设计全新模型。该工作流程结束时,您可以选择在测试集上获得最佳效果的模型。

更加优化的拆分:
  通过将数据集划分为三个子集(如下图所示),可以大幅降低过拟合的发生几率:
在这里插入图片描述
  使用验证集评估训练集的效果。然后,在模型“通过”验证集之后,使用测试集再次检查评估结果。下图展示了这一新工作流程:
在这里插入图片描述

二、准备数据

  需要训练自己的数据集,首先需要先准备好数据。目前,深度学习方面有较多的公开的数据集。常用的有PASCAL VOCCOCOMNISTImageNet等等。这些都是预训练好的数据集,但我们也可以自己训练,只是使用这些数据集中的图片数据,而且我们假定这些图片都是符合数据应该有的特性(来源都是同一个分布,分布随机独立,且稳定)。
参考来源25个深度学习的开放数据集

创建目录结构

  首先,我们采用数据量较少的VOC2005的数据集。在准备好数据后,创建如下的目录结构
    在这里插入图片描述
以下的操作,都会逐个对应到某一个文件夹(请按照序号依次操作)。

  1. 存放图片
    将VOC2005的图片集放入到JPEGImage文件夹中。存放所有图片,不区分测试、验证和训练的分类。

  2. 图片标注
    将JPEGImage中的图片,使用labelImg进行逐一标注类似如下界面:
    在这里插入图片描述
    框选需要训练识别的分类,并选择label然后保存(Ctrl+s),labelImg会在图片目录下生产对应文件名的xml文件。本次训练我只识别personface两个类,所以标注的label中也只有这两种分类(后续对应xxx_label_map.pbtxt中需要匹配修改)。
    在将所有图片标注完成后,将对应的xml文件移动到Annotations文件夹下。

  3. 创建图片文件分类脚本
    在VOC2005目录下创建 createclassificationfile.py (文件名不要求)文件,输入以下code:

import os
import random
 
trainval_percent = 0.66
train_percent = 0.5
xmlfilepath = 'Annotations'
txtsavepath = 'ImageSets\Main'
total_xml = os.listdir(xmlfilepath)
print(total_xml)
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()

  执行:
    $ python createclassificationfile.py
  运行完成后,查看ImageSets/Main/目录下是否有生成如下文件:
  在这里插入图片描述
  如果生成成功,则表示已经将图片集以及对应标注好的xml文件进行了分类。每个txt中都包含了图片集的文件名,不同的txt是不同类别,文件名也很直观。

三、环境准备

  虽然我们可以把这些训练集和标注好的xml文件放入到Tensorflow object detection API的环境目录下进行训练。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值