如果您上传标记的数据集,AutoML 将提取模式并创建自定义机器学习模型。AutoML 可用于表格、文本、图像和视频。然后可以通过 API 或客户端访问经过训练的模型,从而为您的特定用例启用机器学习功能。这就像将面包的食谱上传到机器,放入所有原料,几小时内,一条完美烤制的面包就出来了,甚至不知道如何烘烤。
最近,谷歌发布了用于视觉识别的 AutoML Edge 。这会带来许多新的创新机会。以前,您只能使用 API 调用来访问云托管模型,即使对模型的 API 调用可能需要一秒钟以上的时间。但是,借助 AutoML Edge,您可以下载模型并在本地计算机上运行它,从而将从模型中获取预测的时间缩短到几毫秒。通过这种方式,用户可以获得实时体验。
在 Incentro,一家数字变革公司,我们始终关注可能为我们的客户带来真正创新优势的新技术。事实证明,AutoML Edge 非常适合我们正在处理的业务案例。客户是一家全球眼镜零售商。商业案例是设计一个“魔镜”。魔镜在线下门店中展示,能够在顾客选购眼镜时引导顾客完成试戴环节,帮助顾客找到最合适的眼镜。在这种情况下,模型的速度和便利性都至关重要。因此,我们制作了概念验证 (PoC) 以呈现给客户。在这篇博文中,我将向您详细介绍这面魔镜及其成因。
案子
谁会在不先试用的情况下购买每天都会出现在脸上的东西?我肯定不会。这就是为什么购买一副新眼镜在这么长的时间里一直是一种严格的线下体验的主要原因。跟上快速发展的技术和创新对于公司的生存至关重要。
如今,无数零售店倒闭,就是因为他们没有足够重视电子商务。
即使现在从事电子商务,您也很难跟上竞争的步伐。如果想要抢先一步,就应该通过创建全渠道体验来连接线上和线下,从而使公司能够在多个层面上与客户互动,整合他们的力量,以提升客户体验。
在我们的案例中,线上和线下之间的门户将是“魔镜”:一个引导客户完成试衣过程的交互式镜子。它将通过使用机器学习来检测某人在店内试戴的眼镜,并为顾客提供有用的信息,例如定价、品牌故事和其他可用颜色。它并不止于此:镜子还可以根据某人之前试戴过的眼镜类型、他们的脸型、他们的年龄、他们的性别等来推荐眼镜。所有这些特征都可以使用机器学习来提取。这就是速度和便利性的用武之地:为了让体验真正让人身临其境,这些特征的检测需要是即时的。
对我们来说幸运的是,AutoML Vision Edge 最近发布了。是时候检查一下了!
选项 AutoML
选择使用 AutoML Vision 时,您会立即面临一些问题:分类还是对象检测?边缘还是云托管?
起初,我尝试了云托管对象检测。然而,我很快发现手动标记对象(在我们的例子中是眼镜)非常耗时:我们必须在每个对象周围画一个矩形,为其分配一个标签,然后移动到下一个对象,一遍又一遍重复一千多次。幸运的是,该过程可以通过使用标准的 AutoML 视觉对象检测 API 轻松实现自动化。API 会负责在图片中标记眼镜,因为我已经知道哪些图片展示了哪些眼镜,我可以简单地将眼镜的名称插入标签中。问题解决了!
好吧……不完全是。有时,标准的 Google Vision API 无法正确检测到眼镜或在一张图像中检测到多个眼镜。因此,图片仍然需要手动检查——这是一项非常耗时且令人沮丧的工作。难道没有办法让我们坐下来欣赏表演吗?
在对数百张图像进行半自动标记、上传到云端并托管模型后,我发现 API 很容易实现,并且已经呈现出合理的结果。但是,人们必须为部署 API 的每一小时付费。在我们的案例中可能不是最好的解决方案。
但仍有一些选项摆在桌面上,比如试验 AutoML Vision Edge。这将使标记成为一项更容易的任务,因为我们不必在对象周围放置一个框——整个图像只会获得(多个)标签。
使用这个分类选项,我们的第一个结果非常糟糕。意外?不是真的,因为标签只描述了图像的大约 5%:眼镜。图像包含很多噪音,这对模型来说很麻烦。但是,这是我们可以解决的问题。
人脸识别降噪
我问自己:如果我只是从图像中剪下头部并将它们输入 AutoML 会怎么样?那将大大降低噪音!从我的对象检测实验中,我了解到我不喜欢手动做事。这就是为什么我决定编写一些代码来自动进行裁剪。在互联网上浏览了一番之后,我发现了一种使用“haar cascade”来表示图像中的人脸的基本算法。通过使用这段代码,我创建了一个功能,可以从图像中裁剪出头部并将其保存为只有一个头戴眼镜的新图像。这是我可以反馈给我们的 AutoML 机器的东西。
图片的制作方法
就像面包烘烤机一样,AutoML 需要它的原料。在我们的例子中是图像。他们的负载。对于 PoC,我决定使用 10 副不同的眼镜来训练我们的模型,其中一些几乎完全相同。一个经验法则是,如果人眼应该能够看到两副眼镜之间的差异,即使差异很小,AutoML 也能够学习它。
信心满满的我开始用手机拍照——大约20张一副眼镜。我裁剪掉头部以减少噪音,将几乎没有噪音的图片输入 AutoML 并直接训练第一个 AutoML 模型。一个小时后,模型就可以部署了。充满了兴奋和悬念,我使用 MacBook 的内置网络摄像头创建了一个简单的 API,将其中一副眼镜戴在脸上……至少可以说,得到了一些非常令人困惑的结果。感觉这个模型是随机猜测的,而不是一个精心制作的预测。多么反高潮。
思考出了什么问题几分钟后,我意识到我的 MacBook 的网络摄像头大约是 1 MP,而我手机上的摄像头大约是 12 MP。也许,我想,使用更好的相机并使用同一台相机拍摄的图像来训练模型会有所帮助。
购买功能更强大的网络摄像头后,我又开始训练 AutoML 模型。这一次,我认为用图片重载 AutoML 是一个明智的决定——还有什么比拍摄视频更快地制作大量图片的方法呢?我请了大约五位同事为我的模特做模特(双关语意),并为每副眼镜录制了大约 10 秒的视频。每秒 30 帧,每个视频 10 秒,每副眼镜有 5 个同事/模特,这导致每副眼镜有 1500 张图像,这必须足够了。
再次上传和训练模型后,再等一个小时,下载模型并在我的代码中实现它,我准备再试一次。现在,如果我使用办公桌旁的新网络摄像头,效果会很好。但是当我离开办公桌并在办公室的其他地方尝试模型时,结果不是很好,也不是很糟糕。
所以我不得不重新思考。也许问题出在我输入 AutoML 的图像中的多样性——或者更确切地说是缺乏多样性。我从固定点拍摄的视频中的帧(逻辑上)几乎相同。对于接下来的几张图片,我编写了一个脚本,每秒自动拍摄大约 5 张图片,裁剪面部,将它们上传到云端,标记它们,最后将它们提供给 AutoML。我请以前的同事再次建模,这次使用了更多种类的灯光、位置和头部动作。因此,我每副眼镜又拍了几百张照片,删除了大部分视频帧以避免过度拟合,然后再次尝试运气。这个 AutoML 事情正在成为一种熟悉的仪式:上传,等待一个小时,下载模型,在我的代码中实现它——噗!模型成功了!响应时间快如闪电,结果非常可靠:模型可以识别每一副眼镜。是时候将它连接到智能镜子上,看看效果如何了。
将结果提供给客户
现在后端工作正常,我可以看看前端发生了什么。每 200 毫秒,前端将通过 REST-API 调用向后端发出请求。然后后端使用镜子内的网络摄像头拍照,并检查图像中是否有人。如果有,后端会对该人是否戴眼镜进行分类,如果是,则对眼镜进行分类,最后将数据发送回前端——所有这些都在 200 毫秒内处理下一个请求。
检测相关人员的算法
使用智能镜子几分钟后,我请来了一些同事,向他们展示了魔法。他们兴致勃勃地从架子上抓起一副眼镜,戴在脸上,聚集在镜子前。在那一刻,我遇到了另一个挑战:镜子前有那么多人,它很难确定哪些人应该检查眼镜。
因此,我必须找到一种聪明的方法来确定站在镜子前的哪个人最有可能与它互动。我选择做出此决定的方式基于两个指标:某人与镜子的距离以及他们与镜子中心的距离。当我们用这个改进的算法再次尝试镜子时,它就像一个魅力。
数据采集
这只是一个概念验证,但我不禁想知道智能镜子会打开无限的可能性。首先,我们的目标是通过向客户提供有关他们正在试用的眼镜的额外信息来增强客户体验,同时(在后台)从与之交互的人那里提取有价值的数据:性别、年龄、面孔形状、情绪等。所有这些收集的数据都可能导致镜像稍后能够提供个人推荐。这有助于顾客在进入商店后几分钟内找到一副完美的眼镜。商店将真正了解它的客户,并可以使用此信息更好地为客户服务。
下一步
接下来的步骤是将代码投入生产,将我们的 10 副眼镜的训练集扩大到大约 1000 副,看看它会如何响应。智能镜子的概念并非眼镜独有,可用于零售和其他行业的各种用例。