1. 磐创AI-开放猫官方网站首页
  2. Medium

TensorFlow分步自定义对象检测教程

欢迎阅读TensorFlow对象检测API系列教程的第5部分。首先,您可以在我的GitHub页面上下载代码。然后,在本部分和以后的几篇文章中,我们将介绍如何使用此API跟踪和检测我们自己的自定义对象。GitHub

为此,我使用预构建的模型向其添加自定义检测对象。从我的发现来看,这是一个不错的跳跃,而且很难找到任何完整的分步教程,所以希望我能在这方面对您有所帮助。“™”是我发现的一个不错的跳跃,而且很难找到任何完整的分步教程,所以希望我能在这方面帮助您。完成本教程后,您将能够针对您能想到的任何自定义对象(并为其创建数据)进行培训,在我看来,拥有欧元™是一项了不起的技能。

好的,下面是我对本教程中需要执行的步骤的概述:

  • 收集至少500张包含你的对象的图片–欧元“最低限度是100张左右,理想情况下是1000张或更多,但是你拥有的图片越多,第二步就会越乏味;
  • 将此数据分成训练/测试样本。训练数据应在80%左右,测试数据应在20%左右;
  • 从这些拆分生成TF记录;
  • 为选择的模型设置一个.config文件(您可以从头开始训练自己,但我们将使用迁移学习);
  • 培养我们的榜样;
  • 从新训练的模型导出推理图;
  • 实时检测自定义对象。

我将使用四个我想要检测的不同对象(恐怖分子、恐怖分子头、反恐怖分子和反恐怖分子头)。我过去经常和无害的机器人玩CSGO,收集成百上千张这样的图像,在几个不同的游戏地图上玩。此外,我还从谷歌上抓取了一些图片,让它们与我的游戏有所不同。

标签图片:

最精彩的部分来了。收集了所有图片后,现在是™在每张图片中标记所需对象的时候了。LabelImg是一个很棒的图像标签工具,它的GitHub页面上有关于安装和使用它的不言自明的说明。GitHub

LabelImg GitHub链接LabelImg GitHub link

LabelImg下载链接LabelImg download link

下载并安装LabelImg;在运行此程序时,您应该会看到一个GUI窗口。从这里,选择打开dir并选择保存所有图像的目录。现在,您可以开始使用create rectbox按钮为图像添加注释。画出你的方框,把名字加进去,然后点击“确定”。保存,点击下一个图像,然后重复!接下来,您可以按w键绘制该框,然后按ctrl+s以更快地保存。100张图片平均需要1小时,这取决于你在一张图片中的物体数量。请记住,这可能需要一段时间!

LabelImg保存一个包含每个图像的标签数据的.xml文件。这些.xml文件将用于生成TFRecords,它是TensorFlow Trader的输入之一。标记并保存每个图像后,\test和\Train目录中的每个图像将有一个.xml文件。

一旦您为您的图像贴上标签,我们将把它们分成训练组和测试组。™将把它们分成训练组和测试组。为此,将大约20%的图像及其注释XML文件复制到名为“uro”test的新目录中,然后将其余的复制到名为“uro”Train的新目录中。

有了标记的图像之后,是时候生成TFRecord作为™训练模型的输入数据了。本教程使用EdjeElectronics存储库中的xml_to_csv.py和Generate_tfrecord.py脚本,并对我们的目录结构稍作修改。EdjeElectronics

首先,图像.xml数据将用于创建包含列车和测试图像的所有数据的.csv文件。在主文件夹中,如果您使用相同的文件结构,请在命令提示符下发出以下命令:Python xml_to_csv.py。

这将在CSGO_IMAGES文件夹中创建一个train_labels.csv和test_labels.csv文件。如果您使用不同的文件结构,请相应地将xml_更改为_csv.py。为了避免使用cmd,我创建了一个简短的.bat脚本,名为xml_to_csv.bat。

接下来,在文本编辑器中打开Generate_tfrecord.py文件,该文件也是我从EdjeElectronics存储库获取的。将标签贴图替换为您自己的标签贴图,其中每个对象都指定有一个ID号。配置labelmap.pbtxt文件时将使用相同的编号分配。EdjeElectronics

例如,如果您正在训练自己的分类器,则将替换Generate_tfrecord.py中的以下代码:

# TO-DO replace this with label map
def class_text_to_int(row_label):
if row_label == 'c':
return 1
elif row_label == 'ch':
return 2
elif row_label == 't':
return 3
elif row_label == 'th':
return 4
else:
return None

然后,通过启动我创建的Generate_tfrecord.bat文件生成TFRecord文件,该文件从本地文件夹发出以下命令:

python generate_tfrecord.py --csv_input=CSGO_images\train_labels.csv --image_dir=CSGO_images\train --output_path= CSGO_images\train.record
python generate_tfrecord.py --csv_input=CSGO_images\test_labels.csv --image_dir=CSGO_images\test --output_path= CSGO_images\test.record

这些行在Training文件夹中生成一个Train.Records和一个test.record文件。这些将用于训练新的目标检测分类器。

培训之前要做的最后一件事是创建标签映射并编辑培训配置文件。标签映射通过定义类名称到类ID号的映射来告诉训练员每个对象是什么。使用文本编辑器创建新文件,并将其另存为Training文件夹中的labelmap.pbtxt。(确保文件类型为.pbtxt)。在文本编辑器中,以与下面相同的格式复制或键入标签映射(下例是我的CSGO检测器的标签映射)。标签映射ID号应该与Generate_tfrecord.py文件中定义的相同。

item {
id: 1
name: 'c'
}

item {
id: 2
name: 'ch'
}

item {
id: 3
name: 't'
}

item {
id: 4
name: 'th'
}

配置培训:

最后,必须配置目标检测训练流水线。它定义了将用于培训的模型和参数。这是运行实际培训之前的最后一步。这个教程代码可以在我的GitHub页面上找到。GitHub

导航到TensorFlow Research\Object_Detect\Samples\configs目录,并将FETHER_rcnn_inestation_v2_coco.config文件复制到CSGO_Training目录中。然后,使用文本编辑器打开该文件;我个人使用的是Notepad++。对此.config文件有几处更改,主要是更改类、示例的数量,并将文件路径添加到训练数据。

顺便说一下,路径必须用单正斜杠输入–EUROURFLOW/“,否则在尝试训练模型时,TensorFlow会给出一个文件路径错误。路径必须是双引号(”),而不是单引号(‘)。

第10行.将num_class更改为您希望分类器检测的不同对象的数量。对于我的CSGO对象检测,它将是:num_class:4line 107。将FINE_TUNE_CHECKPOINT改为:FINE_TUNE_CHECKPOINT:“faster_rcnn_inception_v2_coco_2018_01_28/model.ckpt”Lines 122和124。在TRAIN_INPUT_READER部分中,将INPUT_PATH和LABEL_MAP_PATH更改为:INPUT_PATH:“CSGO_IMAIES/Train.Records”LABEL_MAP_PATH:“CSGO_Training/labelmap.pbtxt”第128行。将num_examples更改为您在CSGO_IMAGES\TEST目录中拥有的图像数量。我有113个图像,所以我将它们更改为:Num_Examples:113行136和138。在eval_input_read部分中,将INPUT_PATH和LABEL_MAP_PATH更改为:INPUT_PATH:“CSGO_IMAIES/test.Records”LABEL_MAP_PATH:“CSGO_Training/labelmap.pbtxt”

在进行更改后保存文件。That-Euro™就是这样!准备并配置用于培训的培训文件。在训练前再走一步。

运行培训:

我还不能让model_main.py正常工作,我遇到了错误。但是,Training.py文件仍然位于/object_Detection/Legacy文件夹中。只需将Train.py从/Object_Detect/Legacy移到/Object_Detect文件夹中即可。将我们创建的CSGO_IMAGES和CSGO_Training文件夹移到/object_Detection文件夹中,然后从object_Detection目录继续cmd中的以下行:

python train.py --logtostderr --train_dir=CSGO_training_dir/ --pipeline_config_path=CSGO_training/faster_rcnn_inception_v2_coco.config

如果一切设置正确,TensorFlow将初始化培训。在实际培训开始之前,初始化可能需要长达30到60秒的时间。当训练开始时,它将看起来是这样的:

在上图中,训练的每个步骤都报告了损失。它将从高开始,随着训练的进行,它会变得越来越低。在我的训练中,它开始于大约2欧元“3,并迅速降到0.5以下。我建议允许您的模型进行训练,直到损失持续下降到0.05以下,这可能需要大约30,000步或大约几个小时(取决于您的CPU或GPU的功能)。使用不同型号时,损失数字可能不同。此外,这取决于您要检测的对象。

您可以使用TensorBoard查看培训进度,而且您应该使用TensorBoard查看培训进度。为此,打开一个新的CMD窗口,转到C:\TensorFlow\Research\Object_Detect目录(或您已有的目录),然后发出以下命令:

C:\TensorFlow\research\object_detection>tensorboard --logdir=CSGO_training_dir

这将在本地计算机上创建一个本地网页,地址为YourPCName:6006,可以通过Web浏览器查看。TensorBoard页面提供了显示培训进展情况的信息和图表。最重要的图形之一是损失图,它显示分类器随时间的总体损失:

这就是本教程的全部内容–™。在下一个教程中,步骤最多的检查点将用于生成冻结的推理图并对其进行测试。

最初发表于https://pylessons.com/Tensorflow-object-detection-step-by-step-custom-object-detectionhttps://pylessons.com/Tensorflow-object-detection-step-by-step-custom-object-detection

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/07/07/tensorflow%e5%88%86%e6%ad%a5%e8%87%aa%e5%ae%9a%e4%b9%89%e5%af%b9%e8%b1%a1%e6%a3%80%e6%b5%8b%e6%95%99%e7%a8%8b/

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息