• 欢迎访问佰阅部落
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

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

人工智能 佰阅 4个月前 (05-30) 711次浏览

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版能实现,就没有这些痛点了。


佰阅部落 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:NCNN学习笔记:谁能统一人工智能终端部署?
喜欢 (0)