训练阶段我们采用了分批处理,可以优化部分内存。
原先我们的代码使用一次性载入数据,然后开始若干次迭代,直至收敛。这样保存image与shape的数据矩阵Data就一直占用内存,但实际上,数据集的image与shape 的作用仅仅是计算$\Delta X$和$\Phi$,两变量的定义参考《 Supervised Descent Method and its Applications to Face Alignment》,其实也就是init shape与true shape的差值以及init shape的特征向量。计算完了,Data就没用了。于是我们设想分批处理,每次迭代载入一次数据,用完了就clear。这样就需要载入多次,可能时间上会浪费的比较多,但还好,可以承受。而且每次载入数据的时候,也使用分批处理,一次只载入10幅图片的Image/shape,算完了就clear。
程序中,我们为了增加样本的数量也使用了flip image操作,你可以选择flip or not flip,可以在setup.m中设置
options.flipFlag = 1; % the flag of flipping。
如下为分批处理的代码:
1 | %确定分批的序号 |