3pm

来源:互联网 发布:php开源社区 编辑:程序博客网 时间:2024/05/17 02:20


问题五模型建立与求解

5.1 问题描述及分析

问题五要求能够通过不同角度视频来提取前景,我们可以分析出这些多个角度的视频场景有这些特点或难点:

  1. 同步性:虽然是从不同角度拍摄,但具有时间维度上的同步性,也就是视频A的第i帧和视频B的第i帧是统一时刻不同角度的场景,这一点非常重要,我们随后将围绕这个特点进行建模。
  2. 前景提取:由于有多个角度,不难发现在某个角度的某个时刻,前景可能被其他背景事物遮挡抑或者混淆,就造成了提取困难,假如只有这一个角度的视频数据,那么确实难以提取,但是可以从利用多个视频的场景相关性,来帮助提取单个角度难以识别的前景。
  3. 关于人或其他运动物体的特点:假设考虑一个多角度场景中提取人物运动的问题,由于视角问题,有的角度视频中该人运动幅度可能微乎其微,但是在另一个角度视频中可能很明显。这是由于拍摄的角度,以及摄像机放置距离人物或其他运动物体距离的差异造成的。
    以上三个问题是区别于一般前景提取的特点,这既是难点,也是可以加以利用的入手点,下面就将从场景相关性着手来建模。

    5.2模型建立

    5.2.1 视频场景的相关性假设

    假设现在考虑三个角度拍摄的视频,在时刻t,我们得到了来自不同视频的三帧图像数据矩阵AtBtCt
    现在我们假设,场景A和场景B的视角差距,相比较场景A和场景C来说要较为接近,同样的场景B和场景C的视角差距,相比较场景A和场景C来说要较为接近。
    那么我们现在考虑如下单应性矩阵线性变化:

    {AHAB=BBHBC=C

    这启示我们,即使场景A和场景C视角相差很大,但是由于他们都和场景B很接近,所以利用单应性矩阵,我们也可以建立场景A和场景C的线性关系。
    但是难点在于,由于视角相差终归比较大,所以三帧图像数据矩阵AtBtCt之间的相关性远远不如来自同一个视频不同帧的相关性,利用整个图像的像素信息求取单应性矩阵会使得线性关系不明显。

5.2.2 视频场景相关性求取模型

在实际计算中,我们可以先进行特征提取和特征匹配来找到两个不同角度摄制场景中相关性较强的点。可以利用SURF 特征提取来实现,这主要是考虑到,同角度摄制场景中,由于视角差异大,尺度不同问题很明显。
计算机视觉中,引入尺度不变的特征,主要的思想是每个检测到的特征点都伴随着对应的尺寸因子。当我们想匹配不同图像时,经常会遇到图像尺度不同的问题,不同图像中特征点的距离变得不同,物体变成不同的尺寸,如果我们通过修正特征点的大小,就会造成强度不匹配。为了解决这个问题,提出一个尺度不变的SURF特征检测,在计算特征点的时候把尺度因素加入之中。
SURF 特征提取及匹配的主要步骤包括:
(1)特征点提取
首先建立积分图像,然后利用盒子滤波器进行图像滤波,利用 Hessian 矩阵确定候选点,然后进行非极大值抑制,得到极大值点;
(2)特征点描述,在特征点各子区域上计算 Haar 小波响应,并记录其中 4 种以生成 4×4×4=64维特征描述符。
(3)特征点匹配,这是利用两个图之间特征点向量差异大小进行匹配。
在提取了特征点并匹配之后,只取他们的位置信息,把这些特征点位置写成如下2×n的矩阵:

TA=(x1,y1)(x2,y2)...(xn,yn)TB=(x1,y1)(x2,y2)...(xn,yn)

其中n代表有n个匹配点。
现在利用TATB来求取场景A和场景B的线性关系,就精确很多。
TAHAB=TB

5.2.3 利用相关性建立前景提取模型

现在我们要建立一个依赖相关性的提取模型,我们希望相关性能辅助改进前景提取。
首先我们提出模型假设:假设,上一步中我们提取到的匹配特征点,理想地认为都来自于运动事物。这个假设是建立在,不同摄像机大多数的时间都捕捉到运动事物这个设想上的。比如问题五给的示例视频,场景中都出现了人物,虽然背景也有很多相似,但是人物被从各个角度拍摄,显然是各个视频的中心。
我们可以来看一下利用光流法绘制较优匹配特征点轨迹的图像,这上面的匹配点均为运动点,所以假设是合理的。

这样一来,我们基于以上的假设,可以认为,再次利用求解出的相关性矩阵来映射,是可以把不同场景中的运动事物捕捉到的。
那么我们现在不妨对场景B来建立一个前景提取模型:

FA=AAbackFAHAB=F0F=BBbackPoint=PointFPointF0

其中,我们先用前面模型的方法计算场景A这个时刻的前景FA,再求得由FA到场景B的映射F0,另一边,我们计算得到场景B此时前景F,最后,我们使用了交集操作,取得了前景FF0点的前景交集,这也即是我们的前景提取结果。
上述模型可以这样理解,依然是建立在运动物体会很好地匹配的假设上,那么,由场景A前景到场景B的映射结果,应该会得到场景B中动点的前景,最后将它与场景B中前景取交集并再一次阈值化处理,得到的可以认为是较为精确的前景结果。

5.3模型计算

我们以问题五中所给的视频,来验证这个模型。问题五所提供的视频包含四个角度,是同一场景相隔分布在方形房间四角的摄像机拍摄的视频。内容是几个人物依次在画面中来回走动,需要检测出走动的人。
检测结果如下所示。

5.4模型评价

通过提取结果可以看到,该模型的识别前景效果不错,证明特征点匹配时,确实主要将画面公共区域的人物匹配上了。取交集的操作可以过滤掉映射前景和原始前景中各自误测的点。
模型缺陷:由于是取交集操作,虽然可以过滤掉映射前景和原始前景中各自误测的点,但是也难免过滤掉了一些真值,比如人物的部分身体没有被作为最终前景。并且该模型比较依赖特征点检测的准确程度,其他时候可能会有误差。

F={f1,f2,f3,...}

其中fi代表第i帧的前景提取结果。
#### 6.2.2特征提取:
在设计特征模型之前,不妨可以先想想我们对它的期望:
1.我期望它是利用不同帧之间的线性相关性计算出来的,这样它就包含了视频的线性特征;
2.我期望这个特征方便计算,它最好是一个一维向量,因为我们接下来可能要用它来求解分类器,如果它是一个矩阵,那么运算的异常情况可能更多,比如奇异矩阵抑或者过于稀疏等等。所以我希望它是一个向量。
3.我期望它和视频输入的大小无关。否则我们的特征数据维度就难以统一,这会为我们接下来设计分类器模型制造困难。
这样一来,我们就相当于有了一些约束,比如我们通过第一个期望“线性相关性”就不难想到利用之前模型引入的单应性矩阵来帮助建模。
首先我们将提取的图像大小都调整为256×256,这样我们就得到了一个前景矩阵F256×256
现在我们来考虑第t时刻的前景Ft,以及在它n帧时间之前的前景Ftn及在它n帧时间之后的前景Ft+n
再接下来的分析中我们会发现我们之所以取n个帧的间隔,是为了使两帧之间的线性变化明显一些。
现在我们假设tn时刻到t时刻存在线性变化的单应性矩阵H:
Ft=FtnH

求解出H,接下来利用H计算一个前景映射,可以称之为预估前景:
F0=FtH

那么我们可以认为预估前景F0和真正的前景Ft+n的差异就是不同图的特征。这样说的原因可以这样理解,比如队列模型,它的线性性很强,那么我们可以认为其预估前景F0和真正的前景Ft+n的差异就不会大,而人群骚乱的预估和真正前景的差异就会更大。这样,我们可以认为,我们的分类器模型可以根据这种差异程度,也就是这个特征,来有效分类视频事件。
那么,我们的特征提取模型可以描述为:
Ft=FtnH

T=FtHFt+n

现在得到的特征T仍然是一个矩阵,我们稍稍处理一下,将它每一行依次拼接到第一行后面,就变成了一个1×256×256的向量:
T1×256×256=(T11,T12...Ti1,Ti2)

我们对每隔n个帧即一个步长做以上特征提取,最后取平均值即为最终的特征向量。
这就是特征提取的建模过程;

6.2.3分类器模型:

我们仍然用自顶向下的思维来设计分类器模型,也就是我们先设定它的功能框架,再完成细节。
首先我们来讨论一下对这个分类器模型功能的期望:
1.我们期望这是一个单一分类器,它能判断一个视频是不是某特征。比如我们输入一个有人群游行的模型,它能输出这是否是游行类别。它不需要关心其他特征是否含有。最后我们组合这些单一分类器,得到一个等效的多分类器,这样做的好处是,它可以判断混杂的事件,比如“爆炸”和“人群逃窜”混杂的视频,它能识别两个特征。
2.我们期望它的输出很简单,最好就是一个数,比如1或者-1,代表是否。
那么结合上一个功能期望,它的输出应该是:

Y=(y1,y2...yi...)

这个向量的第i个值yi表示判断这个视频是否含有第i个特征。
3. 我们期望这个模型能够更新参数,亦即训练模型。这一点很重要,根据问题六的提示,我们需要收集各种视频的素材,我们在用模型进行分类之前,需要用这些已知类别的视频,来更新我们模型里的参数,再利用这些训练好的模型,去预测其他视频的类别。

Created with Raphaël 2.1.0初始模型用已知类别的视频来训练将测试视频分类正确?训练好的模型yesno

现在考虑本问题第二个模型,特征提取输出的特征T1×n,我们需要使用这个向量来训练和预测。结合我们上诉期望,可以考虑一个简单的线性分类模型:

Ymn=y1y2...ym=ω1T1+b1ω2T2+b2...ωmTm+bm

其中m代表需要分类m个特征,n即特征向量维度。
现在我们不妨单独讨论其中一个子分类器:
y=ω⃗ T⃗ +b

{y1y1

模型已经设计完成,现在还要设计模型怎么通过已有的视频进行参数更新。
现在考虑这样一种情况,我们已经收集了某类别A的N个视频,这些视频里有的有事件A,有的没有,有事件A的,我们称之为正例,没有的我们称之为反例,通过前面模型的前景以及特征提取,我们得到这样一个数据集:
(T1,y1),(T2,y2),...,(TN,yN)

其中yi{±1}代表第i个视频是否具有该特征,1代表有,-1代表没有。
我们假设,这些训练集是线性可分的,那么我们的训练模型可以描述为求解:
s.t.{(ω0,b0)=argmin(ω⃗ ,b)||ω⃗ ||2iyi(<ω⃗ ,Ti>+b)1

输出
ω⃗ ^=ω0||ω⃗ ||b̂ =b0||ω⃗ ||

即为这一批数据训练后的参数更新。
以上就是分类器模型的分类方法和它的自更新模型。这是一个较为理想的线性分类模型,我们可以称之为高维线性分类模型。

6.2.3分类器模型训练的改进:

但是在设计我们分类器训练模型的时候,我们假设了训练集都是线性可分的,也就是那个约束是有解的,但是这其实是一个很强的假设,在很多情况下可能以无解。
也就是说,在线性可分的情况下,全部用于训练的视频都能被正确地分类,但是由于我们的视频分辨率是256×256也就是我们得到的训练输入特征向量的维度是256×256这么长,这是在一个很高维的空间进行线性优化求解,这意味着我们要求的分类器参数很难对所有训练集满足以下条件:

iyi(<ω⃗ ,Ti>+b)1

根据这个分析,那么我们需要做的改进其实就是放宽这个条件,得到一个比上诉分类器稍弱一点但是可以求解得到更新参数的分类器。我们可以考虑一个正实数s使得参数只需满足:
iyi(<ω⃗ ,Ti>+b)1s

但是考虑到对每一个用于训练的视频,其不满足这个条件,即难以求解的程度不一样,所以统一设置一个s不够精确,所以我们可以进一步考虑引入一个S=(s1,s2...sN)来进行改进,也就是:
iyi(<ω⃗ ,Ti>+b)1si

那么新的训练参数方式可以描述为:
s.t.min(ω⃗ ,b,S⃗ )(λ||ω⃗ ||2+1NNi=1si)iyi(<ω⃗ ,Ti>+b)1si

其中λ为一个可以调节的正数,用以约束最小化优化中参数的权重。
改进效果展示及模型效果及模型评价未完待续。

原创粉丝点击