用6行代码训练AI对象检测模型

姓名:孟永超     学号:22011110013

转自:https://blog.csdn.net/pypyai_/article/details/113552020?spm=1001.2014.3001.5501

【嵌牛导读】

本文分步介绍在自定义数据集上训练对象检测模型

对象检测是计算机视觉最前沿的方向之一,因为它要求你在图片或者视频中定位、标识、统计和跟踪任何需要关注的对象。对象检测广泛用于许多有趣的工作和研究领域,例如:

• 自动驾驶

• 安全方面

• 行人/人群检测

• 车牌号码和车辆检测

• 工业自动化(例如,物品拣选和分类)

• 机器人技术等等。

许多预先收集的对象检测数据集,诸如Pascal VOC,Microsoft的COCO,Google的Open Images,以及经过他们预先训练的模型,都可以使用,它们仅用于检测和识别一组特定的对象。

但是,使用这些公共数据集和预先训练的模型所面临的挑战是,它们不能为您提供便捷的方法来轻松训练新的物体检测模型以检测和识别你需要识别的物体。

【嵌牛鼻子】对象检测、公共数据集、网络模型

【嵌牛提问】如何利用公共数据集和网络模型来便捷的训练新物体检测模型?

【嵌牛正文】 

在最新版本的ImageAI v2.1.0中,现已完全支持对训练您的自定义YOLOv3模型进行检测并实现检测几乎任何种类和数量的对象的要求。这里我们将指导您进行的实际的操作,让我们开始吧。

OlafenwaMoses/ImageAI(https://github.com/OlafenwaMoses/ImageAI)

出于这个教程的目的,我们将使用Google Colab来训练我们已经提供的一个样本数据集,步骤如下。

步骤一:准备数据集

对于您的自定义检测训练,您必须提供用来训练模型的样本图像(图像数据集),并在训练后进行准确性验证。ImageAI检测训练支持自定义数据集的Pascal VOC格式。在本教程中,我们提供了Hololens混合现实头具的样本数据集,我们将在其上训练一个模型,该模型可以检测和识别图片和视频中的Hololens。您可以通过下面的链接下载样本数据集。

https://github.com/OlafenwaMoses/ImageAI/releases/download/essential-v4/headset.zip

如果要针对自己的自定义对象训练自己的图像,请按照以下说明进行操作。

• 确定要检测的对象类型,并为每个对象收集大约200张(推荐的底限数量),越多越好。

• 收集图像后,需要标注图像中的对象。ImageAI使用Pascal VOC格式进行图像标注。您可以按照我们通过下面的链接提供的分步教程为图像生成此标注信息。

参考文章:对象检测训练——准备你自定义的数据集

(https://medium.com/deepquestai/object-detection-training-preparing-your-custom-dataset-6248679f0d1d)

• 完成有图像的标注后,为数据集创建一个文件夹(例如headset),并在此父文件夹中创建子文件夹训练和验证的子文件夹train和validations。

• 在train文件夹中,创建images和annotations子文件夹。将大约70-80%的数据集图像放入images文件夹中,并将这些图像的相应注释放入注释文件夹中

• 在validation文件夹中,创建images和annotations子文件夹。将其余的数据集图像放入images文件夹中,并将这些图像的相应注释放入annotations文件夹中

• 完成此操作后,图像数据集文件夹的结构应类似于以下示例:

代码1:

>>train>>images>> img_1.jpg

            >>images>> img_2.jpg

            >>images>> img_3.jpg

            >>annotations>> img_1.xml

            >>annotations>> img_2.xml

            >>annotations>> img_3.xml

>>validations>>images>> img_151.jpg

                >>images>> img_152.jpg

                >>images>> img_153.jpg

                >>annotations>> img_151.xml

                >>annotations>> img_152.xml

                >>annotations>> img_153 .xml

步骤二:安装ImageAI和依赖项

转到https://colab.research.google.com并创建一个新笔记本。将新笔记本的运行时更改为GPU。然后:

• 运行以下命令以下载示例hololens数据集

!wget

https://github.com/OlafenwaMoses/ImageAI/releases/download/essential-v4/hololens.zip

• 解压缩hololens数据集的zip文件

!unzip hololens.zip

出于训练的目的,安装 Tensorflow GPU版本1.13.1。这是因为安装在你新笔记本上默认的Tensorflow GPU版本,当你训练你的模型的时候,会生成‘_TfDeviceCaptureOp’ 错误,物体目标没有这个属性‘_set_device_from_string’。如果你的新笔记本在安装以后收到一个要重新启动的提示,那就按照指示重新启动。

!pip3 install tensorflow-gpu==1.13.1

然后从PIP安装最近版本的ImageAI

!pip3 install imageai --upgrade

步骤三:开始您的检测模型训练

为了确保我们训练的自定义模型具有更好的检测准确性,我们将在训练中使用来自预先训练的YOLOv3模型的转移学习。ImageAI提供了在有和没有转移学习的情况下进行训练的选项。我强烈建议您使用转移学习,除非您的数据集中有数千个对象样本。

• 下载预训练的YOLOv3模型

!wget

https://github.com/OlafenwaMoses/ImageAI/releases/download/essential-v4/pretrained-yolov3.h5

• 然后运行培训代码,如下所示

from imageai.Detection.Custom import DetectionModelTrainer

trainer = DetectionModelTrainer()

trainer.setModelTypeAsYOLOv3()

trainer.setDataDirectory(data_directory="hololens")

trainer.setTrainConfig(object_names_array=["hololens"], batch_size=4, num_experiments=100, train_from_pretrained_model="pretrained-yolov3.h5")

trainer.trainModel()

上面的6行代码是您开始对自定义数据集进行训练所需的全部代码。现在让我们将代码分解为一部分:

• 在第一行中,我们从ImageAI导入“DetectionModelTrainer”类

• 在第二行和第三行中,我们创建了该类的实例,并将模型类型设置为YOLOv3

• 在第4行中,我们将路径设置为自定义数据集

• 在第5行中,我们指定了以下参数:

—objectnamesarray:这是数据集中所有对象名称的数组。请注意,如果您的自定义数据集批注包含多个对象,请按照以下示例所示简单地设置所需数值

object_names_array = [“ hololens”,“ google-glass”,“ oculus”]

—batch_size:这是训练的批次大小。请注意,批次大小越大,保存的模型的检测精度越好。但是,由于Colab上Nvidia K80 GPU的内存限制,我们必须将此值保持为4。批次大小可以为8、16等。

—num_experiments:这是我们训练代码在自定义数据集上迭代的次数。

—trainfrompretrained_model:这用于使用我们先前下载的预训练的YOLOv3模型来利用转移学习

训练开始之后,

• ImageAI将在hololens / json文件夹中生成detection_config.json文件。此JSON文件将在检测图像和视频中的对象期间使用

• ImageAI将创建hololens / models文件夹,在该文件夹中将保存所有生成的模型

• 您将在日志中看到类似下面的示例详细信息。

步骤四:评估模型

在上面显示的样本日志中,基于验证损失的减少(例如,损失:5.2569)保存新模型。在大多数情况下,损耗越小,模型将更准确地检测图像和视频中的对象。但是,某些模型可能会过度拟合,但损失仍然较低。为了确保为您的自定义检测选择最佳模型,ImageAI允许您评估hololens / models文件夹中保存的所有经过训练的模型的mAP。

mAP越高,模型的检测精度越好。

在训练期间保存的模型上直接运行以下代码:

from imageai.Detection.Custom import DetectionModelTrainer

trainer = DetectionModelTrainer()

trainer.setModelTypeAsYOLOv3()

trainer.setDataDirectory(data_directory="hololens")

trainer.evaluateModel(model_path="hololens/models", json_path="hololens/json/detection_config.json", iou_threshold=0.5, object_threshold=0.3, nms_threshold=0.5)

当您运行上面的代码时,您将获得类似于以下示例的结果。

让我们细分评估代码:

• 在前4行中,我们导入相同的训练类,创建类实例,设置检测模型类型,并设置数据集目录的路径。

• 在第5行中,我们调用了.evaluateModel函数,并在下面指定了参数

—model_path:这是包含我们的模型的文件夹的路径。它也可以是特定模型的文件路径。

—json_file:这是训练期间保存的detection_config.json文件的路径。

—iou_threshold:这是我们为mAP计算所需的最小“Intersection over Union”。可以将其设置为0.0到1.0之间的值

—object_threshold:这是我们为mAP计算所需的minimum class score。可以将其设置为0.0到1.0之间的值。

—nms_threshold:这是我们为mAP计算所需的Non-maximum suppression(非极大值抑制)。

步骤五:检测图像中的自定义对象

现在我们已经训练了自定义模型来检测Hololens头具,我们将使用已保存的最优模型以及生成的用于检测图像中对象的detection_config.json文件。

• 让我们以上面的示例图像来测试我们训练的定制hololens检测模型。

• 我们提供了已经训练的Hololens检测模型供您测试。通过下面的链接下载模型和相应的detection_config.json文件。

https://github.com/OlafenwaMoses/ImageAI/releases/download/essential-v4/hololens-ex-60–loss-2.76.h5

https://github.com/OlafenwaMoses/ImageAI/releases/download/essential-v4/detection_config.json

• 现在,让我们运行我们的自定义Hololens检测代码,如下所示。

from imageai.Detection.Custom import CustomObjectDetection

detector = CustomObjectDetection()

detector.setModelTypeAsYOLOv3()

detector.setModelPath("hololens-ex-60--loss-2.76.h5")

detector.setJsonPath("detection_config.json")

detector.loadModel()

detections = detector.detectObjectsFromImage(input_image="holo3.jpg", output_image_path="holo3-detected.jpg")

for detection in detections:

    print(detection["name"], " : ", detection["percentage_probability"], " : ", detection["box_points"])

当我们运行上面的代码时,我们得到的结果如下。

—识别结果—

hololens:34.01297628879547:[27,79,348,248]

hololens:58.56814980506897:[317,171,498,260]

hololens:73.11487197875977:[725,208,863,303]

现在我们已经能够在Hololens Mixed Reality headset数据集上成功地训练一个新的检测模型用于检测。

Colan Notebook包含了这个教程所需的所有代码,你可以通过下方的链接获取。

Google Colaboratory:

https://colab.research.google.com/drive/1R6t5MfFc3JnhZB-UmTjWLbEetBZ22agg

最后,ImageAI同时也允许你使用你自定义的检测模型在视频里进行物体检测并进行视频分析。请参阅下面提供的文档和实例代码链接。

OlafenwaMoses/ImageAI:

https://github.com/OlafenwaMoses/ImageAI/blob/master/imageai/Detection/Custom/CUSTOMDETECTION.md

视频检测文档:OlafenwaMoses/ImageAI:

https://github.com/OlafenwaMoses/ImageAI/blob/master/imageai/Detection/Custom/CUSTOMDETECTION.md

示例代码:OlafenwaMoses/ImageAI:

https://github.com/OlafenwaMoses/ImageAI/tree/master/examples

物体检测指南

https://www.fritz.ai/object-detection/

关于DeepQuest AI:

https://deepquestai.com/about

原文链接:https://medium.com/deepquestai/train-object-detection-ai-with-6-lines-of-code-6d087063f6ff

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,923评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,154评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,775评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,960评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,976评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,972评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,893评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,709评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,159评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,400评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,552评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,265评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,876评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,528评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,701评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,552评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,451评论 2 352

推荐阅读更多精彩内容