通过前面的博文ChaLearn Gesture Challenge_1:CGD数据库简单介绍 分析可以看出,CGD数据库是2011年建立的,且在2012年利用该数据库进行了两轮One shot learning的挑战赛,从官网上给的CGD数据库可以推断出组织方是花费了很大的精力来收集这些数据的,不仅而此,组织方还给出了很多sample代码以及一些对应数据采集界面,方便大家共同扩大该数据库。CGD数据库目前有50000多个关于手势视频,共500个batch,每个batch都是同一个人在相同环境下的手势动作,只是手势内容不同而已。且每个batch都分为训练部分和测试部分。训练部分的每个视频只包含一个手势,而测试视频则包含1~5个手势。且两者都有标注对应的视频是哪个手势。在看过one shot learning的一些文章前脑袋里会有2个疑惑。
1. 该CGD数据库只适应于做One shot learning吗?
答案肯定不是。不过在目前的CGD库的每个batch中的训练部分中,一个手势只对应一个视频,且每个视频只有一个手势。测试部分则可以有多个手势(意味着需要进行不同手势的时间维分割),不同的batch之间只是人和环境不同,且手势类别的标注是独立的,也就是说batch01和batch02中标注为1的那个手势其实不一定是同一个手势。这个也非常容易理解,因为该数据库目前是为了one shot learning而标注的,一个手势只能用一个视频来学习。所以CGD的50000个手势大部分都没有用到,其实只用到了其中的30个视频作为训练即可,其它的都可以用来做测试。因此,在目前的数据库和目前的标注下,确实只能用于做one shot learning,如果想用到其它需要大量数据训练的领域的话(比如deep learning, supervised learning等)就需要重新标注这些手势视频,使它们的标注在不同的batch中保持一致。
2. 2012年的这两轮one shot learning比赛算法流程大致是什么呢?不是说只能用一个数据来训练么,那为什么官方的分析ChaLearn Gesture Challenge_4:one shot learning比赛结果简单分析中还有分类器这一栏呢?
首先因为one shot learning确实只能使用一个样本来训练,所以一般的分类器都会失效。比如说svm,adaboost,random tree等。因为这些类器的设计需要大量的正样本,同时也需要不少负样本,所以就目前只有一个样本的情况,是不可能训练出这些分类器参数的。并且该挑战赛其实是一个多分类问题,那就更需要样本了。因此这里的分类器我们要理解为测试样本的特征和训练样本中的每个样本特征(因为N个手势对应N个样本)进行相似度比较,找出最相似的那个样本手势类别为最终的分类结果。从这些比赛作者提供的论文可以看出,它们大部分都使用最近邻法,这就很容易理解了。
现在来看看one shot learning比赛的大致算法流程:首先肯定是提取出每个batch中训练样本的特征(虽然每个手势只有一个视频),这个特征一般用个向量表示。然后把测试视频中手势的特征向量也提取出来,由于一个测试视频有可能含有多个手势,所以必须先把这些手势视频区域给分割出来,这个分割的准确非常影响最终的评价结果(其实就是相似度测量),因为后面是用编辑距离来评价的,如果分割出的手势个数出现错误,或者位置出现错误,则这个编辑距离会变得很大。从比赛统计结果发现,参赛队伍一般使用candidate cuts的方法来进行分割的。
参考资料: