Android NNAPI 即将在 Android Q 迎来大更新( 五 )

其它的新变化

除了上面说到的之外 , NNAPI 1.2 还有更多其它的更新:

00001. 增加了 TENSOR_FLOAT16 和 FLOAT16 数据类型 。 float16 相比 float32 既不会损失太多精度 , 也有很大的加速 , 但只有 ARM8.2-A 以上的新 ARM 架构才能使用 float16 格式进行计算 。 NNAPI 1.1 中 , 开发者可以指定是否允许浮点数以 float16 的精度计算 , 允许 float16 的精度对某些芯片的加速效果明显 。 NNAPI 1.2 加入了两个 float16 的数据类型 , 许多 operations 也做了相应的更新 , 意味着 NNAPI 对 float16 有了更多的支持 。 不过需要指出的是 Android 自带的 NNAPI 实现里 , 对 float16 的数据会转回 float32 进行计算 , 计算完成再转回 float16(因为大部分芯片不支持 float16 计算) , 反而会比 float32 慢 , 所以建议只在支持 float16 计算的设备上使用 float16 数据类型支持了 NCHW 数据布局 。 NNAPI 1.1 中 , 只有 NHWC 数据布局是被支持的 , 而大部分训练框架常用的是 NCHW 布局 。 NNAPI 1.2 支持了 NCHW , 开发者可以自行选择数据布局 。

推荐阅读