OpenCV AI Kit (OAK) 创始人Brandon Gilles访谈全记录

Stella981
• 阅读 1123

本文中,我们采访了PyImageSearch的忠实读者、OpenCV AI Kit (OAK)创始人——Brandon Gilles,他带来的OAK彻底颠覆了人们应用嵌入式计算机视觉和深度学习的方式。

为了庆祝OpenCV库成立20周年,Brandon与OpenCV.org官方合作,创建了OpenCV AI Kit——获MIT认证许可的开源软件API以及Myriad X-based嵌入式主板/摄像头。

OAK分为两种:

  1. OAK-1: 标准的OpenCV AI板,能够执行神经网络推理、目标跟踪、April Tags识别、特征检测,以及基本的图像处理操作等。
  2. OAK-D: 除包含OAK-1中的所有功能外,还具有立体深度摄像头、3D目标定位、以及3D空间内的目标追踪功能。

在经过Brandon和OpenCV团队的同意后,提前获取了OpenCV AI Kit的一手资料,让我们一起期待日后PyImageSearch博客上的OAK教程吧。

OpenCV AI Kit将彻底改变嵌入式计算机视觉和深度学习的执行方式,我已经迫不及待地想要上手了。下面让我们热烈欢迎Brandon Gilles来分享一下他的故事吧。

OpenCV AI Kit (OAK) 创始人Brandon Gilles访谈全记录
OpenCV AI Kit (OAK) 创始人Brandon Gilles访谈全记录
Brandon Gilles:OpenCV AI Kit (OAK)的首席架构师。

**记者:**可以向大家介绍一下你自己吗?

**Brandon:**我是一名电气工程师,是Luxonis的创始人兼首席执行官。一直以来,我都想自己进行创业,并且希望自己的工作能对世界产生积极的影响。但有点可笑的是,我又总是想要规避风险。所以我花了十多年的时间梦想着能创立自己的公司,却从未真正付诸于行动。所以这是我第一次尝试全力以赴地去推出一款产品,并白手起家创建属于自己的公司。

记者: 你有什么计算机视觉和深度学习方面的经历背景吗?又是如何开始对这个领域感兴趣的呢?

Brandon: 和大多数电气工程师一样,我在大学中学习了计算机视觉的课程(现在看来那已经是16年前了!),在线性系统等课程中了解了传统的计算机功能。但是起初,我的职业发展轨迹和计算机视觉或深度学习领域没有任何的交集,但当我的导师从我们共同就职的公司离职时,一切都变了。

我很喜欢当时的工作,他也很喜欢(他当时是公司的天线设计师),所以他的离职就更让人觉得匪夷所思。

我曾问过他为什么要离职,他告诉我说:“AI和深度学习将会颠覆所有的行业,这或许是我职业生涯中最大的机会——我必须要搏一次!”

那时候我还不太了解深度学习,上一次提到“人工智能”这个词还是2004年的时候。当时我的大学室友在Lisp中尝试了人工智能技术,但结果却很不理想。所以从2004年到2016年年中,我一直以为人工智能模型是“毫无用处”的。

后来,当这位我十分尊敬的导师离开了我们都很喜欢的工作,并全身心地投入到人工智能/机器学习/深度学习工作中时,我感到无比震惊,这才睁开眼睛重新审视这个领域。

那天我回到家,在谷歌上搜索了“深度学习”、“机器学习”、“人工智能”等关键词。然后在接下来的一年里,我都沉迷其中,把所有的空闲时间(甚至连上厕所的时间都不放过)都花在了PyImageSearch上,学习网站上的教程,并密切关注TowardsDataScience、MIT Technology上的评论。

OpenCV AI Kit (OAK) 创始人Brandon Gilles访谈全记录
OpenCV AI Kit (OAK)。OAK-D具备立体深度(左图)功能,而便宜一点的OAK-1(右图)相对体积较小,但没有深度功能

记者: 我们来聊聊此次OpenCV AI Kit 在Kickstarter上的活动吧。我记得你第一次跟我提到这个项目是在2018年,不过当时它还叫“DepthAI”。你是通过什么样的契机提出的DepthAI呢?又是如何对其进行验证,并最终成长为OpenCV AI Kit的呢?

Brandon: 过程确实有点曲折,它中途换过好几次名字(我对此也感到很抱歉)。当时我身边的朋友和家人遇到了一些状况,导致我想做一些事情以提供力所能及的帮助。

当时我原本想运用新技术做一款激光枪战游戏(对玩家、墙壁、建筑物等进行强化)。所以在2017年,我从原公司离职,开启了自己的全职CV/ML工作生涯,想要通过技术突破来设计出一款能够适配现有激光枪战设备的多玩家 AR系统。

但就在那个时候,前后大约一周的时间里,我家人和朋友的身边(他们的朋友、亲戚、或同事)发生了很多起交通意外。虽然事故并没有发生在我最亲近的人身上,但这些故事还是对我产生的巨大的影响。

我父亲最好的朋友被车从后面撞倒,导致背部、股骨和臀部多处骨折,伤情十分严重,在床上躺了9个月消肿后才进行了手术;同时,我好朋友的生意伙伴也遇到了类似的经历;而我大学时一起滑雪的伙伴也遭遇了同样的意外,甚至还受了脑外伤;我所在的黑客空间创始人的合作伙伴也死于交通事故(被汽车的后视镜击中了脖子,当场死亡)。

所以突然间,我感觉自己设计的这个增强现实激光系统似乎不太合时宜。鉴于我已经花了数年时间研究计算机视觉、机器学习、深度学习以及其他新兴技术,所以我开始思考如何能构建一个预防此类事故的嵌入式系统。

如果在事故发生前汽车能靠左行驶12英寸的话,就可以避免悲剧的发生了。几年前我曾见识过Jonathan Lansey的LOUD Bicycle 在Kickstarter上众筹的效果,那正是我想要的!我要设计一个能够为骑行者和汽车司机提供警示的系统,从而防止交通悲剧的发生。

在我看来,如果计算机视觉和深度学习能够在分析CT扫描图像方面胜过医生;在图像分类、目标检测、3D感知等方面胜过人脑,那么也一定有方法能创造出保障人们生命安全的设备。

在我的构想中,这款设备就相当于是骑行在你身后的朋友,当后面有汽车可能会撞向你时,他就会闪起LED强光;当车辆真的要撞上来的时候,他会提前开始鸣笛(但实际音量非常小),留出避让的时间。此后,我利用从PyImageSearch上学到的知识,以及从Github上获取的Katsuya Hyodo (PINTO0309)制作出了第一款能够实现上述目标的原型:

OpenCV AI Kit (OAK) 创始人Brandon Gilles访谈全记录
Brandon对日后OpenCV AI Kit的最初灵感

虽然这个原型体积巨大,也不够美观,但它却能达到最初的设计目的!我在原型设计和测试的过程中学到了一件非常重要的事情:

深度+适度对象检测能简化问题的解决过程,并且在减少代码/工作量的基础上顺利运行。

现在,当初的构想已经实现了,能够通过各种反馈来为骑车的人们提供警示,如闪烁的led灯,甚至还有超级大声的喇叭。这教会了我第二件重要的事:

尽管有单独的组件(深度摄像头、AI处理器、嵌入式CPU等),但仍无法将其构建成小型的嵌入式产品(由于体积太大、过于笨重,所以没办法将其放置在自行车座椅下,而且成本也较高)。

但巧的是,当时Myriad X刚开始发售,它具备的CV/AI功能刚好可以解决上述问题,但必须要有U盘或PCIE卡,可是二者都无法嵌入使用,也都不适用深度引擎以及其他CV加速功能(运动估计、边缘检测、目标跟踪、特征跟踪、视频编码、等等)。所以U盘/PCIE无法应用于嵌入式或神经推理以外的应用程序。

在面对这个问题的时候,我和我背后的团队要么就选择彻底放弃,要么就主动去建造一个新平台。我们选择去构建新平台——当时将其称为DepthAI。在进行过一段时间的初步销售后(你当时也发布了有关我们平台的推特),OpenCV 的Mallick博士找到我们,想要接管这个平台,并将其作为解决此类嵌入式CV&AI问题的OpenCV的核心部分。

**记者:**我们来聊一下OpenCV AI Kit背后的硬件吧。是什么推动了这款嵌入式设备的制作呢?作为深入学习/计算机视觉从业者,我们又为什么要了解OpenCV AI 呢?

Brandon: 我们选择Myriad X的原因是,它在低能耗的芯片中满足了我们所需的一切功能。
1. 实时神经推理(几乎涵盖了所有的网络)
2. 立体深度
3. 特征跟踪,包括运动估计和平台运动估计
4. 对象跟踪
5. H.265/H.264编码(用于记录事件,或单纯的进行记录)
6. JPEG 编码
7. 16x高效矢量处理器,用于将所有功能组合在一起并运行加速CV函数(可以将其视为链接嵌入式特定视觉GPU)。

作为一名电气工程师,我说:“那太好了,我只要有芯片和SDK就够了!”我发现,该芯片唯一的SDK是用于神经推理的……市场上的其他产品(计算棒、PCIE卡等)都无法使用其他功能,只能进行推理。

所有这些功能结合在一起,最终使其成为了我们的不二之选。在U盘或PCIE中的应用其实只发挥了它1/7的功能(如果加上其他被我忘记的功能的话,也就只发挥了1/10的样子)。

至此,我们有了芯片,并且获得了所需的功能。简而言之,我们发掘了Myriad X的真正潜力——它将所有功能结合在一起,可以解决Spatial AI的问题。

Spatial AI是借助人工智能来获得物理坐标的功能——确定目标的位置(以米为单位)。这正是我们要进行实时监控和跟踪车辆3D轨迹时所需要的功能。

记者: 这样看来,OpenCV AI Kit不仅仅是一个嵌入式人工智能板。它还是一个API,对吗?那用户是如何与API进行交互的呢?它与Python和OpenCV兼容吗?

Brandon: 问得好。人们关于这个平台的最大困惑是“它不过就是另一个主板而已”。虽然硬件很重要(因为它能为Myriad X提供所需的支持),但更关键的是API,以及我们配置Myriad X硬件块的新方式:以简单的方式提供所有功能。我们花了大量的时间来优化缓存、芯片内部通信系统和DDR通信,进行了大量的重写,最终让Myriad X能够实现上述功能。

我们通过一个简单的API公开了这一消息:兼容Python和OpenCV。它实际上是借助pybind11用C++编写而成的(也是开源的,因此能够在可以编译OpenCV的任何平台上进行编译),提供了Python中的API功能。简而言之,C++接口和直接编程也可以完成。

Kickstarter侧重于OAK的USB接口版,但我们正在做SPI接口版的后台……这样一来,就可以连接到其他系统,例如没有操作系统的微控制器。该项目可能会在Kickstarter活动结束时实现开源。

记者: 你在嵌入式系统、主板设计和制造方面有着丰富的经验,那在制造OpenCV AI Kit的过程中,遇到的最大难题是什么?又是如何解决的呢?

Brandon:最具挑战性的其实是零部件采购,特别是摄像头的采购。过去的几十年里,我们见证了各个领域的信息透明化趋势以及组件购买便捷性趋势,但这波浪潮还没有进入摄像头模块市场,该市场仍然非常不透明且固化。在我看来,市场已经濒临瓦解。

在这种情况下,我们需要花费大量的时间与供应商进行沟通、下订单、进行协商谈判。除此以外,制造过程和供应链一直都运行顺利。在Kickstarter众筹之前,我们在试运行中获得了99.7%的收益率,这一结果还是很振奋人心的。

OpenCV AI Kit (OAK) 创始人Brandon Gilles访谈全记录
图4:如果你想学习如何在自己的数据集上训练深度学习模型,可以看一看《Deep Learning for Computer Vision with Python》

记者:你作为PyImageSearch的忠实读者和用户,也读过《Raspberry Pi for Computer Vision》和《Deep Learning for Computer Vision with Python》两本书。那么你是如何使用这些书来帮助自己开发OpenCV AI Kit的呢?

Brandon:其实我们团队会一起团购你们的每一本书(其中大部分都是在我们合作之前就买了的)。

PyImageSearch能帮助我们缩短构建原型所需的时间。有了你们的教程和书,我们只需要20秒就可以解决原本可能要花10个小时才能搞清楚的问题。因为书中对各类代码库和机器学习技术的运行方法都进行了详细说明。

所以,PyImageSearch能帮助我们快速构建原型,了解借助计算机视觉解决此类问题的可行性。正因如此,我们才发现:并非所有人都可以使用Myriad X的功能。PyImageSearch帮助我们了解自身的任务,并协助任务的顺利运行,避免不必要的麻烦。

**记者:**你会向其他想要学习计算机视觉和深度学习的开发人员、学生、研究员推荐《Raspberry Pi for Computer Vision》和《Deep Learning for Computer Vision with Python》吗?

**Brandon:**当然会!我之前完全不了解自己的想法在技术层面是否可行,但PyImageSearch向我展示了其可行性,并协助我实现系统的顺利运行。

如果你对这个行业感兴趣的话,这两本书一定可以帮助你加深了解,并掌握解决实际问题的方法。

**记者:**对于那些想追随你的脚步,学习计算机视觉和深度学习,然后在CV/DL领域推出产品的人,你有什么建议吗?

Brandon:大家可以从PyImageSearch教程入手。我曾花大量的时间来阅读理论知识和最新技术进展信息,但后来我才发现,只有当我开始真正着手运行PyImageSearch代码,并通过修改代码来解决实际问题时,一切才真正开始。

**记者:**如果有PyImageSearch的读者想和你聊一聊的话,有没有什么可以联系你的方式呢?

**Brandon:**我一直坚信工程师是一个需要与他人进行直接交流的职业,因此我们开通了几种交流途径:首先,可以在我们的社区频道(https://luxonis-community.slack.com/)找到我。只要我醒着,就经常会出现在那里。此外,还可以通过我们的网络论坛(https://discuss.luxonis.com/)与我进行交流。大家也可以随时给我发邮件,邮箱地址是:brandon@luxonis.com。
总结

以上便是我们对身为企业家、PyImageSearch 读者及用户、OpenCV AI Kit 创建者的Brandon Gilles的采访全记录。

本文转载自:https://www.pyimagesearch.com/2020/07/20/an-interview-with-brandon-gilles-creator-of-the-opencv-ai-kit-oak/
作者:Adrian Rosebrock

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
5个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这