微信扫码
与创始人交个朋友
我要投稿
这些天我在做图像目标检测与跟踪。
我越做越感觉,这块 AI 任务的建模方式和处理方式存在很多的问题。
我先分开说说目标检测和目标跟踪两块技术发展情况。
目前流行的目标检测还是YOLO,这个模型已经迭代到了 YOLOv8,修修补补,更新迭代了这么多版本,我认为不是一件好事,这说明目标检测领域存在瓶颈和局限性,已经很长时间没有人能做出突破了。
YOLO 系列模型最早是把 R-CNN 那套东西按在地上锤的,这其中蕴含了 AI 发展的非常典型的思路。
R-CNN 为代表的这类模型,有很强的人类对目标检测任务的假设,那就是,先标定不同大小的框,然后再对框住的图像做图像分类。
它把目标检测任务完全分割成了两个阶段,先选定框,然后再去做分类标定类别。这是一种典型的 pipeline 式的处理方式。
而 YOLO 模型一举采用 end2end 端到端的方式掀了 R-CNN 模型的桌子。
目标检测不就是想要框的坐标、类别吗?那神经网络直接预测并输出坐标、类别就好啦!别管坐标这种概念对于图像来说有多抽象。只要还归香农信息论管辖,那就交给神经网络去拟合就完事了。
这就是一次非常典型的 end2end 打败 pipeline 的 AI 技术迭代。end2end 打败 pipeline,在 机器翻译上、对话系统上,都已经验证过很多次了。
本质上,pipeline 最大的问题就是人为先验对数据信息做出了很多过于理想化的假设,而现实世界的数据分布是极为不确定、不受限的。这种情况下,pipeline 失效就是很正常的事情了。
通俗的比喻,就是,pipeline 就像是女生选老公,规定了很多假设条件,要品行好,要长得高,长得帅,要学历高,要家境好,但,不具备这些条件就不是好老公了吗?现实情况显然不是这样,现实情况是非常复杂的。
再看 end2end,它说白了,就是尊重了现实世界数据分布的多样性、不确定性,整个AI模型都交由数据来估计和拟合,最佳的估计方法就是各种各样的神经网络。
用通俗的话来讲,end2end 的本质就是,你别管我是黑猫和白猫,能抓住老鼠就完事了,你别管我长得帅还是长得丑,我赚钱给你花就完事了,你感觉幸福就行了。
翻回头来,再看 NLP 领域的对话系统,在过去,对话系统搞得特别复杂,建设对话系统,需要先分析文本分词,然后再做意图识别,再做语义槽识别,再做各种纠错检验。
这就是最最典型的 pipeline 式的 AI 模型架构。
我在从事算法工作中,从来没开发过过去的这种 pipeline 式对话系统,我简单学习了解过,对话系统从语义槽填充开始,我就发现这一套东西就是老太太的裹脚布,又臭又长,很难学习,很快我就失去了兴趣。
一个老式对话系统的 AI 模型里面,到处都是飞线,由于系统假设过多,设计非常复杂,因此难以处理的异常情况也非常多,导致还需要做各种异常情况的判断。
总之,pipeline 式的对话系统,又臭又长,已经逼近人类能够总结归纳的能力极限,工程师们看了架构图都崩溃。
终于,ChatGPT 出来了,模型架构非常简单,就是end2end,输入是文字,输出也是文字。中间的神经网络全都由 Transformer 来填充。大道至简。
你别管我问句意图是什么,也别管我语义实体该怎么抽取,这些全都交由神经网络来拟合。
抛弃了对话系统的复杂人为假设和设计,模型是简单的,世界也清净了。
再说回到我前面提到的目标检测,它还有一个下游任务,目标跟踪,也就是图像中检测到的目标框,在一个连续的视频里面,需要确定目标的身份 ID 编号。
当前产业界最广泛流行的做法,还是那个 kalman 滤波器,卡尔曼滤波器。
首先,我很赞叹卡尔曼滤波器本身的设计。我认为这种算法是非常经典优雅的。
但是,把 Kalman 用在目标跟踪上,而且,一用就是很多年,没多少进步,则是非常愚蠢的做法。
说白了,图像当中检测到图像的框,只有框的坐标信息,也就是,四个坐标值而已。这个信息量是极度有限并狭窄的。
你以为你看到的目标检测数据是这样的:
而实际上你看到只是:
也就是,图像中真实的车辆、道路、树丛等等信息全部都丢失了,传递到目标跟踪 Kalman 滤波器的信息量,只有孤零零的框而已。
从信息论的角度来看,绝大部分有用的信息都丢失了,保留下来的仅仅是极少量的抽象坐标信息。当信息量充分的时候,我们可以做出综合、准确的判断,但是,当信息极度缺乏的时候,你想做目标跟踪,就只能靠猜了。
猜,就意味着,效果差。
还是打个比方,如果你炒股,当你熟知一家公司的经营状况,和公司老板有很好的交情,了解内部情况,经营策略,那么你当然很好买卖股票来赚钱。但是,当你只能看着炒股软件上的 K线图来获取信息的时候,那么你能做的,就只能是靠猜了。不割你的韭菜,怎么可能?
卡尔曼滤波器,会做出非常强的假设,它假设数据噪声符合高斯分布,而采用线性滤波器来操作。这个算法在极其有限的数据量情况下,极尽可能消除噪声,做出尽可能准确的预测。
也就是说,对数据的强假设和信息的极度缺乏是分不开的。
但,最根本的点在于,你都没把整幅图像传递给目标跟踪器,这种最最根本的信息入口问题都没解决,怎么能做好目标跟踪呢?
所以搞笑的事情来了,从 Kalman 滤波器往后发展,又发展出了 ByteTrack、NetTrack,等等滤波器,你会发现这类滤波器在干嘛呢?
就是在卡尔曼滤波器基础上,增加信息量。要么是提高视频的帧率,尽量做到高频;要么是把那些预测不准的框也加进来,当然也会引入噪声。
但是,很多这些在 Kalman 滤波器上进行改进的模型,各种飞线也是飞来飞去,ByteTrack 这些论文死活都想不清楚,想增加信息量,直接增加图像信息啊!!老盯着那些框干什么呢???
所以,从目标检测,到目标跟踪,这依然是一个非常典型的 pipeline 式的架构。它在其中做出了很强的数据假设,因此,模型应用只能在一个非常窄小的范围里。
YOLO 击败 R-CNN 那种两段式 AI 模型,本身就是巨大的成功,也就是 end2end 对 pipeline 的一次胜利。好的方面我就不再夸了。
我要说的是 YOLO 的局限。这个模型不断迭代,很多次,做开发、优化的人,很多。Github 上的工具也很成熟。
但,它仅处理一张图像,并且和目标跟踪完全割裂开,这种pipeline 式的不足导致了它的上限不高。
很多人、很多公司,都会拿着成熟的 YOLO 代码,制作一个 demo 系统出来,拿出去吹牛逼,做演示:
什么打架斗殴检测、吸烟检测、垃圾堆检测,等等。什么检测老人是否摔倒,跟踪一个可疑犯罪分子,跟踪一只可疑的无人机。等等。
这些需求,表面上看,YOLO 似乎可以做,demo 系统上演示一些数据分布十分受限的场景,也没问题。
但,这些系统,都不能真的应用在实际中。因为实际中的图像数据分布,视频数据分布太广了。
说白了,这些 YOLO 套用的 AI 应用,做一个假的花花架子可以,但要说真的 AI 落地,那,太差了。
根本思路,还是从 pipeline 向 end2end 发展。融合视频中连续帧的数据,从数据出发,打通模型结构中的信息通道。不要让Kalman 滤波器拿着极小的抽象信息,勉强地去做噪声滤波估计。
总之你会发现,AI 的发展,就是一种从 pipeline 向 end2end 的发展趋势。在这种趋势中,尊重现实世界的数据分布,打通信息在神经网络中的传播路径,一切交给 AI 模型去拟合。
它就像培养一个孩子,你作为培养者,不能手把手去教孩子,而是需要规定好引导,让孩子自由的去探索,发挥自主性。训练研发 一个 AI 模型也是同样如此。
想要制作一个 AI 模型,那么你必须先把 AI 当作一个人来看待
53AI,企业落地应用大模型首选服务商
产品:大模型应用平台+智能体定制开发+落地咨询服务
承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业
2024-05-28
2024-04-26
2024-08-21
2024-04-11
2024-07-09
2024-08-13
2024-07-18
2024-10-25
2024-07-01
2024-06-17