记录一下训练前对数据的处理–数据填充和采样
例如:对每个视频数据的处理
数据填充:
1.使用np.vstack在原数据下面竖着堆叠
np.vstack((要堆叠的数据, np.zeros((想要的长度-现有数据的长度,列数))))
可以自己看看np.stack和np.hstack方法
2.使用np.pad在数据的周围或者任意一边进行数据填充
np.pad(想要填充的数据,((frow,arow),(lcol,rcol)),'constant', constant_values=((num,num),(num,num)))
上面代码的意思:((frow,arow),(lcol,rcol))指在数据的 前面多少行、后面多少行、左边多少列、右边多少列 填充数据,是位置信息。 ‘constant’是填充模式是常数模式,深度学习都用这个模式,别的模式可以自己搜一下。constant_values是要填充的数据,与前面对应,是数据信息。
如果想在周围添加均匀的数据,那么位置信息使用(num1,num2)即可,num1表示前面和左边,num2表示下面和右边,数据信息直接(num1,num2)
如果是一维数组直接用(left,right)作为要添加的位置信息。
3.使用np.linespace和np.interp进行插值
xloc = np.arange(frames.shape[0])
new_xloc = np.linspace(0,frames.shape[0],num=numpoints)
// new_xloc = np.linspace(start,end,num=numpoints)
在start和end之间生成一个均匀的序列,共有numpoints个
np.interp(new_xloc,xloc,data)
new_xloc是新生成的x坐标序列,xloc是原始坐标序列,data是对应的一行数据。注意,一行数据是同一关节不同时间的x或y或z位置
对自己的数据进行插值时,记得变成合适的shape
可以看以下例子:
x = np.linspace(0, 2 * np.pi, 10)
y = np.sin(x)
xvals = np.linspace(0, 2 * np.pi, 50)
yinterp = np.interp(xvals, x, y)
plt.plot(x, y, 'o')
plt.plot(xvals, yinterp, '-x')
plt.show()
4.使用np.zeros(shape = ())先固定特征矩阵的大小,然后再改变里面的值
数据采样
1.使用np.sample进行随机采样
np.sample(frames, num):对frames随机采样num行,按照第一维来进行的。
2.直接选择前面的固定帧
可以在提取xyz时,只选择前面多少帧的。
如果已经给定所有帧的xyz位置的纯净版,那么可以直接用[0:想要的帧数,:]进行切片
3.对数据均匀采样