笔者写这篇文章也有讨巧之嫌,仅以个人视角分享一些看法,主要从实践部署来谈谈近两年来计算机视觉模型的变化,不过AI是一个宏大的话题,每个人定义的人工智能就不一样,我们先来探讨一下何为人工智能。百度百科中是这样定义的:
人工智能是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。
而我又询问了文心一言和GPT,文心一言回答得更加全面,补充了百科中模糊的部分,而GPT从自身角度回答了什么是人工智能。
文心一言:人工智能的基本原理是通过算法和模型来模拟人类的智能行为。算法是计算机程序执行任务所遵循的一组规则和指令。模型则是基于数据和算法构建的,用于模拟人类智能行为的系统或平台。通过训练和优化模型和算法,人工智能系统可以逐渐学习和掌握各种复杂的任务和技能,从而实现自主决策和行动。人工智能的应用非常广泛,例如:
- 机器学习:通过训练大量数据来使计算机自主地进行决策和预测。
- 自然语言处理:使计算机能够理解和生成人类语言。
- 计算机视觉:使计算机能够解释和理解图像和视频。
- 语音识别:将人类的语音转换为文本或命令。
- 专家系统:在特定领域内提供类似人类专家的建议和决策支持。
- 机器人技术:设计和制造能够自主行动和决策的机器人。
GPT:作为一个人工智能,我被设计用来处理和理解大量的信息,并且可以执行特定任务。人工智能是指通过模拟人类智力的技术来实现某种形式的感知、学习、推理和决策能力。这些技术包括机器学习、深度学习、自然语言处理等,使得计算机系统能够展现出类似于人类的智能行为。
可以看到有些关键词重复出现了多次,如模型、模拟、能力,那我们简单抽象得出一个概念:人工智能的就是用算法模型来模拟人类能力,那么它的发展趋势也就是接近人甚至超越人。尽管我认为人工智能的含义应该包揽所有的自动化智能化,乃至一切通过电路、信号来便利生活的产物。但不得不说在这个抽象化的概念下,神经网络或者更具体的卷积神经网络完美契合了这几个关键词,至少从字面以上来看,像是一个仿生学词汇,而我们刚才得出的结论,人工智能不就是模仿人的行为吗。
所以神经网络衍生出的几个研究领域自然成为了人工智能的大热门,例如计算机视觉、自然语言处理、深度强化学习等。近几年来不断更迭,推陈出新,在各大媒体平台都能看见这几位的身影,然而现在我要泼一盆凉水,就拿我从事过的目标检测来说,对比GPT这类成功的自然语言处理工具,在实用性上还有很长的路要走。
我的工作是部署目标检测模型来识别灯条和数字,相较于各种人脸识别地图识别来说比较简单,先前我也写过一篇文章记叙了目标检测模型的发展,详见http://t.csdnimg.cn/xB48c
而我刚开始学习目标检测时接触到的并不是文中的Region-CNN或是Overfeat模型,而是百度飞桨上的手写数字识别MNIST数据集,许多项目都是围绕着这个数据集建立模型,或者说不上建立,更像是自己凭感觉修改成熟架构的几个参数然后不断微调,当然初学者更多是照搬原模型,我记得自己用vgg16跑了很多次数字识别,后来又试过resnet50,即使始终不会调参,但是创建数据集并用各种标注软件画框却练得炉火纯青。那时候SOTA模型还没有那么深入人心,最开心的事情就是在colab上对网络一通瞎搞碰巧提高了准确率。
后来为了速度和精确接触了YOLO系列,从v3,v5再到v8,效果越来越好,但是部署的难度也在提升。就拿resnet来说,作为一个18层的小模型,使用CPU速度就足够了,但是对于YOLO来说,帧率可能只有十几hz,不用说商业化,仅是在robomaster赛场都不堪重用。于是CUDA、Tensorrt等加速软硬件就显得格外重要,那时候还研究过英伟达的NCS和谷歌的TPU,感觉并不怎么合适。
我们面临的最重要的一个问题是大家都是编写一个py文件然后装上GPU驱动跑数据,很少有人真的把模型封装在一个单片机里,然后加上足够多的外设,就像终结者里面能跑能跳自动追踪的机器人一样。所以训练好了模型,怎么部署就令人头疼。我们先是将pth文件通过Protobuf序列化成onnx文件,再使用NVIDIA的API转为engine,在这之后根据github上开源的一些仓库创建了接口,使得图像数据可以送达至模型并输出结果。这个过程还要创建编写py、json、txt、xml、h、cu、cpp、wts等一大堆眼花缭乱的文件,最后的结果也不一定稳定,可能外接的相机光圈有些变化就会报出一串error。
所以说尽管模型的架构不断完善,许多云平台或者是开源仓库让一窍不通的小白也能顺利完成训练并得到满意的结果,我仍然持有一个审慎的看法,先前在小木虫有看到过一个类似的帖子,大意是各大厂商不断发力纷纷推出自家的SOTA模型,但是研究生除了根据这些模型改改参数更加贴近外,是做不了实际工业项目的,他们实验室里有一个祖传横向是一个图像分割的传送带监控,用的还是七八年前的模型,因为既没有人关注这些不随大流发展人机对话而是负责特定用途的小众模型,也没有人想要优化一个需要连接电路处理信号避免干扰的实际部署器件。这实际上就反映了深度学习能否真正发挥效用的进一步难题------当大家都飞在云端时,有没有人愿意停下来回到地面呢。