r52,IBM笔记本电脑R52,这台电脑好不好用( 五 )


图像识别/美颜相机:目前80%的图像、视频任务都是用CPU在处理
此外 , 移动端仅仅有神经网络加速器是远远不够的 。比如要做到下图效果 , 那首先要把人体的各个细微部位精确识别 , 然后用各种图像算法来打磨 。而目前主流图像算法和深度学习没有关系 , 也没看到哪个嵌入式平台上的加速器在软件上有很好的支持 。目前图像算法的支持平台还主要是PC和DSP , 连嵌入式GPU做的都一般 。
那这个问题怎么解决?我看到两种思路:
第一种 , 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 。它们分别是根据光学图像差异 , 编码后的红外光模板和反射模板差异 , 以及光脉冲飞行时间来得到深度信息 。第一个的缺点是需要两个摄像头之间有一定距离 , 并且对室内光线亮度有要求;第二个需要大量计算并且室外效果不佳;第三个方案镜头成本较高 。据说苹果会用结构光方案 , 主要场景是室内 , 避免了缺点 。结构光传感器的成本在2-3刀之间 , 也是可以接受的 。而对于计算力的要求 , 最基本的是对比两个经过伪随机编码处理过的发射模板以及接受模板 , 计算出长度差 , 然后用矩阵倒推平移距离 , 从而得到深度信息 。这可以用专用模块来处理 , 我看到单芯片的解决方案 , 720p 60FPS的处理能力 , 需要20GFLOPS FP32的计算量以上 。换成CPU , 就是8核 。当然 , 我们完全可以先识别出目标物体 , 用图像算法计算出轮廓 , 还可以降低深度图的精度(通常不需要很精确) , 从而大大降低计算量 。而识别本身的计算量前文已经给出 , 计算轮廓是经典的图像处理手段 , 针对特定区域的话计算量非常小 , 1-2个核就可以搞定 。

推荐阅读