本帖最后由 tobot 于 2022-12-2 01:00 编辑
现在AI已经非常普及了,所谓AI板卡也挺多的,仅就我的理解说一下:
一、AI的实现载体
说起AI的实现,挺有意思的,今年软考高级就有这么一道题目,AI可以用____实现,选项呢,有ASIC、FPGA、GPU、SoC,大家也知道软考这玩意是从来不公布标准答案的,一般辅导机构都说是排除SoC,我个人觉得这个题目不太严谨,树莓派不就是典型的SoC么,难道说树莓派上不能跑AI了?无独有偶,罗姆微网站上公布的设备端AI芯片为GPU/FPGA/MCU,把ASIC(专用芯片)排除在外了,这个好像也不太对,寒武纪、地平线不都是说投入巨资来做ASIC么?
二、AI能做什么
AI说起来很玄幻,但真的已经深入到生活的方方面面了,大家手机上一般都有语音拨号、智能导航等等,实际上就是AI的基本应用了。当然某些过于浮躁的业余开发者(比如我)比较倾向于开发图像相关的应用,比如物体分类或者物体识别。
比如我现在测评的嘉楠K510提供了最近比较流行的AI画图功能,把人物用动画效果呈现出来(只有视频的应用演示——没有提供Demo,甚憾)。
当然,这个技术也可以用来搞笑,比如我在网上看到的:
这是虚拟超级赛亚人吧?(感觉不难实现,花点时间应该也能搞出来)。
三、AI的实现
言归正传,AI这玩意说简单也挺简单,说穿了就是根据规则做判断,比如我们都知道“扁担长,板凳宽”,只需要识别一个长方形的长宽比,就可以判断它是扁担是板凳了,但具体多长多宽是扁担,多宽多长是板凳呢?这就需要经验了。
事实上,AI也是这么干的:“训练”和“推理”。
训练就是将大量数据喂给AI,使其分析和记录下其中的特点,要是问我怎么分析和记录,除了几个专业一点的词语“卷积”、“残差”,可能还有点印象,其它的我大概都还给老师了。先不管原理吧,我在稍后一点会讲讲怎么操作的。
推理就是AI的具体应用了,大多数专用芯片都是只有推理而不具有训练功能的,这也是我们在使用开发板上一般做AI应用常做的事情。比如我们开发一个智能摄像头,可能并不会用大量图片去喂给它,让它去“学习”,而是直接让它调用现成的模型,实现比如“报迎客词”、“自动开锁”等功能。
四、为什么选择python
基本上提到AI,必然会说使用python实现。事实上,python作为一个解释性的语言,效率并不高(甚至可以说低的发指),但门槛也低,大部分的轮子都有人已经造好了,借助现有的库,基本上不需要自己去写底层的复杂代码,我尝试过,大概只需要半天时间就可以教会中高年级的小学生用python做一个不算太复杂的程序出来(包括简单网站、爬虫、海龟画图等等)。
介绍一下我常用的和AI相关的常用库吧:
Opencv:不管是摄像头采集还是视频调用,opencv肯定是首选的。
NumPy、SciPy、Pandas:数学计算库,看哪个顺眼就用哪个,感觉比自带math好用。
Matplotlib、Pygraphviz、Pillow:画图工具,Matplotlib用来将矩阵转成图形,Pygraphviz用来画流程图,Pillow做图形缩放等等。
Pillow:图像处理库
Keras:为python提供了高层神经网络的API接口,基于keras可以调用很多现成的模型,比如调用TensorFlow。
PyTorch:深度学习框架。
NLTK:自然语言库。
Pytesseract:文字识别。
四、实操——用TensorFlow识别图片(分类)
1)训练
链接在https://bbs.eeworld.com.cn/thread-1227155-1-1.html
2)推理
五、将推理移植到开发板
1)SDK介绍
2)模型转换
3)模型调用
六、借助开发板的推理再进行二次开发
1)
首先介绍一些我已经做好的一个例子吧——追逐苹果的大鸟,用浏览器打开,里面有一只鸟和一个苹果,把K510的摄像头对准屏幕,鸟就开始向苹果飞行,可以用鼠标拖动苹果,鸟的飞行方向也会随之发生改变。
通过python读取板卡上object_detect_demo的结果,分析两个物体的相对位置,提供给程序,GUI接口使用的是python的flask库,提前做好网页模板,预留鸟飞行方向的接口,实现起来挺简单的,稍晚一点我录一下和代码传过来。
2)
Face-3D,这个是嘉楠给了视频演示,但没有真的给demo的一个应用,我正在研究。在开发板中,分别调用人物脸部关键点、头部的方向等参数,再通过贴图生成一张动画人脸。勉强刚做了一个可以调整方位角的功能,表情什么的还没成功。
具体如何通过3DMM生成人脸,可以参考《Regressing Robust and Discriminative 3D Morphable Models with a very Deep Neural Network》这篇论文,有现成库可以利用的。。。
|