那这个问题怎么解决?我看到两种思路:

第一种,GPU内置。下图是Verisilicon的Vivante改的,支持固定流水的和可编程模块Vision core(类GPU中的着色器单元),模块数目可配,可以同时支持视觉和深度学习算法。不过在这里,传统的图形单元被砍掉了,以节省功耗和面积。只留下调度器等共用单元,来做异构计算的调度。
这类比较适合于低端手机,自带的GPU和CPU本身并不强,可能光支持1080p的UI就已经耗尽GPU资源了,需要额外的硬件模块来完成有一定性能需求的任务。
第二种,对于中高端手机,GPU和CPU的资源在不打游戏的时候有冗余,那么就没有必要去掉图形功能,直接在GPU里面加深度学习就可以,让GPU调度器统一调度,进行异构计算。
上图是某款GPU的材质计算单元,你有没有发现,其实它和神经网络的流水线非常类?都需要权,都需要输入,都需要FP16和整数计算,还有数据压缩。所不同的是计算单元的密度,还有池化和激活。稍作改动,完全可以兼容,从而进一步节省面积。
但是话说回来,据我了解,目前安卓手机上各种图像,视频和视觉的应用,80%其实都是用CPU在处理。而谷歌的Android NN,默认也是调用CPU汇编。当然,手机芯片自带的ISP及其后处理,由于和芯片绑的很紧,还是能把专用硬件调动起来的。而目前的各类,GPU,DSP,要想和应用真正结合,还有挺长的路要走。
AR:如果不复杂,对CPU和GPU的性能要求并不高
终端设备上还有一个应用,AR。据说iPhone 8会实现这个功能,如果是的话,那么估计继2015的VR/AR,2016的DL,2017的NB-IOT之后,2018年又要回锅炒这个了。
那AR到底用到哪些技术?我了解的如下,先是用深度传感器得到场景深度信息,然后结合拍到的2D场景,针对某些特定目标(比如桌子,面部)构建出一个真实世界的3D物体。这其中需要用到图像识别来帮助判断物体,还需要确定物体边界。有了真实物体的三维坐标,就可以把所需要渲染的虚拟对象,贴在真实物体上。然后再把拍到的整个场景作为材质,贴到背景图层,最后把所有这些图层输出到GPU或者硬件合成器,合成最终输出。这其中还需要判断光源,把光照计算渲染到虚拟物体上。这里每一步的计算量有多大?
首先是深度信息计算。获取深度信息目前有三个方法,双目,结构光传感器,还有TOF。它们分别是根据光学图像差异,编码后的红外光模板和反射模板差异,以及光脉冲飞行时间来得到深度信息。第一个的缺点是需要两个之间有一定距离,并且对室内光线亮度有要求;第二个需要大量计算并且室外效果不佳;第三个方案镜头成本较高。据说苹果会用结构光方案,主要场景是室内,避免了缺点。苹果6电池怎么拆机图解结构光传感器的成本在2-3刀之间,也是可以接受的。而对于计算力的要求,最基本的是对比两个经过伪随机编码处理过的发射模板以及接受模板,计算出长度差,然后用矩阵倒推平移距离,从而得到深度信息。这可以用专用模块来处理,我看到单芯片的解决方案,720p 60FPS的处理能力,需要20GFLOPS FP32的计算量以上。换成CPU,就是8核。当然,我们完全可以先识别出目标物体,用图像算法计算出轮廓,还可以降低深度图的精度(通常不需要很精确),从而大大降低计算量。而识别本身的计算量前文已经给出,计算轮廓是经典的图像处理手段,针对特定区域的话计算量非常小,1-2个核就可以搞定。
接下去是根据深度图,计算真实物体的三维坐标,并输出给GPU。这个其实就是GPU渲染的第一阶段的工作,称作顶点计算。在移动设备上,这部分通常只占GPU总计算量的10%,后面的像素计算才是大头。产生虚拟物体的坐标也在这块,同样也很轻松。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shouji/article-59156-3.html
有道理
妈的