深度学习曾经打不过一个手工特征,直到这篇论文出现
2014年之前如果你去问任何一个做计算机视觉的研究者怎么让机器认出视频里的人在跳舞还是在跑步几乎没人会说用深度学习。这听起来有点反常。要知道就在两年前AlexNet已经在图像识别上证明了卷积神经网络的实力整个学界都在往深度学习转向。但视频动作识别是个例外一个顽固的例外。当时最强的方法叫做密集轨迹密集轨迹*一种手工设计的视频特征提取方法通过跟踪视频里密集分布的像素点的运动轨迹再结合梯度和光流信息统计出动作特征不依赖神经网络学习。密集轨迹在UCF101这样的动作识别数据集上能做到88%左右的准确率而当时能找到的最好的深度学习方案准确率只有可怜的63%左右。这中间差了20多个百分点。20个百分点的差距意味着什么意味着每5个动作视频里深度学习方法就要比手工方法多认错1个还不止。这不是小差距这是完全不在一个量级上的差距。放在今天如果哪个新模型比现有最强方法差20个点基本不会有人拿它当正经研究成果发表。这就是Karen Simonyan和Andrew Zisserman在2014年面对的局面。他们俩来自牛津大学的VGG实验室几个月后他们又发了另一篇让整个视觉圈震动的论文就是提出VGGNet的那篇。这两篇论文几乎是同期完成的工作一篇在解决图像分类的网络深度问题另一篇在解决视频动作识别里深度学习为什么打不过手工特征的问题。静止的一帧图看不出动作那就别只看一帧先说说这个问题到底难在哪。你随便截取一段跑步视频里的一帧画面让人来看很可能猜不出这个人是在跑步还是刚站起来准备走路。人体的姿势在单帧图像里确实提供了一些线索比如腿是抬着的还是着地的但动作的本质是随时间变化的过程不是某个瞬间的姿态。之前的深度学习方法几乎都在犯同一个错误就是把视频当成一堆独立的图片来处理用卷积神经网络提取每一帧的特征然后简单地把结果平均或者投票拼起来。这种做法完全没有捕捉到运动本身的信息只是在做连续的图像分类而不是动作识别。这就好比你想判断一个人是不是在跳绳如果只给你看几张随机抽出来的照片你可能看到的是人站着人跳起来人落地这样几个孤立瞬间你很难从这几张静态照片里确认这到底是跳绳还是原地起跳还是被人推了一下。真正能让你确定答案的是这些瞬间之间的连贯运动关系是脚离地又落地的那个轨迹和节奏。如果不引入这种运动信息无论单帧图片分析得多精细都是隔着一层纱看世界。两条流一起看一条看长相一条看动作Simonyan和Zisserman的解决思路说起来不复杂复杂的是他们把这个思路做成了真正能落地生根的架构。他们提出的方法叫做双流卷积网络双流卷积网络*由两个独立的卷积神经网络组成的架构一条叫空间流负责处理单帧RGB图像来识别场景和物体外观另一条叫时间流负责处理光流场来捕捉运动信息最后把两条流的预测结果融合起来做最终判断。空间流其实好理解它处理的是普通的RGB图像作用是识别画面里有什么比如场地、器械、人的外观特征。这部分和普通的图像分类网络没有本质区别。真正的巧思在时间流上。时间流不直接吃视频帧而是吃光流场。光流场*描述视频中相邻两帧之间每个像素点运动方向和运动幅度的一种表示方法通常用两张图分别表示水平方向和垂直方向的位移量。也就是说研究者提前用传统算法把视频里连续帧之间的像素运动计算出来变成一种运动地图再把这张运动地图喂给一个独立的卷积网络去学习。这个网络看到的不是这个人穿什么衣服在什么场景里而是这个像素往哪个方向动了多远。这个设计的高明之处在于它把识别是什么和识别怎么动这两件事彻底拆开分别用两个专门的网络去解决最后再把两边的判断结果加权融合。这就像你请两个专家一起看一段监控录像来判断可疑行为。一个专家专门看画面里出现了什么人、什么物品、什么场景另一个专家什么都不看只盯着一张由计算机生成的运动轨迹图专门判断动作的节奏和方向是否可疑。两个人各自给出判断最后综合两人的意见做决定。如果只让第一个专家单独判断他可能会因为背景像案发现场就草率下结论忽略了动作本身其实很正常如果只让第二个专家判断他完全不知道背景是商场还是仓库可能把正常的挥手误判成异常行为。两个人配合才能弥补各自的信息盲区。论文里的实验数据直接验证了这个设计的价值。如果只用空间流也就是只看普通图像不看运动信息在UCF101上的准确率是72.6%。这已经比之前很多深度学习方法好了不少但离密集轨迹的88%还差了15个百分点。如果只用时间流也就是只看光流不看图像内容准确率反而达到了83.7%比单独用空间流还高出11个百分点。这个结果本身就很说明问题。运动信息对动作识别的贡献比外观信息更大这也解释了为什么之前那些只处理单帧图片的深度学习方法会那么差它们其实是在用错误的信息源做一件需要运动信息才能做好的事。而当两条流结合起来准确率跳到了88.0%第一次真正追平了密集轨迹这个手工特征方法的天花板。数据太少怎么办借别的数据集练手除了双流架构本身这篇论文还解决了另一个现实问题就是训练数据不够用。当时的动作识别数据集普遍偏小UCF101虽然名字里带101个类别但每类视频数量有限用这么小的数据量去训练一个深层卷积网络很容易出现过拟合过拟合*模型在训练数据上表现很好但在没见过的新数据上表现很差的现象通常是因为训练数据太少或模型记住了细节而没学到规律。Simonyan和Zisserman的解决办法是引入多任务学习让网络同时在两个数据集上训练一个是UCF101另一个是当时另一个规模更大的动作识别数据集HMDB51。网络共享大部分参数只在最后针对不同数据集设置独立的分类输出层。这个做法的逻辑是尽管两个数据集的类别标签体系不完全一样但它们背后需要识别的底层运动模式是相通的跑步的光流特征在这个数据集和那个数据集里应该长得差不多。让网络同时从两份数据里学习相当于变相扩大了训练数据的规模减轻了单一数据集数据量不足带来的过拟合风险。这有点像一个学厨师的学徒如果只在一家川菜馆学徒接触到的食材和手法有限可能学得比较片面容易在遇到没见过的菜时手忙脚乱。但如果让他同时在川菜馆和粤菜馆轮流学习虽然两家馆子做的菜完全不同但刀工、火候控制这些基本功是通用的两边的训练会互相强化这些底层技能最终无论去哪家馆子做菜基本功都更扎实。如果不这样做只靠一份小数据硬训模型很容易学到一些数据集里的偶然噪声当成规律遇到新视频就露馅。多任务训练之后在HMDB51上的准确率也提升到了59.4%相比之前的方法有明显进步。下面是论文里几个关键结果的对比| 方法 | UCF101准确率 ||---|---|| 密集轨迹手工特征 | 88.0% || 单独空间流 | 72.6% || 单独时间流 | 83.7% || **双流网络融合** | **88.0%** |这张表最直观地说明了一件事深度学习不是靠单一网络硬碰硬打赢了手工特征而是靠拆解问题、分而治之的架构设计追平了手工特征。这在当时是个标志性的时刻某种意义上不亚于AlexNet在图像分类上的突破因为它第一次证明了深度学习在视频领域也能不输给经过多年打磨的手工方法。后来的人怎么接着往下做这篇论文之后双流的思路被无数后续工作继续发展。2016年Feichtenhofer等人发表的工作提出了更精细的时空融合方式探索在网络的不同层就把空间流和时间流的信息融合起来而不是等到最后一步才融合这在多个数据集上把准确率又往上推了一截。2017年DeepMind团队提出的I3D模型把双流网络的思路和三维卷积结合起来直接用能处理时间维度的三维卷积网络代替原来的二维卷积网络分别处理RGB和光流同时借助Kinetics这个更大规模的视频数据集做预训练把动作识别的准确率推到了新的高度在UCF101上超过95%。这项工作也彻底证明了双流架构里分别处理外观和运动信息这个核心思想的持久生命力即便主干网络从二维换成了三维这个基本框架依然有效。再往后时间流依赖预先计算光流这件事本身也被质疑和改进因为计算光流本身开销不小,而且限制了模型端到端训练的灵活性一些后续研究开始尝试让网络自己学习运动表示,不再依赖传统光流算法作为中间步骤,这也是这篇论文留下的一个尚未彻底解决的问题。写在后面读这篇论文的时候最触动我的其实不是双流架构本身的巧妙而是那个83.7%和72.6%的对比。单独用光流的效果反而比单独用图像的效果好这么多这在直觉上是有点反常的我们平时判断一个动作第一反应往往是看这个人的姿势像不像跑步而不是去想象一张抽象的运动矢量图。但数据摆在那里运动信息确实比外观信息更本质地决定了这是什么动作。这多少提醒我们一件事,有时候我们以为最重要的信息其实只是最容易被观察到的信息而不是最有效的信息。视觉上最显眼的东西未必是判断问题的关键变量这个道理放在动作识别之外的很多场景里似乎也说得通。另外一个值得留意的细节是这篇论文没有去发明一种全新的更强的神经网络结构用的还是当时比较标准的卷积网络设计真正的创新完全落在了怎么把问题拆开、怎么把不同来源的信息喂给合适的子网络这个架构层面的思考上。有时候突破不来自更复杂的模型而来自更清醒地想明白问题到底需要什么样的输入。那么下一个问题是如果运动信息比外观信息更重要为什么后来的模型没有彻底抛弃RGB图像只用运动信息去做动作识别QAQ1双流卷积网络是什么A双流卷积网络是Simonyan和Zisserman在2014年提出的视频动作识别方法用两个独立的卷积神经网络分别处理RGB图像和光流场再融合两者的预测结果第一次让深度学习在动作识别准确率上追平了手工特征方法密集轨迹。Q2为什么只看视频里的单帧图像识别不出动作A因为动作的本质是随时间变化的运动过程单张静态图片只能捕捉到某个瞬间的姿态缺少连贯的运动信息很容易把不同的动作混淆比如很难区分跳绳和原地起跳。Q3双流网络里的时间流为什么比空间流效果更好A论文实验显示单独用时间流处理光流场的准确率是83.7%比单独用空间流处理RGB图像的72.6%高出11个百分点说明运动信息对判断动作类型的贡献比外观信息更大。

相关新闻

Haskell finite-fields 库实战:有限域算术从原理到 Reed-Solomon 编码

Haskell finite-fields 库实战:有限域算术从原理到 Reed-Solomon 编码

简介&#xff1a;这是一份面向Haskell开发者与密码学、代数几何学习者的有限域算术实现库&#xff0c;聚焦在类型安全与工程可用性之间寻找平衡。包内已实现通用素数字段、小素数字段&#xff08;p < 2^31&#xff09;、基于Conway多项式预计算表的小型Galois域&#xff0c;…

2026/10/15 0:34:33 阅读更多 →
JavaWeb订餐系统实战:从压缩包到业务闭环的完整拆解

JavaWeb订餐系统实战:从压缩包到业务闭环的完整拆解

简介&#xff1a;这是一套基于JavaWeb技术实现的必胜客在线订餐系统完整项目源码&#xff0c;面向正在学习JavaWeb开发、需要课程设计或毕业设计参考的开发者。项目模拟真实餐饮订餐流程&#xff0c;涵盖用户注册登录、菜单浏览、购物车、下单支付与订单管理等前台功能&#xf…

2026/10/15 0:33:32 阅读更多 →
随机波浪谱分析:基于自相关函数法的MATLAB实现与工程实践

随机波浪谱分析:基于自相关函数法的MATLAB实现与工程实践

在海洋工程和船舶设计里&#xff0c;随机波浪谱分析是一门绕不开的基础功课。拿到一条波面升高时间序列&#xff0c;如果只做时域统计&#xff0c;等于把五颜六色的频谱强行压成一团灰度。同样的有效波高和方差&#xff0c;能量集中在0.1Hz附近的涌浪与散布在0.3~0.5Hz的风浪&a…

2026/10/15 0:33:32 阅读更多 →

最新新闻

Apollo-11 自动化任务调度框架:状态机与插件化设计实践

Apollo-11 自动化任务调度框架:状态机与插件化设计实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 1:13:56 阅读更多 →
微信积分商城H5落地指南:授权、账务与并发防超卖全解析

微信积分商城H5落地指南:授权、账务与并发防超卖全解析

简介&#xff1a;这是一套面向移动端微信积分兑换商城的H5项目源码&#xff0c;定位于帮助开发者快速搭建具备签到、游戏积分、代金券兑换等功能的积分商城页面。基于HTML5技术实现&#xff0c;适配手机微信环境&#xff0c;适用于电商运营、会员营销等场景&#xff0c;也适合前…

2026/10/15 1:13:56 阅读更多 →
大数据驱动的人工智能医疗:从数据治理到临床落地的实践指南

大数据驱动的人工智能医疗:从数据治理到临床落地的实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 1:13:56 阅读更多 →
NumPy学习指南:从ndarray到广播,掌握高效数组计算

NumPy学习指南:从ndarray到广播,掌握高效数组计算

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 1:13:56 阅读更多 →
漂亮通用界面:设计令牌与组件化的多项目UI工程路线

漂亮通用界面:设计令牌与组件化的多项目UI工程路线

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 1:13:56 阅读更多 →
C#自动更新程序源码:客户端软件安全升级的架构与实现要点

C#自动更新程序源码:客户端软件安全升级的架构与实现要点

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 1:12:55 阅读更多 →

日新闻

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

Docker Compose 容器化部署 ChirpStack LoRaWAN 网络服务器实战

1. 为什么选择容器化方式部署 LoRa 网络服务LoRa 物联网项目落地时&#xff0c;网络服务器是整个链路的核心枢纽。它负责接收网关上报的数据包、完成去重与解密、再把有效载荷分发给上层应用。早期大家习惯把网络服务器直接装在物理机上&#xff0c;依赖一堆系统库和特定版本的…

2026/10/15 0:00:46 阅读更多 →
共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

共享LLM服务下的跨模型自动扩缩容:Kubernetes实战与避坑指南

1. 共享推理服务里&#xff0c;扩缩容到底难在哪做过大模型推理服务部署的人&#xff0c;大概都经历过这样的场景&#xff1a;一个团队共用一套推理集群&#xff0c;A 业务跑的是 7B 的小模型&#xff0c;B 业务跑的是 72B 的大模型&#xff0c;C 业务白天流量高、晚上几乎归零…

2026/10/15 0:00:46 阅读更多 →
Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

Systemd 启动阶段根文件系统只读之谜:fstab 与 remount-fs 服务深度解析

1. 引子&#xff1a;一次内核恐慌引发的追查先从一个真实场景说起。某次我给一台老旧的嵌入式设备折腾系统裁减&#xff0c;为了把启动时间压进两秒以内&#xff0c;我手贱地把一串自认为“没用”的 systemd 服务给 disable 了&#xff0c;其中就包括systemd-remount-fs.servic…

2026/10/15 0:00:46 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介&#xff1a;基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码&#xff0c;面向计算机相关专业课程设计与期末大作业学生&#xff0c;以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程&#xff0c;…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程&#xff1a;键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化&#xff0c;十个新手有八个栽在"往输入框里填东西"这件事上&#xff1a;要么填不进去&#xff0c;要么填了一半&#xff0c;要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程&#xff1a;阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀&#xff1a;什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面&#xff0c;跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →