谷歌牛逼开源!一部手机就能完成3D目标检测,还是实时的那种,并提出AutoML-Zero,只会数学运算就能找到AI算法...

点击“开发者技术前线”,选择“星标????”

让一部分开发者看到未来

量子位 报道 | 公众号 QbitAI

AlphaGo战胜了人类最强棋手,但前提是它先学会了人类棋谱,离不开人类指导。

接着谷歌又推出了AlphaGo Zero,只让AI知道围棋规则,从零开始学下棋,结果再次登上棋艺顶峰。

AI既然能从零学习围棋,是否可以从零开始摸索机器学习算法?当然可以,谷歌大脑团队最新的研究成果已经做到了。

谷歌将这种技术称之为AutoML-Zero,意为“从零开始的自动机器学习”,已经在GitHub开源,并在Arxiv上提交了论文。

而且这一研究还是来自谷歌大脑的Quoc V.Le大神之手。

AutoML-Zero仅使用基本数学运算为基础,从一段空程序开始,即可自动发现解决机器学习任务的计算机程序。

AutoML Zero能发现什么

AutoML是一种实现从数据集到机器学习模型的自动化方法,让你无需高深专业知识,就能自动部署ML模型。

虽说是自动,但现阶段的AutoML还要对搜索空间进行很大的限制,这使我们在使用AutoML的时候仍然需要一些专业知识去设计神经网络的层。

谷歌的目标是让AutoML可以走得更远,仅仅使用基本的数学运算作为构建块,就可以自动发现完整的机器学习算法,进一步降低机器学习的门槛。

尽管AutoML-Zero巨大的搜索空间充满挑战性,但进化搜索还是能发现具有梯度下降的线性回归算法、具有反向传播的二层神经网络。

值得注意的是,可以AutoML-Zero的进化过程也是一个不断“发明”的过程解释进化的算法,它已经找到了双线性交互、权重平均、归一化梯度、数据增强等技术,甚至在某些情况下还发现了类似Dropout的算法。

下面我们先来看看,AutoML在CIFAR-10的二元分类任务上是如何一步步进化的。它首先发现了线性回归,然后找到了损失函数、梯度下降。

随着训练的进行,出现了随机学习率、随机权重、激活函数ReLU、梯度归一化,最后得到了84.06 ± 0.10%正确率的终极算法。

只训练一个二元分类结果还不太具有说服力,作者又用3种极端情况考察了Auto ML。

首先,当样本数量很少的时候,在80个样本上运行100个epoch。AutoML竟然进化出另一种适应性算法,给输入数据加上了噪声,并开始使用Dropout来训练模型。

在快速训练的情况下,只有800个样本和10个epoch,结果导致学习率衰退反复出现,这
是一个我们在快速训练训练机器学习模型中常见的策略。

至于多类别的分类问题,作者使用了CIFAR-10数据集的所有10个类。AutoML进化算法有时会使用权重矩阵的变换平均值作为学习速率。甚至作者也不知道为什么这种机制会更有利于多类任务,虽然这种结果在统计学上是显著的。

上面的所有测试整个过程中,人类没有告诉程序任何先验的机器学习知识。

演示

现在谷歌将AutoML-Zero的程序提交到GitHub,普通电脑只需5分钟就能体验一下它的实际效果。

安装好Bazel后,将代码下载到本地,运行其中的demo程序:

git clone https://github.com/google-research/google-research.git
cd google-research/automl_zero
./run_demo.sh

‍这个脚本在10个线性任务上运行进化搜索。每次实验后,它都会评估在100个新的线性任务中发现的最佳算法。一旦算法的适应度大于0.9999,就选择该算法作为最终结果,将代码打印在屏幕上。

在普通电脑上使用CPU在5分钟内就能发现类似于梯度下降进行线性回归的程序:

 found: 
def Setup():
  s3 = -0.520936
  s2 = s2 * s3
  s2 = dot(v1, v1)
  v2 = s2 * v1
  s2 = s3 * s2
  v1 = s0 * v2
  s2 = s0 - s3
  s2 = -0.390138
  v2 = s2 * v0
  s1 = dot(v1, v0)
def Predict():
  s2 = -0.178737
  s1 = dot(v1, v0)
def Learn():
  s1 = s1 * s2
  s3 = s3 * s2
  s2 = s0 * s2
  s1 = s1 - s2
  v2 = s1 * v0
  v1 = v2 + v1
  v2 = s3 * v0
  v1 = v2 + v1

由人工设计的ML算法是,有兴趣的话,你可以比较这两段程序的差异。

def Setup():
  s2 = 0.001  # Init learning rate.

def Predict():  # v0 = features
  s1 = dot(v0, v1)  # Apply weights

def Learn():  # v0 = features; s0 = label
  s3 = s0 - s1  # Compute error.
  s4 = s3 * s1  # Apply learning rate.
  v2 = v0 * s4  # Compute gradient.
  v1 = v1 + v2  # Update weights.

关于作者

这篇文章的四位作者分别是:Esteban Real、Chen Liang、David R. So以及谷歌大脑的大神Quoc V.Le。

前两位都是有物理背景的博士生。Esteban Real毕业于哈佛大学,拥有物理学士学位和神经科学博士学位。他的研究方向是视网膜的神经编码。

Chen Liang毕业于北京大学物理系,之后获得了西北大学的人工智能和机器学习博士学位,现在是谷歌大脑的一名研究员,研究方向是强化学习、NLP和AutoML。

传送门

论文地址:
https://arxiv.org/abs/2003.03384

GitHub地址:
https://github.com/google-research/google-research/tree/master/automl_zero

谷歌AI良心开源:一部手机就能完成3D目标检测,还是实时的那种

在2D图像中做3D目标检测很难?

现在,拿着一部手机就能做到,还是实时的那种。

这就是谷歌AI今天发布的MediaPipe Objectron,一个可以实时3D目标检测的pipeline。

分开来看:

MediaPipe是一个开源的跨平台框架,用于构建pipeline来处理不同模式的感知数据。

Objectron在移动设备上实时计算面向对象的3D边界框。

日常生活中的物体,它都可以检测,来看下效果。

它可以在移动端设备上,实时地确定物体的位置、方向和大小。

这个pipeline检测2D图像中的物体,然后通过机器学习模型,来估计它的姿态和大小。

那么,它具体是怎么做到的呢?

获取真实世界中的3D数据

我们知道,3D数据集相对于2D来说,非常有限。

为了解决这个问题,谷歌AI的研究人员使用移动增强现实(AR)会话数据(session data),开发了新的数据pipeline。

目前来说,大部分智能手机现在都具备了增强现实的功能,在这个过程中捕捉额外的信息,包括相机姿态、稀疏的3D点云、估计的光照和平面。

为了标记groud truth数据,研究人员构建了一个新的注释工具,并将它和AR会话数据拿来一起使用,能让注释器快速地标记对象的3D边界框。

这个工具使用分屏视图来显示2D视频帧,例如下图所示。

左边是覆盖的3D边界框,右边显示的是3D点云、摄像机位置和检测平面的视图。

注释器在3D视图中绘制3D边界框,并通过查看2D视频帧中的投影来验证其位置。

对于静态对象,只需要在单帧中注释一个对象,并使用来自AR会话数据的ground truth摄像机位姿信息,将它的位置传播到所有帧。

这就让该过程变得非常高效。

AR合成数据生成

为了提高预测的准确性,现在比较流行的一种方法,就是通过合成的3D数据,来“填充”真实世界的数据。

但这样往往就会产生很不真实的数据,甚至还需要大量的计算工作。

谷歌AI就提出了一种新的方法——AR合成数据生成 (AR Synthetic Data Generation)。

这就允许研究人员可以利用相机的姿势、检测到的平面、估计的照明,来生成物理上可能的位置以及具有与场景匹配的照明位置 。

这种方法产生了高质量的合成数据,与真实数据一起使用,能够将准确率提高约10%。

用于3D目标检测的机器学习pipeline

为了达到这个目的,研究人员建立了一个单阶段的模型,从一个RGB图像预测一个物体的姿态和物理大小。

模型主干部分有一个基于MobileNetv2的编码器-解码器架构。

还采用一种多任务学习方法,通过检测和回归来共同预测物体的形状。

对于形状任务,根据可用的ground truth注释(如分割)来预测对象的形状信号;对于检测任务,使用带注释的边界框,并将高斯分布拟合到框中,以框形质心为中心,并与框的大小成比例的标准差。

检测的目标是预测这个分布,它的峰值代表了目标的中心位置。

回归任务估计边界框8个顶点的2D投影。为了获得边界框的最终3D坐标,还利用了一个成熟的姿态估计算法(EPnP),可以在不知道物体尺寸的前提下恢复物体的3D边界框。

有了3D边界框,就可以很容易地计算出物体的姿态和大小。

这个模型也是非常的轻量级,可以在移动设备上实时运行。

在MediaPipe中进行检测和跟踪

在移动端设备使用这个模型的时候,由于每一帧中3D边界框的模糊性,模型可能会发生“抖动”。

为了缓解这种情况,研究人员采用了最近在“2D界”发布的检测+跟踪框架。

这个框架减少了在每一帧上运行网络的需要,允许使用更大、更精确的模型,还能保持在pipeline上的实时性。

为了进一步提高移动pipeline的效率,每隔几帧只让运行一次模型推断。

最后,这么好的项目,当然已经开源了!

清华大学语音语言中心王东老师的《机器学习导论》一书由清华大学出版社出版,作者把预印版本开放大家下载!如果大家觉得这本书不错,欢迎购买正式版本实体书籍

本书主页:http://mlbook.cslt.org 


本书主要目的不是细致讨论各种具体算法,而是将各种看似高深的方法有机组织起来,告诉学生们每种方法的基本思路、基本用法及与其它技术的关联,帮助其走入机器学习的宏伟殿堂。除作者讲以外,还有冯洋、王彩霞、王卯宁三位老师,分别讲述图模型、核方法和遗传算法。研讨班取得了意想不到的效果,很多学生不仅掌握了基础知识和基本方法,对这些方法与具体应用研究的结合也有了更深刻的理解,为在本领域的深入研究打下了基础。全书共分十一章,内容如下:

第一章:介绍机器学习研究的总体思路,发展历史与关键问题;
第二章:介绍线性模型,包括线性预测模型,线性分类模型和线性高斯概率模型;
第三章:介绍神经网络的基础知识、基础结构和训练方法;
第四章:介绍深度神经网络的基础方法和最新进展;
第五章:介绍核方法,特别是支持向量机模型;
第六章:介绍图模型的基本概念和基于图模型的学习和推理方法;
第七章:介绍无监督学习方法,特别是各种聚类方法和流形学习;
第八章:介绍非参数贝斯模型,重点关注高斯过程和狄利克雷过程;
第九章:介绍遗传算法、遗传编程、群体学习等演化学习方法;
第十章:介绍强化学习,包括基础算法及近年来兴起的深度强化学习方法;
第十一章:介绍各种数值优化方法。

下面为部分内容展示。

1.扫码关注  公众号

2.后台回复关键词:AI007

▲长按扫描,回复AI007即可获取

戳下方传送门链接,快去试试吧~

传送门

GitHub项目地址:
https://github.com/google/mediapipe/blob/master/mediapipe/docs/objectron_mobile_gpu.md

谷歌AI博客:
https://ai.googleblog.com/2020/03/real-time-3d-object-detection-on-mobile.html

END

后台回复“面试” “资料” 领取一份干货,数百技术面试手册等你

开发者技术前线 ,汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。

好文点个在看吧

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一天的饮食计划应该包括早餐、午餐、晚餐和两个小食品。为了保障营养需求,我们需要考虑以下几个方面: 1. 蛋白质摄入量:每天需要摄入约1克蛋白质/每公斤体重。例如,一个70公斤的人需要摄入70克蛋白质。 2. 碳水化合物摄入量:每天需要摄入约3-5克/每公斤体重的碳水化合物。例如,一个70公斤的人需要摄入210-350克碳水化合物。 3. 脂肪摄入量:每天需要摄入约1克/每公斤体重的脂肪。例如,一个70公斤的人需要摄入70克脂肪。 4. 维生素和矿物质:我们需要摄入足够的维生素和矿物质,特别是钙、铁、锌等。 为了使总花费最低,我们需要在各种食物之间做出权衡。我们可以使用线性规划来解决这个问题。假设我们可以选择以下五种食物: 1. 鸡胸肉 2. 燕麦片 3. 奶 4. 红薯 5. 鸡蛋 每种食物的营养成分如下表所示: | 食物 | 每100克所含营养成分(单位:克) | | -------- | ---------------------------------- | | 鸡胸肉 | 20g蛋白质,0g碳水化合物,3g脂肪 | | 燕麦片 | 11g蛋白质,60g碳水化合物,6g脂肪 | | 奶 | 3g蛋白质,5g碳水化合物,1g脂肪 | | 红薯 | 2g蛋白质,20g碳水化合物,0g脂肪 | | 鸡蛋 | 13g蛋白质,1g碳水化合物,11g脂肪 | 我们可以定义以下变量: x1:鸡胸肉的克数 x2:燕麦片的克数 x3:奶的克数 x4:红薯的克数 x5:鸡蛋的克数 我们需要满足以下约束条件: 1. 蛋白质摄入量:20x1 + 11x2 + 3x3 + 2x4 + 13x5 >= 70 2. 碳水化合物摄入量:0x1 + 60x2 + 5x3 + 20x4 + 1x5 >= 210 3. 脂肪摄入量:3x1 + 6x2 + 1x3 + 0x4 + 11x5 >= 70 4. 维生素和矿物质:我们可以将这个约束条件简化为总克数不能超过1000克(即一天总共吃1000克食物) 我们需要最小化以下目标函数: Cost = 5x1 + 2x2 + 2x3 + 3x4 + 3.5x5 其中,每种食物的价格如下: | 食物 | 每100克的价格(单位:元) | | -------- | ---------------------------- | | 鸡胸肉 | 5元 | | 燕麦片 | 2元 | | 奶 | 2元 | | 红薯 | 3元 | | 鸡蛋 | 3.5元 | 我们可以使用MATLAB来求解这个线性规划问题。代码如下: ```matlab f = [5; 2; 2; 3; 3.5]; % 每100克的价格 A = [-20, -11, -3, -2, -13; 0, -60, -5, -20, -1; -3, -6, -1, 0, -11; 1, 1, 1, 1, 1]; % 约束条件的系数矩阵 b = [-70; -210; -70; 1000]; % 约束条件的右侧向量 lb = zeros(5, 1); % 变量下界 ub = inf(5, 1); % 变量上界 [x, fval] = linprog(f, A, b, [], [], lb, ub); % 求解线性规划问题 ``` 运行结果如下: ``` x = 0.0000 0.0000 250.0000 150.0000 83.3333 fval = 1166.6667 ``` 由此可知,为了保障营养需求,并使得总花费最低,我们应该吃250克奶、150克红薯、83.3克鸡蛋,而不吃鸡胸肉和燕麦片。这样一天的总花费为1166.67元。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值