前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Open Source Talk 03|Don’t break your user,Build a community

Open Source Talk 03|Don’t break your user,Build a community

作者头像
腾讯开源
发布2021-07-15 12:40:14
1.2K0
发布2021-07-15 12:40:14
举报
文章被收录于专栏:腾讯开源的专栏

About「Open Source Talk」栏目

开源无边界,分享有价值。Code is not cold,「Open Source Talk」栏目,将陆续邀请众多开源嘉宾做客,和大家一起分享和交流开源道路中的成长心得。以知识和分享为起点,传承开源的星星火光。

本期分享嘉宾:nihui(倪辉)

开源神经网络推理框架ncnn作者

腾讯犀牛鸟开源人才培养计ncnn开源项目导师

在开始,我想借用 Linus Torvalds 的两句话:

Don’t break your user

“This has been a mantra for the kernel for a long time and it’s something that a lot of other projects seem to not have learned. If you want your project to flourish long term you shouldn’t let your users worry about upgrades and versions and instead make them aware of the fact that you are a stable platform.”

Build a community

“In order to have a long life for a platform/project, you should create a community and have a common culture, a common goal to work together for a long term.”

//什么是Don’t break your user

1. 项目的持续更新和维护

2. 不破坏API兼容性

九言科技的In-Prestissimo和百度的Anakin项目是和ncnn类似的开源移动端神经网络推理框架后之视今,亦犹今之视昔。当你放弃用户时,用户也在放弃着你。

持续维护和更新是运营开源项目的基本,特性可以慢慢增加,性能可以慢慢优化,在于持久,就自然能获得用户的信任。

有的开源项目,因为项目组变迁等原因,放弃了以前的代码,转而开发新的项目,依旧做的是同样的功能,实际基本推倒重来一遍,比如tensorflow1和tensorflow2。用户的代码必须改动甚至重写,才能适配新版本,这是非常伤害开发者心态的。

换位思考下,我用你的库,用得好好的,你老改来改去,我也只能跟着改来改去,凭什么?

要长期更新新特性还要保持API兼容性,是对项目架构设计的巨大挑战,每一次重要的更改,必须从进行长远的规划思考,这个API是否可扩展,这个API是否能长期稳定。着急堆新功能不一定有利于项目的长久发展,一套稳健的API形成是需要开发者和用户相互反馈促进,是需要些时间的。

ncnn的接口比较简单,架构层次也很薄,刚开源的时候也曾发生过大型的架构调整,比如模型文件的格式改动,幸好当时用户数还不多,影响不大,并且充分考虑了可扩展性。如今,即便编译最新的ncnn代码,依然能加载3年前的模型文件,总体上依然保持着3年前的API调用方法。

保持API兼容是底层库开发者的自我修养,是维护用户体验的根基。

//什么是Build a community

1. 直接与用户交流

2. 帮助社区衍生项目

有时候,当你一边用着google翻译,一边用蹩脚的英文终于按照规定格式,给tensorflow或者tvm的github发issue询问自己遇到的问题,结果等来的回答是去stackoverflow或者论坛。这或许是他们的流程,但流程是不会考虑用户体验的。

ncnn有个技术交流QQ群,每天上千条消息讨论,每天会花挺多时间看看有什么需要帮助就去解答。这样能直接了解用户的实际需求,了解到项目哪里做得好,哪里做得不足。有小白用户,问的问题挺简单,你也去回复,营造出积极技术分享的氛围。长期以往,用户有问题就会想到这个QQ群,就会想到这里有个社区可以获得帮助。用户渐渐多了起来,大家碰到的问题有人刚好知道怎么解决,也会乐于帮助。

ncnn的github上有很多人用中文发issue,允许中文issue并不是问题,与用户交流本身才是重要的。有时候遇到自己不会的问题,也可以建议他加QQ群或者直接把issue转发到QQ群,请会的人帮忙。

没有人能精通所有的技术栈,但只要建立了用户社区,就能各自发挥所长,比如社区开发者为ncnn贡献的darknet和tensorflow转换工具,比如社区大佬daquexian大老师所开发的纯网页端一键转换模型工具,著名的netron-visualizer也支持ncnn模型可视化。

https://github.com/xiangweizeng/darknet2ncnn

https://github.com/hanzy88/tensorflow2ncnn

https://convertmodel.cn/ https://convertmodel.com/

除了维护ncnn的代码,我还会在zhihu平台发一些有关ncnn的使用文章,操作步骤会很详尽的写出来,会尽量挑选用户们有需求的主题,例如有用户反馈LSTM不太好用,于是就写了OCR LSTM的文章,有用户反馈ncnn缺少图像实例分割例子,于是就写了YOLACT的文章,有用户反馈在A53 CPU速度还不够快,于是就做了bf16加速的技术创新。

ncnn是个底层库,没有华丽的上层UI,用户看不见,要让用户更容易上手,要有好用的实用性应用级的项目。AI的各种应用,虽都叫AI,但算法技术都各不相同。自己做了图像分类和风格化转换的两个例子,更多的也要依靠社区开发者的力量,比如这里的人脸检测定位识别一条龙项目,比如1MB超快速人脸检测器,比如中文OCR检测定位转正识别一条龙项目。

有时候社区开发者会遇到些ncnn的问题,这些优秀项目的诞生会极大改善不同领域用户的上手体验,因此甚至要一起参与到这些第三方项目中,协助完成和推广。

了解更多:

https://github.com/MirrorYuChen/ncnn_example

https://github.com/Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB

https://github.com/ouyanghuiyu/chineseocr_lite

https://github.com/xiangweizeng/mobile-lpr

https://zhuanlan.zhihu.com/p/128974102

https://github.com/Tencent 

(点击文末阅读原文直接访问)

请给项目 一个 Star ! 欢迎提出你的 issue 和 PR!

 国内镜像地址:

https://git.code.tencent.com/Tencent_Open_Source

(登录后才能访问公开项目)

腾讯工蜂源码系统为开源开发者提供完整、最新的腾讯开源项目国内镜像

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 腾讯开源 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
人脸识别
腾讯云神图·人脸识别(Face Recognition)基于腾讯优图强大的面部分析技术,提供包括人脸检测与分析、比对、搜索、验证、五官定位、活体检测等多种功能,为开发者和企业提供高性能高可用的人脸识别服务。 可应用于在线娱乐、在线身份认证等多种应用场景,充分满足各行业客户的人脸属性识别及用户身份确认等需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档