【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
深度学习中,处理图像的方法一般就是卷积神经网络。网络本身+模型,其实就是就相当于一个黑盒函数,我们输入图像,就可以拿到一定的结果。但是不管是输入的图像,还是拿到的结果,一般都是没有办法直接使用的,有必要做一些预处理和后处理的工作。只有这样做,才是一个完整的产品解决方案。

1、选择合适的camera
首先,我们遇到的第一个问题,就是camera的选型问题。目前一般的消费,或者工业领域,图像有三种接口,分别是mipi(dvp)接口、usb接口和网络接口。第一种成本低一点,但是本身图象是raw image,还没有isp tuning,这部分需要自己去完成,当然可以选用soc厂家调好的sensor。后面两种可以借助于os自带的框架,可以直接拿到图象,图像本身也是提前tuning好的,价格也会贵一点。
2、图像预处理
实际场景中的图像应用,其实有很多的限制,也有很多的先验知识,这部分都是需要注意一下的。比如拿到图像之后,是否需要裁剪一下,满足model的输入要求;是否有感兴趣区域;是否要做畸变矫正;是否要做设备自检;上一帧的识别结果在哪,是否有利于帮助缩小检测范围等等,这些都是需要处理的场景。
3、模型的裁剪、优化
pytorch学习到的model,一般是没有办法直接部署到嵌入式设备的。一方面model本身要尽量的小,参数部分不要太多,毕竟嵌入式设备内存资源有限;二是尽可能地快,性能稍微强一点,有npu的尽可能把npu用上;三是准确率方面,还不能下降太多。优化的本质,就是用不多的cpu/npu资源,实现既要、又要、还要的目的,中间的权衡、拿捏是十分重要的。
4、图像后处理
model本身只是处理一个输入、输出的过程,但是很多算法,在model输出结果之后,还需要做一部分图像后处理的。以yolo为例,事实上我们通过yolo,确实可以得到很多的候选框,但是这些候选框并不是我们想要的结果。针对这些候选框,首先我们需要通过概率filter一大批选项,接着按照概率从高到低的原则,合并掉大部分候选框,最后剩下来的结果,才是我们想要的内容。这些都是图像后处理的工作,一般也都是c/c++通过编码的方式来完成的。
当然,图像的后处理不一定是算法,还有可能和应用场景有关。比如识车牌的时候,第一个字符肯定是汉字;如果是蓝牌,肯定是五个字母+数字,如果是绿牌,肯定是六个字母+数字等等。这些都是属于先验知识的范畴,可以好好利用一下。
5、和其他传感器配合
并不是所有的应用,都只能通过图像sensor来处理,很多时候是希望它能够和其他sensor一起去解决的。比如人脸识别问题,是不是可以加一个超声波传感器,这样可以当人靠近的时候,再去做检测。还比如,车辆上的智能camera,是不是可以加一个便宜的imu传感器,这样可以识别到当前车辆是静止状态,还是运动状态。如果是内部再集成一个gps传感器,还可以配合地图,实时确认当前的位置,这些都是属于多传感器融合的范畴。当然,作为商品来说,价格还不能太贵。
真实的产品很少是只有一个sensor参与工作的,哪怕是安防相机、运动相机,内部还会集成很多的sensor,这些sensor怎么高效地一起去工作,这就是我们去考虑、设计的范畴。

被折叠的 条评论
为什么被折叠?



