NCNN学习笔记:谁能统一人工智能终端部署?

ncnn 是一个高性能神经网络前向计算框架,无第三方依赖,跨平台,简单易用。作者 nihui 是来自腾讯优图的顶级人工智能专家。目前受众范围主要集中在中、俄、日地区。相比 onnx 背靠的微软,亚马逊,Facebook 和 IBM,ncnn 这边的维护和社区发展就不那么强悍,但它的确是一个非常高效的框架,我喜欢其全平台部署的特性。

0. NCNN 代表作

A. 视频超分辨放大

  • waifu2x-ncnn-vulkan
  • realcugan-ncnn-vulkan
  • realsr-ncnn-vulkan
  • realsrgan-ncnn-vulkan

这些都已被广泛运用于动漫视频超分辨放大。随后也诞生了更多面向普通人的操作界面,比如我写的【佰阅人工智能 APP 系列】

B. 视频补帧

rife-ncnn-vulkan

C. Deepfacelab

https://github.com/iperov/DeepFaceLive

D. 视频一键绿幕抠图

以上列举的这些应用,都是基于 ncnn 的,零依赖,不需要繁重的 cuda 驱动,推理速度快,并发友好。当然也有一大堆偏向工业应用的目标检测,这里就不作一一列举了。

2. 核心贡献为什么比前端冷清?

相比现代编程的异彩纷呈,人工智能推理框架数量极少,积极参与贡献者少之又少,究其原因在于,人工智能推理框架的核心是推理,需要实现海量数学模型算法。偏算法层面的东西,一般人就只能套用现成的,核心贡献需要极高算法能力要求。

3. 全平台部署的重要性

ncnn 截至 2022 年 5 月,已实现 Pytorch 模型自动量化成 fp16。一套代码可跨终端运行,这是非常了不起的特点。平时用 Pytorch 或飞浆等框架训练模型,最后转成 ncnn 模型,实现任意终端的高效推理,现实意义重大。

4. 一些痛点

个人入门 C++许久,一直没写什么,直到遇见 ncnn 这个框架,才方便的开发出了一些应用。如果小白入门 ncnn,建议废弃里面的纯 c 代码,比如一些 c 的标准库、OpenMP 这类的偏底层语法,改用 C++20 现代编程写法。C++20 现代编程很多与流行语言语法习惯一致,开发效率很高,如果使用纯 c 的一些语法,给人的感觉就是凭空函数太多,摸不着门。代码推荐 vscode,只需安装 cmake 扩展插件,就能快捷编译 c++程序。 ncnn 现在是万能的吗?不一定,就目前而言其底层支持多输多出,然而源头模型转换的多输入目前没有案例可循。比如视频抠图的 RVM 模型。经典 AI 模型一般分割任务,连续推理,但 2021 年起,越来越多的应用开始支持多输入,比如视频抠图,比如视频补帧等。除此之外,自然语言和音频处理领域,目前也没有 ncnn 的相关案例。核心开发者一直忙着工业级板子的适配,广泛应用依旧需要开发者热心的贡献。 如果你需要参考其他模型转换方法、部署案例,可以关注我开源的 ncnn-models:https://github.com/Baiyuetribe/ncnn-models

5. 异彩纷呈的 AI 应用何时到来?

受限于 c++开发习惯,目前几乎所有的 AI 应用都是单个或多个组合连续推理,实现较为简单或复杂的应用,随着多输入模型的到来,ncnn 的底层推理已无问题,然而复杂应用开发需要更高效的开发语言,Go 语言和 Rust 是最合适的,Rust 已有 ncnn 案例,go 版如果能实现,那么基于 NCNN 的 AI 应用将比现在丰富无数倍。然而现实需求肯定等不及相关适配,如果是服务器,只能做好本地 API 部署,实现经典的 TCP 调用。但是 AI 应用一般依赖 GPU 强大的算力,本地化应用是主流,难不成本地也要多开 API?倘若 go 版能实现,就没有这些痛点了。

联系方式
广告
网站统计

累计发布:211 篇

总点赞量:1336

累计运行:6 年 29 天

建站日期:2018-10-25