作者:Anisha Udayakumar 翻译:张晶
项目背景
您是否知道每年大约有2300亿美元的食物被浪费,其中高达五分之一属于可食用农产品?我们都在自己的家中经历过某种类型的食物浪费,但最大量的浪费发生在杂货店的新鲜食品和农产品区。
长期以来,这么多的食物浪费一直是我关心的问题!在加入英特尔之前,我是一名创新顾问,与多家全球零售客户合作改善运营和客户满意度,那时是我第一次注意到商店里浪费了大量的新鲜食物的时候。基于这样一个事实,与预先包装的食品不同,新鲜农产品没有保质期——这使得预测它何时变质变得极其困难。
由于,使用人工智能等技术让可持续发展成为主流一直是我的梦想,我知道零售商必须有更好的方法来解决这个问题并减少新鲜农产品的浪费,所以,我建立了一个计算机视觉人工智能模型,可以确定农产品的新鲜度,比如西红柿或香蕉等。但是,让 AI 模型实时工作是一个挑战,我意识到提高模型性能对于部署和大规模应用至关重要。
在这篇文章中,我将向您展示我如何使用OpenVINO™工具包来优化模型和加速人工智能推理计算。
构建模型
通过使用摄像头来监控杂货店的货架,并使用目标检测和识别技术扫描其货物的图像。本文中我使用了一个AI 模型准确识别出农产品区的每一件商品。
通过打上标签的图像,目标检测和识别算法能够确定产品是新鲜、损坏还是即将变质。有了这些信息,我们就可以设置自动警报,通知商店经理和零售商是否需要更换产品或需要降价——减少需要丢弃的产品数量。
OpenVINO™助力实时推理计算
我的新鲜度识别模型可以分析单件新鲜农产品的图像,如上图所示。 为了在现实场景中发挥作用,它必须能够非常快速地区分和标记大型货架上的每一件农产品。
为了构建模型,我使用了 Open Model Zoo 中的 SSDLite MobileNetV2模型,详情请参考这个Jupyter notebook中描述的目标检测和识别程序。 虽然我将该程序用于解决食物浪费问题,但它并不局限于解决食物浪费问题。 开发者可以很容易地按照详细的源码将其应用到自己的目标检测场景中。
正如我已经提到的,虽然我最初的目标检测模型是准确的,但它检测速度太慢了。一开始,我尝试对模型进行微调,甚至切换到了另一个模型,但这并没有是性能得到很大改善,于是我转向了OpenVINO,它帮我将推理时间从10秒缩短到了1.5秒。
使用OpenVINO的另一个好处是,使模型移植性更好。我的新鲜度检测模型是基于TensorFlow构建的,我也可以使用其他框架,如PyTorch、Caffe或PaddlePaddle,并在各种不同的硬件上运行我的模型,如下图所示。
如果你想自己尝试这个方法,这里有两个建议:
- 首先,正如下面的代码片段所示,使用OpenVINO您只需要六行代码来加载和初始化OpenVINO运行时,并针对指定的硬件编译您的模型,然后将图像数据传递给模型并得到推理结果!
- 你真正想记住的另一件事是“device_name”部分。OpenVINO让您可以灵活地在许多可能的设备(CPU、集成显卡、独立显卡乃至FPGA)中选择最符合您的设计性能(吞吐量和时延)目标的推理计算设备。
from openvino.runtime import Core
img = load_img ()
core = Core()
compiled_model = core.compile_model(model=model, device_name=”CPU”)
output_layer = compiled_model.output[0]
results = compiled_model([input_img])[output_layer]
下一步是什么?
正如你所看到的,为人工智能应用程序构建软件并不难。真正的诀窍是让它们实时工作。OpenVINO改进了我的人工智能模型的性能,并使我的食物浪费减少应用程序成为现实。
总结一下这个项目中最重要的两个经验:
- 由于OpenVINO适用于所有通用框架,所以您可以只需用几行代码来优化现有的模型。
- 我在这篇文章中介绍的模型不仅仅可用于减少食物浪费,还可以解决AI开发者每天面临的许多类似问题。
要了解更多关于如何开始用AI和OpenVINO解决现实世界的问题,请查看英特尔人工智能开发者学习之旅以获得更多的演练和教程,并访问Open Model Zoo以利用更多的预先训练和优化的模型。
我迫不及待地想看看你用OpenVINO解决什么其他问题!