然而,有许多优化可以执行,使推理速度更快。例如,一个高效的推理机可以删除神经网络中未激活的部分,或者将多个层合并到一个单独的计算步骤中。如果硬件支持16位浮点运算,其速度通常是32位版本的两倍,则推理机可以利用这一点来加快处理速度,而几乎不会损失精度。
现在在物联网和边缘设备的世界里,世界上大多数推理都是在CPU上完成的。你不会在你的监控摄像头里放一个几百美元的GPU,这就是OpensCV的深度学习模块非常适合的原因。你只需运行一个自主选择的深度学习模型作为推理机。
英特尔为此投入了大量资金,并发布了OpenVINO工具包。OpenVINO或openvisualinferencing and Neural network Optimization,简称OpenVINO,旨在加速神经网络在图像分类和目标检测等任务中的速度。
那么背后发生了什么呢?
加载模型后,它们将转换为OpenCV中的内部表示形式,这与Caffe非常相似。
如果我们转到OpenCV网站,我们可以看到它支持几个基本的神经网络层。它还包含了池化层、激活函数,比如Tanh、ReLU、Sigmoid和Softmax,还有Reshape, Flatten, Slice, 和Split等函数。
在opencv的Deep Learning wiki中,你可以看到对经典神经网络架构的支持,比如AlexNet、GoogleNet、VGG和ResNet等。DNN模块具有可用的图像分类、目标检测和语义分割等模型。
现在,如果每个模型都被翻译成一个内部表示,我们如何确保在翻译过程中没有丢失一些东西呢?OpenCV已经发布了一些测试结果,表明在准确性上,使用DNN模块的ResNet 50和原始的ResNet 50之间没有任何区别,这意味着无论使用OpenCV的DNN模块还是原始的体系结构,都将得到相同的结果。