OpenVINO 作为 Intel 开源的推断框架,在多种设备上都有着较为优秀的表现,尤其是在边缘设备上可谓是独领风骚。
边缘设备的推出,大幅降低了中台服务器的压力,使得整个系统的性能和稳定性都有了较大的提升。
原本可能一台服务器要对上百路的视频进行复杂的图像处理,现在只需进行简单的逻辑分析,是不是有点军事中的“化整为零”的意味?这篇文章就来讲讲一些神经网络中化整为零思想。
从基本思想出发目前的神经网络其实就两码事:①回归;②分类。
在工业上,当我们使用深度学习对两个物体测距的时候,会使用目标检测算法寻找这两个物体,然后计算二者之间的距离,这么做貌似合理,但又感觉有些许欠妥。后来笔者一拍大腿,这距离我用算法不就能直接回归出来的嘛,用什么目标检测网络。网上一找,发现大家对于神经网络在回归上的应用都很少,甚至于不知道回归还能这么搞,特有此文。
但凡测量,不光是距离,还有角度,以及坐标点,都是可以用回归思想做出来的,譬如寻找细小的钉子;譬如计算指针的旋转角度;譬如测量细长钉子的长度。另外,由于回归网络任务比较单一,所以其网络可以设计得很小,并且精度远高于复杂的目标检测网络。所以,学会巧妙地运用回归网络,让你的 OpenVINO 边缘设备跑十几个网络完全不是梦。
下面是一个运用回归网络来做测量+位置的简单 demo
GitHub 地址 :
https://github.com/dgl547437235/LogicRegression/tree/main
主要分为如下几步骤:
①生成数据集;
②准备模型;
③训练;
④使用 OpenVINO 进行部署。
下面是详情要点:
①生成数据集,执行如下脚本会在当前目录下生成img 文件夹,其中是1000张随机生成线条的图片,并且讲线条的长度和坐标点记录在 train.txt 。
②构建一个模型,见 Model.py,其中的骨架网络参考了 MobileNetV2 设计,如下图:
③开始训练执行如下脚本。
在进行逻辑回归的时候,通常使用 SmoothL1Loss 或者 MSELoss,训练时,每隔5个批次进行一次模型保存,最后得到 net.pt 和net.onnx两个模型,前者可以随时进行后续地训练,后者可以扔给 OpenVINO 进行推断。
④测试。
在这里我们来看下 OpenVINO 下的部署方式,从代码中可以看到,从开始到结尾总共才25行代码,这种便捷性是其他几种框架很难比拟的,足够地精简以及强壮。同时,我们看下测试的图片,对于线段两端点位置的回归以及长度的回归都是很准的,说明我们的神经网络很好地完成了回归任务。