MIT实验室Speech2Face模型: 听声音想象人脸,David9的CVPR2019观察

你曾经有没有根据声音预测人的面容?或者,看一个陌生人一面,你在心里其实已经预测了他说话的声音?

今年CVPR2019上的Speech2Face模型就试图还原这一过程。虽然David认为模型上没有什么新意,但是这篇文章的一些实验结论很有意思。

来自:https://arxiv.org/abs/1905.09773

模型上中规中矩,先预训练Face encoderdecoder(灰色块部分),让模型可以压缩脸部特征并根据脸部特征向量还原出图像。然后,引入Voice Encoder,把音频一样压缩到特征向量(红色块部分),这个音频特征向量应该可以用来很好地预测对应的人脸,如果预测不好,就应该增加Loss,反向反馈训练。

了解原理之后,最有意思的其实是一些统计实验结论, 继续阅读MIT实验室Speech2Face模型: 听声音想象人脸,David9的CVPR2019观察

CVPR2019观察: 谷歌大脑的”自动数据增强”方法及其前景,David9划重点

如果你要帮助别人学习,你应该让他多犯错,还是让他少出错?— David 9

试想这样一个未来,所有的AI模型构建的范式都分为两部分:1. 从自然界自动收集所有有利于构建模型的信息数据,2. 自动构建一个端到端模型,处理某一任务。

如果上述两个智能体足够智能不断进化达到一个较高的智能水平,那么我们今天提到的自动数据增强(AutoAugment)也许是原始雏形。

虽然David认为模型本身就应该含有大量的信息不应该是外部“强加”给模型大量信息(人类的基因不正是这样?)。同时Google利用大量的机器、实验和工作发的这篇论文普通AI从业者想复制比较困难,但有几点有意思的地方David想指出一下,

1. 虽然自动数据增强的训练模型较难重现,但是google已经公布用于检测的自动数据增强方法,其代码我们可以直接拿来用:https://github.com/tensorflow/tpu/blob/master/models/official/detection/utils/autoaugment_utils.py

并且提供了不只一种增强数据策略,如下只是其中一种策略:

def policy_v1():
  """Autoaugment policy that was used in AutoAugment Detection Paper."""
  # Each tuple is an augmentation operation of the form
  # (operation, probability, magnitude). Each element in policy is a
  # sub-policy that will be applied sequentially on the image.
  policy = [
      [('TranslateX_BBox', 0.6, 4), ('Equalize', 0.8, 10)],
      [('TranslateY_Only_BBoxes', 0.2, 2), ('Cutout', 0.8, 8)],
      [('Sharpness', 0.0, 8), ('ShearX_BBox', 0.4, 0)],
      [('ShearY_BBox', 1.0, 2), ('TranslateY_Only_BBoxes', 0.6, 6)],
      [('Rotate_BBox', 0.6, 10), ('Color', 1.0, 6)],
      [('Color', 0.0, 0), ('ShearX_Only_BBoxes', 0.8, 4)],
      [('ShearY_Only_BBoxes', 0.8, 2), ('Flip_Only_BBoxes', 0.0, 10)],
      [('Equalize', 0.6, 10), ('TranslateX_BBox', 0.2, 2)],
      [('Color', 1.0, 10), ('TranslateY_Only_BBoxes', 0.4, 6)],
      [('Rotate_BBox', 0.8, 10), ('Contrast', 0.0, 10)],
      [('Cutout', 0.2, 2), ('Brightness', 0.8, 10)],
      [('Color', 1.0, 6), ('Equalize', 1.0, 2)],
      [('Cutout_Only_BBoxes', 0.4, 6), ('TranslateY_Only_BBoxes', 0.8, 2)],
      [('Color', 0.2, 8), ('Rotate_BBox', 0.8, 10)],
      [('Sharpness', 0.4, 4), ('TranslateY_Only_BBoxes', 0.0, 4)],
      [('Sharpness', 1.0, 4), ('SolarizeAdd', 0.4, 4)],
      [('Rotate_BBox', 1.0, 8), ('Sharpness', 0.2, 8)],
      [('ShearY_BBox', 0.6, 10), ('Equalize_Only_BBoxes', 0.6, 8)],
      [('ShearX_BBox', 0.2, 6), ('TranslateY_Only_BBoxes', 0.2, 10)],
      [('SolarizeAdd', 0.6, 8), ('Brightness', 0.8, 10)],
  ]
  return policy

2.  强化学习和GAN哪个更好? 继续阅读CVPR2019观察: 谷歌大脑的”自动数据增强”方法及其前景,David9划重点

David9的ICML2019观察:Tesla自动驾驶建模是如何搞定多任务学习的?实时多任务,autopilot自动导航

人类在做其他看似不相关的事情时,会给手头的任务带来灵感; 模型也应如此,让它在训练时做其他任务,会对它的实际预测带来好处(正则约束)  — David 9

多任务模型David不是第一次讲了,但是之前涉及的是强化学习自然语言领域。视觉领域,多任务学习就更有意思了。自动驾驶是该领域的常见应用,不但要求准确率99%+极低延时,而且是一个开阔的“无限游戏”,正如特斯拉AI负责人Andrej Karpathy在ICML2019发言上提到的,其复杂性是多方面的,

遇到的车况可能很复杂:

来自:Andrej Karpathy的演讲《Multi-Task Learning in the Wilderness》,见文末参考文献

摄像头的视觉角度也很复杂(8个方向):

来自:Andrej Karpathy的演讲《Multi-Task Learning in the Wilderness》,见参考文献

更复杂的是,自动驾驶天生就是多任务的:

来自:Andrej Karpathy的演讲《Multi-Task Learning in the Wilderness》,见参考文献

在你开车时,你的眼睛和大脑要同时分析移动的车辆,静态的路灯,斑马线,路标,警示牌,等等。。。甚至loss函数的设计都是复杂的,因为一些任务就是比一些任务更重要(我们要重点关注突然闯红灯的行人)

要适应如此复杂多变的环境并且要求实时导航,如何去建模真的很有挑战性。首先,你不可能对每个任务都建一个模型

来自:Andrej Karpathy的演讲《Multi-Task Learning in the Wilderness》,见参考文献

这样哪怕可行开销也太大(除非你想多送用户几块gpu或硬件资源)。另一个极端是所有任务都合并为一个模型继续阅读David9的ICML2019观察:Tesla自动驾驶建模是如何搞定多任务学习的?实时多任务,autopilot自动导航