AI与机器学习成就华为P20 DxOMark的胜利

华为在上月发布了P20 Pro和P20, 在当天公布的DxOMark手机摄像上排行名列前茅, 并且领先幅度并不是1分2分, P20 Pro比之前的榜首三星Galaxy S9 Plus高了10分, 可以说完全不是一个纪元, 而是领先了一到两个时代. 当然P20 Pro的1/1.73英寸的CMOS规格难免有些欺负人, 但1/2.7英寸 CMOS的P20相比Galaxy S9 Plus, Pixel 2仅仅是规格稍高, 然而其成像画质也有明显优势, 那这个优势是由何而来的呢?

摄影画质的提升是有两个思路, 一个是暴力拼硬件, 如采用更大面积更大像素的CMOS, 增加机械的光学防抖, 更大光圈;而第二个思路则是软实力: 算法和优化.

第一个思路的典型案例是三星Galaxy S9 Plus, 之前的Galaxy S8相对Galaxy S7拍照基本只是原地踏步, 而Galaxy S9 Plus率先使用了全新带有DRAM的三层堆栈的1.4µm CMOS, 但这个仅仅是拍照提升的次要因素, 真正大进步的主要因素是光学组件的大跃进, Galaxy S9 Plus突破性的采用了F1.5的超大光圈. 但使用这样大的光圈是需要付出很高代价的, 首先F1.8以上的大光圈生产难度很大, 良品率很低, 导致镜头模组生产成本很高, 第二个是光圈过大, 在明亮场景会使得图像过曝, GS9甚至引入了物理可变光圈来解决了这个问题, 这样大大提升了摄像组件的复杂度, 降低了可靠性.

另外一个思路就是软件算法上的优化, 这个典型案例就是Pixel 2, 12.2MP, 1.4µm pixels, f/1.8单摄像头的硬件规格并不算很夸张, 但还是可以压倒iPhone X等一票硬件怪物, 这就得益于DeepLab-v3+算法. 这个算法是基于AI的深度学习自然网络, 可以对景物进行实时分析, 识别目标场景内容, 进行优化. 并对场景进行HDR+处理, 在一定程度避免过曝情况的发生. DeepLab-v3+算法最看门的绝技是单摄像头通过算法实现景深拍照, 这样的功能实现需要大量的编码和解码操作, 进行多次取样和转换, 运算量十分巨大. Google Pixel 2为了实现该功能甚至还专门开发了一颗名为Pixel Visual Core的加速芯片来进行算法处理, 这个加速芯片的FPU浮点性能是Apple A11 Bionic的五倍. Google还看上去大公无私地将DeepLab-v3+算法进行了开源, 免费给全世界分享. 当然Google这样做也是有自己小算盘, 一方面, 可以充分利用开源界的免费开发资源继续完善, 另外一方面其主要竞争对手高通骁龙835/845的AI性能还不如A11, 并且跑不动这套需要极高性能的算法, 于是自以为不用担心, 别人单有算法也没有足够性能的硬件来来实现.

P20样片对比和分析

但在这个问题上Google却失算了, 华为麒麟970率先内置了NPU处理器, 可以提供足够的性能来实现与此同级别的基于深度学习的算法, 用来提升拍摄的画质表现. 基于深度学习的AI算法是如何提升画质表现的, 让我们从DxO的对比样张来看看. (对比图片来源: https://www.dxomark.com/huawei-p20-pro-camera-review-innovative-technologies-outstanding-results/, 具体对比原图可以在这个页面查看)

低光照和防眩光

这是一个典型的夜景场景, 华为P20 Pro左下角的黑色顶棚还原真实, 而iPhone X和Pixel 2明显过曝, 右下的街灯iPhone X和Pixel 2也有明显眩光. P20 Pro通过深度学习对场景进行侦测, 很大程度避免了过曝情况的发生. 而右上角的树枝华为P20 Pro细节更好, 但也没有由于过度锐化而导致躁点上升, 这也是大面积传感器更好高感光度+后期算法共同作用的结果.

变焦和光学防抖

我曾经天真地认为底大就是正义, 虽然这点在DSLR领域是正义, 但在手机领域并不是如此. 之前索尼/魅族曾经采用1/2.7英寸的大底传感器, 但也是由于大底, 在手机空间就无法为其加上OIS光学防抖, 结果得不偿失, 我一度认为大底和光学防抖, 如鱼与熊掌不可兼得.

而华为P20 Pro则创新地引入AIS功能, 使得其可以兼顾大底CMOS和光学防抖. 其大概的工作原理是通过三号摄像头取景判断手持的运动趋势, 然后再通过AI后处理通过多帧稳定算法进行防抖, 完成了我一度认为不可完成的任务.

人像场景

国外品牌手机的人像和美颜拍摄一直都是落后于国内品牌, 究其原因是不够上心, 国内对于人像和美颜的痛点更为迫切, 迫使国内的手机厂商在这方面有更多的投入. 而华为充分利用自己的技术优势, 通过AI深度学习算法对人物面容进行3D面容识别, 并对皮肤和色泽进行优化增强, 上面样张P20 Pro显得更为红润动人. 由于人物是实时变动的, 需要实时将图像并通过同之前神经网络深度学习结果进行分析比对, 变成3D面容信息, 然后再进行优化, 实时处理的运算量还是很大的.

HDR场景

这张场景是人像, 但是逆光, 窗外的场景亮度过高, iPhone X的窗外严重过曝, Pixel 2过曝控制较好, 而P20 Pro控制更为完美, 同时室内人物又没有过暗. 由于深度学习的场景积累使得对于这样明暗差异大的复杂场景进行分割判断, 设定不同的曝光策略, 麒麟970强大的NPU性能使得这些处理更为游刃有余.

双摄最开始的用途就是副摄作为景深传感器获得场景的深度信息, 通过多帧合成和后期处理的方式形成景深效果. 但在AI时代之前的算法, 对于前景和背景的识别区分存在问题, 特别是比较复杂的植被, 边缘部分就容易出现瑕疵.

景深效果和边缘判断

而基于AI深度学习之后的场景判断, 由于大量场景的数据积累使得相机对前后景的判断更为精确, 边缘部分的分割更为精细, 但又不会出现上面不支持AI双摄复杂边缘处理不当的问题.

整体而言, 麒麟970的NPU对19类500多个场景进行机器学习的训练, 如猫狗, 食物, 人群, 微距, 夜景/文本, 花卉, 蓝天, 雪景, 沙滩等都有相应的优化方案. 实现这样的功能需要大量的数据积累, 在实时拍照的时候也需要通过神经网络对大量数据进行处理, 因此对于算法和运算能力提出了很高的要求. 华为P20的DXOMark登顶不仅仅是植根于CMOS和光学组件的优势, 更有优秀的算法来锦上添花. 而优秀算法需要强大的算力来保证, 麒麟970的NPU功不可没.

针对AI深度学习的需求, 华为颇有前瞻性地在麒麟970研发之初就加入了NPU独立单元.

前面提及, 图像处理核心工作是场景分析识别, 这个工作有两个阶段. 第一个阶段是训练, 需要给予大量的样本通过卷积神经网络Convolutional Neural Network进行学习分析, 这个训练的过程可以是在移动设备本地进行, 也可以是到云端大型服务器去操作, 但后续的新照片, 分析判断就基本只能在本地完成. 虽然这只是单个全新样本的分析, 但也需要和之前积累数据进行比对, 并将这个分析归纳到机器学习成果之中. 并且这个卷积神经网络Convolutional Neural Network过程要进行大量的分支判断过程, 这需要强大的FP16浮点处理能力.

高通骁龙845的所谓 'NPU' 是Hexagon 685, Hexagon 685只是之前Hexagon 682的小改. 严格的说, 这个只算是DSP, 而不是像麒麟970和A11那样真正意义上的NPU, 只是简单化的向量处理单元, 并且这个DSP计算能力还有可能被其他任务占用. 骁龙845中更为复杂的AI机器学习任务依然需要GPU甚至是CPU来实现, 而这样的代价是巨大的.

这个是TechInsights的麒麟970核心图, 我们可以发现A53小核下方是NPU芯片区域, 目前移动SoC中, 仅有Apple A11和麒麟970有真正意义的NPU.

AI和深度学习不仅仅是硬件问题, 移动AI处理是一个软硬结合的多层次系统项目. 最上层是应用层, 其下是API作为应用层和硬件层的交互应用接口. 目前Android平台中AI加速的API主要有两个: 一个是Google官方的Android AI Runtime, 类似Windows下的Direct Compute, 软硬件兼容性好, 是行业规范;另一个是华为的HiAI, 这个是麒麟独有的API. 类似NVIDIA的CUDA, 虽然硬件上有限制, 但效率更高. 在API层下面还有一个HiAI异构资源管理系统, 分配任务给下面的硬件层. 下面的硬件层可以是NPU, 也可以是GPU, CPU, DSP, 甚至是ISP.

这说明AI不是一定只能跑在NPU上, 其他CPU, GPU, DSP什么也都可以, 但在性能和效率上却有着根本性差别: GPU性能是CPU的4倍, 而NPU则是CPU的25倍. 除开绝对性能, 能耗比的差距更为明显, NPU相比GPU和CPU有高达8倍和50倍的差距. 这对于电量捉襟见肘的移动设备而言, 这完全可以说是有本质的差距.

麒麟970用NPU对物品进行实时识别, 性能可以达到16GFlops的运算能力, 单个处理耗时仅为32ns, 而工作电流仅为300mA, 相比动辄几瓦的CPU和GPU而言是十分的绿色.

从鲁大师的AI性能测试我们可以看出麒麟970相对骁龙845的开发机性能优势明显. 鲁大师的AI测试包含了InceptionV3, Resnet34, VGG16 3个项目, 这3个测试项目是使用三种不同算法分别识别100张图片, 通过耗时对性能进行评估. 这三种算法基本是目前训练人工智能识图的神经网络仅有的三种算法, 非常有代表性, 可以说是当前AI深度学习算法的全部. 这三种算法中, InceptionV3更多是依赖CPU和GPU, 麒麟970和骁龙845两个平台差距不大;而Resnet34, VGG16在算法上更为先进, 可以充分利用NPU的性能优势, 因此在后面两个测试项目上带有NPU的麒麟970性能优势明显.

特别是VGG16算法, 其包含看13个卷积层和3个全链层结合的16层结构, 十分合适NPU. 这个算法的计算精度是FP16, 而CPU的发射都是FP32, 有更高精度. 但用来处理FP16时, 单个发射还是只能处理单个FP16, 这样资源就会严重浪费. 因此对于VGG16这种以FP16为主的计算, 对FP16优化过的NPU更为高效, 可以更充分地利用资源.

有公司甚至在吹骁龙660的AI性能, 但骁龙660的Hexagon 680 DSP根本没有FP16计算能力, 那AI是靠什么来算?CPU还是GPU?的确它可以跑AI, 我们也不能责难它虚假宣传, 只不过性能和功耗不好看而已.

在AI之前的时代, 提升摄像画质对于没有底层研发实力的品牌并无明显门槛, 只需要舍得多花几美元找索尼爸爸买更好的CMOS, 再忍受更低的良品率硬上大光圈, 套用高通或者三星的公版ISP算法折腾折腾, 也可以做出不错的拍照手机. 然而在AI到来以后, 传统思路就不再行得通, 单纯的比拼硬件顶多使没有底层研发实力的品牌可以攒出不错的硬件. 但如果在基于AI深度学习的智能算法上存在缺失, 就会使得产品理念完全落后. 两个梯队的差距就被拉开, 继而出现鸿沟, 最终很难跟上顶级AI企业的水平.

而拥有算法研发实力的公司境遇虽然略好, 可以参与进AI深度学习的游戏. 但这些公司缺乏芯片级的研发能力, 在上游芯片提供商不能提供足够NPU算力产品的情况下, 也只能怨天尤人而勉强跟随.

因此, 现在有AI机器学习开发能力的企业能算是二流, 但有芯片研发能力和平台生态构建的企业才是顶级. 华为在底层有麒麟品牌作为基础, 中间有HiAI和开发机作为平台支持, 上层更有消费级的电子产品和软件应用直接同终端客户接触, 这样的生态体系就是一个健康可持续发展的AI生态. 对于消费者而言, 基于深度学习的AI只是个黑盒, 用户并不需要去了解其工作原理和方式, 只需享受其美滋滋的成果即可. 而华为麒麟就是这种美滋滋的幕后英雄, 她的努力训练将会使得以后我们的生活变得更为美好.

2016 GoodChinaBrand | ICP: 12011751 | China Exports