稀疏表示学习(六)
本次主要学习资料是Duke大学Guillermo Sapiro教授的公开课——Image and video processing, by Pro.Guillermo Sapiro 课程。该课程可以在 Bilibili 上找到学习资源。
1. 稀疏建模与视频分类 Sparse Modeling and Classification
本节想说明如何使用稀疏建模为图像和视频的分类任务进行问题建模,尤其是像解决分类和识别任务中非常具有挑战性的问题。
需要使用到监督学习。监督学习的基本思想是我们要收集训练数据以及对应的标签,需要人工进行标注。
对于视频,我们可以选取连续帧,如果有活动,帧之间差别会很大;如果没有活动,帧之间进本没有差别。可以使用这一帧减去上一帧,以便尝试查看每一帧图像中视频中哪些区域确实具有一些活动。我们要做的就是选择 patch 区域,例如 $8 \times 8 \times 5$ (这里选择连续5帧),我们可以看看其中哪个具有较高的能量(基本上有更多的非零系数,或者足够多比较大的系数),这里我们可以定义一个阈值并选择出来那些 patches。有了 patches 我们就可以训练字典。更进一步我们可以为每一类都训练出来一个字典。
然后我们可以把先前所有的字典串联起来,每个字典接一个字典,接一个字典,就像一个一个块一样。然后我们有一个大的整合的字典。我们知道字典中每个 block 代表着不同的类(这里是检测不同的人类活动),并且是已经经过训练的。
当新的视频出现时,我们需要对其进行分类。我们还是先算出来帧差,然后抽取时空三维 patches。对每个具有足够能量的 patch,通过这本字典进行编码。字典的每个块都代表了不同的东西,所以我们用那个字典编码,可以看看字典中哪些区域实际上是被激活的。如果大部分稀疏表示都来源于第二块,那么就是第二类。
尽管我们使用大型的字典进行编码,但该字典是多个字典的串联,那么我们需要观察这本字典中哪个块是最活跃的。
基于预测正确性,我们可以计算混淆矩阵进行性能分析。
如果没有监督信息会怎么样呢?
我们以与刚才相同的方式来学习字典,可以对每一秒的视频使用之前学到的字典进行编码,如果编码向量非常的稀疏,则意味着可以进行良好的编码,那么这本字典对于这个时期而言是非常好的字典。意味着这一秒相较于前一秒并没有改变活动。如果遇到一秒钟,使用以前的字典进行编码得到了非常糟糕的编码,或者根本无法调和出该段视频,或者我需要在字典中使用许多的 atom,这就意味着我的已经更改了活动。首先要做的就是将其称为一项新的活动(构建一个新的类),然后重新训练一个新的字典。然后就可以为每项活动都准备出来一个字典了。
核心就是过去的字典能够很好的编码当前?如果可以,那么他们是同一类;如果不行,则是新的一类。
基于此,我们也可以无监督的比较两个人是否在做同样的一项运动。