APP下载
报价宝  ›  科技  › 

深度学习最困难的部分之一:整合不同的功能并让其正常运作

报价宝 来源:baojiabao.com 发布时间:2019-11-07 12:54:00 10月04日更新
报价宝综合消息深度学习最困难的部分之一:整合不同的功能并让其正常运作

全文共4443字,预计学习时长15分钟或更长

深度学习已经变得越来越重要,而它最困难的部分之一就是整合不同的功能并让这些功能正常运作。

也许你会说,这样的表述太晦涩了。没关系,那我们换个姿势。比如……用深度学习来指导机器砍瓜切菜——当你买回一堆红辣椒的时候,如何能让机器人厨师分辨出哪些是可以食用的部分,哪些是不能吃所以需要丢掉的部分?

所以,本文会教你学习如何使用AI平台和少量Python程式设计知识建立一个程式——可以检测红辣椒保留部分和丢弃部分的程式。

未来这也许可以发展成为机器人厨师的子系统。本文介绍的算法是最常用的通用算法,希望给予想要进入深度学习研究领域的人一些启迪。

输出影象:区分出红辣椒中的丢弃部分和保留部分

本文将介绍以下三部分:

· 为目标检测建立新的训练资料

· 训练自定义目标检测模型 (仅使用一行程式码)

· 整合检测系统并进行预测(仅使用一行程式码)

建立训练资料

采集照片或视讯。示例的训练资料为切红辣椒的过程中使用手机拍摄的15张照片。

标签

示例中一共使用了两种标签:丢弃和保留。

由于示例程式专注于目标检测,所以被标记为背景的部分会被自动处理(也就是说,背景既不属于丢弃部分也不属于保留部分)。

本文将通过在检测区域周围绘制方框来标记检测目标。

将检测完成的图片标记“complete”(已完成检测)

当完成影象保留部分和丢弃部分的检测后,将影象标记为“complete”(即,已完成检测)。

这一步骤非常重要,因为使用检测不正确或者检测不完全的影象对模型进行训练会造成模型的逻辑混乱。这就像依照着错误的参考答案对试卷进行评分一样令人费解。

预设情况下,Diffgram仅允许使用“complete” 的影象进行训练。

这意味着,Diffgram的使用者可以随心所欲地汇入采集到的影象,因为在Diffgram中只有“complete”的影象才能参与后续训练。之后,可以简单地通过标记影象组“complete”或者“not complete”来测试不同训练影象组对目标检测模型执行效果的影响。

在Diffgram中实现目标检测模型训练

通过充当深度学习实施、硬件和资料之间的中介软件,Diffgram使得模型训练更具有实践性。Diffgram提供的有效的固定预设值使得大众软件工程师能够更快速实际地上手使用这个软件进行模型训练。

在本质上这种综合自动目标检测训练更类似于Google开发的AutoML。这意味着整个训练过程仅仅需要一个指令就能完成。

训练中介软件的高度概述

这一训练过程很新颖。对训练过程的固有印象是程式复杂、步骤繁多,甚至使用现有的元件实现也很难获得模型的正确设定引数和配置。

所以,模型训练一直以来都以将训练过程简化到一般程式码编译的简易程度为目标。如图所示,应用程序采用了多种名为Brain的类物件,因此需要一个功能强大的中介软件处理这些物件之间的互动。

大量预设值带来的操作便易性

Diffgram建议使用提供的预设值。

为了开始深度学习研究而阅读30篇论文和学习一堆课程的学习方式并不值得推荐。该领域中普遍承认的理所当然的差异往往会让深度学习的初学者望而生畏。

Diffgram技术简要概述:

· 在类开源模型中,Diffgram的训练结果最佳。预设模型为一般应用程序提供了良好的运算效能和运算速度。目前,预设模型为SSD MobileNet V2。

· 根据迁移学习进行微调。预设在ImageNet上进行与训练,然后再MSCOCO上进行微调。

· 预设模型引数设定,例如,模型执行的时间长短。本文的示例程式码设定了超引数(全域性引数)。

未来,DIffgram将为普通使用者提供完善引数设定的选择,并为专业使用者提供引数灵活设定的选择。

可以在以下两种条件下进行模型训练:

· 使用者界面

· SDK(软件开发工具包)

通过使用者界面进行训练

使用者界面能够视觉化地显示如影象数量、示例(即方框)和标签等预检测的结果。预设需求旨在指导新使用者获得合理的初始检测结果。

通过SDK进行训练

安装右侧这个数据库:pip install diffgram

示例程式码:

from diffgram import Diffgram

project = Diffgram(

project_string_id = "replace_with_project_string",

client_id = "replace_with_client_id",

client_secret = "replace_with_client_secret")

# Construct new training with all defaults

brain = project.train.start(

method="object_detection",

name="my_model")

brain.check_status()

print(brain.status)

首先,对凭证进行定义并且建立一个名为Project的类物件。

然后,呼叫 train.start()函式,开始训练并返回名为 Brain的类物件。

通过呼叫 brain.check_status()函式来检查训练状态。

预设训练过程所需时间可能长达一小时。

检查训练状态

通过呼叫 brain.get_model() 函式来获取初始训练之外的所有类物件。预设状态下, get_model() 将返回专案中最新的模型,但是也可以选择其他模型进行检查。

brain = project.get_model(name = "my_model")

brain.check_status()

print(brain.status)

整合

Diffgram带有自动整合功能。这意味着整个整合过程仅仅需要一个指令。这一过程同样新颖。通常情况下,组合过程需要更多步骤。

更多的有效预设值

Diffgram遵循已优化的最佳实践方案。

例如,在检验检测过程中,程式并不要求资料具有过高的精度.所以没有必要使用32位储存,使用8位储存就足够了。这样会使运算速度提升3至4倍,但是效能的下降却是微乎其微。

这其实是物件检测模型的训练时间量化过程.预设情况下,这一过程会在训练完成80%的时候进行。

红辣椒的目标检测结果

示例使用了训练资料和检验检测资料来执行目标检测程式。执行结果相当令人满意。

上图为模型训练检测结果,下图为模型检验检测结果

异常情况处理

执行过程中也有一些处理结果不是很理想。

下图中的检测结果就不是很令人满意。虽然没有呈现错误的目标检测结果(如,将丢弃部分检测成为保留部分),但是没有检测出所有的丢弃部分。再对该图片进行人为修正后,可以有选择地将这个影象作为训练资料进行使用。

上图为模型检验检测结果,下图为人为修正后的检测结果

接下来这个影象也进行了相似处理:

上图为检验检测结果,下图为人为修正后的检验检测结果

正如上述呈现的过程,通过使用新的训练资料,物件检测系统的检测功能在不断完善。

想象一下人类不再需要亲自切红辣椒,而是只需要在机器人犯错误的时候纠正它。刚开始机器人可能不能完美地完成工作,但随着时间的推移(累积更多的人为修正后的训练资料),它的工作结果会变得越来越好,基本达到令人满意的程度。

保留部分和丢弃部分为如何实现自动化机器人带来启迪。也许为了获得更好的检测结果,还应该加入“茎干”标签等等。这是一种通用方法,因此可以通过定义相对任意的类来使用。

UI功能整合

Diffgram使非专业人员也能够试验并处理这些相关资料.平台含有整合功能的UI按键(如上图所示)。选择想要执行的档案,然后点选“inference”按键就能完成整合。

SDK中的功能整合

这部分的目标是执行目标检测模型并返回检验检测结果。

首先呼叫get_model()函式(假设模型已经过训练)。

brain = project.get_model(name = "my model")

然后呼叫另一个检验检测函式:

inference = brain.predict_from_url(url)

预设选择的整合方式需要一分钟的预热时间。呼叫任何的检测方法都需要进行预热。

在SDK中进行目标检测的三种方式

载入本地档案

· 载入远端档案(通过URL)

· 载入Diffgram档案ID

# Local

path = ""

inference = brain.predict_from_local(path)

# URL (Recommended over from local, works for cloud providers)

url = ""

inference = brain.predict_from_url(url)

# Diffgram file

inference = brain.predict_from_file(file_id = 111546)

三种方式都会返回名为 Inference的类物件结果。

预设状态下,只返回高概率的检测结果,换句话说,只有IoU大于 0.5时才会返回结果。

影象显示

Diffgram上可以视觉检视检测结果,预设情况下,会将高概率检测结果储存为草稿例项(draft instances)。在媒体控制元件中按“FAN only”进行排序。

Inference 和 Instances

Inference物件 含有名为Instance的类物件,Instance物件储存了物件检测中的关键资讯。

inference = brain.predict_from_url(url)

instance = inference.instance_list[0]

目标检测的例项中的引数资讯:

· instance.location为影象的标准化四维矩阵[0.0, 0.3841, 0.5845, 0.6375]

· Instance.score为浮点数,例如 0.99145

· Instance.label为整数,.label为整数,例如2

马上使用手上的图片进行尝试吧!

留言 点赞 关注

我们一起分享AI学习与发展的干货

欢迎关注全平台AI垂类自媒体 “读芯术”

文章标签: 报价宝 降噪耳机价格 耳机价格 红米手机价格 华为手机价格 小米手机价格 电视机价格 笔记本电脑价格 笔记本价格 汽车价格 笔记本电脑价格 小米手机价格 华为手机价格 红米手机价格 耳机价格