2018年5月6日星期日

体素科技:全病种医疗影像阅读者

以影像为基础,融合多模态数据提供自动转诊能力、提供确诊决策支持、提供初级影像报告,这就是全病种医疗影像阅读者给出的愿景。

在医疗影像领域最知名的一些公开数据集中,BRATS 关注脑部图像中脑肿瘤的检测和分割,LUNA16 旨在从胸片中检测肺结节,而以 Kaggle Diabetic Retinopathy Challenge 2015 为代表的多个数据集则关注糖尿病视网膜病变程度分类。在这些面向某一特定病种的任务上,研究者都已经取得了精确度不错的成果。然而从一个好的分类模型到临床实践之间的距离有多远?

「目前的医疗影像识别技术大多面向『重病大病』。然而,拿大家最熟悉的胸部 CT 的分析做例子,患者和医生真的需要一个『专看肺癌病灶,但是其他肺病一概不会看』的系统吗?」体素科技创始人丁晓伟提出的这个问题,答案是显而易见的。

医生是根据患者症状、患病风险或其他检查的结果来为患者做某种影像检查,希望查明「为什么咳嗽?」,而非「是否患了肺癌?」。哪怕是定向疾病的筛查,阅片医生一样有义务汇报所有影像中的可见异常。单一病种识别模型只能完成单一病种的假设与检验,然后回答问题二,对于问题一,只能表示无能为力。理想的系统既要能够回答「您没有患肺癌」,也能告诉患者「但是有肺炎」。「发现所有可见异常病定性」这个医疗诊断的基本逻辑,让「特定影像协议(Imaging Protocol)下的的全病种识别能力」成了人工智能医疗影像技术投入真实场景的底线。

「全病种医疗影像阅读」对于人类医生来说尚且不是一个容易达成的目标。丁晓伟谈到,我国大约有一半的早期大病没有获得应有的检查。基层医院其实有丰富的影像设备资源,但是为丰富的设备配备同等丰富的医生资源却是几乎不可能的。

因此,将「给定影像协议下的全病种医疗影像阅读者」作为所有产品线定位的体素科技(VoxelCloud)才显得与众不同。「作为一款 AI 影像分析产品,如果想有效地控制诊断质量,就需要可用场景宽广且边界清晰,避免人为因素的影响。正面例子有:适用于所有非增强胸部 CT 的可见异常检测产品、适用于所有眼底彩照的可见异常检测产品。反面例子就是:适用于所有肺结节类病人的产品、适用于所有糖网病案例的产品。」

总而言之,产品需要从影像中得到近似医生撰写的自然语言报告来最大成度降低医生工作量。而为了呈现这简单一步,需要背后的机器学习模型具有人体各器官与组织的位置认知能力和导航能力、对所有可见病理类型在不同位置的检测和识别能力,以及对病灶的定性和量化能力。

「用机器学习的语言描述,我们的 VoxelCloud Retina 眼底照相完整解决方案,就是一个能完成 10 种病灶类型的分类和量化,也能完成 8 种可见疾病的分类的多任务模型。」体素眼科产品线负责人 Joseph 介绍说。

VOXELCLOUD Retina 覆盖的病灶类型与疾病类型

而另一条产品线 VoxelCloud Thorax 胸部 CT 解决方案的负责人则直接向我们展示了一张巨大的列表。

肺部结节特性列表

 「如果想要生成一份 CT 结节类病灶报告,肺结节的检测(detection)和定位(localization)某种意义上都是一些预处理工作。完成之后,更关键的工作是分割(segmentation)以及特性描述(characterization)。这份列表是对结节特性的描述,一共包括九个类型超过 30 种特性描述。除了在影像专家的建议下去除了一些冗余外,体素的系统进行了全部有意义特性的描述。除此之外,系统还需要进行精准的肺部分割、肺叶分割、血管和气管的识别,才能理解病灶与周边组织的相对关系。基于上述理解,进一步提供同一病人不同时间随访扫描的对应病灶匹配,加以量化对比,才能最终输出一段完整的结节自然语言描述。每种病灶类型的报告生成过程都是如此。」

 这家创立于洛杉矶和上海的人工智能医疗影像公司,从名字就开始展现了他们对于医疗影像领域的抱负。

Voxel 或者说体素,来自于 volumetric pixel 的简称。它是「像素」概念的三维版本,代表了三维空间上数据的最小单位。了解了它的定义,也就不难明白为什么在日常生活里「像素」常见而「体素」不常有了:再高端的相机,拍出来的影像也都是天然二维的,医疗影像几乎是唯一一个原生三维的场景。想要把计算机视觉领域里常见的二维模型用于医疗影像,似乎只有两个选择:把模型升级成三维,或者把图像降级到二维。

体素用名字告诉了我们它的选择。「既然医疗影像天生就是 3D 影像,那么我们还是选择使用 3D 模型解决 3D 问题」,丁晓伟这样解释道。


心包脂肪体积 3D 量化

不用常见的二维计算机视觉模型处理影像截面,而是用三维模型处理影像整体,可以说是选了视觉领域最难啃的骨头之一。当影像的大小随着维度增加而指数级地扩大,「内存有限」这个当下深度学习模型的「阿喀琉斯之踵」被打击了个正着;同时,当识别主体占影像的比例指数级地减小,卷积神经网络引以为傲的按层级抽取特征的能力在明显不足的主体信息面前也无从发挥。

「为了让计算机能够在不耗尽内存的情况下处理一整张不经压缩也不经切割的影响,我们对模型结构进行了很多专门的设计。」丁晓伟提到这个框架时非常兴奋,「我们使用了空间可分解卷积(spatially separable convolution)和深度/广度可分解卷积(depth-width separable convolution)替代了原有的卷积层。」

空间可分解卷积的逻辑是把一个 7 x 7 的卷积核分解成一个 7 x 1 的向量和一个 1 x 7 的向量的乘积,这样原本需要 49 个参数的卷积操作就只需要 14 个参数了。深度/广度可分解卷积则对三维影像的每一层进行二维卷积,然后再对所有的二维特征图进行卷积,形成一个三维特征图。「三维卷积模型非常难以训练,但是在推理阶段比二维逐层处理的速度快二十倍,精确率也更高。一根血管和一个结节的截面可能在二维空间上很难分辨,但是在三维空间里是一目了然的。」

医疗影像处理的其他难点还包括样本不均衡性。抛开影像设备的水平、医生操作水平、数据标注质量等种种参差,就算上述一切完美,我们收集到的数据库里,仍然会有大量影像是未患病的(阴性),少量影像是患病的(阳性)。大量的负样本和大量的容易分类的样本让模型并不能专注于从错误中学习。「为了解决这一问题,我们使用了 Focal Loss 来作为损失函数。」Joseph 介绍道。

Focal Loss 是去年 10 月的 ICCV 2017 最佳学生论文,由 Facebook 人工智能实验室(FAIR)的 Ross Girshick 和何恺明参与提出。这种损失函数旨在从交叉熵出发,通过减少那些容易分类的样本的权重,让模型更专注于难分类的样本。

这份去年 8 月刚刚发布预印版的论文,从新鲜出炉到经历工程试验投入到产业中,用时一年还不到,这对于在引入新事物上审慎到近乎迟滞的、研究往往落后工程技术业界五年的医疗行业来说,不啻于飞速。

「实际上医疗影像领域对深度学习整体的接受速度就很快。因为它确实让前深度学习时代不可能解决的问题变得可解。」丁晓伟仍然以肺结节为例,「上世纪 80 年代以西门子为代表的诸多医疗影像巨头们就组织了大量人力,耗时十年,致力于以手工设计的特征来检测肺结节。然而这样庞大的工程也仅仅能止步于肺结节的检测,无法做好更加细微的结节良恶性风险判断。结节的良恶性是由一些极为微小的特征差别决定的,这很难以语言或手工特征的形式描述,同时规律非常不明显,很难以正向思维进行总结。然而深度学习带来了数据驱动的可能,当模型从无数的真实肺结节样例中抽象出了无法在低维空间进行描述的特征,良恶性、乃至更多的特性描述就变得可能了。」

如果说决定以三维模型、以全新的损失函数解医疗影像问题是方法论上的选择,以「全病种医疗影像阅读」为目标是从满足现实需求的角度进行产品设计,那么「多任务学习」(multi-task learning)则是二者的一个结合。

多任务学习是基于共享表示(shared representation),把多个相关的任务放在一起学习的一种机器学习方法。「(多任务学习)既是一种提高模型表现能力的方法论,也是实现全病种的一种实用的方法,模型客户端部署时受到成本和硬件的限制,需要使用尽量少的模型个数来完成尽量复杂的推理任务。」丁晓伟说。

在眼底照相中,存在近二十个彼此相关的分类任务,选择进行多任务学习之后,先对哪一个任务进行训练就会极大影响训练时间以及模型效果。「实验证明,先学习那些不确定性减少最快的模型获得的效果最好」,Joseph 介绍道。

而在胸部影像领域,体素在进行一些更为大胆的尝试。

用一个可以端到端训练的多任务模型进行所有肺部相关影像诊断工作

「我们试图用一个模型进行所有肺部相关的工作。」丁晓伟画了一张框图:同一个模型,首先共用一个编码器(Encoder)将三维医疗影像压缩成特征向量,然后在两个分支上分别用解码器(Decoder)完成肺叶分割、用 Mask R-CNN 进行结节检测。在完成结节检测的同时,利用获得的球心和半径信息获得 3D 结节 ROI(Region of Interest,感兴趣区域),然后再次基础上分别进行结节分割和结节特性描述。最终,汇总各个分支模型,为每个检测到的结节生成一份自然语言报告:「在左下肺叶发现一处圆形实性磨玻璃混合型结节(2.5mm*4.4mm),边缘平整,有血管穿过、内含脂肪组织,恶性风险 15%。」


肺叶分割与肺结节分割

在用特殊的算法设计解决了算力问题之后,剩下的问题只有一个:数据。想要完成这样一个规模宏大的模型,前提条件是拥有每一张影像的所有信息标注。

「我们就快完工了」,丁晓伟提到。这里的完工,是指建立一个包含了超过 8 万份胸部 CT 全病种精标记数据集。

除了肺癌相关数据之外,体素在其他类型肺部病种上也积累了每种约 3 千份的储备,累计收集了超过 15 万份胸部 CT 数据。此外,还有超过 5 万份带有 5 年随访记录的心脏冠脉造影 CT 数据和超过 420 万眼底影像数据。

一年前的采访中,丁晓伟提到,「体素想做医疗影像界的 ImageNet,把人的各种结构、各类常见病种病理全部交给一个统一模型,让模型首先对影像里『有什么』有一个概念,然后再针对具体的应用开发精校的模型。」如今这个巴比伦塔一样的工作已经展现出了雏形。ImageNet 的出现让复杂的神经网络模型在「势均力敌」的复杂数据集上进行训练,最终将计算机视觉带入深度学习的时代。在医疗影像的世界里,数据集的规模量变引起质变的转捩点,是不是也即将到来呢?

一个拥有全病种阅读能力的计算机视觉系统能够做什么?在技术语言与数字之上,是一个美好的愿景。

如今有超过 50% 的糖尿病患者没有及时进行并发症眼病筛查,因为很难要求内分泌医生具有眼底照相阅片能力。而一个视网膜影像全病种阅读者的存在,让糖尿病为代表的慢性病随访管理,变成基层医院可以完成的任务。

眼底彩照筛查报告生成过程

更进一步,当全病种影像阅读者从 to B 走向 to C,能够覆盖的人群就更为广泛。

如今中国有 6000 万处于视力发育关键时期的 3 岁以下儿童。其中有大约 4% 存在各类视力问题风险。3 岁以下儿童的认知能力尚不足以配合普通眼科医生进行常规视力检查,而全国能够进行专业小儿眼科检查的医生却仅有数千人。一个能从家长拍摄的视频里分析眼球和身体的动作表现是否有异常,发现视力有问题的儿童并及时转诊干预的系统,把儿童视力问题的普查变得可能。

儿童过度斜视与眯眼

以影像为基础,融合多模态数据提供自动转诊能力、提供确诊决策支持、提供初级影像报告,这就是全病种医疗影像阅读者给出的愿景。

]]> 原文: https://ift.tt/2JYYIRi
RSS Feed

机器知心

IFTTT

「世界模型」实现,一步步让机器掌握赛车和躲避火球的技能

前段时间,由谷歌大脑研究科学家 David Ha 与瑞士 AI 实验室 IDSIA 负责人 Jürgen Schmidhuber(他也是 LSTM 的提出者)共同提出的「世界模型」让人工智能在「梦境」中训练的论文吸引了人们的热烈讨论。本文将带你一步步实现论文中研究的赛车和躲避火球智能体。

简言之,该论文被称为杰作的原因有三:

1. 它结合了多种深度/强化学习技术以得到惊人的结果——已知第一个解决当下流行的「赛车」强化学习环境的智能体;

2. 模型编写方式易于理解,所以对任何对尖端 AI 技术感兴趣的人而言,这都是很好的学习资源;

3. 你可以自己写该解决方案的代码。

这篇文章是一份分步指南。

本文涵盖的内容有模型的技术细节,以及该如何得到一个可以在自己的机器上运行的版本。

正如我在 AlphaZero(https://medium.com/applied-data-science/how-to-build-your-own-alphazero-ai-using-python-and-keras-7f664945c188)一文中所说的,我与文章作者没有任何关系,我只是想分享一些关于他们杰出工作的见解。

第 1 步:问题

我们将建立一个强化学习算法(一个「智能体」),该算法可以很好地在 2D 的赛道上驱动车辆。可以通过 OpenAI Gym(https://gym.openai.com/)得到这个(赛车)环境。

在每一个时间步(time step)中,该算法都会被馈送一个观察(一张像素为 64 * 64 的车辆和即时环境的彩色图像),还需要返回接下来采取的一系列行为参数——也就是转向的方向(-1 到 1)、加速度(0 到 1)以及刹车(0 到 1)。

然后将这一行为传递到环境中,返回下一个观察,再开始下一次循环。

对要访问的 N 个追踪块而言,每一个智能体能得 1000/N 分,而每经过一个时间步会减去 0.1 分。例如,如果一个智能体要通过 732 帧才能完成追踪,那么得分就是 1000–0.1*732 = 926.8 分。

这是一个智能体的例子:在前 200 时间步中选择行为 [0,1,0],然后其他随机……显然这不是很好的行驶策略。

该项目的目标是要训练智能体,使其理解可以利用周围环境的信息在下一步采取最佳行动。

第 2 步:解决办法

World Models 的作者写了一个关于其方法的在线的交互解释(https://worldmodels.github.io/),所以在此不再赘述同样的细节,而是要聚焦于这些片段该如何组装在一起的高层次问题上,与真实的驾驶过程进行类比,来直观说明为什么这样的解决方案有意义。

解决方案由三部分组成,会对这三部分分别进行训练:

变分自编码器(VAE)

当你在开车过程中做决策时,你不会对视野中的每一个「像素」进行分析——相反,你的大脑会将这些视觉信息浓缩成少量的「潜在」实体,例如道路的平直度、即将到来的弯道以及你相对于道路的位置,你会通过这些信息来决定下一个行为。

这也是训练后的 VAE 要做的事——将 64*64*3(RPG)的输入图像浓缩为服从高斯分布的 32 维潜在向量(z)。

这是很有用的,因为智能体可以用更小的环境表征工作,从而使学习过程更加高效。

具有混合密度网络输出层的循环神经网络(MDN-RNN)

如果在决策时没有 MDN-RNN 组件,你的驾驶过程看起来可能像这样。

当你驾驶时,视野中出现的每一个观察都不会让你特别惊讶。你知道如果当前的观察结果说明路前方有左转弯,你就会左转,在你预期中的下一次观察会显示你仍沿着路在前进。

这种前瞻性思维就是 RNN 要起到的作用——具体地说就是一个有着 256 个隐藏单元的 LSTM。h 表示隐藏状态的向量。

和 VAE 类似,RNN 试图捕获环境中车辆当前状态的潜在理解,但这一次是要以之前的「z」和行为为基础,预测下一个「z」可能是什么样的。

事实上,MDN 输出层允许从几个高斯分布中的任意一个得到下一个「z」。

生成手写体的 MDN

在这篇同一作者写的文章中用同样的技术生成手写体(http://blog.otoro.net/2015/12/28/recurrent-net-dreams-up-fake-chinese-characters-in-vector-format-with-tensorflow/),说明笔的下一点可以落在不同的红色区域的任意一点。

相似的是,在 World Models 这篇文章中,可以从五个高斯分布的任意一个中得出下一个观察的潜在状态。

控制器

到目前为止,我们还没有提到任何有关行为选择的问题,该任务由控制器执行。

简单地说,控制器就是一个密集连接的神经网络,这个网络的输入是级联的 z(从 VAE 得到的潜在状态——长度为 32)和 h(RNN 的隐藏状态——长度是 256)。这三个输出神经元对应三个行为,且被缩放至适合的范围。

一段对白

为了理解这三个组件所扮演的不同角色以及它们是如何运作的,我们可以想象一段在它们中间发生的对白:

World Model 架构的图示(来源:https://arxiv.org/pdf/1803.10122.pdf)

VAE(看着最新的 64*64*3 的观察):汽车前进方向(z)的道路像是一条平直、有轻微左转弯的道路。

RNN:根据描述(z)和控制器选择在最后的时间步加速(行为)的事实,我会更新我的隐藏状态(h),这样下一个观察才能预测为笔直的道路,但是在视野中有轻微的左转。

控制器:基于来自 VAE 的描述(z)和来自 RNN 的当前的隐藏状态(h),我的神经网络下一行为的输出会是 [0.34, 0.8, 0]。

然后将这一行为传送至环境中去,这会返回一个更新的观察,然后开始下一循环。

现在我们要看一下要如何设置一个让你训练自己赛车智能体的环境。

接下来我们来写代码吧!

第 3 步:设置你自己的环境

如果你使用的是高配置笔记本,你可以在本地运行,但我建议使用 Google 云计算(https://cloud.google.com/compute/),这允许你在短时间内使用强大的计算机。

以下代码已经在 Linux(Ubuntu 16.04)进行过测试了——如果你在 Mac 或 Windows 上运行只需改变相关安装包的命令即可。

1. 复制 github 项目(https://github.com/AppliedDataSciencePartners/WorldModels

下面的命令行可以帮你导航到项目位置并进入该项目:

git clone https://github.com/AppliedDataSciencePartners/WorldModels.git

该项目是通过 World Models 文章第一作者 David Ha 开发的很有用的 estool 库(https://github.com/hardmaru/estool)改写而成的。

在训练神经网络的过程中,使用了带有 TensorFlow 后端的 Keras,但是在原文中,作者使用的是原始的 TensorFlow。

2. 设置一个虚拟环境

创建一个 Python3 虚拟环境(我用的是 virutalenv 和 virtualenvwrapper)。

sudo apt-get install python-pip sudo pip install virtualenv sudo pip install virtualenvwrapper export WORKON_HOME=~/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh mkvirtualenv --python=/usr/bin/python3 worldmodels

3. 安装依赖包

sudo apt-get install cmake swig python3-dev zlib1g-dev python-opengl mpich xvfb xserver-xephyr vnc4server

4. 安装要求.txt

cd WorldModels pip install -r requirements.txt

与赛车例子中要求的相比,这里有更多依赖包,建议你把每一个包都装好,以备在 Open AI Gym 中进行其他测试,这些测试可能需要额外的依赖包。

第 4 步:生成随机事件

对赛车环境而言,VAE 和 RNN 都可以在随机事件数据上训练——也就是在每一个时间步随机采取的行为产生的观察数据。事实上,我们用了伪随机的行为,这样可以迫使车辆在初始时加速,使其脱离起跑线。

因为 VAE 和 RNN 是独立于做出决策行为的控制器的,我们需要保证遇到不同观察后选择不同行为,并将其存储为训练数据。

为了产生随机事件,运行下面的命令行:

python 01_generate_data.py car_racing --total_episodes 2000 --start_batch 0 --time_steps 300

如果你在没有显示的服务器上操作,运行下面的命令行:

xvfb-run -a -s "-screen 0 1400x900x24" python 01_generate_data.py car_racing --total_episodes 2000 --start_batch 0 --time_steps 300

这会产生 2000 个事件(保存在 10 个批次中),批次从 0 开始。每一个事件最长为 300 个时间步。

  • 两部分文件存在 ./data 中(* 是批次号)

  • obs_data_*.npy(将 64*64*3 的图存为 numpy 数组)

  • action_data_*.npy(存储三维行为)

第 5 步:训练 VAE

训练 VAE 只需要 obs_data_*.npy 文件。确保已经完成了第 4 步,这样这些文件才会在./data 文件夹中。

运行:

python 02_train_vae.py --start_batch 0 --max_batch 9 --new_model

这会在 0~9 的每一个批次上都训练一个新的 VAE 。

模型权重会存在 ./vae/weights.h5 中,--new_model 标记告诉脚本要从头训练模型。

如果该文件夹中已经存在 weights.h5,并且没有 --new_model 标记,脚本将从这个文件中加载权重再训练已经存在的模型。这样你就可以按批次反复训练 VAE。

VAE 架构设置在 ./vae/arch.py 文件中。

第 6 步:生成 RNN 数据

既然我们已经训练了 VAE,我们就可以用 VAE 产生 RNN 的训练集。

RNN 需要编码来自 VAE 的图像数据(z)和行为(a)作为输入,将编码下一时间步的 VAE 的图像数据作为输出。

运行命令行生成数据:

python 03_generate_rnn_data.py --start_batch 0 --max_batch 9

从批次 0 到批次 9,会用 obs_data_*.npy 和 obs_data_*.npy 文件,并将这两个文件转换为训练 RNN 需要的正确格式。

  • 两部分文件将保存在 ./data 中(* 是批次号码)

  • rnn_input_*.npy(存储了级联向量 [z,a])

  • rnn_output_*.npy(存储了下一时间步的向量 z)

第 7 步:训练 RNN

训练 RNN 只需要 rnn_input_*.npy 和 rnn_output_*.npy 文件。确保已经完成了第 6 步,这样才能在 ./data 文件夹中找到这些文件。

运行命令行:

python 04_train_rnn.py --start_batch 0 --max_batch 9 --new_model

这可以在 0~9 每一个批次的数据上训练新的 RNN。

模型权重将存储在 ./rnn/weights.h5 中。——new_model 标记告诉脚本要从头训练模型。

与 VAE 相似,如果文件夹中没有 weights.h5,--new_model 标记也没有特别说明的话,脚本将从文件中加载权重并继续训练现存模型。这样,你就可以反复训练 RNN。

RNN 架构设置存为./rnn/arch.py 文件。

第 8 步:训练控制器

现在进行到有趣的部分了!

迄今为止,我们只用深度学习方法建立了可以将高维图像压缩成低维潜在空间的 VAE,而 RNN 可以预测潜在空间是怎样随着时间变化而变化的。我们可以通过随机事件数据创建一个同时适用于 VAE 和 RNN 的训练集。

为了训练控制器,我们可以使用强化学习,利用一种被称为 CMA-ES(协方差矩阵适应—进化策略)的算法。

由于输入是维度为 288(=32+256)的向量,输出是维度为 3 的向量,我们有 288*3+1=867 个参数要训练。

CMA-ES 的工作原理是:先创建这 867 个参数的多个随机初始化副本(即「群体」)。然后在环境中测试群体中的每一个元素并记录其平均成绩。事实上,这与自然选择的原理一样,允许产生最高得分的权重「复制」,并允许产生下一次迭代。

为了在你的机器上开始这一进程,取适当的参数运行下述命令:

python 05_train_controller.py car_racing --num_worker 16 --num_worker_trial 4 --num_episode 16 --max_length 1000 --eval_steps 25

若在没有显示的服务器上操作,则运行下述命令:

xvfb-run -s "-screen 0 1400x900x24" python 05_train_controller.py car_racing --num_worker 16 --num_worker_trial 2 --num_episode 4 --max_length 1000 --eval_steps 25
  • --num_worker 16:将该参数设置为不超过最大可用核数目

  • --num_work_trial 2 :每个核中待测群体中元素的数目(num_worker * num_work_trial 得出每一次迭代后群体大小)

  • --num_episode 4:给群体中每个元素打分的 episode 的数量(这个成绩是 episode 数量的平均奖励)

  • --max_length 1000:一个 episode 中时间步的最大数量

  • --eval_steps 25:在 100 个 episode 中,最佳权重集合的评估之间的迭代数

  • --init_opt ./controller/car_racing.cma.4.32.es.pk 默认情况下,控制器将从头开始运行脚本,并将进程的当前状态存在控制器目录的 pickle 文件中。该参数通过指向相关文件,允许用户从最后一个存储点继续训练。

在每一次迭代之后,算法的当前状态和最佳权重集将会作为输出存储在 ./controller 文件夹中。

第 9 步:可视化智能体

在这篇文章的写作期间,我成功训练了该智能体,并在训练了 200 代之后得到了 833.13 的平均分。使用 Ubuntu 16.04、18 vCPU、67.5GB RAM 的机器在 Google Cloud 上训练了本文提到的步骤和参数。

论文的作者在训练 2000 代之后得到了 906 的平均分,这是迄今为止该环境下最高的分数,但他们用的配置要更高一点(例如,对数据训练了 10,000 个 episode,群体数量达到 64,64 核的机器,每次试验有 16 个 episode 等)。

为了可视化你的控制器的当前状态,运行:

python model.py car_racing --filename ./controller/car_racing.cma.4.32.best.json --render_mode --record_video
  • --filename:您想附加到控制器的权重的 json 的路径

  • --render_mode :在屏幕上渲染环境

  • --record_video:将 mp4 文件输出到 ./video 文件夹,每个 episode 展示一次

  • --final_mode:控制器运行 100 个 episode 测试输出的平均成绩

演示如下!

第 10 步:梦境学习

这已经很酷了——但这篇文章的下一个部分令人印象深刻,而我认为对人工智能而言这意义重大。

在另一个环境,DoomTakeCove(https://github.com/ppaquette/gym-doom)中,这篇文章展现了惊人的结果。在这里,目标是移动智能体躲避火球,活得越久越好。

作者展示了智能体如何不在真实环境的情况下,而在 VAE/RNN 的启发下的梦境(虚拟环境)中学会玩游戏。

额外需要的只有 RNN 也要被训练得可以预测在下一个时间步死亡的可能性。这样,VAE/RNN 联合体可以作为环境独立分装,并用于训练控制器。这是「世界模型」的核心概念。

我们可以将梦境学习归纳如下:

智能体的初始训练数据只不过是与真实环境的随机互动。通过这种方式,智能体建立了这个世界是如何「运作」的潜在理解——这个世界的自然分组、物理以及智能体的行为会对这个世界产生怎样的影响。

给定一个任务,智能体会用这种潜在理解,在无需在真实世界对任务进行测试的情况下,建立最佳策略。因为它会将自己理解的环境的模型作为「场地」,试着解决问题。

这也可以简单解释为婴儿学习走路。两者间有惊人的相似之处,但或许比单纯的类比要更加深刻,这一点使它成为真正迷人的研究领域。

原文链接:https://medium.com/applied-data-science/how-to-build-your-own-world-model-using-python-and-keras-64fb388ba459

]]> 原文: https://ift.tt/2jAWPik
RSS Feed

机器知心

IFTTT

阿里提出IncepText:全新多向场景文本检测模块

文本检测在很多应用中扮演着重要的角色,但这也是一个颇具挑战性的任务。阿里近期提出的端到端场景文本检测器 IncepText 在多个数据集的测试中实现了业内最佳水平,并已发布了开放的 OCR 产品接口。本研究的论文已被即将在 7 月于瑞典举行的 IJCAI 2018 大会接收。

场景文本检测是众多计算机视觉应用中最具挑战性的任务之一,它会应用在多语言翻译、图像检索、自动驾驶等场景中。其中,首当其冲的挑战是场景文本会包含各种图像,如街景、海报、菜单、室内场景等。此外,场景文本在前景文本和背景对象中都有很大的变化,并且还具有不同的光照、模糊和方向条件。

在过去几年里,场景文本检测方向涌现了很多杰出的算法。文本检测的关键在于设计正确区分文本区域和非文本区域的特征。多数传统方法如 MSER [Neumann and Matas,2010] 和 FASText [Busta et al.,2015] 都使用手动设计的文本特征。

但这些方法不足以处理复杂的场景文本。最近,基于卷积神经网络(CNN)的方法在文本检测和识别 l 领域取得了傲人的成果 [He et al., 2016b; Tian et al., 2016; Zhou et al., 2017; He et al., 2017]。基于 CNN 的模型具有强大的特征表示能力,且更深的 CNN 模型能够提取更高级别或更抽象的特征。

在该领域,主要有两种类型的场景文本检测方法,即间接回归和直接回归。间接回归方法预测 box proposals 的坐标,如 CTPN [Tian et al。,2016] 和 RRPN [Ma et al。,2017] 等研究。这些方法都是基于 FasterRCNN [Ren et al.,2015] 框架。

近期,直接回归方法在场景文本检测上已经取得了不俗的表现,例如,East [Zhou et al,2017] 和 DDR [He et al,2017] 等研究。

在阿里的论文中,研究人员受到 FCIS 实例分割启发试图解决这个问题 [Li et al。,2016]。与普通的物体检测不同,场景文本经常会遇到很大的尺度,长宽比及方向的变化。因此,我们设计了一个创新性的 Inception-Text 模块来解决这些挑战。

该模块受 GoogLeNet 中的 Inception 模块 [Szegedy et al,2015] 的启发得出,研究人员采用多个不同卷积核的卷积分支来处理不同长宽比和比例的文本。我们在每个分支后面接一个可变形的卷积层以适应多方向文本。

相比原型,另一个改进是我们用可变形的 PSROI 池化层来替换 FCIS 中的 PSROI 池化层 [Dai et al,2017a]。根据实验来看,可变形的 PSROI 池化层在分类任务中表现更好。

本研究的主要贡献如下:

  • 我们提出了一个用于多方向场景文本检测的新的 Inception-Text 模块。实验表明,该模块可以大幅提高准确率,且计算成本很低。

  • 我们提出使用可变形的 PSROI 池化模块来处理多方向的文本。在对可变形 PSROI 池化和量化评估学习到的偏移部分进行的量化研究表明,它可以有效处理任意方向的场景文本。

  • 我们在三个基准数据集 ICDAR2015,RCTW-17 和 MSRA-TD500 上评估了新方法,结果表明新的方法在没有任何额外数据的情况下,在几个基准测试中都取得了业内最优的表现。

  • 我们提出的方法已在阿里公开发布的 OCR 产品中作为 API 服务实现。

在这篇论文中,我们会首先简要介绍场景文本检测,主要关注多方向场景文本检测。然后详细讲解新提出的方法,并在三个公共基准数据集上给出实验结果。最后进行总结,并讨论未来的工作。

提出的方法

我们提出的方法基于最初被提出用于实例分割的 FCIS [Li et al,2016] 框架。我们设计了一个创新的 Inception-Text 模块,并使用可变形的 PSROI 池化层来扩展该框架。图 1 给出了我们提出的模型体系结构的概述。

在图 1 中,基础特征提取模块是 ResNet50 [He et al,2016a]。精细的特征信息对于分割任务尤为重要,对于场景文本检测,第 5 阶段的下采样可能会丢失一些有用的信息。

因此,我们在第 5 阶段利用带孔卷积算法(hole algorithm)[Long et al,2015] 维持感受野。这一阶段的步长也由 2 改为 1,并且为了弥补步长减小带来的问题,这一阶段的所有卷积滤波器都使用带孔卷积来补偿减小的步幅。

为了预测小文本区域的准确位置,还需要考虑低级别特征。如图 1 所示,res4f 层和 res5c 层上采样 2 倍,再与 res3d 层相加。这两个融合的特征图后面接着用于场景文本检测的 Inception-Text 模块。

我们用可变形 PSROI 池化来替换 FCIS 中的 PSROI 池化,因为标准 PSROI 池化只能处理水平文本,而场景文本方向总是不确定的。类似于 FCIS,我们获得了如图 1 所示的带有 mask 和分类分数的文本框,然后根据他们的分数将 NMS 应用到框中。

对于每个未被抑制的框,我们要找到它的相似框,即与其自身 IoU> = 0.5 的框。未抑制的框预测的 mask 与其相似框通过使用分类分数作为它们的平均权重逐像素地进行加权平均来合并。然后使用一个简单的最小四边形算法来生成方向框。

图 1:IncepText 体系结构。该图中的基础特征提取模块是 ResNet-50。Inception-Text 模块在特征融合层后面,原始 PSROI 池化被替换为可变形的 PSROI 池化。

图 2: Inception-Text 模块。

图 3:标准卷积和可变形卷积之间的比较。标准卷积(a)中的感受野是固定的,而可变形卷积(b)的感受野是自适应的。

图 8:我们的方法在 ICDAR2015(a)、RCTW-17(b)、MSRA-TD500(c)上的检测结果。(d)中列出了一些失败案例。红色框是 ground-truth 实景框,而绿色框是预测结果。黄色椭圆的边界框表示错误结果。

表 2:ICDAR2015 附带场景文本定位任务的结果。

论文:IncepText: A New Inception-Text Module with Deformable PSROI Pooling for Multi-Oriented Scene Text Detection(IncepText:一种新的具有可变形 PSROI 池化的用于多向场景文本检测的 Inception-Text 模块)


论文链接:https://arxiv.org/abs/1805.01167

摘要:附带场景文本检测,尤其是多向文本检测,是众多计算机视觉应用中最具挑战性的任务之一。与常见的物体检测任务不同,场景文本的长宽比,尺度和方向常常会发生巨大变化。

为了解决这一问题,我们从实例分割的角度提出了一种创新性的端到端场景文本检测器 IncepText。我们设计了一个新的 Inception-Text 模块,并引入了可变形的 PSROI 池化来处理多向文本检测。基于 ICDAR2015,RCTW-17 和 MSRA-TD500 数据集的大量拓展实验证明了我们方法的高效和可行性。

我们提出的方法在 ICDAR2015 比赛中获得第一名,并在其他数据集上获得最好的性能。此外,我们还发布了公众可访问的 OCR 产品接口。

]]> 原文: https://ift.tt/2wlnKrS
RSS Feed

机器知心

IFTTT

keep running不孤独,UNIT让跑步机更懂你

 你在跑步时 

 是不是也遇到过这些囧况 

当你在健身房跑步机上听着音乐、看着节目挥汗如雨时,时常想要换一首歌、换个节目、加快速度、或者慢一点休息一下……

这时候,你会手忙脚乱地在控制面板上找按钮?

还是停下来找到自己喜欢的歌曲后,再接着跑?

最舒适的方式莫过于你直接对着跑步机说一声:"我要听XX的歌""停下来吧"又或者"我跑了多远了",只要一句话跑步机就能"听懂"你的需求吧。

今天,小编就给你介绍一款语音智能控制跑步机的神器——易跑 APP,让你轻松舒适健身。

易跑 APP 是由屹石科技公司推出的软件服务。屹石科技是全球领先的健身器材智能化解决方案服务商,提供跑步机安卓触摸屏操作系统以及交流、直流驱动电源;跑步机、健身车、仰卧板、收腹机等各种器材 APP 方案,同时也提供标准软件服务及个性化定制软件服务。

 怎样让跑步机听懂你的指令?

结合百度语音和理解交互技术 UNIT,屹石科技将这一切变为现实。其中,理解与交互部分是在人机对话定制化平台 UNIT 完成的。

屹石科技将健身器材常见的操作指令设置为几个用户意图,比如速度控制、多媒体控制、模式变换以及启动停止等。

利用 UNIT 平台上的对话模板,标注用户的常见问法,迅速完成配置。对话模板的使用,能实现用户变换不同问法,机器都可以"听懂"需求。

比如用户说出"快一点""快一些"或是"快点""稍微快一点"等等速度控制的指令,机器都能理解用户加速的意图,回复用户并执行速度加快的操作。

 语音控制跑步机示例 

Step1:在易跑 APP 内通过设置打开语音控制功能。

Step2:对 APP 发出指令,APP 理解用户意图,回复用户并执相关指令。

Step3:APP 通过蓝牙控制器材,最终实现语音控制跑步机启动、停止、加减速等一系列操作,方便用户更轻松的使用跑步机系统。

借助 UNIT 平台,屹石科技打造智能健身器材解决方案。用户告别传统健身器材操作模式,满意度大大提高。

产品功能的新升级提升了市场竞争力,设备销量大增,跑步机设备月销量达1万台以上。

]]> 原文: https://ift.tt/2HWtGgg
RSS Feed

机器知心

IFTTT

吐槽贴:没有工程背景的项目经理不如没有项目经理

在我不算长的开发职业生涯中,曾不止一次地遇到过让我怀疑人生的项目经理。

并不是说这些项目经理能力或者人品不行。而是由于他们过度的微管理,又将开发者的工作想的太简单,常常搞得项目脱离正轨。

比如,一些经理总是爱把"不就是"三个字挂在嘴边。不就是JSON"、"不就是UI"、"不就是前后端交互"……

用"不就是"来形容任何一件事都只能显示出无知,和对团队的沟通的不重视,对问题的漠不关心。

如果都像他所说的一样,细化算法 "不就是性能调优",异步线程管理 "不就是线程间转换",Core Data或SQL存储管理 "不就是本地存储"。那产品还做得出来吗?

一个好点的项目经理会听听你的意愿,是否需要他参与到复杂的项目中来,甚至改变一些最初的想法,而差劲的项目经理完全不会听你的解释。

在他们眼里,实现前后端交互就好像给手机冲个电一样容易。

这是非常危险的,因为他们不尊重你的工作,也不可能留给你足够的时间。

即便你刚刚交待过需要1-3天甚至更长的时间来开发和调试,他们仍然会不时地催你完成。

如果你思考过其他行业的运转模式,你很难相信,其实这种情况只存在于科技行业。我甚至还以为我们是在创新呢!

其他行业是否会让专门学管理的人来管理团队呢?

拿我个人经历来说,在开启漫长的编程职业生涯之前,我曾当过学校业余的田径运动员、厨师、音乐人、音效师,还曾申请进入部队去做网络工程师,但由于先天心脏病被拒,后来在开始学习计算机以后,还在自行车店做过销售。所以我会根据自身经历,分析一下我接触过的这几个行业的情况。

我常用"管院经理"来称呼那些仅有管理相关的理论知识、没有行业经历的管理者。那么,在这些行业,他们能担当管理职位吗?

"管院经理"当田径队教练?——很差劲

尽管学校田径队远不及专业水准,但却让我了解到这个行业的运作模式:你很少见到没有过运动员生涯的教练。若是让"商学院经理"当教练,恐怕吃不消吧。

"管院经理"当主厨?——完全没戏

当实习厨师的时候,我由一位副厨管理。副厨,明显是有一定资质的,正因为他有着你无法达到的技术水平,才有资格去管理一个厨师团队。所以很显然,无论副厨还是主厨,必定都是厨师出身。 而要让"管院经理"管理厨师团队,是根本不可能的。

"管院经理"管理音乐创作?——很差劲

乐队尽管有管理者,但其更像是 "工作的发现者",而不具体音乐创作的领导者。 当然还有一种情况,就是经理签约唱片公司了。这样的经理可能会是一个没有音乐背景的人(其实,舆论对于这种情况褒贬不一)。但是无论如何,"管院经理"是无法领导音乐创作的。

"管院经理"管理音效师?——可以接受

音效师的工作,或是协助音乐家、制作人和主管进行音乐创作,或是与演员、导演和制片人紧密合作来制作电影音效。

这其中,制片人(或导演)通常扮演了管理者的角色他们并不需要具备音效师相关的工作的经历(当然有则更好)。所以,让"管院经理"去管理音效师,是可以接受的。

"管院经理"管销售?——可以接受

在自行车店做销售时,我得经理就是店主。从技术角度来看,我、或是任何没有自行车运动经历的人都可以胜任这个职位。而店主是一位荷兰的骑行爱好者,在退休和开店之前一直在半职业车队骑自行车,虽然有很多自行车相关的经验,但在销售领域,这些经验并不是硬性标准。因此通常认为,"管院经理"可以去管理销售,尽管"管院经理"通常不会在销售领域求职。

"管院经理"当军官?——很有差距

我不了解部队里的情况,不过根据朋友的经历来推测的话,没有军事背景的人通常不会参与作战指挥。虽然"管院经理"可能会通过其他途径进入像五角大楼这样的机构,但是,没有实践经历一样会被人忽视。因此可以断定,让"管院经理"去管理部队,估计也会吃不消吧。

以上只是我接触过的几个行业。

其实在销售领域,一旦步入市场,即便是销售副总裁、销售团队经理,也很难谈的上"拥有实际销售经验"。

除此之外,还有一些我没有接触过的行业,诸如法律或医药,但从那些从事相关行业的亲戚朋友那里了解到:无论是让"管院经理"去管理医生、当医院院长,还是成为律师事务所合伙人都是天方夜谭。

最新的管理策略是:摒弃项目经理

为什么其他行业经理大都具备行业经验,而我们行业却不是这样呢?

在工程领域,一个没有项目经验的人绝对不能担任项目经理的角色——很抱歉用了"绝对"两字,但这确实是我们亲身经历,反复验证得出的结论! 这种经理泛滥的情况必须该终结了。

管理者宁缺毋滥

这种说法听起来很极端。但并不仅仅只有我一个人想到。Hacker news网站上就有相关的话题讨论,这些网友一致认为,使用Aha!进行项目规划加上Pivotal Tracker进行任务分解来制作项目蓝图,似乎是一套可行的方法,并且少数公司已经有过成功的先例。

Hacker news:

https://ift.tt/2EJOLVP

Aha!:

https://ift.tt/1RYMcmI

Pivotal Tracker:

https://ift.tt/2rqtBGD

也许你可能会想"并不是所有经理都很糟糕啊",但是,在科技行业,我所共事过的经理中,95%都是糟透了的。 同时我还有两个很有力的观点:

  • 如果以极度糟糕作为衡量的底限,未免太低了。

  • 我遇到的那5%稍许理想的经理,100%都具备工程项目经验。

如果用资质较高的工程师取代传统项目经理来管理团队,会不会是一个更好的选择?

这种想法,我们尝试了数十年了。问题就在于:缺乏有意愿做管理的工程师。

毕竟谁也不想一开始就被分配到管理岗位。所以,这种办法也不可行。

不过再怎么说,管理层在公司还是有一席之地的。毕竟协调不同部门、分配资源、解决冲突都需要有部门层级的管理人员。而且,我并没有低估管理层为公司带来的好处。但是在项目层面,甚至是团队层面,完美的运作是不需要他们的。

我们已经有产品经理负责传达产品需求、帮助工程师排查故障了,也有技术实力深厚的敏捷专家(Scrum masters)来协调团队的日常交流,不过 Scrum masters的职责仅限于传达信息,并提供沟通渠道。

所以我们不需要项目经理更不需要劣质的项目经理,尽管过去我们一直在重复这个错误。

是时候进行创新和改革了——摒弃项目经理。

相关网站:

https://ift.tt/2ImzADS

【今日机器学习概念】

Have a Great Definition

]]> 原文: https://ift.tt/2rod7Pi
RSS Feed

机器知心

IFTTT

这家公司连续六年调研大企业数据变革,今年的结果喜忧参半

大型企业到底如何看待数据及数据驱动?

从热潮到落地,大数据的力量有无受到区块链人工智能等新浪潮的冲击?

在清华数据科学研究院联合大数据文摘发布的《顶级数据团队建设报告》中提到,数据化转型更多是一个至上而下的过程,企业高管对待数据的态度,对于一家公司的数据驱动文化建立至关重要。

围绕"数据"话题,NewVantage Partners 已连续六年对全球各领域的大型企业高管如何看待数据进行调研。每年,调查回复率都在增长,而且据调查结果显示,如何有效数据利用的紧迫性在逐年增加。

今年的调查结果,喜忧参半。

六年前,NewVantage Partners 开启了针对大数据的首次调研,当年的调查聚焦在当时尚属新颖的大数据领域,而六年后,今年调查问卷的焦点落在了人工智能领域。

显然,人工智能已经成为这些大型成熟企业的关注重点。有显著迹象表明,大数据和AI技术都有着强大的应用价值,曾经市场上巨头企业或因创业公司的加入而被颠覆。

大数据文摘对本次调研的关键信息进行了摘要如下:

受访者:首席数据官(CDO)的比例大幅提高

受访者为来自57家大型企业的高管。其中,大多数企业隶属于金融服务业——数据密集度最高的行业之一,同时也有来自生命科学,制造业,电信和互联网行业的众多企业参与其中。

2018年的调查企业名录

受访者的职位分布情况也有明显变化。一般情况下,受访者主要是以C开头的企业高管,而在今年,首席数据官(CDO)的比例竟高达 56%,明显高于去年的 32%,而且在 2012 年的首次调查中,仅 12% 的企业中设置了这一职位。

几乎所有被调研公司都在投资大数据人工智能项目

调查内容涵盖了大数据及当下最热门的AI技术。多年来,尽管专业术语在不断变化,始终如一的,是数据的爆炸式增长,以及对数据意识的永恒需求。

如今,在大数据和AI之间,已不存在明显的界限。处理大量、快速变化数据的机器学习技术,以及越来越受欢迎的基于深度学习的统计方法等,都需要二者的结合。传统的数据分析、大数据人工智能应当被视为一个整体。几乎所有(97%)的企业高管都表示,所在公司已经在投资该类项目。

大数据和AI正在为公司创造价值

从调查结果中得到的最好的消息是,所有企业都认同"大数据和 AI 类的项目会为公司创造价值"的说法。

其中,已经获得了可观收益的企业占 73%,相比 2017年高出了 50%。这表明,随着企业对这些新技术的日益熟悉,更多潜在的价值将被逐渐挖掘出来。

而谈到具体的价值,大数据和 AI 技术同之前众多技术一样,都在于提升公司的业务分析能力。多数企业渴求达到,并且很可能实现的目标是"更先进的分析和更优化的决策"。有 36% 的企业认为该目标正是公司的首要任务,而其中的 69% 已经在这个方面取得了一定成就。

同时,超过四分之一的企业(27%)正在将数据货币化,同企业创新型变革和快速融入市场相结合,尽管数据货币化的优先级和成功率最低(27%)。

AI技术的影响力远远超过云计算(13%)或区块链(7%)

调查结果还显示出目前最值得关注的两个问题:

初创企业带来的威胁

约 80%  的企业高管表示,担心那些金融科技行业或专注于大数据的初创企业会抢占他们的市场份额。其中最具威胁的就是 AI 技术,有 72% 的企业认为,AI技术的影响力远远超过云计算(13%)或区块链(7%)。

企业向数据驱动文化转型的速度缓慢

几乎所有的企业高管(99%)都表示公司正在试图朝这个方向发展,但仅有三分之一的企业成功实现了转型。

多年来的调查结果显示,这种成功率并没有明显的提升,显然,企业还需要一些更加明确的计划来促进这一变革的实现。与此同时,许多初创企业自成立之初就已经建立了数据驱动文化,这也成为大型企业担忧的主要原因之一。

数据类职位被认可,但职能设置不清晰

企业为了避免数据驱动变革所带来的混乱,常会设立新的管理角色。

但是,目前多数企业都缺乏对不同的数据方向类角色(首席信息官,首席数据官,企业数字化负责人,首席分析官等)职能的清晰定义。

甚至对于首席数据官(CDO)的主要职责,以及任职人员的背景要求都存在着很大的分歧。

对CDO的主要职责而言,39%的企业表示CDO要对公司的数据战略和其业务成果负主要责任,而37%的企业却将这一职责分配给其他的C-开头的高管,24%的企业对此并没有明确的责任分配;而对任职人员的背景要求而言,34%的企业认为,CDO应该来自于公司外部,以帮助实现企业的变革,而32%的受访者认为,公司内部的资深员工是最佳人选。

尽管所有企业高管都能认识到:明确定义数据方向类的高管的角色和职能,对于其领导AI /大数据项目和实现企业的文化变革都至关重要。但目前多数公司,仍然缺乏明确的数据战略。

当前经济和社会最主要的特征之一是,大数据的重要性和挑战性都在持续增长,而人工智能的崛起更是大大加剧了这一趋势。NewVantage Partners多年来的调查结果,换个角度,也是通过这些有趣的、高质量的材料记录了这场 "数据革命"。 而对于企业而言,成功的关键在于,需要明确公司的战略导向,并在数据战略和业务成果层面设立明确的角色和职责,以系统化的、更有效的方式来实现向数据驱动型企业的转型。

原文链接:

https://ift.tt/2rp9YPU

【今日机器学习概念】

Have a Great Definition

]]> 原文: https://ift.tt/2HXGDSV
RSS Feed

机器知心

IFTTT

M2 模型杀回 Coding 和 Agent 领域,MiniMax 想要「普惠智能」-InfoQ每周精要No.900

「每周精要」 NO. 900 2025/11/01 头条 HEADLINE M2 模型杀回 Coding 和 Agent 领域,MiniMax 想要「普惠智能」 精选 SELECTED a16z 将 3000 万开发者标价 3 万亿 网友:几个初创公司 + 大模型就...