createamind / vid2vid

Other
37 stars 21 forks source link

in progress to do.... #3

Open zdx3578 opened 6 years ago

zdx3578 commented 6 years ago

现在vid2vid可以从视频生成视频,下一步是从视频生成速度的序列,采用seqgan https://github.com/LantaoYu/SeqGAN 类似方式进行从视频预测速度的功能。现在cnn网络后面增加了rnn网络进行序列的预测,但是判别器等优化还不完善。 训练数据可以是torcs的运行视频和运行速度的参数,后续就可以吧视频应用与动作的学习了,使用生成模型的方式进行动作的学习(pix2pix seqgan的框架方式训练)。

现在自动驾驶的模拟训练中有一种情况是:我想通过自动驾驶torcs模拟环境的图像视频关联学习到torcs电脑机器人的执行动作,即图片或视频和动作进行关联映射,如果是用生成模型,就是用生成模型从图像或视频进行 动作序列的预测,动作向量是shape为2 的序列,见后面例子,简单起见可以预测车辆跑的速度,速度的shape是1 ,就是单数值的序列,后面有例子。

用视频去预测学习记忆 速度,用视频去预测学习记忆 动作(相关的我认为文字到视频-及视频到文字的学习训练是跟这个相关的),之前的视频学习视频公众号发的是用的pix2pix从conv2d改为conv3d。
我看到 https://www.zhihu.com/question/52602529/answer/155743699 提到seqgan我认为是与序列生成相关的,不知道你认为还有哪些内容及实现是跟我希望实现的很相关?希望能听到你的建议,就是从视频预测速度或从视频预测学习动作序列。

相关文章:

数据: torcs 机器人在赛道跑的图片和相关动作速度等参数都对应的记录了下来了。

动作序列:shape 2 序列长度可调 [[[ 5.52766602 30.67513084] [ 5.56997266 23.14328003] [ 5.54071045 26.12144661] [ 5.47950244 30.49295235] [ 5.3953833 34.40778732]]] 速度序列:shape 1 序列长度可调 , 1大概代表200或300km/hour 0.6 就是 120km/hour 0.6844 0.6790 0.6755 0.6737 0.6724

zdx3578 commented 6 years ago

问题bug: 1 rnn 的输入 cnn的输出维度从42567 4万左右,飙升到40万左右,非常耗内存 2

zdx3578 commented 6 years ago

inprogress 逐渐细化。 动作值位数太长??? 1 数据检查,
数据:数据如何确认合适,数据的合适方式。 单一场景; 多场景;先视频训练再其他功能;
多场景: 数据目录随机,预测难度也加大了。预测也跟随波动。 !!一个场景一个场景的训练。数据也连续不随机。 ?? 数据是1条1条的更新的

数据合适以后,是否 联调验证跑的效果如何??无法验证对抗发散是否是训练过度?

G改进:

-1 图像不动,直接从原始图像训练序列,realA到 fake seqA

0 图像动作一起训练,监督训练-然后对抗训练 0.1 图像直接进rnn 0.2 图像先encoder 然后filter 进rnn。 cnn 后fcn 再进rnn 1 图像动作一起训练 用seqgan 的强化学习方式训练 2 预训练图像,然后encoder 的全部filter,即全部encoder结果 来训练动作,即后面再单独单独训练动作,pretrain and 对抗训练。或 seqgan强化学习训练 预训练unet or resnet 然后取encoder。 3 预训练图像,cnn的filter 用强化学习选取filter 进行训练。 2 filter drfl like seqgan 交大作者。 3 视频单独的renset训练。。 直接unet pretrai video,及video生成效果好了,再生成序列,发现视频生成开始是生成A自己的视频,然后才学习要预测的B的视频。所以可以先进行视频的生成训练,然后进行序列的生成。 ----现在从视频b学习seqb,但是视频一直学习的还是A,所以应该学习seqA,或直接先学习seqA,或fix weight train 先训练视频,再训练seq 4 ddpg的动作输出网络参考 强化学习的动作网络。 5 模仿学习的代码论文

动作输出: 1 监督训练,udaciyt nvidia cnn监督训练方式 2 强化学习方式 3 模仿学习 强化对抗学习??

D改进 判别器:stat action reward
1 vid fakeaction vid 2 vid+action+pred-vid ; 2.1 vid+pred-action+vid ; 2.2 vid+reward+pred-action+vid ; vid+reward+action+pred-vid vid+reward+pred-action+pred-vid

3 seqA+fakeSeqB; or FakeseqA;

视频:1 unet可以各个层的filter一起强化学习选择 2 resnet 3 densenet 改造unet可以输出中间encoder值,unet可以多个目标输出,多分支多目标

jevenzh commented 6 years ago

强化学习引入思路:

  1. 将问题看作是对图像的序列建模,在每一个time step上对当前帧画面进行conv2d特征选择,最后将每一步得到的features concat到一起得到最终的feature maps,提供给其他多任务模块(未来视频预测、速度,动作等序列预测),这样做的好处是:(1)可以保存depth维度不被改变,也就是sequence length (2)可以使用ImageNet预训练好的模型进行初始化,做transfer learning; e.g:input vid shape (1, 3, 10, 255, 255) 拆分为10个(1, 3, 255, 255)组成的画面序列,video encoder分别对10幅图片进行处理得到10个feature maps, 每一个的shape为比如(1, 1024, 7, 7),代表一副图片抽取出了1024个7*7的filters,强化学习在每一步对这1024个filters进行离散化选择,比如选与动作预测最相关对100个作为action generator的输入,即:step-i 对应帧画面被选出的特征f[i]是RNN在step-i 的输入,x[i];

  2. 使用DenseNet代替Resnet/Unet,作为video encoder进行更高效的特征选取,DenseNet最后一层的feature maps作为RL的state,就已经包含了最后一个block每一层的特征,最后一层的features是经过前面blocks去除“噪音”的,并且是较为high-level的特征,有助于增强可理解性;

  3. 强化学习采用Policy Gradient,在每一个time step执行,state就是当前图像经过encoder之后得到的feature maps (1, 1024, 7, 7), {也可以把 RNN generator上一个time step的hidden output加入到state里,但这个更为复杂,后面再作验证} Policy Net: take the state as input and output a prob distribution among all 1024 filters, then, sample top n filters that are most related to a specific seq generation task. {可以使用多个全联接层然后softmax输出一个shape为(1,1024)的tensor}, policy net的rewards和gradients是有序列生成任务中的判别器(e.g SeqCNNDiscriminator)提供,当生成的序列被D判断为真时,reward为+1,反之为-1,gradients就是直接将rewards backprop到policy net上,比如1024个filters选出了100个,那么对应的gradient就是一个shape(1,1024)的tensor,在被选中的100个位置上值为+1/-1, 其他1024-100的位置上都为0,its obvious. 参考 http://karpathy.github.io/2016/05/31/rl/

  4. 安照上诉的思路,在对抗训练的过程中,同时也在训练policy net去学习选择更相关的filters,注意预训练阶段是不能使用RL的,因为没有rewards信号。

  5. 具体的训练思路参考SeqGAN,但可先从简化版开始,参考 https://github.com/suragnair/seqGAN; 整个序列只对应一个reward,不需要像原始版SeqGAN的rollout;

  6. TODO RL部分,得到了(1,1024)的prob distribution之后如何sample filters?这个场景的sample和seqgan是不同的

@zdx3578

zdx3578 commented 6 years ago

1 2d conv 可以作为一种实现,3dconv 会提取动作或运动信息有更高层的信息,另外3dconv可以输出一个平均速度,这个平均速度作为一个简单实现 ,强化学习可以选取预训练的3dconv的某几个filter进行学习记忆,不追求和原始数据的完全一致,现在torcs 数据也不完善。

选与动作预测最相关对100个作为action generator的输入; 这里有两步操作,1 选出哪些filter; 2 这些filter再去进行速度或动作等的预测,这里分别用1000个filter 去预测(seqgan的很多D的判断,那就变成了一步。),发现稳定的20个是最相关的??

2 denset 的引入可以的,不错。

3 我在上面描述的1 和你的3描述是不是不一样?