随着计算资源的不断增强和硬件成本的降低,机器学习模型的运行不再局限于功能强大的超级计算机。模型训练和模型推理是机器学习开发周期中两个核心的计算时刻。模型训练需要通过大量的试错来揭示输入和输出之间的复杂关系,而模型推理仅需要利用已经发现的关系,因此可以在计算资源较少的情况下进行。同时,越来越强大的模型也在缩小其体积,例如YOLOv4-tiny的权重仅为23.1MB。此外,硬件变得更加便宜和快速,例如NVIDIA Jetson的'Nano'单元,包含128核心的NVIDIA Maxwell GPU,成本不到100美元。正是更好、更小的模型与更便宜、更强大的硬件的结合,催生了嵌入式机器学习的发展。
嵌入式机器学习是将机器学习算法部署到微控制器(非常小的计算机)上运行,包括在Raspberry Pi、NVIDIA Jetson、Intel Movidius或Luxonis OAK上运行神经网络。嵌入式机器学习是一种边缘计算:在最终用户的计算资源上而不是中央数据中心(云)上运行算法。一些为嵌入式机器学习构建的计算机可以用于计算机视觉,其中可以推断视觉数据(视频和图像)的信息。
与基于云的处理相比,嵌入式机器学习可以提供几个关键优势:速度、连接性和隐私。由于不需要往返服务器进行预测,模型的输入和输出可以更快地提供。嵌入式机器学习不需要互联网连接,这意味着可以在没有互联网网络设置的地方部署模型(例如,在广阔的田野中分析作物)。所有数据处理都发生在用户直接所在的设备上,这意味着接收到的输入数据保留在本地。
尽管如此,机器学习也带来了一些限制。具体来说,模型必须更小,这通常会导致准确性降低。此外,集成主动学习——这可以加速模型改进——可能更具挑战性,因为接收模型重新训练的输入可能会延迟甚至完全不可用。
如果已经确定嵌入式机器学习是实现用例的最佳选择,那么接下来的关键是收集数据集、开发模型、选择适合任务的硬件、部署到硬件以及实施持续模型改进的系统。将专注于构建和部署计算机视觉模型。为了将计算机视觉模型部署到边缘设备,该边缘设备必须设置有给定模型期望的依赖项。例如,如果使用TensorFlow在NVIDIA Jetson上运行,那么NVIDIA Jetson必须配置有正确的CUDA驱动程序以支持正在运行的TensorFlow版本。对于任何其他框架也是如此:PyTorch、Caffe、Darknet等。在给定的边缘设备上管理依赖项通常是使用Docker的好地方。一旦环境设置有正确的驱动程序,可能需要在边缘设备上构建模型框架(在所需的特定版本)。根据经验,构建像Darknet或TensorFlow这样的框架可能需要14小时(或更长时间)。在环境设置有正确的依赖项和构建的模型框架之后,可以将模型部署到感兴趣的边缘设备上。
在Roboflow,还发布了Docker容器,用于在NVIDIA Jetson上运行计算机视觉模型。部署模型到NVIDIA嵌入式设备提供了独特的好处:推理速度可以增加,模型可以离线运行,数据可以本地处理。但是将模型放到嵌入式硬件上可能是一个繁琐的任务——编译模型的正确格式,编写...