0%

完成LSTM

numHiddenUnits = 200

maxEpochs = 200

miniBatchSize = 100

rmsprop

‘InitialLearnRate’, 0.001

20210922101444


numHiddenUnits = 200

maxEpochs = 200

miniBatchSize = 100

adam

‘InitialLearnRate’, 0.001

20210922152552


numHiddenUnits = 200

maxEpochs = 200

miniBatchSize = 100

adam

‘InitialLearnRate’, 0.0001

20210922162306

(学习率太低了)


numHiddenUnits = 200

maxEpochs = 200

miniBatchSize = 50

adam

‘InitialLearnRate’, 0.001

‘LearnRateSchedule’, ‘piecewise’

‘LearnRateDropFactor’, 0.5

‘LearnRateDropPeriod’, 50

20210923190541

(分段调节的学习率,效果反而不好)

acc = 0.9674


numHiddenUnits = 200

maxEpochs = 200

miniBatchSize = 50

adam

‘InitialLearnRate’, 0.001

20210923193326

acc = 0.9801


numHiddenUnits = 200

maxEpochs = 200

miniBatchSize = 50

adam

‘InitialLearnRate’, 0.001

‘LearnRateSchedule’, ‘piecewise’

‘LearnRateDropFactor’, 0.5

‘LearnRateDropPeriod’, 100

20210923195915

(100epoch之后学习率减半,acc稍微低一点点)

acc = 0.9772

函数重名bug

workspace输入which strsplit -all查找函数strsplit的地址会发现两条记录:

D:\chrome下载\HMM\HMMall\KPMtools\strsplit.m

D:\MATLAB\R2020a\toolbox\matlab\strfun\strsplit.m % Shadowed

说明HMM里和toolbox里都有一个名为strsplit的函数,导致函数重名问题。

该bug会在play并且调用hmm时触发,导致程序报错。如果只play采集数据不跑hmm的话不会报错,用已经采集好的数据跑hmm也不会报错。

解决方法是把其中一个工具箱的函数名改掉,但是要找到所有调用该函数的地方改名,暂时还没解决掉。。

数据采集

数据编号 分类动作 分类编号
20210827_182636 前后移动 1
20210827_183214 左右移动 2
20210827_183657 上下移动 3
20210827_184027 左右倾斜 4
20210827_184337 前后俯仰 5
20210827_184709 左右旋转 6
20210827_194237 前后移动 1
20210827_194606 左右移动 2
20210827_195119 上下移动 3
20210827_195413 左右倾斜 4
20210827_195739 前后俯仰 5
20210827_200120 左右旋转 6
20210827_200819 前后左右上下(平动) 7
20210827_201313 倾斜俯仰旋转(转动) 8
20210827_201808 随意平动 7?
20210827_202339 随意转动 8?

TODO

在某些情况下,尤其是移动比较剧烈(比如太左太右或者太高)时,两个定位点会移动到z轴上半轴,比如20210827_183214中后20s的数据。

把每个数据编号都建立一个文件夹应该比较好。

是否可以直接模拟生成数据?

代码构造一个人头让其移动,记录下来双耳的位置作为数据,这样可以获得大量训练集。

hmm环境配置

用hmm之前要添加一下地址:addpath(genpath(‘D:\chrome下载\HMM\HMMall’))

TODO

提高cal_pos解方程的速度,至少要提高到每秒10帧

问题

牛顿迭代就一定会用到雅可比矩阵,雅可比矩阵就一定会用到符号计算,用到符号计算就一定会很慢。。

20210826202638

20210826202715

用HMM完成分类任务

20210825170754

只用了单边位置的数据进行分类,理论上左右发射端的位置是非常对称的。主要是因为HMM的输入好像只能是一维的?

数据长度为10时正确率在90%左右

把数据长度改成20能达到97%的准确率

20210825181612

步长设为5准确率也有96%

但是步长设为10准确率就降到85%zuoyou

步长设为20准确率会降到65%

TODO

  1. 优化HMM
  2. 把HMM训练好的参数保存下来
  3. 把HMM和之前的代码结合起来
  4. 每次采集数据时要新建一个文件夹

采集了6个动作的数据

20210824223442

之后把这6组数据的pos算出来,进行轨迹识别。

用HMM对轨迹进行分类

TODO:

  1. 把采集到的训练数据的pos计算出来
  2. 对数据集进行增强,按照每1秒一段切分(0.9s重叠每个动作大概可以切出1000个数据)
  3. 对数据集进行处理,初始位置移动到坐标原点
  4. 还可以继续进行数据增强,比如把轨迹进行旋转等
  5. 用HMMM训练和分类