Darknet-53 和多尺度预测的增量改进(YOLOv3)
用 Darknet-53 和多尺度预测的增量改进(YOLOv3)
在本教程中,您将了解 YOLOv2 中所做的改进;更具体地说,我们将看看设计的变化,大大提高了 YOLO 的性能,产生了一个新版本的 YOLO 称为 YOLOv3。YOLOv3 和它的前辈之间的显著区别在于称为 Darknet-53 的网络架构,我们将在本教程的下一节详细探讨这一点。我们还将演示如何使用 YOLOv3 模型在 80 类 MS COCO 数据集上进行预训练。
YOLOv3 是 2019 年实时物体检测方面最好的模型之一。
如果你按照之前关于 YOLO 的教程学习,那么理解这并不是一个挑战,因为没有太多的修改,而且大多数概念都是从 YOLOv1 和 YOLOv2 中获得的。
这一课是我们关于 YOLO 的 7 集系列的第 5 集:
- YOLO 家族简介
- 了解一个实时物体检测网络:你只看一次(YOLOv1)
- 更好、更快、更强的物体探测器(YOLOv2)
- 使用 COCO 评估器 平均精度(mAP)
- 用 Darknet-53 和多尺度预测的增量改进(YOLOv3) (今日教程)
- 【yolov 4】
- 在自定义数据集上训练 YOLOv5 物体检测器
要了解 YOLOv3 对象检测器的网络架构修改,并观看实时检测对象的演示,请继续阅读。
增量改进与 Darknet-53 和多尺度预测(yolov 3)
在 YOLO 系列的第 5 部分中,我们将从介绍 YOLOv3 开始。然后,我们将简要回顾 YOLO 物体检测的一般概念。
从那里,我们将详细讨论 YOLOv3 的新 Darknet-53 架构,包括:
- 预训练阶段
- 检测阶段
- 跨三个尺度的预测
- 网络输出预测张量
- 特征抽出
- 锚箱的使用
- 损失函数的修正:用 sigmoid 进行分类预测
我们将讨论 YOLOv3 与 fast-RCNN、YOLOv2、SSD 和 RetinaNet 的定量基准比较。
最后,我们将通过安装 Darknet 框架并在 Tesla V100 GPU 上使用 MS COCO pretrained 模型对图像和视频运行推理,将 YOLOv3 投入实际使用。
配置您的开发环境
要遵循这个指南,您需要在您的系统上编译并安装 Darknet 框架。在本教程中,我们将使用 AlexeyAB 的 Darknet 库。
我们涵盖了在 Google Colab 上安装 Darknet 框架的逐步说明。但是,如果您现在想配置您的开发环境,可以考虑前往配置 Darknet 框架并使用预训练的 YOLOv3 COCO 模型运行推理部分。
在配置开发环境时遇到了问题?
说了这么多,你是:
- 时间紧迫?
- 了解你雇主的行政锁定系统?
- 想要跳过与命令行、包管理器和虚拟环境斗争的麻烦吗?
- 准备好在您的 Windows、macOS 或 Linux 系统上运行代码***?***
*那今天就加入 PyImageSearch 大学吧!
获得本教程的 Jupyter 笔记本和其他 PyImageSearch 指南,这些指南是 预先配置的 **,可以在您的网络浏览器中运行在 Google Colab 的生态系统上!**无需安装。
最棒的是,这些 Jupyter 笔记本可以在 Windows、macOS 和 Linux 上运行!
约洛夫 3 简介
继 YOLOv2 论文之后,2018 年,约瑟夫·雷德蒙(华盛顿大学研究生)和阿里·法尔哈迪(华盛顿大学副教授)发表了关于 arXiv 的 YOLOv3:增量改进论文。作者对网络体系结构进行了许多设计上的修改,采用了以前 YOLO 版本中的大多数其他技术。
YOLOv3 论文介绍了一种新的网络架构,称为 Darknet-53,与 YOLOv2 中的 Darknet-19 架构相对。Darknet-53 是一个比以前更广泛的网络,但更准确和更快。它以不同的图像分辨率进行训练,如 YOLOv2 所示;在
resolution, YOLOv3 achieves 28.2 mAP runs at 45 FPS and is as accurate as Single-Shot Detector (SSD321) but 3x faster (Figure 2). The authors performed the quantitative benchmarks on the Titan X GPU.
与之前不同的是,在 YOLOv3 中,作者在不同的借据上比较地图;在 0.5 IOU 时,它达到 57.9
in 51ms compared to 57.5 in 198 ms by RetinaNet-101-800. Thus, though both achieve almost the same mAP, YOLOv3 is 3.8x faster than RetinaNet.
什么是 YOLO?
YOLO 代表“你只看一次”它是一个单级对象检测器,利用卷积神经网络的能力来检测给定图像中的多个对象。它将图像划分为一个网格,并为图像的每个网格单元预测分类概率和盒子坐标。
YOLO 在整个图像上应用单个神经网络,并且在单个网络通道中检测对象。这种体系结构在精神上类似于图像分类网络,在该网络中,对象在单次正向传递中被分类。因此,YOLO 比其他最先进的检测器更快,是许多工业应用的理想选择。
Darknet-53 网络架构
**表 1 显示了由 53 个卷积层组成的 Darknet-53 架构,用作对象检测网络或特征提取器的基础。使用 ImageNet 数据集对 53 个图层进行影像分类任务的预训练。对于对象检测任务,在基础/主干网络之上又堆叠了 53 层,使其总共为 106 层,并且我们得到了被称为 YOLOv3 的最终模型。
在 YOLOv2 中,作者使用了一个由 19 层组成的小得多的网络;然而,随着深度学习领域的发展,我们被引入了更广泛、更深入的网络,如 ResNet、DenseNet 等。受新分类网络的启发,YOLOv3 比其前身更深入,并借鉴了残余块(跳过加法连接)和跳过串联连接等概念,以避免消失梯度问题,并帮助传播有助于预测不同比例对象的信息。
YOLOv3 网络架构中需要注意的重要部分是残差块、跳过连接和上采样层。
Darknet-53 网络架构比 Darknet-19 更强大,比 ResNet-101 和 ResNet-152 更高效。如表 2 所示,Darknet-53 每秒执行的浮点运算比其他主干架构多十亿次,效率很高。这也意味着网络结构更好地利用了 GPU,使其评估更有效,从而更快。此外,在 Top-1 和 Top-5 图像分类精度方面,Darknet-53 的性能优于 Darknet-19,性能与 ResNet 相似。以下结果是在 ImageNet 数据集上进行的基准测试,推理是在 Titan X GPU 上计算的。
预训练阶段
在预处理步骤中,使用 ImageNet 数据集在图像分类任务上训练 Darknet-53 架构。该架构简单明了,但是让我们看看一些主要的组件。在每个卷积层之后,残差组(用矩形示出)具有不同的残差块,例如 1x、2x、4x 和 8x。为了对特征图的空间维度进行下采样,在每个残差组之前使用步长为 2 的步长卷积。这有助于防止低级特征的丢失,并对用于物体检测的位置信息进行编码;此外,由于步长卷积有参数,下采样不会像最大池那样完全没有参数。它提高了探测更小物体的能力。
滤波器的数量从 32 开始,并且在每个卷积层和残差组加倍。每个剩余块都有一个瓶颈结构
filter followed by a filter followed by a residual skip connection. Finally, for image classification in the last layers, we have a fully connected layer and a softmax function for outputting a 1000 class probability score.
检测阶段
在检测步骤中,移除最后一个剩余组之后的层(即,分类头),为我们的检测器提供主干。由于 YOLOv3 应该在最后三个残差组的每个残差组中检测多个尺度的对象,因此附加了一个检测层来进行对象检测预测,如图图 3 所示。下图显示了三个残差组的输出被提取为三个不同比例的特征向量,并输入检测机。假设网络的输入是
, the three feature vectors we obtain are , , and , responsible for detecting small, medium, and large objects, respectively.
预测跨越三个尺度
在以前的 YOLO 体系结构中,检测只发生在最后一层;然而,在 YOLOv3 中,在网络的三个不同阶段/层检测对象,即 82、94 和 106 ( 图 4) 。
该网络使用类似于要素金字塔网络或 FPN 的概念从三个等级中提取要素。金字塔网络是什么特征我们就不细说了,简而言之,FPN 的结构有自下而上的通路,自上而下的通路,横向连接(图 5) 。使用 FPN 的想法是改进具有不同级别语义的 ConvNet 金字塔特征层次,并构建具有高级语义的特征金字塔。目标是将信息丰富的低分辨率特征(在网络的较后层)与高分辨率特征(在网络的初始层)相结合。因此,FPN 有助于改善识别尺度差异极大的物体的问题。
从图 6 中,我们可以看到在基本特征提取器之上增加了几个卷积层。每个尺度的最后一层预测 3D 张量编码:边界框坐标、客观分数和类别预测。对于 COCO 数据集,在每个尺度上预测三个边界框(每个尺度三个框先验/锚)。所以输出预测张量是
for the four bounding box offsets, one objectness score prediction, and 80 class predictions. For detecting medium-scale objects, large-scale features are upsampled and concatenated. Similarly, for detecting small-scale objects, medium-scale features are upsampled and concatenated. This setting allowed small-scale detection to benefit from both medium and large detections.
通过对不同比例的要素进行上采样和连接,网络可以从早期要素地图中获取更精细的信息,并从上采样后的图层要素地图中获取更有意义的语义信息。
与 YOLOv2 类似,为了选择精确的先验/锚,作者使用
-means clustering in YOLOv3. But instead of five, in YOLOv3, nine clusters are selected, dividing them evenly across the three scales, which means three anchors for each scale per grid cell.
类预测
YOLOv1 和 YOLOv2 都使用平方和误差进行边界框类预测,而不是通常使用的 softmax(用于多标签分类)。然而,在 YOLOv3 中,类别预测被视为多标签分类问题,这意味着类别标签被视为相互不排斥的。作者发现,使用 sigmoid 或 logistic 分类器来预测每个边界框的类别标签比 softmax 更有益。
在训练期间,二元交叉熵损失用于类别预测。当我们移动到更复杂的数据集,如开放图像数据集时,该设置很有帮助。此数据集包含许多相互不排斥(或重叠)的标签,如女人和人;因此,使用 softmax 会强加一个假设,即每个盒子恰好有一个类,但事实往往并非如此。多标记方法可以更好地模拟数据。
定量结果
本节比较 YOLOv3(用训练
input resolution) with state-of-the-art two-stage and single-stage object detectors benchmarked on the COCO dataset. As shown in Table 3, YOLOv3 does a decent job in mAP though it’s not the best. The table shows various AP columns; however, in previous YOLO versions, the performance was benchmarked on just AP50 (i.e., at 0.5 IOU). These different AP columns measure the performance of the models in a more fine-grained way; here, AP{50,75} is average precision at 0.5 and 0.75 IOU, AP{s,m,l} means average precision for small, medium, and large objects.
我们从图 2 中了解到,YOLOv3 的性能与 SSD 版本相当,但速度快了 3 倍。和 RetinaNet 等其他机型还是有相当距离的。当我们查看 AP50 结果时,YOLOv3 做得相当好,表现与几乎所有检测器相当。但是,当我们将 IOU 阈值增加到 0.75 时,性能会显著下降,这表明 YOLOv3 很难让盒子与对象完全对齐。早期的 YOLO 版本很难检测到小物体,但 YOLOv3 凭借其多尺度训练方法,表现相对较好,达到 18.3 APs。但是,它在中型和大型对象上的性能相对较差。
从这些结果中,我们可以得出结论,YOLOv3 在 AP50 时表现更好,当然是所有其他物体探测器中最快的。
用预先训练好的 YOLOv3 COCO 模型 配置暗网框架并运行推理
在我们之前关于 YOLOv1 和 YOLOv2 的两篇文章中,我们学习了如何配置 Darknet 框架,并使用预训练的 YOLO 模型进行推理;我们将遵循与配置 Darknet 框架之前相同的步骤。然后,最后,用 YOLOv3 预训练模型运行推理,看它比以前的版本执行得更好。
配置 Darknet 框架并使用 YOLOv3 在图像和视频上运行推理分为八个易于遵循的步骤。所以,让我们开始吧!
注意: 请确保您的机器上安装了匹配的 CUDA、CUDNN 和 NVIDIA 驱动程序。对于这个实验,我们使用 CUDA-10.2 和 CUDNN-8.0.3。但是如果你计划在 Google Colab 上运行这个实验,不要担心,因为所有这些库都预装了它。
步骤#1: 我们将在本实验中使用 GPU,以确保 GPU 正常运行。
# Sanity check for GPU as runtime
$ nvidia-smi
图 7 显示了机器(即 V100)、驱动程序和 CUDA 版本中可用的 GPU。
第二步:我们将安装一些库,比如 OpenCV,FFmpeg 等等。,这在编译和安装 Darknet 之前是必需的。
# Install OpenCV, ffmpeg modules
$ apt install libopencv-dev python-opencv ffmpeg
步骤#3: 接下来,我们从 AlexyAB 存储库中克隆 Darknet 框架的修改版本。如前所述,Darknet 是由 Joseph Redmon 编写的开源神经网络。用 C 和 CUDA 编写,同时支持 CPU 和 GPU 计算。暗网的官方实现可在:【https://pjreddie.com/darknet/;我们会下载官网提供的 YOLOv3 砝码。
# Clone AlexeyAB darknet repository
$ git clone https://github.com/AlexeyAB/darknet/
$ cd darknet/
确保将目录更改为 darknet,因为在下一步中,我们将配置Makefile
并编译它。此外,使用!pwd
进行健全性检查;我们应该在/content/darknet
目录里。
步骤#4: 使用流编辑器(sed
),我们将编辑 make 文件并启用标志:GPU、CUDNN、OPENCV 和 LIBSO。
图 8 显示了Makefile
内容的一个片段,稍后会讨论:
- 我们让
GPU=1
和CUDNN=1
与CUDA
一起构建暗网来执行和加速对GPU
的推理。注意CUDA
应该在/usr/local/cuda
;否则,编译将导致错误,但如果您正在 Google Colab 上编译,请不要担心。 - 如果你的
GPU
有张量核,使CUDNN_HALF=1
获得高达 3 倍的推理和 2 倍的训练加速。由于我们使用具有张量内核的 Tesla V100 GPU,因此我们将启用此标志。 - 我们使
OPENCV=1
能够用 OpenCV 构建 darknet。这将允许我们检测视频文件、IP 摄像头和其他 OpenCV 现成的功能,如读取、写入和在帧上绘制边界框。 - 最后,我们让
LIBSO=1
构建darknet.so
库和使用这个库的二进制可运行文件uselib
。启用此标志将允许我们使用 Python 脚本对图像和视频进行推理,并且我们将能够在其中导入darknet
。
现在让我们编辑Makefile
并编译它。
# Enable the OpenCV, CUDA, CUDNN, CUDNN_HALF & LIBSO Flags and Compile Darknet
$ sed -i 's/OPENCV=0/OPENCV=1/g' Makefile
$ sed -i 's/GPU=0/GPU=1/g' Makefile
$ sed -i 's/CUDNN=0/CUDNN=1/g' Makefile
$ sed -i 's/CUDNN_HALF=0/CUDNN_HALF=1/g' Makefile
$ sed -i 's/LIBSO=0/LIBSO=1/g' Makefile
$ make
make
命令将需要大约 90 秒来完成执行。既然编译已经完成,我们就可以下载 YOLOv3 权重并运行推理了。
步骤#5: 我们现在将从官方 YOLOv3 文档中下载 YOLOv3 COCO 砝码。
# Download YOLOv3 Weights
$ wget https://pjreddie.com/media/files/yolov3.weights
步骤#6: 现在,我们将运行darknet_images.py
脚本来推断图像。
# Run the darknet image inference script
$ python3 darknet_images.py --input data --weights \
yolov3.weights --config_file cfg/yolov3.cfg \
--dont_show
让我们来看看传递给darknet_images.py
的命令行参数:
--input
:图像目录或文本文件的路径,带有图像路径或单个图像名称。支持jpg
、jpeg
和png
图像格式。在本例中,我们将路径传递给名为data
的图像文件夹。--weights
: YOLOv3 加权路径。--config_file
:yolo v3 的配置文件路径。在抽象层次上,该文件存储神经网络模型架构和一些其他参数,如batch_size
、classes
、input_size
等。我们建议您通过在文本编辑器中打开该文件来快速阅读它。- 这将禁止 OpenCV 显示推理结果,我们使用它是因为我们正在与 Google Colab 合作。
在对下面的图像运行 YOLOv3 预训练的 MS COCO 模型后,我们了解到该模型几乎不会出错,并且可以完美地检测到所有图像中的对象。此外,与 YOLOv1 和 YOLOv2 相比,yolo v2 很少出现假阳性和假阴性,YOLOv3 的表现优于两者,事实上,它检测到的对象具有非常高的置信度。
我们可以从图 9 中看到,该模型以几乎 100%的高置信度正确预测了狗、自行车和卡车。
在图 10 中,模型再次以 100%的置信度正确检测到所有三个对象。如果你还记得, YOLOv1 检测出一匹马是一只羊,而 YOLOv2 两次预测出一匹马是马和羊。
在图 11 中,该模型检测出了五匹马中的四匹,并且具有非常高的置信度得分。然而,回想一下 YOLOv1 和 YOLOv2 都在这个图像中挣扎,要么预测一匹像牛一样的马,要么没有检测到四匹马中的一匹,并且两个模型都以非常低的置信度预测它们。
最后,在图 12 中,YOLOv3 模型预测一只鹰是一只类似于 YOLOv1 和 YOLOv2 的鸟。
步骤#7: 现在,我们将在电影《天降》的视频上运行预训练的 YOLOv3 模型;这是作者在他们的一个实验中使用的同一段视频。
在运行darknet_video.py
演示脚本之前,我们将首先使用pytube
库从 YouTube 下载视频,并使用moviepy
库裁剪视频。所以让我们快速安装这些模块并下载视频。
# Install pytube and moviepy for downloading and cropping the video
$ pip install git+https://github.com/rishabh3354/pytube@master
$ pip install moviepy
在2 号线和 3 号线上,我们安装了pytube
和moviepy
库。
# Import the necessary packages
$ from pytube import YouTube
$ from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
# Download the video in 720p and Extract a subclip
$ YouTube('https://www.youtube.com/watch?v=tHRLX8jRjq8'). \ streams.filter(res="720p").first().download()
$ ffmpeg_extract_subclip("/content/darknet/Skyfall.mp4", \
0, 30, targetname="/content/darknet/Skyfall-Sample.mp4")
在2 号线和 3 号线,我们导入pytube
和ffmpeg_extract_subclip
模块。在第 6-8 行,在导入模块的帮助下,我们从 YouTube 上下载了 720p 分辨率的 Skyfall 视频。然后,我们使用moviepy
的ffmpeg_extract_subclip
模块从下载的视频中提取子片段(前 30 秒)。
**第 8 步:**最后,我们将运行darknet_video.py
脚本来为天崩地裂的视频生成预测。我们打印输出视频每一帧的 FPS 信息。
如果使用 mp4 视频文件,请务必在darknet_video.py
的第 57 行将set_saved_video
功能中的视频编解码器从MJPG
更改为mp4v
;否则,播放推理视频时会出现解码错误。
# Change the VideoWriter Codec
fourcc = cv2.VideoWriter_fourcc(*"mp4v")
既然所有必要的安装和修改都已完成,我们将运行darknet_video.py
脚本:
# Run the darknet video inference script
$ python darknet_video.py --input \
/content/darknet/Skyfall-Sample.mp4 \
--weights yolov3.weights --config_file \
cfg/yolov3.cfg --dont_show --out_filename \
pred-skyfall.mp4
让我们看看传递给darknet_video.py
的命令行参数:
--input
:视频文件的路径,如果使用网络摄像头,则为 0--weights
: YOLOv3 重量路径--config_file
:yolo v3 的配置文件路径--dont_show
:这将禁止 OpenCV 显示推理结果--out_filename
:推理结果输出视频名称,如果为空则输出视频不保存。
下面是对天崩地裂动作场景视频的推断结果。预测必须比 YOLOv1 和 YOLOv2 更好,因为网络学会了在多个尺度上预测,从而减少了假阴性的机会。此外,YOLOv3 在 COCO 数据集上接受了 80 个类的训练(相比之下,VOC 中有 20 个类),因此您会看到更多的对象类别被检测到,如 VOC 数据集中不存在的瓶子或领带。YOLOv3 网络在混合精度的特斯拉 V100 GPU 上实现了平均 100 FPS 。
https://www.youtube.com/embed/p2dt4lljyLc***
采访 Adam Geitgey,人脸识别 Python 库的创造者
你可能已经注意到,在过去的几周里,我们在 PyImageSearch 博客上经常使用一个叫做face_recognition
的特殊 Python 包:
- 我们首先用它来建立一个人脸识别系统
- 然后我们将人脸识别应用于树莓派
- 最近我们对人脸进行聚类,以在数据集中找到独特的个体
没有(1)face_recognition
模块和(dlib 库,就不可能创建这些人脸识别应用程序。
今天,我很高兴与大家分享对亚当·盖特基的采访,他是face_recognition
图书馆的创建者。
在采访中,亚当讨论了:
- 他如何以及为什么创建了
face_recognition
Python 模块 - 使用 RNNs 生成新的超级马里奥兄弟视频游戏水平
- 他最喜欢的工具和选择的库
- 作为 PyImageSearch 的读者,他对你的建议是,如何开始研究计算机视觉和深度学习
- 他在基于深度学习的细分、自动驾驶汽车和卫星/航空摄影方面的工作
要查看 Adam 的完整邮件,请继续阅读!
采访 Adam Geitgey,人脸识别 Python 库的创造者
阿德里安:嘿,亚当!谢谢你今天来到这里。很高兴你能来到 PyImageSearch 博客。对于不认识你的人,你是谁,你是做什么的?
亚当:嗨,阿德里安!谢谢你邀请我!
我从小就开始编程。当我七岁的时候,我开始从我能找到的任何书籍中自学 Basic 和 Pascal。所以从我记事起,我就对编程很感兴趣。
这让我最终从事各行各业的软件工作——从中国的 3D CAD 软件到硅谷的初创企业。在过去的一年半时间里,我一直在为 LinkedIn Learning 创建机器学习教育课程,并做咨询项目。最近,我一直在与比尔和梅林达盖茨基金会的一个人工智能项目团队合作。
这是在说我不是在大学里专门研究机器学习的人。我有更传统的计算机科学和软件工程背景,我在职业生涯的后期进入了机器学习领域。
Adrian: 你最初是如何对机器学习和计算机视觉产生兴趣的?
当我在大学的时候,我对当时所谓的“人工智能”并不感兴趣。这发生在 2000 年左右,比 GPU 使大型神经网络实用化早了几年。在那一点上,整个人工智能领域对我来说就像一个科幻幻想,我对如何使用计算机解决更直接的问题更感兴趣。
但是几年后,我读了彼得·诺维格的“如何写拼写纠正器”的文章。它解释了用概率来解决一个本来很难解决的问题的想法。这完全让我大吃一惊!我觉得我已经错过了一个完全平行的编程世界,我开始学习我能学的一切。这导致了机器学习,计算机视觉,自然语言处理和其他一切。
Figure 1: One of Adam’s most popular Machine Learning is Fun! articles is on face recognition.
**阿德里安:**你的 机器学习很有趣!你博客上的 系列很棒——是什么激发了你创作它的灵感?
每当我学习新东西时,无论是摄影、音乐理论还是机器学习,当我觉得学习材料可以更简单、更直接时,我就会感到沮丧。
某个领域的专家倾向于为其他未来的专家写作。但对我来说,更具挑战性和更有趣的是,尝试将一个话题简化为最基本的内容,并以任何人都能理解的方式呈现出来。我痴迷于试图将复杂的话题分解成最简单的形式。这可能与我的学习方式有很大关系——我喜欢在挖掘细节之前先了解全局。
对于任何一个程序员来说,这里有一些免费的职业建议——如果你能写非常清晰简单的电子邮件,解释你的团队正在解决的问题,这将会让你在大型科技公司的职业生涯中走得更远。
Figure 2: Adam used RNNs to generate new levels of the Super Mario Bros video game.
阿德里安:你在*写的最喜欢的文章是什么?机器学习很有趣!*为什么?
Adam: 我喜欢使用计算机作为创意工具的想法,并探索人类生成的艺术和计算机生成的艺术之间的界限。我写了一篇关于使用 RNNs 生成新的超级马里奥兄弟视频游戏关卡的文章。
Adrian: 你的人脸识别库是 GitHub 上最受欢迎的人脸识别库之一。我甚至在过去的三篇博文中都用过!你能告诉我们更多创建它的过程吗?
几乎每周都有令人兴奋的新研究论文问世,其中很多都包含工作代码。这是一个令人惊叹的程序员时代!问题是大多数研究代码都是作为一次性实验编写的。在您可以在生产应用程序中使用它之前,通常必须重写它。
我在用 Python 寻找一个好的人脸识别解决方案,但是我找到的所有东西都是用几种不同的编程语言拼凑起来的,并且需要下载额外的文件。我写了一篇关于人脸识别如何工作的文章,但是我收到的大多数问题都来自那些不能正确安装库的读者。我想要像“pip install face_recognition”一样简单的部署。
大约在那个时候, Davis King 更新了他优秀的 dlib 库,加入了一个新的人脸识别模型。这看起来非常适合我想做的事情。因为 Davis 已经完成了大部分艰苦的工作,所以我所要做的就是用我喜欢的 API 把它打包,写一堆文档和例子,然后让它托管在 pip 上。老实说,整个过程中最困难的部分是说服运行 pip 的人托管它,因为它比他们通常允许的最大文件大小要大。
**阿德里安:**你见过的最酷/最整洁的项目是什么?
人们已经用它来构建各种各样的东西,比如在教室里使用人脸识别来自动点名的工具。但对我来说最酷的是一个用户,他使用人脸识别模型生成的编码作为输入来训练情绪检测模型。迁移学习真的很酷,我喜欢利用现有模型建立新模型的想法。
Figure 3: Some of Adam’s favorite libraries include Keras, spaCy, fastText, NumPy, and Pandas.
阿德里安:你有哪些工具和库可供选择?
我断断续续用 Python 编码大约有 20 年了,我在所有的机器学习项目中都使用它。最好的部分是所有令人惊叹的图书馆!
我最喜欢的一些库是用于训练新神经网络的 Keras ,用于自然语言处理的 spaCy ,以及用于快速建立文本分类模型的 fastText 。知道如何很好地使用 numpy 和 Pandas 将会为你节省很多清理数据的时间。
还有,我真的很喜欢 Python 3.6 和 3.7 最近的变化。如果你还在用 Python 2,那绝对是时候升级了!
阿德里安:接下来是什么?你正在进行什么类型的项目?
我正在撰写一系列关于自然语言处理的新文章。如果你想学习如何用电脑理解书面文字,请关注我的网站上的新帖子!
Adrian: 对于刚开始学习计算机视觉和深度学习的读者,你有什么建议吗?
如果你是 Python 编程语言的新手,花点时间好好学习语法和语言结构。从长远来看,这会节省你很多时间。我得到的许多问题实际上只是 Python 语法问题或误解。这是一种与 C++或 Java 非常不同的语言。
除此之外,学习训练模型的基本概念,然后直接投入到你感兴趣的项目中进行尝试!通过实践,你会学到比阅读更多的东西。
Figure 4: PyImageConf 2018 will be head in San Francisco, CA on August 26-28th.
Adrian: 你将在 PyImageConf 2018 发表演讲,这是 PyImageSearch 自己的计算机视觉和深度学习会议——我们很高兴邀请到你!你能告诉我们更多关于你演讲的内容吗?
亚当:我将谈论如何进行图像分割。图像分割是指拍摄一张照片,不仅要识别照片中的物体,还要在每个物体周围画出线条。
图像分割有很多潜在的用途。例如,自动驾驶汽车需要能够将摄像头对准道路,并以高精度识别每个行人,图像分割是实现这一目标的一种方法。你也可以想象 Photoshop 的未来版本真的很擅长从图像中提取对象,能够自动跟踪每个对象。
但对我来说,图像分割最令人兴奋的用途是处理卫星和航空摄影。通过图像分割,我们实际上可以输入原始的卫星照片,然后让计算机自动描绘出每座建筑的轮廓和每条道路。这项工作过去由成千上万的人手工完成,耗资数百万美元。
这项技术有可能改变整个测绘行业。例如, OpenStreetMap 是一个令人惊叹的项目,志愿者们试图通过使用他们的本地知识来追踪卫星图像和注释 GPS 轨迹,从而绘制整个世界的地图。但随着图像分割技术变得更加容易,计算机将能够完成 80%的追踪地图的繁重工作,然后人类只需清理和注释结果。图像分割技术有潜力最终大大加快这一进程,我们的目标将不再只是绘制整个世界的地图,而是看看我们能以多快的速度根据最新的卫星图像绘制整个世界的地图。
获取偏远地区的高质量地图数据对于人道主义和医疗团队至关重要。更好地提供偏远地区人口居住的地图有可能拯救生命。
Adrian: 如果一个 PyImageSearch 的读者想和你联系,最好去哪里联系?
亚当:你可以在 https://www.machinelearningisfun.com/的阅读我所有的文章,也可以在推特上给我打电话 @ageitgey 。谢谢!
摘要
在今天的博客文章中,我们采访了计算机视觉和深度学习从业者亚当·盖特基(Adam Geitgey),他是流行的*机器学习很有趣的作者!*博客系列,以及广受欢迎的face_recognition
图书馆的创建者。
请花点时间感谢 Adam 抽出时间接受采访。
在 PyImageSearch 上发布未来的博客文章和采访时,我们会通知您,请务必在下面的表格中输入您的电子邮件地址,,我会让您随时了解情况。
Adithya Gaurav Singh 访谈:用计算机视觉和人脸识别寻找爱情
知道我这件事的人不多,但我和我老婆是在网上认识的,当时她 18 岁,我 20 岁。
它不是 Match、eHarmony、Tinder 等交友网站/应用。
…取而代之的是 Last.fm ,一个与约会毫无关系的网站。
相反,Last.fm 是一个音乐网站,它分析你在笔记本电脑、台式机和 iPod 上听的音乐,然后向你推荐你喜欢的其他音乐。
Last.fm 计算出你的音乐品味和网站上其他用户之间的“匹配分数”,以鼓励用户之间的社交互动。
总的想法是,你可以找到有相似音乐偏好的用户,一起讨论乐队和歌曲,甚至一起去看演出和音乐会。
我是 Last.fm 的付费用户,pro 帐户的好处之一是你可以看到其他用户在查看你的个人资料。
一天晚上,我在查看我的 Last.fm 账户时,注意到一个非常可爱的女孩浏览了我的个人资料。
所以,很自然地,我点击了她的个人资料,看看她对什么音乐感兴趣。
令我惊讶的是,我们在音乐品味上完全一致。
在我使用 Last.fm 的 5 年多时间里,我从未见过 100%匹配的情况。
我评论了她的个人资料,然后我们开始聊天。
这些对话被转移到 Last.fm 网站的 DMs 上。
然后去脸书。
最终到短信/电话。
Trisha 和我已经在一起 13 年了,结婚也才 3 年多。
最疯狂的是,当时我住在马里兰州,而 Trisha 住在纽约。
我们不可能仅仅通过去听音乐会就找到彼此。演出不会有太多的地理重叠,即使有和,也不能保证我们会在一个有 500 多人的地方神奇地相遇。
但是……由于这个默默无闻的音乐网站,我们找到了彼此。
在一个越来越基于“左右滑动”的约会世界里,当我听说原本不用于约会的技术最终被用于两个人寻找爱情时,我感到非常惊讶。
现在,PyImageSearch 也加入了这个俱乐部。
在这篇博文中,我采访了马里兰大学帕克分校的硕士学生 Adithya Gaurav Singh,他使用计算机视觉和面部识别来帮助打动他感兴趣的女孩——现在他们已经在一起超过 3 年了。
我喜欢这个故事,因为它是如此的甜蜜和真实。
和我一起听听 Adithya 的故事,以及他是如何利用计算机视觉和 PyImageSearch 博客找到爱情的。
aditya gaur av Singh 访谈:用计算机视觉和人脸识别寻找爱情
阿德里安:嗨,阿迪蒂亚!感谢您抽出时间接受采访。很高兴您能来到 PyImageSearch 博客。
非常感谢你,阿德里安。我读了你的博客有一段时间了。在工作和学习的许多场合,它们都是我的救命稻草。
阿德里安:在我们开始之前,你能简单介绍一下你自己吗?你在哪里工作,你是做什么的?
我来自印度北部的一个小镇。技术和设计智能系统让我着迷了很长一段时间。我于 2018 年完成了工程学士学位,毕业后直接进入了计算机视觉行业。我从小做起,在新德里的初创公司 BaseApp Systems 实习,在此期间,我在深度学习及其与计算机视觉的交叉方面获得了大部分技能。
在那之后,我有机会在班加罗尔的另一家初创公司 Flux Auto 工作。我被聘为深度学习工程师,为公司的旗舰产品 Flux 自动驾驶系统开发感知堆栈。在研究了像自动驾驶这样具有挑战性的问题两年后,我深深着迷于进一步探索计算机视觉及其为开发真正智能的系统提供的杠杆作用。
我想深入这个领域的愿望使我来到了马里兰大学帕克分校,目前我正在攻读机器人硕士学位。我到达美国已经一个多月了,到现在为止,这是一次令人兴奋又充满挑战的经历。
阿德里安:是什么让你对研究计算机视觉感兴趣?我听说是因为一个女孩,对吗?
像几乎每一个计算机视觉从业者一样,我从图像处理开始,仅仅通过研究图像的像素,我就立刻对它所能做的事情感到惊讶。那是在我大学二年级的时候。到我毕业的时候,我已经可以用计算机视觉实现视觉跟踪系统了。
毕业后,由于我在这一领域的普通技能,我可以得到一份实习工作。在开始实习后,我遇到了我现在的女朋友,Ananya。我们是在网上认识的,就像你和特里莎一样。虽然我们在许多激烈的话题上很快就联系上了,但我很害羞,所以不容易约她出去。那就是你进来救了我的地方艾利安。
在一个非常普通的工作日,我看到了你关于使用 OpenCV 进行人脸识别的教程。你准备了这个教程作为给 Trisha 的特别礼物,它是一个面部识别应用程序,用来检测你们两个。我发现这很可爱,这时候我突然想到设计一个类似的应用程序来专门检测 Ananya,并把它作为礼物送给她。
你的教程和非常直观的说明使得编写代码变得更加容易。我要了 8-10 张她的照片,为每张照片生成了一个 128D 的嵌入向量,并训练了一个小模型来轻松地识别她面部的嵌入向量。瞧,我有了一个功能应用程序,可以在看不见的图像和视频中识别她的脸。她深受感动,这也是我们在一起的原因之一。
阿德里安:你和安娜亚约会多久了?
**aditya:**我们现在交往 3 年了,在一起很开心。
阿德里安:这个项目最难的部分是什么:处理代码还是鼓起勇气约她出去?
嗯,阿德里安,在编写代码的时候,我得到了你的帮助和指导,但是要起来约她出去,我基本上只能靠自己了。玩笑归玩笑,我可以非常自信地说,一个基于 OpenCV-Numpy-PyTorch 的 python 脚本从未让我像约她出去那样紧张。
Adrian: 自从你“得到了那个女孩”,你在计算机视觉/深度学习方面的任务完成了吗?还是继续研究这个领域?
哦,我一点也没做完。计算机视觉是我渴望建立长期职业生涯的地方。我真的相信计算机视觉是将在实现真正先进的人工智能中发挥先锋作用的领域。毕竟,如果没有计算机视觉,人类自己会是什么样子呢?
在过去的 4-5 年里,我走过了一段相当长的路。然而,还有很远很深的路要走。现在,我的重点是在 UMD 大学的研究生课程中表现出色,然后回到行业,为解决我们的计算机视觉社区面临的大量问题做出贡献。
阿德里安:如果有人想学习计算机视觉并建立自信以在日常生活中取得成功,你会给他们什么建议?
**adityya:**自信,在我看来,只有一把钥匙,知识。一个人对尽可能多的事情了解得越多,他就越自信。我不相信这和一个人有多内向或外向有什么关系。我个人见过那么多内向的人,对自己那么有信心,却比谁都爱自己的公司。
当然,这不仅仅包括计算机视觉或者任何一个人所从事的其他专业领域。它可以是任何事情,历史,天文,音乐,美食,电影,体育,你能想到的。一个人对事物了解得越多,信心就越高。这是我的看法。
Adrian: 感谢您成为图片搜索大学的一员!你会向其他想学习计算机视觉、深度学习和 OpenCV 的读者推荐这个程序吗?
**aditya:**我全心全意推荐 PyImageSearch 大学,无论你在计算机视觉/深度学习方面的技能水平如何。即使作为一名经验丰富的从业者,许多人也容易对该领域的基础知识感到生疏。
这一计划涵盖了你的差距,并帮助选择正确的工具来解决一个给定的问题。对于初学者来说,我要说找到一个教授计算机视觉的学位课程并不容易,从基础到高级,每月 24 美元。PyImageSearch 大学是获得计算机视觉和深度学习技能的首选途径。
Adrian: 如果一个 PyImageSearch 的读者想和你联系,他们该怎么做?
我将很高兴通过我的 LinkedIn 个人资料或通过电子邮件 agsingh[at]ter mail[dot]UMD[dot]edu 连接到任何 PyImageSearch 阅读器
总结
今天,我们采访了马里兰大学帕克分校的硕士学生阿迪蒂亚·高拉夫·辛格。
Adithya 使用计算机视觉和 PyImageSearch 博客上的人脸识别教程来打动他感兴趣的女孩。
他们已经约会 3 年了。
它只是向你展示了一点创造力,你不需要向左/向右滑动。
技术,甚至是 OpenCV 和 Python 的人脸识别教程可以被有机地用来培养一种关系…我认为这是一件美好的事情。
在 PyImageSearch, 在下面的表格中输入您的电子邮件地址!
对 Anthony Lowhur 的采访——用计算机视觉和深度学习识别 10,000 张 Yugioh 卡
在这篇博文中,我采访了计算机视觉和深度学习工程师 Anthony Lowhur。Anthony 分享了他用来构建能够识别 10,000+ Yugioh 交易卡的计算机视觉和深度学习系统的算法和技术。
我喜欢安东尼的项目——我希望几年前就有了它。
当我还是个孩子的时候,我喜欢收集交易卡。我有很多活页夹,里面装满了棒球卡、篮球卡、足球卡、口袋妖怪卡等等。我甚至有侏罗纪公园的交易卡!
我甚至无法开始估算我花了多少时间整理我的卡片,先按团队,再按职位,最后按字母顺序。
然后,当我完成后,我会想出一个“新的更好的方法”来整理卡片,并重新开始。在我年轻的时候,我在探索一个八岁孩子能给卡片分类的算法复杂性。充其量,我可能只有 O(N² ,所以我还有相当大的提升空间。
安东尼将卡片识别提升到了一个全新的水平。用你的智能手机,你可以拍一张 Yugioh 交易卡的照片,然后立刻认出它。这种应用程序对于以下方面非常有用:
- 想要快速确定其收藏中是否已有交易卡的收藏者
- 想要建立游戏卡数据库的档案管理员,游戏卡的属性,生命值,伤害等。(即,在识别后对卡进行 OCR)
- Yugioh 玩家不仅希望识别一张卡片,还希望翻译它(如果你不能阅读日语,但希望同时玩英语和日语卡片,或者反之亦然,这非常有用)。
Anthony 使用几种计算机视觉和深度学习算法构建了他的 Yugioh 卡识别系统,包括:
- 暹罗网络
- 三重损失
- 最终重新排序的关键点匹配(这是一个特别是聪明的技巧,你会想了解更多)
请和我一起坐下来和安东尼讨论他的项目。
学习如何用计算机视觉和深度学习识别 Yugioh 牌, 继续看就好。
对 Anthony Lowhur 的采访——用计算机视觉和深度学习识别 10,000 张 Yugioh 卡
阿德里安:欢迎你,安东尼!非常感谢你能来。很高兴您能来到 PyImageSearch 博客。
安东尼:谢谢你邀请我。很荣幸来到这里。
阿德里安:介绍一下你自己,你在哪里工作,你的工作是什么?
Anthony: 我目前是一名全职的计算机视觉(CV)和机器学习(ML)工程师,离华盛顿 DC 不远,我设计和构建供客户使用的人工智能(AI)系统。我实际上是不久前从大学毕业并获得学士学位的,所以我对这个行业还比较陌生。
Adrian: 你最初是如何对计算机视觉和深度学习产生兴趣的?
安东尼:当我开始了解被称为 DARPA 大挑战的自动驾驶汽车比赛时,我还是一名高中生。这本质上是不同大学和研究实验室之间建造自动驾驶汽车在沙漠中相互比赛的竞争。赢得比赛的汽车来自斯坦福大学,由巴斯蒂安·特龙领导。
随后,巴斯蒂安·特龙继续领导谷歌 X 项目,研发无人驾驶汽车。以前被认为是科幻小说一部分的东西现在正在成为现实,这一事实真的激励了我,从那以后我开始学习计算机视觉和深度学习。我开始在 CV 和 ML 中做个人项目,并开始在 REUs(本科生的研究经历)进行 CV/ML 研究,一切都从那里开始。
Adrian: 你刚刚开发完一个可以自动识别 10,000+ Yugioh 卡的计算机视觉系统。出色的工作!是什么激发了你创建这样一个系统?这样的系统如何帮助 Yugioh 玩家和卡片收藏者?
Anthony: 所以就有了我小时候看的一个叫 Yugioh 的纸牌游戏和电视剧。直到今天,它一直占据着我的心灵,它让我想起了每天放学后坐在电视机前的时光。
我添加 AI 是因为制造它实际上是一个更大项目的先决条件,是一个 Yugioh duel disk 。
你可以在这里阅读更多关于它的信息:我做了一个功能性的双盘(由 AI 提供动力)。
这是一个演示视频:
简而言之,这是一个让你在几英尺之外决斗的浮华设备,它在电视剧中出现过。我认为这是一个有趣的项目,可以制作并展示给其他 Yugioh 粉丝,这足以激励我继续这个项目,直到原型完成。
除了创建 duel disk 之外,还有人来找我,说他们有兴趣让它组织他们的 Yugioh 卡收藏,或者为他们的一个应用程序创意提供动力。虽然有一些不完善的地方,但它目前在 GitHub 上是开源的,所以人们有机会试用它。
阿德里安:你是如何建立 Yugioh 卡的数据集的?最后你每张卡片上有多少示例图片?
安东尼:首先,我必须提取我们的数据集。卡数据集是从 API 中检索的。卡片的全尺寸版本被使用:游戏王!API 指南–ygo prodeck。
该 API 用于将所有 Yugioh 卡(10,856 张卡)下载到我们的机器上,以将它们转换为数据集。
但是,主要问题是,大多数卡片只包含一种卡牌艺术(而其他包含多种卡牌艺术的卡片,其卡牌艺术彼此之间有显著差异)。在机器学习的意义上,本质上,有超过 10,000 个类,其中每个类只包含一个图像。
这是一个问题,因为传统的深度学习方法在少于 100 幅图像的数据集上表现不佳,更不用说每类一幅图像了。我做了一万节课。
因此,我不得不使用一次性学习来解决这个问题。一次性学习是一种比较两个图像之间的相似性而不是预测一个类别的方法。
**阿德里安:**基本上每张卡片只有一张样本图像,你没有多少东西可以从神经网络中学到。你应用了任何类型的数据增强吗?如果是,您使用了什么类型的数据增强?
Anthony: 虽然我们每个类只处理一个图像,但我们想看看我们是否能从这个模型中获得尽可能多的鲁棒性。因此,我们执行图像增强来创建每个卡片艺术的多个版本,但有细微的差异(亮度变化、对比度变化、偏移等)。).这将为我们的网络提供更多的数据,让我们的模型更好地泛化。
阿德里安:现在你的磁盘上有一个 Yugioh 卡的数据集。你是如何选择深度学习模型架构的?
安东尼:最初,我为暹罗网络做了一个简单的浅层网络实验,作为衡量的基准。
不足为奇的是,该网络表现不佳。网络不适合我给它的训练数据,所以我想解决这个问题。向网络添加更多层是解决方案的补救措施之一,因此我尝试了 Resnet101 ,这是一个以其巨大的层深度而闻名的网络。这最终成为我需要的架构,因为它的性能明显更好,并且达到了我的精度目标。因此,这就是最终的主要架构。
当然,如果我以后想让单个图像预测的推断时间更快,我总是可以求助于使用像 VGG16 这样的层数更少的网络。
Adrian: 您显然做了充分的准备,知道暹罗网络是这个项目的最佳架构选择。你使用标准的“香草”暹罗网络图像对吗?还是用了三胞胎和三胞胎损失来训练你的网络?
安东尼:最初,我尝试了主要使用一对图像进行比较的香草暹罗网络,尽管它的局限性开始显现。
结果,我研究了其他架构,最终发现了三元组网络。它主要不同于暹罗网络,因为它使用三个图像而不是两个,并使用不同的损失函数,称为三重损失。它主要能够在训练过程中使用正负锚来操纵图像之间的距离。因此,它实现起来相对较快,并且恰好是最终的解决方案。
Adrian: 在这一点上,你有了一个深度学习模型,它可以识别输入的 Yugioh 卡,或者非常接近返回前 10 名结果中的正确 Yugioh 卡。你是如何进一步提高准确性的?你使用了某种图像重新排序算法吗?
Anthony: 因此,尽管由 resnet101 制成的三联体网络显示出显著的改进,但似乎存在一些边界情况,在这些情况下,它不能预测正确的秩 1 类,但相对接近。为了克服这一点,ORB(面向快速和旋转简短)算法被用作支持。ORB 是一种在图像内搜索特征点的算法,因此,如果两幅图像完全相同,则这两幅图像应该具有相同数量的特征点。
该算法为我们的一次性学习方法提供了支持。一旦我们的神经网络在所有 10,000 张卡片上生成分数并对它们进行排名,我们的 ORB 就会获得 top- N 卡片排名(例如,前 50 张卡片)并计算图像上的 ORB 点数。然后,将原始相似性得分和 ORB 点数输入公式,以获得最终加权相似性得分。比较前- N 张牌的加权分数,并将分数重新排列到它们的最终排名。
图 3 显示了一个先前具有挑战性的边缘案例,在该案例中,我们在不同的对比度设置下比较了顶牌(黑暗魔术师)的两幅图像。本来没有 ORB 匹配支持就失败了,但是考虑到头脑中特征点的数量,可以得到更准确的排名。
经过一些实验和对某些值的调整,我显著提高了正确预测的数量。
Adrian: 在您的实验中,您发现即使输入图像中很小的偏移/平移也会导致准确性显著下降,这意味着您的卷积神经网络(CNN)没有很好地处理平移。你是如何克服这个问题的?
安东尼:处理这个问题的确很有趣,也很棘手。现代 CNN 在本质上不是平移不变的,即使很小的翻译也会使其混淆。我们正在处理的数据非常少,并且该算法依赖于将特征图放在一起进行比较来进行预测,这一事实进一步强调了这一点。
- 在左侧,原始图像与相同但向右平移的图像进行比较(我们跳了 0.71 点)。
- 在中间的图像中,原始图像与向右上方平移的同一图像进行比较。
- 在右侧图像中,原始图像与向右上方平移的同一图像进行比较。
这个问题表明,我们的模型对轻微的错位非常敏感,并阻止我们的模型实现其全部潜力。
我的第一种方法是通过在数据扩充过程中添加更多的翻译来简单地扩充数据。然而,这还不够,我必须寻找其他方法。
结果,我发现一些研究创造了用于解决类似问题的模糊池算法。模糊池是一种用于解决 CNN 不是 sift 不变的问题的方法,并且应用于每个卷积层的末端。
**阿德里安:**你的算法本质上是为你数据集中的所有卡片生成一个相似性得分。在比较 10,000 多张输入 Yugioh 卡时,您是否遇到过任何速度或效率问题?
安东尼:因此,在这一点上,我有一个模型能够以合理的准确度生成每张卡片的相似性得分。现在我所要做的就是为我们的输入图像和所有我想要比较的卡片生成相似性分数。
如果我测量我的模型的推理时间,我们可以看到,通过我们的三元 Resnet 架构传递一幅图像需要大约 0.12 秒,以及 0.08 秒的图像预处理步骤。从表面上看,这听起来不错,但是请记住,我们必须对数据集中的所有卡片都这样做。问题是,我们需要将超过 10,000 张卡片与输入进行比较,并生成分数。
因此,如果我们计算生成相似性得分所需的秒数以及数据集中卡片的总数(10,856),我们会得到:
(0.12+0.08) * 10,856 = 2171.2 秒
2171.2/60 = 36.2 分钟
为了预测单个输入图像是什么,我们必须等待 30 分钟以上。结果,这并没有使我们的模型实用。
为了解决这个问题,我最终提前预计算了所有 10,000 张卡的输出卷积特征图,并将其存储在一个字典中。字典的伟大之处在于,从字典中检索预先计算的特征图将是恒定的时间( O(1) time)。因此,随着数据集中卡片数量的增加,这将是一项不错的工作。
因此,在训练之后,我们迭代超过 10,000 张卡片,将它们输入我们的三元组网络,以获得输出卷积特征图,并将其存储在我们的字典中。我们只是在预测阶段迭代我们的新字典,而不是让我们的模型执行 10,000 次正向传播。
因此,之前 36 分钟的单幅图像预测时间已经显著减少了近 5 秒。这导致了更易于管理的模型。
Adrian: 你是如何测试和评估你的 Yugioh 卡识别系统的准确性的?
安东尼:总的来说,我主要处理两种类型的数据集。
我使用了一个数据集进行训练,其中官方卡片艺术图像来自 ygoprodeck(数据集 A)以及野外卡片的真实照片(数据集 B),这些照片是由相机拍摄的卡片照片。数据集 B 本质上是我用来取得长期成功的最终测试数据集。
人工智能/机器学习模型在卡片的真实照片上进行测试(有袖子和没有袖子的卡片)。这是数据集 b 的一个例子。
这些类型的图像是我最终希望我的人工智能分类器能够成功地让相机指向你的卡,并能够识别它。
然而,由于购买超过 10,000 张卡片并给它们拍照并不现实,我尝试了退而求其次的方法:在 Yugioh 卡片的在线数据集上进行测试,并人工添加具有挑战性的修改。修改包括改变亮度、对比度和剪切,以模拟现实生活中不同照明/照片质量场景下的 Yugioh 卡(数据集 A)。
以下是数据集中的一些输入图像和卡片艺术:
这是最终的结果:
以下是卡片识别器的几个应用示例:
在 Yugioh 的游戏中,人工智能分类器对所有卡片的准确率达到了 99%。
这本来是一个快速的项目,所以我很高兴的进展。我可能会尝试看看我是否可以收集更多的 Yugioh 卡,并尝试改善系统。
阿德里安:你项目的下一步是什么?
Anthony: 肯定有一些不完美的地方会阻碍我的模型发挥出它的全部潜力。
用于训练的数据集是来自 ygoprodeck 的官方卡片艺术图像(数据集 A),而不是野外卡片的真实照片(数据集 B),后者是由相机拍摄的卡片照片。
99%的准确性结果来自数据集 A 上的训练和测试,而训练的模型也在数据集 B 上的一些卡片上进行测试。然而,我们没有数据集 B 的大量数据来对其执行实际训练或甚至大规模评估。这个报告证明了我们的模型可以通过数据集 A 学习 Yugioh 卡,并有可能在数据集 B 上取得成功,数据集 B 是我们模型的更真实和自然的图像集目标。建立一个数据收集基础设施来大规模收集数据集 B 的图像样本将极大地推进该项目,并有助于确认模型的强度。
这个程序也没有合适的对象检测器,只是使用简单的图像处理方法( 4 点变换)来获得卡片的边界框并对齐它。使用像 YOLO(你只看一次)这样合适的物体检测器将是理想的,这也将有助于检测多个演示卡。
更精确和更真实的图像增强方法将有助于添加眩光、更自然的光照和扭曲,这可能有助于我的模型从数据集 A 适应甚至更真实的图像。
Adrian: 你从 2017 年开始就是 PyImageSearch 的读者和客户了!谢谢你支持 PyImageSearch 和我。你有哪些 PyImageSearch 的书籍和课程?他们是如何帮助你为这个项目的完成做准备的?
Anthony: 我目前拥有用于计算机视觉的深度学习 for Python bundle 以及用于计算机视觉的*Raspberry Pi*本书。
从读你的书到我尝试这个项目的时间间隔是 3 年左右,所以一路上我经历了很多事情,从各种渠道获得了很多东西。
PyImageSearch 博客和使用 Python 捆绑包的计算机视觉深度学习已经成为我巨大旅程的一部分,教会了我并加强了我的计算机视觉和深度学习基础。多亏了这个包,我知道了更多像 Resnet 这样的架构和像迁移学习这样的方法。它们帮助我形成了基础知识,使我能够深入到更高级的概念中,而这些概念是我通常不会经历的。
当我开始着手 Yugioh 项目时,我在项目中应用的大多数概念对我来说已经是第二天性了。他们给了我信心去计划和试验模型,直到我得到满意的结果。
Adrian: 你会向其他尝试学习计算机视觉、深度学习和 OpenCV 的初露头角的开发者、学生和研究人员推荐这些书籍和课程吗?
Anthony: 当然,像用 Python 进行计算机视觉深度学习这样的书有丰富的知识,可以用来启动或加强任何人的计算机视觉和机器学习之旅。它对每个主题的解释,以及代码示例,使其易于理解,并提供了广泛的信息。这无疑加强了我在该领域的基础知识,并帮助我过渡到能够学习更高级的主题,否则我将无法学习。
Adrian: 如果一个 PyImageSearch 的读者想聊聊你的项目,那么和你联系的最佳地点是哪里?
安东尼:与我联系的最好方式是通过我在雅虎网站的电子邮件
你也可以通过 LinkedIn 、 Medium 联系我,如果你想看更多我的项目,可以查看我的 GitHub 页面。
总结
今天我们采访了计算机视觉和深度学习工程师 Anthony Lowhur。
安东尼创造了一个能够识别超过 10,000 张 Yugioh 交易卡的计算机视觉项目。
他的算法工作原理是:
- 使用数据扩充为每个 Yugioh 卡生成额外的数据样本
- 根据数据训练一个连体网络
- 预先计算卡之间的特征图和距离(有助于实现更快的卡识别)
- 利用关键点匹配来重新排列来自暹罗网络模型的顶部输出
总的来说,他的系统有将近 99%的准确率!
在 PyImageSearch 上发布以后的教程和采访时,我们会通知您,只需在下面的表格中输入您的电子邮件地址!
对计算机视觉和深度学习研究员阿斯卡特·库兹德约夫的采访
在这篇博客文章中,我采访了智能系统和人工智能研究所(ISSAI)的计算机视觉和深度学习研究员 Askat Kuzdeuov。
Askat 不仅是一名出色的研究人员,也是一名狂热的 PyImageSearch 读者。
几周前我第一次被介绍给 Askat。我们刚刚宣布向第一个完成该计划所有课程的 PyImageSearch 大学成员奖励 500 美元。不到 24 小时后,阿斯卡特完成了所有课程并赢得了奖品。
我们从那里开始了电子邮件对话,他分享了他的一些最新研究。退一步说,我被深深打动了。
Askat 和他的同事们的最新作品, SpeakingFaces:一个带有视觉和热视频流的大规模多模态语音命令数据集 ,介绍了一个新的数据集,计算机视觉和深度学习的研究人员/从业者可以使用它来:
- 人机交互
- 生物认证
- 识别系统
- 域名转移
- 语音识别
我真正喜欢 SpeakingFaces 的是传感器融合组件,包括:
- 高分辨率热图像
- 可见光谱图像流(即人眼所能看到的)
- 同步录音
从 142 名受试者中收集了数据,产生了超过 13,000 个同步数据实例(∼3.8 TB)……但是收集数据只是 容易 的一部分!
接下来是困难的部分——预处理所有数据,确保数据同步,并以计算机视觉/深度学习研究人员可以在自己的工作中使用的方式打包。
从那里,Askat 和他的同事训练了一个 GAN 来获取输入的热图像,然后从它们生成一个 RGB 图像,正如 Askat 可以证明的那样,这不是一件容易的事情!
在本次采访的其余部分,您将了解 Askat 和他的同事如何构建 SpeakingFaces 数据集,包括他们用于清理和准备数据集以进行分发的预处理技术。
您还将了解他们如何训练 GAN 从热感相机输入中生成 RGB 图像。
如果你有兴趣了解如何在计算机视觉社区进行值得发表的工作, 那么一定要阅读这篇访谈!
采访计算机视觉和深度学习研究员阿斯卡特·库兹德乌夫
阿德里安:你好,阿斯特!感谢您抽出时间接受采访。很高兴您能来到 PyImageSearch 博客。
阿斯特:嗨,阿德里安!谢谢你邀请我。很荣幸成为 PyImageSearch 的嘉宾。
阿德里安:在我们开始之前,你能简单介绍一下你自己吗?你在哪里工作,你的角色是什么?
Askat: 我是智能系统和人工智能研究院 (ISSAI)的一名数据科学家。我的主要职责是进行与计算机视觉、深度学习和数学建模相关的研究。
阿德里安:我真的很喜欢阅读你的谷歌学术个人资料和你的一些出版物。是什么让你对研究计算机视觉和深度学习感兴趣?
Askat: 谢谢!我很高兴听到你喜欢它们!在研究生学习期间,在导师 Varol 博士的推荐下,我学习了一门图像处理课程,从而发现了计算机视觉。它很快成为我最喜欢的科目。我在游戏格式中操作图像时获得了很多乐趣,在课程结束时,我意识到这正是我想要追求的。
Adrian: 你最近的出版物, SpeakingFaces:一个带有视觉和热视频流 的大规模多模态语音命令数据集,介绍了一个数据集,计算机视觉从业者可以使用它来更好地理解和解释通过视觉线索发出的语音命令。你能告诉我们更多关于这个数据集和相关论文的信息吗?是什么让你和你的团队想要创建这个数据集?
我们研究所的两个主要研究方向是多感官数据和语音数据。热感相机是我们实验的传感器之一,我们有兴趣研究它如何用于录音。当我们开始研究时,我们意识到没有适合这项任务的现有数据集,所以我们决定设计一个。由于大多数作品主要将音频与视觉数据联系在一起,我们选择将所有三种形式结合起来,以扩大潜在的应用范围。
Adrian: 你能描述一下数据集的获取过程吗?我相信这是一项艰巨的任务。你是如何如此高效地完成它的?
阿斯特:这的确是一项任务。一旦我们设计了采集方案,我们必须通过一个伦理委员会来证明我们的研究对我们的潜在参与者的风险很小或没有风险。只有在他们同意后,我们才能继续进行。由于参与人数众多且日程繁忙,安排录制会议相当棘手。我们要求每个参与者贡献 30 分钟的时间,并在另一天回来重复整个拍摄过程。参与者的数量是另一个挑战,尤其是在疫情的条件下。我们的目标是多元化和性别平衡的代表,所以我们在寻找潜在的参与者时必须牢记这一点。
与全球许多人一样,我们意外地受到了疫情的袭击,不得不调整我们的计划,转向可以远程执行的数据处理任务,优化在线协作。
我感谢我的合著者和其他 ISSAI 成员对数据集的帮助。最后,就像他们说的,需要一个村庄来获取和处理数据!
阿德里安:收集原始数据后,你需要对其进行预处理,然后将其组织成其他研究人员可以利用的逻辑结构。处理多模态数据使这个过程变得非常重要。你是怎么解决这个问题的?
是的,预处理步骤有它自己的挑战,因为它揭示了在数据收集过程中发生的一些问题。事实上,我们发现您的教程有助于解决这些问题,并在我们的论文中引用了它们。
例如,在某些情况下,由于网络摄像头的自动对焦模式,视觉图像变得模糊。考虑到我们记录了数百万帧,手动搜索模糊帧将是一项极其困难的任务。幸运的是,我们已经阅读了你的博客文章“用 OpenCV 进行模糊检测”,这帮助我们实现了这个过程的自动化。
此外,我们注意到热感相机在某些情况下冻结,因此受影响的帧没有正确更新。我们通过比较连续的帧并利用结构相似性指数方法来检测这些情况,这在您的“How-To:Python Compare Two Images”帖子中有很好的解释。
Adrian: 我注意到你使用 GANs 将热图像转换为面部的“正常”RGB 表示——你能告诉我们更多关于这个过程的信息吗?为什么你需要在这里使用 GANs?
Askat: 人脸识别和面部标志预测模型的技术水平仅使用视觉图像进行训练。因此,我们不能将它们直接应用于热图像。有几种可能的选择来解决这个问题。
第一种是收集大量带注释的热图像,从零开始训练模型。这个过程需要大量的时间和人力。
第二种选择是结合视觉和热图像,使用迁移学习方法。然而,这种方法也需要注释热图像。
我们在论文中选择的方案是使用深度生成模型将图像从热域转换到可见光域。我们选择 GANs 是因为目前的技术水平表明,GANs 在生成真实图像方面优于自动编码器。然而,缺点是 GANs 极难训练。
Adrian: 你设想使用说话脸数据集有哪些更实际的应用?
总的来说,我们认为该数据集可以用于广泛的人机交互目的。我们希望我们的工作将鼓励其他人将多模态数据集成到不同的识别系统中,并使它们更加健壮。
Adrian: 你在研究中利用了哪些计算机视觉和深度学习工具、库和包?
第一步是数据收集。我们使用了罗技 C920 Pro 相机,带有双麦克风和 FLIR T540 热感相机。
热感相机的官方 API 是用 MATLAB 编写的。因此,我不得不使用 MATLAB 的计算机视觉和 ROS 工具箱从两台相机同时获取帧。
下一步是清理和预处理数据。我们主要利用了 Python 和 OpenCV,并且大量使用了你的 imutils 包。它非常有用!
在最后一步,我们使用 PyTorch 为热视觉面部图像翻译和多模态性别分类建立基线模型。
Adrian: 如果您必须选择在构建 SpeakingFaces 数据集时面临的最具挑战性的问题,会是什么?
Askat: 锁定期间肯定在操作。当我们转到预处理阶段时,我们意识到一些收集到的图像帧被破坏了。不幸的是,由于隔离措施,我们不能重拍,所以我们安全地删除了我们能做的,并记录了其余的。
阿德里安:作为一名研究人员,你下一步有什么打算?你会继续在 SpeakingFaces 上工作还是会转向其他项目?
目前我参与了几个项目。其中一些与说话的表情有关。例如,我正致力于建立一个基于暹罗神经网络的热视觉姿态不变人脸验证系统。在另一个项目中,我们在野外使用相同的热感相机收集了额外的数据。我们的目标是建立稳健的热人脸检测和地标预测模型。
阿德里安:如果有人想追随你的脚步,成为一名成功的出版研究者,但不知道如何开始,你会给他们什么建议?
我建议你找一个可以和有相似兴趣和热情的人一起工作的环境。如果你对工作充满热情,而且你和有趣的人一起工作,那么这真的不像是一份工作!
阿德里安:几周前,我们向完成所有课程的图片搜索大学的第一名成员提供了 500 美元的奖金,*你就是获胜者!*恭喜你!你能告诉我们那次经历吗?你在 PyImageSearch 大学学到了什么,你是如何如此快速地完成所有课程的?
再次感谢您的奖励!这是对伟大课程的一个很好的奖励。
我关注这个博客已经有一段时间了:在我开始进入计算机视觉领域的旅程时,我浏览了 PyImageSearch 上的大多数免费课程。我一行一行地重写了每一段代码。我强烈推荐这种方法,尤其是对初学者来说,因为它不仅能让你理解内容,还能教会你正确编程。
当你提供一周免费进入 PyImageSearch 大学的机会时,我加入观看视频,因为更新你的知识总是好的。这是一个伟大的决定,因为我从阅读博客和观看视频中获得的体验是完全不同的。我在一周内看完了几乎所有的题目,只剩下一两个了。然而,我决定购买年度会员资格,因为我喜欢这种形式,也想支持你的努力工作。
对于研究人员和从业人员,我绝对推荐 PyImageSearch 大学,尤其是在计算机视觉、深度学习和 OpenCV 领域。这些课程提供了一个坚实的基础,如果你想理解高级概念,这是必不可少的。
Adrian: 如果一个 PyImageSearch 的读者想和你联系,他们该怎么做?
如果你想和我讨论一些有趣的想法,你可以通过 Linkedin 联系我。
如果您有兴趣了解有关 SpeakingFaces 数据集的更多信息,这里有一个很好的概述视频:
https://www.youtube.com/embed/A0D_WS2L558?feature=oembed
采访 OpenCV 人工智能套件(OAK)的创造者布兰登·吉勒
在这篇文章中,我采访了 Brandon Gilles,他是 PyImageSearch 的长期读者,也是 OpenCV AI Kit (OAK)的创造者,OpenCV AI Kit 正在彻底改变我们执行嵌入式计算机视觉和深度学习的方式。
为了庆祝 OpenCV 图书馆成立 20 周年,Brandon 与官方的OpenCV.org组织合作创建了 **OpenCV AI Kit、**一个麻省理工学院许可的开源软件 API 和无数基于 X 的嵌入式板/相机。
橡木有两种口味:
- OAK-1: 标准的 OpenCV AI 板,可以执行神经网络推理、对象跟踪、April 标签识别、特征检测和基本的图像处理操作。
- **OAK-D:**OAK-1 中的一切,但带有立体深度相机,3D 对象定位,并在 3D 空间中跟踪对象。
上周,布兰登和 OpenCV 组织发起了一项 Kickstarter 活动来资助这些令人惊叹的嵌入式人工智能板的创建。在撰写本文时,OpenCV AI Kit 目前从其 Kickstarter 支持者那里获得了 419,833 美元的资金,这有可能使其成为众筹历史上最成功的嵌入式主板之一!
Brandon 和 OpenCV 团队非常慷慨地让 PyImageSearch 团队提前获得了 OpenCV AI 工具包,所以请期待将来在 PyImageSearch 博客上的 OAK 教程。
此外,我已经决定 OAK 将包含在我们的嵌入式计算机视觉和深度学习书籍的下一个版本中, 计算机视觉的树莓派书籍 (特别是完整捆绑包)。
- 如果你已经有了一份完整套装的副本,你将会在 OAK 章节发布时通过电子邮件更新免费收到。
- 如果你还没有已经拿到 RPi4CV 的副本,确保你拿到了,等它们准备好了你就会收到 OAK 章节。
OpenCV 人工智能套件将彻底改变嵌入式计算机视觉和深度学习的执行方式。我们迫不及待地想与董事会合作(并帮助您开始使用它)。
让我们热烈欢迎 Brandon Gilles 分享他的作品。
采访 OpenCV 人工智能套件(OAK)的创造者布兰登·吉勒
阿德里安:嗨,布兰登!很高兴你能来到 PyImageSearch 博客。我肯定你正忙于运行 OpenCV AI Kit (OAK) Kickstarter 活动——我们都很感谢你花时间做这次采访。
布兰登:非常感谢邀请我。如你所知,我和整个团队都是 PyImageSearch 的超级粉丝。你们所做的对计算机视觉和深度学习知识的民主化非常重要,是一个非常好的资源。以及源源不断的教程、新内容等。对于在这个快速发展的领域保持速度是无价的。因此,我谨代表我自己和整个 OAK 团队,感谢您和您的团队所做的一切!我想我还没遇到一个 CV/AI 的人没用过你的教程或者书。
阿德里安:布兰登,非常感谢你的美言!我们真的很感激。你能给我们介绍一下你自己吗?你在哪里工作,你的工作是什么?
布兰登:我是一名电气工程师。我是 Luxonis 的创始人兼首席执行官。
我一直想自己创业。我一直在寻找能够对世界产生积极影响的东西。
有趣的是,我也一直厌恶风险……所以我花了十多年时间梦想创业,但从未真正全力以赴去做。因此,这是我第一次尝试全力以赴,从零开始打造一个重要的产品和一家公司。
Adrian: 你在计算机视觉和深度学习方面有什么背景?还有你最初是怎么对计算机视觉和深度学习产生兴趣的?
Brandon: 所以,和大多数 EEs 一样,我在大学课堂上做过基本的计算机视觉(现在是 16 年前了!),在像线性系统这样的类中实现传统的计算机功能,但我的职业轨迹根本没有涉及计算机视觉或深度学习*,直到我的一位导师离开了我们都为之工作的公司。*
*我喜欢那里,他也喜欢那里(实际上,他是那里的一名天线设计师),所以这很令人困惑。
在采访他为什么要离开时,他告诉我:“人工智能和深度学习将会提升每个行业的地位;这是我职业生涯中最大的机会,我必须去尝试。
当时我对深度学习知之甚少,我上一次想到“人工智能”这个词是在 2004 年,当时我的一位大学室友在 Lisp 中尝试一些人工智能技术,他向我描述了它是多么无用。所以我从 2004 年到 2016 年年中对 AI 的心智模型是‘没用’。
然后这位导师(我非常尊敬他)离开了,全职从事人工智能/机器学习/深度学习,离开了一份我们都喜欢做的工作。这是一个震惊,让我大开眼界。
那天回家,开始谷歌深度学习、机器学习、AI 等。在接下来的大约 12 个月里,我沉迷于此,利用我所有的空闲时间(比如在马桶上阅读),阅读/潜伏在 PyImageSearch 上(主要是),跟随教程 PyImageSearch,关注《数据科学》、《麻省理工技术评论》等。
Adrian: 跟我说说这个 OpenCV AI Kit Kickstarter 活动。我记得 2018 年你第一次向我提到这个项目时,但当时它被称为“DepthAI”。你能告诉我们你是如何想到 DepthAI,验证这个想法,然后把它变成 OpenCV AI Kit 的吗?
**布兰登:**所以这有点迂回,而且已经改了很多次名字——对此我很抱歉——但这实际上是从我试图解决一个问题开始的,这个问题是由我的亲密和扩展的朋友和家人圈子中的几个人的悲剧引起的。
所以我实际上想做一个非 80 年代技术版本的激光标签(想象一下完全增强的播放器、墙壁、建筑等等。)当我离职全职追求 CV/ML 时,我认为这些技术的突破可以让这样一个多人 AR 系统成为可能,作为对现有激光标签设施的廉价改造。这是 2017 年。
但在我记忆中的一个星期里,似乎我认识的每个人都在告诉我他们的朋友、家人或同事是如何在骑自行车上下班时被分心的司机撞了。对我来说幸运的是,这些人没有一个是我的直接圈子……但这对我有巨大的影响。
我爸爸最好的朋友从后面被击中,背部多处骨折,股骨骨折,臀部骨折,严重到他不得不卧床 9 个月,然后才能做手术消肿。我好朋友的商业伙伴有着几乎相同的经历。我的大学滑雪伙伴(我通过一个共同的朋友发现的)也有同样的问题,但是额外遭受了创伤性脑损伤。我有时参加的 hackerspace 的创始人,他的商业伙伴也死于同样的撞击(汽车的镜子击中了他的颈部,导致他死亡)。
所以突然之间,我正在原型制作的这个增强现实激光标签系统感觉不像是正确的事情。在这一点上,我已经花了数年时间研究计算机视觉、机器学习、深度学习和其他新兴技术背后的所有艺术状态,我想知道你是否可以建立一个嵌入式系统来防止这些事故。
在所有的情况下,如果汽车只是再向左偏 12 英寸,这一切都不会发生。几年前,我看过乔纳森·兰西(Jonathan Lansey)的自行车 Kickstarter,并对它的有效性产生了潜在的兴趣,我想知道是否有可能建立一个系统来警告骑自行车的人和司机,以防止这种悲剧的发生。
在我看来,如果计算机视觉和深度学习能够在分析 CT 扫描图像方面胜过医生,在图像分类、物体检测、3D 感知等方面胜过人类。必须有一种方法来制造这种生命安全装置。
我想象的是一个相当于一个朋友倒着骑在你的自行车上,当事情看起来不对劲时,他可以拍拍你的肩膀,当司机要撞上你时,他会开始向汽车闪烁超高亮度的发光二极管,然后实际上按一下汽车喇叭(这是非常小的!)如果汽车肯定要撞上你……有足够的时间转弯。因此,利用我从 PyImageSearch 中学到的东西,以及从胜矢兵库(PINTO0309)的 Github 上的一大步,我制作了一个原型,可以做到这一点:
这是一个巨大的,非常丑陋的原型,但它完全有效!整个原型和测试过程教会了我一件非常重要的事情:
- 深度+现代化的对象检测使解决这个问题变得容易处理…而且它用很少的代码/努力就能工作得非常好。
现在这个概念已经被证实,包括实际上用反馈警告骑车人,闪烁的 led 和汽车,甚至按喇叭真正的汽车喇叭(声音超级大),我去看看如何建造一个实际的产品。这教会了我第二件重要的事:
- 尽管为此存在单独的组件(深度相机、AI 处理器、嵌入式 CPU 等。)没有办法围绕这些解决方案构建一个小型的嵌入式产品(它们太大太笨重,实际上不适合放在自行车座位下,或者成本不合理)。
有趣的是,Myriad X 在这个时候刚刚开始出货,它具有解决这个问题的所有 CV/AI 功能,但它只在 USB 棒或 PCIE 卡中可用……这两者都不允许嵌入式使用,也不允许使用深度引擎及其其他 CV 加速功能(运动估计、边缘检测、对象跟踪、特征跟踪、视频编码等)。).因此,USB 棒/PCIE 卡在这种(1)嵌入式和(2)不仅仅需要神经推理的应用中是不可用的。
所以在这一点上,现在有一个团队在我身后,我们要么放弃任务,要么建立平台。
我们选择建立这个平台。当时我们称它为 DepthAI……但实际上,在一些初步销售之后,你在推特上谈论了我们的平台(现在是永远的过去了),这导致来自 OpenCV 的 Mallick 博士提出了这个想法,接受我们的使命,这个平台,并使其成为 OpenCV 的核心部分,以解决这种嵌入式 CV &人工智能问题。
Adrian: 告诉我们 OpenCV AI Kit 背后的硬件。这款嵌入式设备的驱动力是什么?更重要的是,作为深度学习/计算机视觉的从业者,我们为什么要关心OpenCV AI KIt?
Brandon: 所以让我们找到 Myriad X 的原因是,它将我们试图解决的问题的所有功能都集成在一个低功耗芯片中:
- 实时神经推理(覆盖几乎所有类型的网络)
- 立体深度
- 包括运动估计和平台运动估计的特征跟踪
- 目标跟踪
- H.265/H.264 编码(用于记录事件和/或通常只是记录)
- JPEG 编码
- 16 倍高效矢量处理器,用于将这些功能结合在一起并运行加速的 CV 功能(可以将这些视为链接嵌入式视觉专用 GPU)
作为一个 EE,我说*‘好吧,那太好了,我只需要芯片,SDK,我就可以走了’。*我发现,该芯片唯一的 SDK 是用于神经推理的……所有其他功能都不能被市场上的任何产品使用(计算棒、PCIE 卡等)。).他们只能做推断。
所以它的独特之处(以及我们选择它的原因)是所有这些特征的结合。当用于 u 盘或 PCIE 时,你得到的只是芯片功能的 1/7(还有一些我忘记了…所以它可能更像是芯片功能的 1/10)。
所以有了 OAK,我们获得了芯片并展示了我们需要的能力,我们认为其他人也一定需要。简而言之,我们展示了 Myriad X 的真正力量……它是所有这些功能的组合,用于解决空间 AI 问题。
在这方面——空间人工智能是使用人工智能来获得物理坐标结果的能力——以米为单位的物体或特征的位置。这正是我们实时监控和跟踪车辆(及其边缘/镜子)的 3D 轨迹所需要的。
Adrian: 澄清一下,OpenCV 人工智能套件不仅仅是一个嵌入式人工智能板。也是 API 吧?用户如何与 API 交互?Python 和 OpenCV 兼容吗?
**布兰登:**很棒的问题。关于该平台的头号困惑是“它只是另一个板”。虽然硬件是有价值的,因为它提供了 Myriad X 应该使用的功能,但关键是 API 和我们以新颖的方式配置 Myriad X 的硬件块的方式,以便以简单的方式提供所有这些功能。我们花了大量时间优化高速缓存、芯片内通信系统和 DDR 通信,包括大量的重写,以允许 Myriad X 完成所有这些事情。
我们通过一个简单的 API 来展示这一点,这个 API 是 Python 和 OpenCV 兼容的。实际上是用 C++编写的(也是开源的,所以可以在任何可以编译 OpenCV 的东西上编译), pybind11 提供 Python 中的 API 功能。所以简而言之,C++接口和直接编程也可以。
Kickstarter 专注于 OAK 的 USB 接口版本,但我们正在后台开发 SPI 接口版本……因此这种电源可以连接到其他系统,如甚至没有操作系统的微控制器。这可能会在 Kickstarter 活动结束时开源。
Adrian: 很明显,你在嵌入式系统、电路板设计和制造方面有丰富的经验。制造 OpenCV AI 套件板最具挑战性的部分是什么?您预计如何满足需求?
布兰登:谢谢你的美言!因此,最具挑战性的部分是零部件的采购,特别是相机模块。在过去的几十年里,我们已经看到了信息透明和购买各种组件的趋势…这一浪潮尚未冲击相机模块市场。它仍然非常不透明和僵硬。顺便说一句,在我看来,这是一个颠覆性的成熟市场。
所以我们花了大量的时间与供应商沟通,做订单和谈判。除此之外,制造和供应链一直无忧无虑。我们在 Kickstarter 之前进行了相当数量的控制运行,获得了 99.7%的收益率,这让我们非常兴奋。
Adrian: 你是 PyImageSearch 的长期读者和客户,阅读了《T2》《计算机视觉的树莓派》 和《用 Python 进行计算机视觉的深度学习》——这些书对你开发 OpenCV AI 工具包有什么帮助?
*是的,我们的团队实际上集体购买了你的每一本书(其中大部分是在我们开始合作之前独立购买的)。
因此,PyImageSearch 帮助加速完成原型的第一种方式。我们利用你的教程和书籍,并在 20 秒内完成工作,而不是花 10 个小时来弄清楚如何让事情进展顺利,因为你和你的团队已经打了一场漂亮的仗来弄清楚如何让 codebase-x 或机器学习技术-x 实际运行,并正确运行。
因此,PyImageSearch 让我们能够快速构建原型,发现应用计算机视觉解决此类问题的能力和可行性。这导致人们发现硬件生态系统中有一个漏洞,Myriad X 的功能实际上并不是每个人都可以获得和使用的。因此,PyImageSearch 是发现我们使命的核心部分,并继续帮助我们顺利运行,没有不必要的麻烦。
Adrian: 您会向其他正在尝试学习计算机视觉和深度学习的开发者、学生和研究人员推荐用于计算机视觉的 树莓派 和用于计算机视觉的 深度学习用 Python 吗?
布兰登:绝对是。所以我根本不知道技术上什么是可行的,PyImageSearch 有助于向我展示什么是可行的,并允许我让工作系统(如上面的机箱)立即运行。
对任何感兴趣的人来说,这些书可以让你变得熟练,并马上解决现实世界的问题。
Adrian: 对于想跟随你的脚步,学习计算机视觉和深度学习,然后在 CV/DL 领域推出产品的人,你有什么建议吗?
Brandon: 从一个 PyImageSearch 教程开始。我花了太多时间阅读关于理论等的文章。当我真正开始运行 PyImageSearch 代码,并修改它来解决我的实际问题和满足我的好奇心时,事情才真正开始发生。
Adrian: 如果一个 PyImageSearch 的读者想聊天,最好在哪里联系你?
Brandon: 我非常相信工程师能够与任何感兴趣的人直接交流,所以我们有几种方式可以实现这一点——我们的社区 slack 频道(【https://luxonis-community.slack.com/】)当我醒着的时候,我可以在那里有效地找到我,还有我们的论坛(【https://discuss.luxonis.com/】)。人们也可以随时给我发电子邮件,地址是 brandon [at] luxonis [dot] com!
摘要
在这篇博客文章中,我们采访了企业家 Brandon Gilles,PyImageSearch 的读者/客户,OpenCV AI 工具包的创造者。
Brandon 和 OpenCV 团队最近发起了一项针对OpenCV AI Kit(OAK)的众筹活动,这是一款嵌入式硬件,它使计算机视觉和深度学习从业者将 CV/DL 应用于嵌入式设备的比以往任何时候都更容易。
OpenCV 人工智能套件的 Kickstarter 活动将持续三周。Brandon 和 OpenCV 在 OpenCV AI 套件上提供折扣,直到活动结束,所以如果你有兴趣在特别众筹交易中购买这款硬件,现在将是一个好时机。
如果你有兴趣跟随布兰登的脚步,学习如何将计算机视觉/深度学习应用到自己的项目和研究中,一定要拿一份包含 Python 和 树莓派的计算机视觉 的 深度学习——这些都是布兰登使用的完全相同的资源。
为了在 PyImageSearch 上发布未来的博客文章和采访时得到通知,只要在下面的表格中输入您的电子邮件地址,,我一定会让您了解最新情况。**
计算机视觉和野火探测专家大卫·波恩访谈
想象一下:
你在乡下建了一个全新的家,远离大城市。你需要远离喧嚣,想让自己回归自然。
你建的房子很漂亮。晚上很安静,你可以看到星座在天空跳舞,你睡得很好,知道你会醒来休息和恢复活力。
然后,你在半夜醒来。抽烟?有火吗?!
你跑下楼梯,来到门廊上。在地平线上,你会看到橙色的光芒,仿佛整个天空都着火了。浓烟滚滚,就像一个愤怒的风暴云准备窒息你。
果然,是野火。根据风向判断,它正朝你吹来。
你美丽宁静的家现在变成了一场易燃的噩梦。
你不得不怀疑……计算机视觉是否可以在早期被用来探测这场野火,从而向该地区的消防队员发出警报?
不过现在没时间想这些了,只要拿起你能拿的贵重物品,扔到卡车后面,然后离开那里。
当熊熊大火逼近你的房子时,你最后看了一眼后视镜,发誓总有一天你会发现如何及早发现野火…然后你开着车在一条土路上寻找文明。
恐怖故事,对吧?
虽然我为了戏剧效果对它做了一些修饰,但这和大卫·波恩在华盛顿州的家中多次经历的事情没有什么不同!
大卫在过去几年的职业生涯中致力于开发一种早期预警计算机视觉系统来检测野火。
该系统运行在 Raspberry Pi 上,并通过 WiFi 或蜂窝调制解调器连接到互联网。如果检测到火灾,RPi 会 pings David,之后他可以向消防部门报警。
此外,美国专利局刚刚授予大卫多项专利!
今天很高兴大卫来到了 PyImageSearch 博客。他是社区论坛的长期读者、客户和版主。
最重要的是,他的工作有助于防止伤害和生命损失,这可以说是最臭名昭著的难以早期发现的自然灾害之一。
要了解大卫·波恩是如何创造出一种计算机视觉系统来探测野火的,请继续阅读完整篇访谈!
采访计算机视觉和野火探测专家 David Bonn
阿德里安:嗨,大卫!感谢您抽出时间接受采访。很高兴您能来到 PyImageSearch 博客。
大卫:谢谢你,阿德里安。和你聊天总是很愉快。
阿德里安:在我们开始之前,你能简单介绍一下你自己吗?你在哪里工作,你是做什么的?
大卫:从大学开始,我就断断续续地从事开发和工程师的工作。在这些工作之间,我做过各种“有趣”的工作,比如公园管理员、河道向导、滑雪教练和火灾了望员。
1996 年,我和其他几个人一起创建了 WatchGuard Technologies ,它取得了巨大的成功,事实上,今天它仍然存在并保持独立。那次冒险之后,我处于半退休状态,四处旅行。在同一时期,我花了很多时间从事环境教育项目和其他自然历史项目。
这些天来,我一直在努力创办一家新公司——Deepseek Labs。
Adrian: 是什么让你对研究计算机视觉和深度学习产生了兴趣?
大卫:大约十年前,对我来说很明显,神经网络及其工作方式发生了巨大的变化。他们终于走上了拥有可以解决实际问题的工具包的道路。对我来说更有趣的是,有一大类真正的问题,你可能无法用更好的方法来解决。
几年后,我开始涉猎 OpenCV,主要是通过下载书籍和浏览它们的例子,然后我在 2015 年偶然发现了你的博客。
2014 年和 2015 年,我家附近发生了一系列大规模野火。虽然我的家毫发无损,但近 500 所房屋在大火中被毁,几名消防员牺牲。我想到这里有一个巨大的未解决的问题,我想知道我能做些什么来解决它。
2017 年末,我发现自己处于这样一种情况,人们需要评估他们的生活以及他们在做什么。与此同时,我与朋友和邻居就野火问题以及我们需要什么工具来适应这种新情况进行了多次交谈。
在这些对话中,我脑海中闪现的一件事是(大约),*“天哪,难道我不能制造一些能够探测火灾并在几分钟内警告人们逃命的东西吗?”*因此,我决心学习足够多的计算机视觉和深度学习知识,以弄清楚这样的事情是否可能实现。
通常,我发现如果你希望掌握一项新技能,如果你头脑中有一个项目(或一系列目标)需要这项新技能来推动你前进,会有很大帮助。所以我掌握计算机视觉和深度学习的项目是建立一个简单但实用的火灾探测系统。
Adrian: 我与你互动的最初记忆之一是在 PyImageSearch 社区论坛上,你在那里讨论火灾/烟雾探测,以及在你居住的地方这是一个多么大的问题。这些野火是如何开始的,为什么早期发现如此重要?
大卫:每场火都不一样。现在,在我家 30 英里范围内有 4 处大火。三起是由闪电引起的,一起是由一个在灌溉泵上工作的人引起的。通常情况下,美国的大多数“野火”都发生在由人类活动引起的相当发达的地区。这可能是任何事情,从树枝上短路的电线,到在干草中空转的车辆,到某人在篝火上不小心煮热狗。
从成本和公共安全的角度来看,早期检测非常重要。扑灭一场小火可能要花费几千美元。一场大火很容易造成数千万美元的损失。我家附近的 Cub Creek 2 火灾,高峰期有 800 多人救火。一辆刷车里的一个小团队每天可能要花费 1000 美元,而一架大型直升机通常每小时要花费 8000 美元。这些费用迅速增加。
此外,虽然大多数人都可以用铲子和水桶安全地扑灭营火,但扑灭大火更像是抗击天气现象。你也许可以让它慢下来或者稍微控制一下,但是你不可能停止它或者完全压制它。
可能在我附近燃烧的火还会在某个地方燃烧,直到 11 月开始下雪。但是,随着大量的灌木丛被大火清除,今年冬天滑雪可能会很棒!
强调早期发现的另一个重要原因是,许多“野火”始于人们居住的地区。如果给人们几分钟时间安全疏散,早期检测可以挽救生命。在美国西部和加拿大,大约有 450 万个家庭处于野火的高风险或极端风险中。
阿德里安:几周前,你自己的家受到了野火的影响。你能告诉我们发生了什么吗?
大卫:我可以从我的角度告诉你发生了什么。
一个重要的背景:我住在华盛顿州的中北部,尽管华盛顿的名声在外,但这是一个非常干燥的地方,夏天经常非常温暖。这是一个极其干燥的春天(该州东部的大部分地区正处于严重的干旱之中),而且我们在六月下旬经历了一场令人难以置信的热浪。所以植被非常干燥。有多干?嗯,火灾研究人员从树上提取核心样本来评估燃料的干燥度。火灾前两周在我所在的地区采集的岩芯样本发现,活树比窑干木材干燥,含水量约为 2%。典型的纸张含水量为 3%。
7 月 16 日星期五,白天最热的时候,我在家,也在屋里。大约下午 1 点 45 分,我向外望去,注意到南边有一股不祥的烟柱。就在那时,我出去了,从烟的方向吹来了一股相当强劲的风。
那时,大量的练习和计划开始了。我迅速关闭了所有的窗户(大多数已经关闭)。入口里有一包衣服、一箱文件和硬盘,我很快就把它们装进了卡车。然后我把四只狗都带上了卡车。最后看了一眼房子,我向山下走去,与此同时,我开始给我的邻居发短信,告诉他们火灾的情况,并鼓励他们离开那里。
在这一点上,我和我所有的邻居都非常幸运。在区域有另一场大火,他们立即将消防队和飞机转移到这场新的火灾中。因此,在一个小时内,有几架飞机和大约 100 名消防队员到达现场(当消防队员到达现场时,火灾已经估计有 1000 英亩大小)。
附近还有一名重型设备操作员,甚至在所有消防员到场之前,他就在用推土机到处切割火线。
我的邻居和消防队员们的快速行动产生了一个近乎奇迹的结果:只有几栋建筑受损,其他几栋也有轻微损坏。没有人受伤或死亡。
尽管有一个全县范围的紧急警报系统,我们没有一个人得到任何警告——来自县系统的警告在下午 2:30 左右到达我的手机。如果这一系列事件发生在凌晨 1 点 45 分,而不是下午 1 点 45 分,事情会更加悲惨,肯定会造成房屋和财产的损失,也可能会造成生命损失。
有趣的是,当这一切发生时,我有一个原型火灾探测系统在外面运行。当然,当它探测到火的时候,我已经在相当远的地方了。不幸的是,当它检测到火灾时,WiFi 已经关闭(当我撤离时,我家停电了,第二天很晚才恢复)。因此,我无法保存任何检测图像。此外,探测器本身是靠零目标电池组运行的。
阿德里安:你和你的公司开发了一种可用于农村地区的火灾探测系统。你能告诉我们解决方案吗?它是如何工作的?
**大卫:**30 秒的答案是,我使用热感相机( FLIR 轻子 3 )和基本的 OpenCV 图像处理功能来寻找好的候选区域。我传递给另一个程序,该程序用光学相机检查这些区域,然后将光学图像的切片传递给二元分类器。
更长的答案是,热感相机寻找两个靠近的东西:热点(热感图像中非常明亮的部分)和湍流运动区域。因此,如果我可以在一个非常热的点附近找到湍流运动,并且湍流运动主要在该热点上方(记住热空气上升),热点和湍流运动重叠的区域(或者如果适当扩大它们重叠的区域)是找到火焰的可能位置。
然后,光学算法获取该候选区域,并将它们的坐标转换到光学相机的坐标系。因此,通过仔细观察候选区域,我可以选择光学图像中适合传递给训练有素的二进制分类器的良好切片。
我的一个重大发现(嗯,对我来说,这是一个重大发现)是,虽然有一个很好的数据集和一个良好的网络,但如果你的分类器正在查看一幅图像的精心选择的切片,你可以获得 96-97%的准确率,准确率高达 99%以上。我怀疑通过精心构建的集合,你可以达到更高的精确度。
如果热算法和分类器都同意有火灾,则系统进入报警状态。
该系统本身的准确率超过 99.99%,这意味着在样品(户外)中运行时,每 3-5 天就会出现一次“错误”。样本外(例如,在我的厨房里用煤气灶)每天会出现 4 到 5 次错误。使用帧平均或系综可能会有更高的精度。由于热图像的分辨率(160×120)和帧速率(9 fps)在大多数情况下都非常低,因此该系统不必非常努力就可以获得这些令人印象深刻的结果。
我使用的方法远非完美,在某些情况下仍然很困难。内燃机,尤其是重型设备或农用设备的热废气经常会扰乱热算法。分类器与明亮的主题斗争,甚至更明亮的背光主题。靠近传感器的色彩鲜艳的鸟有时会产生令人困惑的结果。随着时间的推移,通常通过收集更具代表性的训练数据,这些问题正在得到缓解。
我已经为这个系统的许多部分申请了专利,8 月 11 日,我被告知那些专利是允许的。在更多的费用和文书工作之后,这些专利将被正式发布和出版,然后我可以分享更多关于该系统如何工作的细节。
阿德里安:你们的火灾探测系统运行在什么硬件上?你需要一台笔记本电脑/台式机,或者你正在使用类似树莓派,杰特森纳米等。?
大卫:核心火灾探测器运行在树莓派上。现在的参考实现是 Pi 3B+,检测时间大约为 1-2 秒。目前,该系统要么通过 WiFi 连接到互联网,要么使用蜂窝调制解调器。我的首选是使用蜂窝调制解调器,因为我们可以自行配置系统,并在没有任何最终用户设置的情况下启动和运行它。
我正在引导只读的 Pi。这使得该系统在面对断电和其他故障时更加稳健,但不可能将检测图像直接保存在 SD 卡上。
这个系统的其他部分将在云上运行,也将有一个客户端(网页或应用程序),可以向您显示部署的检测器,它们部署在哪里,以及它们的状态如何。
Adrian: 将红外摄像头与“标准”图像处理和 OpenCV 代码结合起来,最难的是什么?你遇到了哪些拦路虎?
大卫:对我来说,最大的障碍是让硬件工作起来。GitHub 上有许多硬件障碍(包括不支持和不推荐的部分)和许多过时的代码,我必须努力克服。我终于找到了一些还算过得去的代码,至少让我可以开始了。例如,普通的轻子分线板使用 I2C,所以你有一堆电线连接到你的 Raspberry Pi 上的 GPIO 总线。我让所有这些工作,但它不是探索更好的火焰检测算法的最佳环境。
当我切换到使用一个 Purethermal 2 USB 模块时,我的进度大大提高了。这是一个巨大的进步,因为只需很少的努力,我就可以在笔记本电脑上试验热感相机的图像处理算法。因此,与其将代码上传到 Pi 并重新启动 Pi,然后在另一个显示器上查看输出,我可以只在我的笔记本电脑上进行代码-测试-调试循环,然后在我的办公桌上、厨房的桌子上或面包店工作。因此,我很快就在这个系统上花了更多的时间,并且在一个月内学到了比过去六个月还多的东西。
一旦你与硬件对话,真正的工作就开始了。轻子是一种非常敏感的仪器,它只有 160×120 的空间分辨率,但每个像素都是 16 位深——像素值的 1 位变化代表大约 0.05C 的温度变化。这足够敏感,如果你赤脚走在寒冷的地板上,你的脚印将在热成像中“发光”几分钟。另一方面,许多 opencv 函数并不真正喜欢 16 位灰度图像,所以您需要小心您调用的函数,并且您可能需要使用 numpy 进行一些操作。
你需要注意的最后一点是热图像的对比度非常低。因此,除非您以某种方式增强它们(通常归一化直方图就足够了),否则当您显示图像时,您将看不到任何有趣的东西。
阿德里安:你认为你从建立火灾探测系统中学到了什么?
**大卫:**简答:很多!
我认为(到目前为止)最大的收获是,你应该期待花很多时间来构建伟大的数据集。你不应该期望它是容易的,你应该期望一路上会有很多试错和学习的经历。然而,一旦你开始构建一个伟大的数据集,并有一个框架让你不断改进它,你就处在一个奇妙的地方。
在你的文章中,你大谈高质量数据集的价值。那是百分之百正确的。然而,我会更进一步说,如果您构建了一个框架和流程,让您可以轻松地增长和扩展数据集,那么您正在创造更有价值的东西。
Adrian: 您在构建火灾探测系统时使用了哪些计算机视觉和深度学习工具、库和软件包?
David: 我使用了 OpenCV、Tensorflow、Keras、picamera 模块和您的 imutils 库。
阿德里安:你在这个项目中的下一步是什么?
大卫:我们现在正在做两件事:第一件是我们有一些原型,我们正在花时间研究它们,了解我们正在使用的方法的局限性以及如何使它变得更好。与此同时,我们正在与潜在客户交谈,向他们展示我们所拥有的,并谈论我们的想法,并试图找出如何解决他们的问题。
我们学到的一件大事是,如果你能在一个社区周围部署许多(至少几十个,可能几百个)火灾探测器,整个想法会更好。然后,你可以给人们一个网站或一个应用程序,让他们回答他们关心的问题:火在哪里?
阿德里安:你是 PyImageSearch 的长期读者和顾客。谢谢你支持我们!(还有更感谢成为社区论坛中非常有用的版主。)PyImageSearch 对你的工作和公司有什么帮助?
David: 我可以接触到更明智、更有经验的人(你和 Sayak Paull 都非常有帮助),他们可以在我陷入困境时帮我解决问题(当我切换到 Tensorflow 2.x 和 tf-data 时,我有几次都搞砸了,你和 Sayak 都在帮我找出问题所在方面发挥了巨大作用)。
我喜欢参与 PyImageSearch 的另一点是,帮助他人是提高自己技能和学习新事物的好方法。所以对我来说,这是一次很棒的经历。
Adrian: 如果一个 PyImageSearch 的读者想和你联系,他们该怎么做?
David: 与我联系的最佳方式是在我的 LinkedIn 上,地址是 David Bonn 。
总结
今天我们采访了大卫·波恩,他是利用计算机视觉探测野火的专家。
大卫已经建立了一个专利的计算机视觉系统,可以成功地检测野火,使用:
- 树莓派
- 前视轻子热感相机
- 蜂窝调制解调器
- 专有 OpenCV 和深度学习代码
该系统已经被用于探测野火和向消防队员发出警报,防止人员伤亡。
早期野火检测是计算机视觉和深度学习如何彻底改变我们生活几乎每个方面的又一个例子。作为计算机视觉从业者,大卫的工作展示了我们的工作可以对世界产生多大的影响。
我祝 David 好运,因为他将继续开发这个系统——它确实有潜力拯救生命,保护环境,并防止巨大的财产损失。
在 PyImageSearch、 上发布未来教程和采访时,您只需在下面的表格中输入您的电子邮件地址即可获得通知!
采访 dlib 工具包的创建者戴维斯·金
原文:https://pyimagesearch.com/2017/03/13/an-interview-with-davis-king-creator-of-the-dlib-toolkit/
在今天的博客文章中,我采访了 Davis King ,他是 dlib 的创建者和主要维护者,dlib 是一个用 C++编写的用于现实世界机器学习、计算机视觉和数据分析的工具包(在适当的时候包括 Python 绑定)。
我个人在许多项目中使用过 dlib(特别是用于物体检测),所以很荣幸能在 PyImageSearch 博客上采访 Davis。
在这篇博文的剩余部分,戴维斯:
- 讨论他在计算机视觉和机器学习领域工作背后的灵感。
- 解释了 dlib 的由来,为什么存在,以及这个库主要用来做什么。
- 谈论维护一个流行的开源库(如 dlib)最困难的方面。
- 描述了他的小说 Max-Margin 对象检测 论文背后的细节,dlib 库中对象检测的基石。
- 反映了 dlib 的最新版本,其中包括深度度量学习,适用于最先进的人脸识别和人脸验证。
- 为刚刚开始计算机视觉和深度学习生涯的读者提供有用的建议和意见。
这些问题大部分来自才华横溢的凯尔·麦克唐纳,我第一次见到他是在 Twitter 上,当时我正和戴维斯谈论他最新的 dlib 版本。Kyle 很友好,让我使用并修改了他最初的问题(同时添加了一些我和 David McDuffee(PyImageSearch 的通信协调员)的其他问题),从而使这次采访成为可能。一定要给凯尔和大卫大声喊出来,并告诉他们谢谢!
要了解更多关于 Davis King、dlib 工具包以及该库如何用于计算机视觉、机器学习和深度学习的信息,请继续阅读。
dlib 创始人戴维斯·金访谈
阿德里安:嘿,戴维斯!我知道您很忙,感谢您抽出时间接受采访。很荣幸您能来到 PyImageSearch 博客。对于不认识你的人,你是谁,你是做什么的?
戴维斯 :谢谢邀请我。我是一名软件开发人员,研究应用机器学习问题。我的大部分工作是为美国国防应用研究机器视觉和自然语言处理。很多都是用不同种类的传感器,如声纳、激光雷达、雷达、光学相机等,来做计算机视觉的事情。我还致力于工业自动化和自主水下航行器的传感,以及自动化金融交易的机器学习系统。
但是在公开场合,大多数人都知道我是开源项目 dlib(dlib.net)和 MITIE(github.com/mit-nlp/MITIE)的作者。
Adrian: 是什么激励你开始从事计算机视觉、机器学习和深度学习领域的工作?
戴维斯 :我想在一些有趣且重要的领域工作。长久以来,我一直相信自动化非常重要。此外,当我还是个孩子的时候,我就知道我想做一些计算机科学的事情,事实证明我非常擅长编程,而且我热爱数学。机器学习是自动化的前沿所在,涉及大量数学和编程,所以我来了。我也是科幻作家的粉丝,比如艾萨克·阿西莫夫和维诺·文奇。机器学习及其相关领域似乎是通向有趣的科幻人工智能的最明显的途径。所以这也很酷,即使现在还很遥远🙂
Figure 1: dlib — A toolkit for real-world computer vision and machine learning (higher resolution).
阿德里安 :什么是 dlib?图书馆主要用来做什么?
戴维斯 : Dlib 是一个通用的开源 C++软件库。我在 15 年前开始写它,最初它与机器学习无关。无论如何,我那时是,现在仍然是合同编程的狂热爱好者。所以 dlib 最初的动机是使用“契约式设计”的方法来制作一堆当时还没有的跨平台工具。例如,15 年前,C++还没有令人沮丧的可移植线程、网络或线性代数工具。
dlib 就是这样开始的,作为一个包含一堆随机系统工具的跨平台 C++库。例如,dlib 中最流行的东西之一是 dlib::pipe,这是一种在线程之间传递消息的类型安全工具,它被用于大量不进行任何类型的机器学习的嵌入式/实时处理应用程序。实际上,这仍然是今天的 dlib,一个以契约式设计风格编写的 C++工具集合。只是我花了 10 年时间来制作机器学习工具。因此,截至 2017 年,dlib 由机器学习材料主导,这在过去几年中真正推动了它的流行。特别是,人脸检测、地标和识别示例程序现在可能是 dlib 中最受欢迎的部分。
阿德里安 :你认为 dlib 在新的研究方面开创了先例吗,或者你渴望让已发表的作品更容易被人理解?
戴维斯 :不尽然。dlib 中有些东西很新颖,比如 MMOD 探测器。但总的来说,我对 dlib 的目标一直是制造真正干净和易于使用的工具。这是一个不同于做新颖研究的目标,而且有点不一致,因为全新的想法通常不会以干净和易于使用的形式出现。大多数时候,当我向 dlib 添加一些东西时,它是来自已出版的文献中的一些已经被认为非常棒的东西,这意味着它已经存在了一段时间。
因此,对于 dlib 来说,我的目标无疑是让已发表的作品更容易被人获取。这也是我选择 dlib 许可证的原因。我希望尽可能多的人能够利用最先进的机器学习工具,并将其用于他们想要的任何事情。我觉得这很好。
我也是在工作中完成大部分原创研究,这意味着我通常不能发表。原创研究也很辛苦。我在 dlib 上工作的部分原因是,我可以在工作之余做一些相对容易和放松的事情。还有一个问题是,原创研究,至少是我在日常工作中倾向于做的那种,是非常具体的应用,而不是非常普遍的兴趣。所以它通常不适合 dlib。
阿德里安 :你认为 dlib 最终会“功能完善”吗,还是一个正在进行的项目?
戴维斯 :不,它永远不会完整。Dlib 只是一个有用工具的集合,显然你总是可以制造更多的工具,除非有一天人类不再对新的更好的东西有想法。但这似乎不太可能。我也很喜欢写软件,并把它免费放到网上。我已经这样做了 15 年,我看不出有任何理由在短期内改变。
阿德里安 :维护像 dlib 这样的开源库,最困难的方面是什么?
戴维斯 :让该死的构建系统在任何地方都能工作。dlib 的核心很容易构建。但是 Python 绑定呢?没那么简单。这是因为,正如我从运行 dlib 中学到的,有大量的 Python 版本都是不兼容的,因为为一个 Python 构建的扩展模块不能与另一个兼容。由于 dlib 使用 boost.python 来构建扩展模块,这变得更加糟糕。所以你会遇到这样的问题,有人会为 python 版本 A 安装 boost.python,然后他们会尝试将它用于 Python 版本 B,结果,Python 崩溃了。这里的问题是 python 版本有 3 个地方必须匹配(运行时使用的 Python 解释器、编译 boost.python 时使用的 Python 和编译 dlib 时使用的 Python),这对用户来说是很大的混淆机会。我从用户那里得到很多关于这个的问题,我不清楚如何避免这种用户困惑。
使这个问题变得特别糟糕的是,在一个用户的系统上安装多个版本的 Python 是很常见的,尤其是在 Mac 上。还有多个包管理器(例如 conda、pip、brew)。所以安装 Python,boost.python,dlib 的方法都有,没有标准什么的。所以超级容易搞混,版本不兼容。
有人正致力于将 dlib 的 Python 绑定从 boost.python 迁移到 pybind11,这将改善这一点。这是因为只有 2 个东西需要匹配(编译后的 dlib 和 Python 解释器),而不是 3 个(dlib/python/boost)。所以这应该会让事情简单很多。但我确信我仍然会从安装了多个版本 Python 的用户那里获得大量论坛流量。因此,如果有人有任何关于如何使 Python 绑定安装过程更加简单的想法,请联系 github🙂
阿德里安 :开源最令人兴奋的一个方面是看到你的工作是如何被其他人使用的。你见过 dlib 更令人惊讶的用法有哪些?
戴维斯 :看到艺术家使用 dlib,我真的很惊讶。这是我从未预料到的。我想到的通常应用都是工业的。所以看到像凯尔·麦克唐纳这样的人使用它是令人惊讶和酷的。
Figure 2: An example of dlib’s face detector.
艾德里安 :我记得两年前看过你关于 Max-Margin 物体检测 的论文。本文主要研究基于 HOG 的检测器。你最近更新了 dlib,也将这种方法用于深度学习的对象检测。你是如何将之前的物体检测研究与 dlib 中新的深度学习检测模块融合在一起的?
戴维斯 :那篇论文有两个主要部分。第一个也是最重要的一个论点是,在训练对象检测器时应该使用某个损失函数(MMOD 损失),因为它可以更好地利用可用的训练数据。第二部分描述了当检测器是固定特征提取器(例如,HOG、BoW 等)的一些线性函数时,用于优化该损失的算法。).论文接着做了一些实验来证明 MMOD 损失是一个好主意,并使用了 HOG 和其他一些方法作为例子。但是猪的选择并没有什么根本性的东西。我用它只是因为它在我最初写这篇论文的时候很流行,那是在 2012 年。
然后出现了 CNN,它超级擅长物体探测。我仍然认为 MMOD 损失是学习物体探测器时要走的路,并想用 CNN 试试。所有这些都需要将纸上的 MMOD 损失函数编码成 CNN 损失层。然后你就像每个人用随机梯度下降法一样优化 CNN,结果发现 MMOD 损失对 CNN 也很有效。事实上, dlib 的一个示例程序显示它训练一个 CNN 只用 4 张训练图像找到人脸。这比训练 CNN 通常所需的训练数据少得多,支持了 MMOD 更有效利用训练数据的说法。
Figure 3: A screenshot of my Papers2 database. Think of it as iTunes, only for PDF files. Davis recommends keeping up with recent publications in the computer vision and deep learning space.
阿德里安:dlib 最近的很多工作都围绕着深度学习。你如何跟上当前深度学习的趋势(以及一般的研究趋势)?)
戴维斯 :我花很多时间阅读。这是唯一的办法。你得看报纸。有做这些事情的朋友也会有帮助,因为他们会告诉你他们发现的你可能错过的好论文。但这没有你自己阅读论文重要。所以读这篇文章的人不应该认为仅仅靠自己会让事情变得更加困难,因为事实并非如此。你不需要成为某个大实验室的一员来参与这些事情。
对于感兴趣的人来说,有一些学术会议会定期发表很棒的论文,你可以在网上免费找到。对谷歌来说,一些好的会议是 CVPR 、 ICML 、 NIPS 和 ICLR 。例如,用谷歌搜索“CVPR 论文”,你会发现各种各样的好东西。另一个很好的资源是谷歌学术。在那里你可以搜索到几乎所有的世界学术文献。结果或多或少按引用次数排序,所以你可以很容易地找到真正受欢迎的论文,因为它们被引用了很多。如果你对某个话题感兴趣,但不知道从何入手,这些通常是最好的阅读材料。你也可以点击 google scholar 中的“被 XX 引用”链接,找到你喜欢的任何论文的最重要的后续研究。这将显示所有引用你喜欢的论文的论文,同样,你可以看到引用它的最受欢迎的论文。允许您快速找到研究路径。谷歌学术是如此重要的资源,我怎么推荐都不为过。
阿德里安注: 为了补充戴维斯的建议,我还建议谷歌搜索*“{ { topic } }调查论文”以查找总结一段时间内特定主题研究趋势的文献调查(通常很长)。查找调查论文是一种极好的**方式,可以快速跟上您感兴趣的研究领域中以前的开创性方法。*
阿德里安 :在你和 MMOD 在 HOG 和深度学习方面的合作中,你的图书馆已经取得了最先进的成果。除了你关于 MMOD 的 arXiv 论文,还有什么原因让你不经常发表文章?
戴维斯 :我发表过一些其他的论文,但是我一般不发表。这没有什么深层原因,除了要花很多时间来完成一篇高质量的论文,然后让它被接受,然后在会议上发表。我的确有一份白天的工作,而且大多数时候,我不能在那里发表我的作品。而且,大多数雇主并不真的在乎你是否发表。我没有那种发表论文对职业成功很重要的工作,如果我纯粹在学术界工作的话,这种工作会很重要。
所以我没有太多动力去埋头写论文。同样值得记住的是,发表论文的根本目的是传播思想。如果我有一些有用的算法,我想让人们使用它,最有效的方法是什么?如果我把它放入 dlib,成千上万的人会使用它,这比一般的学术出版物要多得多。就公共利益最大化而言,我不认为写论文是对我时间的最好利用。
围绕出版也有很多废话。事实上,我在 2012 年写了那篇 MMOD 论文,那是很久以前的事了。我向 CVPR 和其他几个地方提交了两次,每次都得到了好评,除了每次都会有一个评论者发表一些无意义的评论,大意是“我认为实验是错误的,不相信这是可行的”。他们中的一些人显然没有看报纸。这类评论尤其令人恼火,因为与此同时,成千上万的人正在使用这种方法,并取得了巨大的成功。但是你不能说“去运行 dlib,看看它是如何工作的”,因为提交是双盲的,并且在大多数情况下只基于论文。反正发表的人都抱怨这种事。这真是件苦差事,发表论文要花很多时间。我可以通过把想法放在 dlib 中,并附带解释它的文档来更容易地传播它们。所以我通常都是这么做的。
阿德里安 :我看到 ODNI 和 IARPA 被列为 dlib 的赞助商。你能告诉我们更多关于这次赞助的情况吗?这种联系是怎么产生的?又是如何推动 dlib 的发展?
戴维斯 :我职业生涯的大部分时间都在国防部工作,我的大多数朋友都是我在那个世界认识的人。IARPA 赞助的发生是因为人们渴望一个易于使用的 C++深度学习库。也就是说,从 C++程序中容易使用的东西。Python 或其他语言中有许多可用的深度学习工具,但 C++中没有,这有点令人惊讶,因为所有的深度学习工具最终都是用 C++或 C 编写的。所以我在国防部认识的一个人说服我编写一个易于使用的 C++深度学习 API,并将其放入 dlib。我维护的另一个开源项目 MITIE 也是由 DARPA 国防部机构赞助的,是 DARPA XDATA 项目的一部分。
然而,dlib 中的大多数东西都不是由任何人赞助的。通常我做 dlib 只是为了好玩。但是,当有人想赞助对 dlib 进行一些添加或更改时,我只接受我认为它实际上是一个有用的工具,有意义放入 dlib 的情况。
Figure 4: Applying deep metric learning in the latest release of dlib to the task of face recognition and face verification.
阿德里安 :最新版本的 dlib 搭载了深度度量学习,可与其他最先进的人脸识别技术相媲美。是什么促使你从事人脸识别的工作?当你开始做这个项目的时候,你的意图是“解决”人脸识别吗?(注:我已经看过几次你的公告博文,我实际上有点搞不清楚你是在做人脸识别(给定一张 1 张脸的图像,在 N 张脸的数据库中识别)还是人脸验证(给定两张图像,确定两张照片中的人是否是同一个人)。如果你能详细说明这一点,那将非常有帮助。
戴维斯 :哦,我不在乎人脸识别。对我来说,有趣的是学习算法,在上一个版本中,它主要是一些深度度量学习工具的添加。度量学习对于很多和人脸没有任何关系的事情都是有用的。这正是我喜欢添加到 dlib 中的那种广泛有用且有趣的工具。我在上一个 dlib 版本中包含人脸识别模型的主要原因是为了展示新工具可以正常工作。它也是有用的教学工具。当我向 dlib 添加新东西时,我会尝试编写示例程序来解释如何使用这些工具以及它们为什么有用和有趣。在深度度量学习的情况下,要写的明显的例子是展示如何进行某种面部识别的例子。所以我添加了人脸识别的东西,因为这是最引人注目的文档,而不是因为我关心人脸识别。
至于你的另一个关于识别和验证的问题,示例程序没有做这两件事。相反,它显示了如何将人脸嵌入到 128D 向量空间中,在该空间中同一个人的图像彼此靠近。它本身没有任何作用。但它是大多数用人脸做有趣事情的系统所使用的基本构件。例如,如果你想进行人脸验证,你需要两张人脸,并检查它们在 128D 空间中是否相距一定距离。如果他们足够接近,你说他们是同一个人。为了进行识别,你可以说“这是我的新面孔,在我的数据库中,它最接近哪张面孔?”?还是离数据库里的一切都很远?”。或者做人脸聚类,dlib 的一个例子,你可以在人脸的矢量嵌入上运行聚类算法,弹出人脸的聚类。
在我的博文中,我提到新的 dlib 模型在 LFW 基准测试中获得了 99.38%的分数。 该基准是人脸验证基准。 但是你可以很容易地使用工具来做人脸识别或聚类。
艾德里安 :为 dlib 开发一个新特性时,一般的时间表是什么样子的?拥有一个“基本完成”的特性,对它进行润色,然后发布它,这中间有很长的差距吗?或者你在特写“完成”后马上发表?
戴维斯 :这要看特点。大多数事情不需要那么长时间。例如,我想我用一个周末的时间在 dlib 中编写了 face landmarking 工具。虽然有时需要更长时间。真的要看是什么了。然而,我通常会马上把它放到网上。你通常可以立即看到代码出现在 github 上。但是我会等到我觉得一切都稳定了再发布官方编号的 dlib。
这也取决于你在时间表中包含了什么。我花很多时间阅读。有时我会对一些事情感到兴奋,这可能涉及到买一本关于某个主题的教科书并从头到尾阅读。然后最终会有一些具体的东西我想添加到 dlib。花在阅读上的时间可能是几个月也可能是几年,取决于你如何看待它。
我有时也会跑题。例如,当我为某些东西编写代码时,我经常会意识到我需要一些其他工具来制作我想要制作的机器学习算法。那我去做另一个工具。在编写另一个工具时,我可能意识到我还需要另一个工具来实现它。有时会失去控制,dlib 全新的主要部分随之而来,比如优化工具或线性代数库。
阿德里安 :虽然值得,但作为一个开源项目的主要维护者需要你投入时间、创造力和耐心。你觉得管理用户的期望很有挑战性吗?
戴维斯 :不尽然。我在 dlib 上工作是因为我喜欢。我还发现大多数人都很理智。我从用户那里得到的唯一持续不断的令人讨厌的问题来自那些明显不知道如何编程并且明显不想学习的人。像“我不知道怎么编程,你能告诉我打什么吗?”。无一例外,回答这类问题会导致无休止的进一步的问题*“…好吧…那么我之后该键入什么?”*。我肯定没时间在网上给大家做免费的代码编写服务。
但是我会尽力帮忙。我还有一个“推荐书籍”页面,供刚刚起步的人使用。
阿德里安 :作为你所在领域的专家,当你被一个难题困住时,你会找谁?
戴维斯 :通常没有人。不是因为我不想,而是因为通常当你被困在某件事情上时,你不知道有谁知道如何解决它。例如,通常当我试图从一篇论文中实现一些东西时,它起初并不工作。为什么不管用?是因为我的代码有 bug 吗?大概吧。还是因为我忽略了一些微妙但重要的细节?也许吧。是因为论文错了,永远不会成功吗?有时候。
在每一种情况下,你都会发现,在你花了很多时间解决这个问题并陷入困境之后,你会比你可能询问的任何人都更熟悉相关的细节。一部分是因为你写了你的代码,只有你见过它,一部分是因为你试图实现的文件在你的头脑中是新鲜的,而不是在你可能会问的其他人的头脑中。所以问别人可能一点帮助都没有。这并不是说你不应该这样做,有时它帮助很大。但通常你在解决这类问题时都是靠自己。
阿德里安 :你对那些刚刚开始计算机视觉和深度学习事业的读者有什么建议吗?
戴维斯 :多读书,不要跳过基本面。这无疑是人们开始面临的最大问题。每个人都想直接跳到结尾最酷的部分。但你不能这么做。如果你跳过重要的事情,那么理解计算机视觉似乎是不可能的,你会很快变得沮丧。在你希望在计算机视觉或机器学习方面取得任何进展之前,你必须理解一堆核心领域。然而,如果你按照正确的顺序学习,一切都会变得容易得多。
具体来说,我会说你需要很好地了解这六件事:如何编程、微积分、线性代数、概率、统计和数值优化。如果你不知道这六个领域,那么你就无法理解机器学习和计算机视觉论文。
你也不能用电脑做事,因为你不会编程。但没什么大不了的,你可以通过阅读来解决这个问题:)。特别是,你应该阅读每一个主题的教科书。我意识到很多人不想读教科书。但是如果你不读书,你就不会学习。事情就是这样。
所以你必须找到一些方法来激发自己阅读线性代数等主题的教科书。获得动力的一个好方法是选择一些你感兴趣的话题。也许你在 CVPR 找到了一些你真正想要理解和实现的文件。所以你读了,但有些部分你不明白。可能他们用了很多线性代数,而你线性代数很弱。现在你知道你需要学习线性代数,更重要的是,你有一个具体的目标,你很兴奋推动你去做。你可以从我的列表中挑选一本书:http://dlib.net/books.html。或者你可以去大学网站,看看他们用什么书来上同等的课。
此外,许多机器学习算法最终涉及复杂的循环计算,中间有逻辑语句。当用 Python 执行时,这类事情真的真的很慢,所以尽管这是一个 Python 博客,而且 Python 很棒,我还是要插上学习 C++的插头:)。所以也学 C++。很多时候,你会想做一些在 Python 中不容易矢量化的计算,或者你想写一些定制的 CUDA 代码,或者使用 SIMD 指令,或者其他什么。所有这些在 C++中非常简单,但在函数调用开销高、循环结构慢、无法访问硬件的语言中却非常困难或不可能(例如 Python、MATLAB、Lua)。但是如果你懂 C++的话,只要你愿意,你可以写一个 Python 扩展模块来处理这些事情,这很简单。
摘要
在今天的博文中,我们采访了 Davis King,他是用于现实世界计算机视觉和机器学习应用的工具包 dlib 的创建者和维护者。
虽然 dlib 主要用在 C++应用程序中,但是某些功能也有 Python 绑定——尽管 Davis 建议使用 C++来利用 dlib 的全部功能。
我可以亲自证明 dlib 的易用性——我已经在许多计算机视觉项目中使用过它,我甚至在 PyImageSearch 大师课程 中的对象检测背景下讨论过它。
我想再次感谢戴维斯·金抽出时间来做这次采访(并对凯尔·麦克唐纳和大卫·麦克杜菲帮忙收集这次采访的问题表示感谢)。
为了跟上 Davis,一定要在 Twitter 上关注他,同时关注他在 T2 的 GitHub 项目。
为了在以后的博客文章(包括采访)发布时得到通知,请务必在下面的表格中输入您的电子邮件地址!
弗朗索瓦·乔莱访谈
原文:https://pyimagesearch.com/2018/07/02/an-interview-with-francois-chollet/
在今天的博文中,我采访了现代深度学习领域最重要的研究人员和实践者之一,Fran ois Chollet。
弗朗索瓦不仅是 Keras 深度学习库的创建者,他还是**谷歌人工智能研究员。**他还将在今年 8 月的 PyImageConf 2018 上发表演讲。
在这次采访中,弗朗索瓦讨论了:
- 他对人工智能研究的启示
- 他创造 Keras 的原因
- 深度学习最终将如何在每个行业、每个企业和每个非营利组织中普及
- 人工智能行业的问题和挑战(以及我们如何帮助解决它们)
- 他会改变深度学习领域的什么,以及研究社区可能如何陷入困境
- 作为一名图片搜索者,他给你的建议是研究深度学习的最佳方式
请和我一起欢迎弗朗索瓦加入 PyImageSearch——他能来到这里真的是我的荣幸。
弗朗索瓦·乔莱访谈
Figure 1: Creator of Keras and Google researcher, François Chollet (Image credit: RedHat).
阿德里安:嗨,弗朗索瓦!我知道你在谷歌人工智能和 Keras 图书馆的工作非常繁忙,我真的很感谢你花时间接受采访。非常荣幸您能来到 PyImageSearch 博客!对于不认识你的人,你是谁,你是做什么的?
我在加州山景城的谷歌公司担任软件工程师。我开发深度学习库 Keras。我在 2015 年开始它,作为一个兼职项目,随着时间的推移,它变得比预期的更大——**现在超过 25 万用户,是深度学习世界的一大部分。**我也做一些主题的人工智能研究,包括计算机视觉和程序合成。
Adrian: 是什么激励你开始从事机器学习、深度学习和计算机视觉领域的工作?
**弗朗索瓦:**我迷上 AI 很久了。我最初是从哲学的角度来研究它的——我想了解智力是如何工作的,意识的本质是什么,诸如此类的事情。我从阅读神经心理学开始,从远处看,这个领域应该能够回答这些问题。能学的都学了,结果发现神经心理学并没有什么真正的答案。这太令人失望了。
所以我转向了人工智能——这个想法是试图通过从第一原则开始,自下而上地创造思维来理解思维,这与神经心理学的方法非常相反。当然,那时的大多数人工智能根本不关心大脑以及它们可能如何工作,所以我最终进入了人工智能中似乎与我的兴趣最相关的一个领域:发展认知机器人学,这是关于使用机器人和人工智能来测试人类认知发展模型的。然后,因为我不太擅长长时间做同一件事,我最终分支到了更应用的子领域,比如计算机视觉和自然语言处理。
Figure 2: The Keras deep learning library.
Adrian: 给我们介绍一下 Keras 深度学习库。你为什么要创建它,它填补了现有 ML/DL 库和包中的什么空白?
**弗朗索瓦:**我在 2015 年 2 月/3 月左右创作了 Keras。深度学习在当时是一个非常不同的领域。首先,它比较小。当时可能有 1 万人在做深度学习。现在已经接近一百万了。
就工具而言,你没有太多选择。您可以使用 Caffe,它在计算机视觉中很流行,但是只适用于相当狭窄的用例(convnets ),并且不太具有可扩展性。您可以使用 Torch 7,这是一个不错的选择,但这意味着您必须用 Lua 编码,而 Lua 没有 Python 数据科学生态系统的任何好处。任何你想加载的数据格式——你必须在 Lua 中从头开始构建你自己的解析器,因为你在 GitHub 上找不到这样的解析器。然后是 Theano,一个 Python 库,它是 TensorFlow 的精神祖先。我很喜欢这个 ano,它感觉像是未来,但它非常低级,很难使用。你必须从头开始写所有的东西。
当时我正在研究将深度学习应用于自然语言处理,重点是问答。现有工具生态系统中对 RNNs 的支持几乎不存在。所以我决定在 Theano 的基础上制作自己的 Python 库,从我喜欢的 Scikit-Learn API 和 Torch API 的部分借鉴一些想法。当我推出时,主要的价值主张是 Keras 是第一个同时支持 RNNs 和 convnets 的 Python 深度学习库。据我所知,它还有第一个可重用的 LSTM 开源实现(以前可用的实现本质上是研究代码)。而且很容易使用。
Keras 从第一天起就开始获得用户,从那以后就一直是一场不间断的开发马拉松。
Figure 3: Why might we use Keras over other deep learning libraries?
Adrian: 为什么深度学习研究人员、从业者或开发人员会选择 Keras,而不是 PyTorch、Caffe 甚至 strict TensorFlow 等其他库/框架?
**Fran ois:**我认为让 Keras 在今天的深度学习框架格局中脱颖而出的是它对用户体验的关注。Keras API 中的一切都是为了遵循减少认知负荷、更易访问、更高效的最佳实践。我认为这是 Keras 达到这一水平的主要原因,尽管 Torch 和 Caffe 已经领先一步。无论对于从业者还是研究人员,你都不能夸大易用性和生产力的重要性。在一个紧密的迭代循环中,尽可能快地从想法到结果,是做伟大研究或开发伟大产品的关键。
还有,关于 Keras 和 TensorFlow 还有一点。没有“Keras 或 TensorFlow”的选择。Keras 是 TensorFlow 的官方高级接口。它与 TensorFlow 一起打包为 tf.keras 模块。你可以将 Keras 视为深度学习的前端,它针对易用性和生产力进行了调整,可以在不同的后端引擎上运行,TensorFlow 是主要的一个。
Adrian: 开源最令人兴奋的一个方面是看到你的作品如何被其他人使用。你见过的 Keras 有哪些更有趣甚至令人惊讶的用法?
我们这个领域真正吸引人的一点是,你可以用我们的技术和工具解决各种各样的问题。我已经看到 Keras 被用来解决许多我甚至不知道存在的问题。比如优化鲑鱼养殖场的运营。在发展中国家分配小额贷款。为实体店建立自动结账系统。总的来说,在硅谷的人们意识到的一系列问题和人们在那里面临的、可以用这些技术解决的所有问题之间,似乎存在着差距。
这就是关注可访问性如此重要的一个重要原因:硅谷本身永远不会解决所有可以解决的问题。不会有一个硅谷的“深度学习行业”垄断深度学习专业知识,并向其他所有人出售咨询服务和软件。相反,深度学习将出现在每个行业、每个企业和非营利组织中,成为每个人手中的工具。让 Keras 和 TensorFlow 这样的框架免费使用并尽可能容易获得是一种发起大规模分布式问题解决浪潮的方式:理解目标领域的人将使用我们的工具自己构建解决方案,其影响力是我们单独一个人的 100 倍。
我认为 Keras 在让每个人都可以访问方面做得很好,相比之下,其他框架的目标只是让专家研究人员和其他内部人士使用。当我与从事深度学习的人交谈时,他们通常在研究和行业圈子之外,他们通常使用 Keras。
Figure 4: Important open source libraries, including Scikit-learn, Requests, Flask, and Theano.
Adrian: 除了 Keras 和/或 TensorFlow,你最喜欢的开源库有哪些?
**Fran ois:**我非常喜欢 Scikit-Learn,它在科学 Python 生态系统中产生了巨大的影响。这是一个非常以用户为中心、设计良好的库。我通常是以用户为中心的设计的忠实粉丝。像 Requests 和 Flask 这样的库也是很好的例子。
此外,谈到深度学习框架,我不能夸大 Theano 对深度学习世界的重要性。它有它的问题,但它在许多方面真的很有远见。
阿德里安:有时候,即使是出于好意的人最好的意图也会带来灾难性的后果——这种逻辑也适用于机器学习和人工智能。你同意这种说法吗?如果是这样,作为 ML/DL 社区,我们能做些什么来帮助确保我们没有造成比我们解决的更多的问题?
**弗朗索瓦:**是的,肯定的。不适当地应用机器学习可能会导致简单、不准确、不负责任、不可审计的决策系统在严重的情况下部署,并对人们的生活产生负面影响。如果你看看公司和政府今天使用机器学习的一些方式,这不是一个假设的风险,而是一个紧迫的问题。
谢天谢地,我认为最近机器学习社区出现了积极的趋势。人们越来越意识到这些问题。一个例子是算法偏差,这是机器学习系统在其决策中反映其训练数据固有的偏差的事实,无论是由于有偏差的数据采样、有偏差的注释,还是现实世界在各方面都有偏差的事实。一年前,这个重要的问题几乎不为人所知。现在,大多数从事机器学习的大公司都在研究这个问题。因此,至少在对其中一些问题的认识方面,我们正在取得进展。但这只是第一步。
Adrian: 如果你能改变深度学习行业的一件事,会是什么?
**Fran ois:**我认为应用深度学习在行业中总体表现良好,除了普遍倾向于过度销售当前技术的能力,并对不久的将来过于乐观(放射科医生在五年内肯定仍会有工作)。在我看来,有麻烦的是研究界。在这方面,我会改变很多事情。
首先,我们应该尝试修复研究界破碎的激励机制。目前,我们有许多违背科学方法和科学严谨性的激励措施。当你过度宣称而调查不足时,在深度学习会议上发表更容易,同时模糊了你的方法论。人们被增量架构技巧所吸引,如果你不进行对抗性的测试,这些技巧看起来似乎是有效的。他们使用弱基线,他们过度适应他们的基准的验证集。很少有人进行消融研究(试图验证你的经验结果实际上与你提出的想法有关),对他们的模型进行严格验证(而不是使用验证集作为超参数的训练集),或者进行显著性测试。
然后,我们有了公关驱动研究的问题。科幻叙事和神经科学术语赋予了人工智能领域一种特殊的光环。当它真的是数学和计算机科学的交叉领域时。一些知名实验室专门为公关挑选他们的研究项目,而不考虑 T2 能从项目中学到什么,能获得什么有用的知识。我们应该记住,研究的目的是创造知识。不是为了得到媒体的报道,也不是为了升职而发表论文。
另外,我对我们破碎的复习过程感到难过。深度学习领域在不到 5 年的时间里,从几百人到上万人。他们中的大多数都很年轻,没有经验,经常对这个领域有不切实际的想法,对科学方法没有真正的经验。他们不只是写论文,还会审核论文,这就是为什么你最终会遇到我提到的第一个问题——缺乏严谨性。
Adrian: 你在 2017 年出版了一本书, 用 Python 进行深度学习——恭喜你出版了!你的书涵盖了哪些内容,目标读者是谁?
**Fran ois:**这是为开发者编写的深度学习课程。它带你从基础(理解什么是张量,什么是机器学习等等)到能够自己处理相对高级的问题,比如图像分类、时间序列预测、文本分类等等。它的写作重点是易于理解和切中要点。我尝试做的一件事是用代码而不是数学符号来表达所有的数学概念。数学符号可能是一个巨大的可及性障碍,它根本不是理解深度学习的必要条件。在许多情况下,代码是处理数学思想的一种非常直观的媒介。
Adrian: 你会给有兴趣研究深度学习的 PyImageSearch 读者什么建议?你会建议一个“理论第一”的方法,一个“实践”的方法,或者两者之间的某种平衡?
弗朗索瓦: **我绝对推荐亲自动手的方法。**理论是一个更高层次的框架,可以帮助你理解迄今为止所积累的经验。在缺乏经验的情况下,理论是没有意义的,过早地关注它可能会导致你对自己以后要做的事情建立误导性的心理模型。
**Adrian:**Fran ois,你是一名成功的人工智能研究人员,你在开源 DL/ML 社区中备受推崇,你是一名作家,也是一名艺术家。很明显,你是一个喜欢创造新的想法、概念和创造性作品的人。我完全能够欣赏和理解这种创造的动力。然而,当我们创作时,无论是在创意还是艺术作品方面,我们都必然会遇到“讨厌的人”。你会建议某人如何处理这些对我们的作品过分挑剔/完全不尊重的人?
**弗朗索瓦:**我认为不同的人会因为不同的原因表现得像巨魔。但是巨魔似乎在每个领域都遵循同样的剧本,无论是艺术、软件工程还是科学。你可以看到所有人都有相同的模式。知名度更高的人似乎在玩地位游戏,攻击某人以吸引注意力并提升自己在任何观众眼中的地位。匿名者往往是缺乏安全感的人,他们通过扮演看门人的角色来应对自己,憎恨“无足轻重的人”和局外人,并通过对最能提醒他们自己个人失败的人或团体表现出残忍来发泄他们的沮丧。
我的建议是忽略巨魔。不要和他们交往。不要和他们说话,也不要谈论他们——不要给他们平台。与不守信用、以伤害为目的的人交往不会有什么收获(只是压力大)。它剥夺了巨魔们寻求的注意力。
阿德里安:你将在今年的 PyImageConf 大会上发表演讲——你的到来让我们非常兴奋和幸运。你能告诉我们更多关于你将要谈论的内容吗?
**Fran ois:**我将谈谈我以前在计算机视觉方面的一些研究,特别是在 convnet 架构中使用深度方向可分卷积。在我看来,这是一个真正被低估的模式。它基本上是一组关于视觉空间结构的先验知识,使你能够同时建立更小的模型,运行更快,概括得更好。同样,与全连接网络相比,convnet 利用的平移不变性先验是一个相当大的改进,我认为 con vnet 特征中的深度方向可分性先验在处理 2D 图像或连续 3D 空间时严格优于常规卷积。
摘要
在今天的博文中,我们采访了谷歌人工智能研究员、广受欢迎的 Keras 深度学习库的创建者 Franç ois Chollet。
请花点时间在这个帖子上留下评论,并感谢 Franç ois 从百忙之中抽出时间来参加我们的 PyImageSearch 采访。我们真的很荣幸也很幸运有他在这里。
谢谢你,弗朗索瓦!
Unity Technologies 深度学习实践者 Gary Song 访谈
在这篇博文中,我采访了 Unity Technologies 的深度学习实践者 Gary Song。
我们现在处于新冠肺炎一周年纪念日。对我们所有人来说,这是特别艰难的一年。对加里来说,这真的很糟糕。
但是正如他的故事所展示的,总有办法把柠檬变成柠檬水… 如果你愿意付出努力的话。
2020 年,加里正在处理一个家庭紧急事件,就在他回家的时候,新冠肺炎突然袭击了他。经济陷入混乱。疫情对他的雇主特别苛刻,导致了大幅度的减薪。
出于对未来的担忧,无论是在经济上还是在职业上,Gary 都努力学习计算机视觉和深度学习。他创建的项目展示了他在该领域的知识。他把自己的简历放在那里,尽管招聘条件很苛刻。
简而言之,加里投资了自己和 尽管 一场全球范围的疫情正在进行, 他在世界上最著名的视频游戏公司之一获得了一个深度学习实践者的职位 。
我喜欢分享像加里一样的故事。我坚信地球上的每个人都是自己命运的主人…但是为了实现你的全部潜力,你需要努力工作。
一点点运气也没用,但正如我最喜欢的一句谚语所说:
命运偏爱努力工作的人。
看到世界在一年内下降了这么多令人惊讶——但看到我们恢复得如此之快同样令人难以置信。谁也说不准什么时候一切会恢复“正常”(或者不管新版本的“正常”是什么),但鉴于我们现在正处于新冠肺炎一周年纪念日,我想不出更好、更鼓舞人心的故事来分享了。
和我一起了解 Gary Song 如何在全球最著名的视频游戏公司之一 获得深度学习工作,尽管 正在进行全球疫情。
采访 Unity Technologies 深度学习实践者 Gary Song
阿德里安:嗨,加里!感谢您抽出时间接受采访。我知道你忙于新工作。很高兴您能来到 PyImageSearch 博客。
加里:嗨,阿德里安!这是我的荣幸。
Adrian: 过去的一年,COVID 对个人和企业都造成了很大的影响。COVID 对你和你的工作有什么影响?
今年年初,我确实经历了一段艰难时期。我刚从海外的一个家庭紧急事件中回来,COVID 在我回来后就受到了很大的打击。我当时的雇主马上受到了影响,工资很快就降了。我很感激还能被雇用,但是前方只有不确定性,压力和焦虑很快就变得无法控制。
阿德里安:降薪后,你最终离开了原来的工作,在全球疫情期间,你在视频游戏软件开发公司 Unity Technologies 找到了一份深度学习从业者的新工作。太神奇了。恭喜你!你能给我们介绍一下这个过程吗?你是如何有勇气在 COVID 期间离职,然后获得这个令人惊叹的职位的?
加里:谢谢!绝对的。所以我记得的第一件事是到处的招聘门槛突然提高了。许多地方停止招聘初级和中级职位,现有的工作机会也被取消。即使在那种环境下,我知道仅仅为了被雇佣而满足于一份工作很可能是我职业生涯的死刑判决,所以我必须有所选择。
我试图让我的简历脱颖而出的方式是强调这样一个事实,即我已经利用计算机视觉和深度学习快速构建了一个原型,来解决一个现有的商业问题。这可能对获得面试机会很有帮助。
我知道我已经为这些面试做好了充分的准备,因为我通过学习 PyImageSearch 课程和阅读博客,获得了关于使用深度学习模型的细微差别的实践经验和知识。我认为,这是与众不同之处。
我是说,任何学了一学期多元微积分的人都可以回答一些关于深度学习的一般性问题,你知道吗?但是需要准备数据,训练模型,调试,改善不好的结果等经验。,所有这些你的资料都涵盖了,才能真正了解它。
现在,我确实总是不得不明确表示,我到那时为止的经验仅仅是深度学习的计算机视觉应用,但这些知识肯定是可以转移的,甚至适用于我目前的日常工作。
阿德里安:你在 Unity 的日常职责是什么?你在用什么类型的深度学习模型?
Gary: 这本质上是一个与利益相关者会面、围绕业务需求构建项目、然后理解数据并迭代模型的循环。
例如,我目前正在做一个客户流失预测项目。虽然众所周知,梯度推进算法往往会在表格数据上击败简单的深度学习模型,但我仍然可以使用深度学习来理解数据,并补充梯度推进模型的结果。
作为一个例子,来自一个非常深的多任务模型的潜在空间特征可以用来寻找目标感知集群,以帮助我们更好地了解我们的客户,这一点很重要,超出了本项目的范围。
因为我的角色是在业务方面,我不经常遇到像图像这样的非结构化数据,所以除非有业务案例,否则我不会在这个特定的角色中做太多计算机视觉。然而,我知道我们已经非常成功地使用我们的 感知工具包 **来生成用于对象检测和图像分割的合成数据。**非常酷,推荐大家去看看!
Adrian: 在加入 Unity 之前,你在计算机视觉和深度学习方面的背景如何?
我在计算机视觉方面的知识仅仅是我在 PyImageSearch 大师班中学到的一切,再加上我自己在做项目时学到的一些东西。
另一方面,我非常了解深度学习的基本原理和主要发展,能够从零开始实现论文中的模型,知道如何定制现有的模型架构,并对给定业务用例的模型有效性有很好的感觉。
深度学习的基础来自于参加一些在线课程、阅读书籍、观看讲座视频和阅读论文。然而,大多数实现经验来自于使用 Python ImageNet 捆绑包对计算机视觉进行 深度学习。
一旦我理解了每个模型的组件,我就开始阅读书中引用的论文来理解实现细节。我喜欢 PyImageSearch 书籍的另一点是,它们引用了原始的研究论文,而许多在线课程不会这样做。
Adrian: 你最初是如何对计算机视觉和深度学习产生兴趣的?
Gary: 我想我第一次在细节层面上遇到计算机视觉和深度学习是在 2018 年,当时我的好朋友兼同事王静用它做了实验。
由于深度学习在过去几年中一直是最具颠覆性的技术之一,我自然想学习它,但对于新技术,如果你只是听说过,就永远不清楚是否值得花时间学习。因此,看到有人在工作中使用它,我清楚地意识到,将它添加到我的工具包中是我应该优先考虑的事情。
我选择计算机视觉作为深度学习的切入点,因为计算机视觉似乎非常直观,所以更容易提出假设和应用该技术。
阿德里安:对于想追随你脚步的读者,你有什么推荐吗?
加里:我可以肯定地说。当我在学校的时候,没有任何课程提供深度学习,所以我在深度学习方面没有很深的学术背景。**因此,大多数建议都是给业内有抱负的从业者的,也就是说,这是关于最终获得一个深度学习是你工作主要部分的角色。**排名不分先后:
-
关注硬件领域的发展。由于计算限制,某些事情现在可能已经完成,但一旦硬件足够强大,这些事情可能就变得不那么重要了。某些型号对于只能使用消费级硬件的普通从业者来说也是遥不可及的。由于实践中深度学习的实验性质,这可能会严重限制你能够负担得起的研究,即使你使用云资源。这是我选择计算机视觉而不是 NLP 的一个原因,因为前沿的 NLP 模型已经变得难以置信的大,因此,实验成本高昂。
-
**不要犹豫投入计算能力,无论是硬件还是云。**计算能力会让你实验得更快,让你学得更快。
-
不要犹豫,投资那些能让你经历端到端深度学习过程的课程。带你走过端到端深度学习管道的好课程会节省你的时间,让你可以专注于你想学的部分。此外,最好将课程和所有信息都放在一个地方,而不是在网上搜索各种资源。
-
建立一个东西,然后考虑如何扩展它。建模过程通常只是工作的一部分。关键是你要展示出处理一个项目所有方面的能力。这不一定是深度学习特有的东西,而是雇主会关心的东西。
-
读取源代码。从好的实施中可以学到很多东西,包括如何思考问题及其解决方案。
-
阅读至少一篇论文,并从头开始实现模型。细节决定成败。您将对模型架构背后的原则有更深的理解。
-
一般来说,试着花时间深入你感兴趣的话题。现成的解决方案只能带你走这么远,可以作为快速和肮脏的基线,但只有通过这些深入的探索,你才能了解如何改善你的结果。
最后,以下是 Andrej Karpathy 给我的一些关于成为专家的建议:
Adrian: 从 2019 年 6 月开始,你就是 PyImageSearch 的读者和客户了!谢谢你支持 PyImageSearch 和我。你有哪些 PyImageSearch 的书籍和课程?他们是如何帮助你准备在 Unity 的新工作的?
Gary: 实际上,我拥有所有的,除了 OCR,这是我的一个兼职项目。这些书籍和课程充当了指导实验室,在那里我可以获得实践经验,并熟悉深度学习管道的所有部分,这在业内很重要。
这些材料实际上是我对深度学习的“真实”世界的介绍,而不仅仅是一门理论和推导课。因此,它们不仅涵盖了模型,还涵盖了用于进行基准测试的数据集,从而成为对深度学习前景的调查。
你们中的一些人可能听说过这样一个概念,当学习一门新的学科时,建立一个“动物园”是很重要的,就像,意识到并理解有趣的和说明性的案例。这基本上就是 PyImageSearch 书籍和课程为你做的事情。
Adrian: 你会向其他尝试学习计算机视觉、深度学习和 OpenCV 的初露头角的开发者、学生和研究人员推荐这些书籍和课程吗?
**加里:**百分之百!我认为这些书和课程非常有价值,尤其是对我所在的人群而言。
当我在学校的时候,没有任何关于深度学习的课程,所以我从来没有机会建立一个心智模型来解释一切是如何结合在一起的。有了这些书和课程,我能够做到这一点。
我推荐使用 Python ImageNet 捆绑包开始使用用于计算机视觉的 深度学习。它可以用作指导深度学习实验室或作为参考。该代码也非常有用,因为官方文档可能不完整,或者更糟的是,其范围可能超出您的需求,使您陷入信息过载的境地。
最后,但也许是最重要的,它富含其他地方不常提及的实用知识。
Adrian: 如果一个 PyImageSearch 的读者想和你联系,和你联系的最佳地点是哪里?
Gary: 我总是可以在 LinkedIn 上或者通过 PyImageSearch direct messaging 找到我。期待和大家的联系!
总结
在这篇博文中,我们采访了著名视频游戏开发公司 Unity Technologies 的深度学习实践者 Gary Song。
Gary 在新冠肺炎疫情中部的 Unity 获得了他的深度学习职位。他用前一份工作的降薪作为学习、提升自己的动力,并获得了一份他不仅引以为豪,而且更为 T2 稳定的工作。
我为加里感到无比骄傲。他付出了艰苦的努力,现在正在享受他的劳动成果。
记住,财富偏爱努力工作的人——你在努力工作吗?还是几乎不工作?
谷歌视频人工智能研究员胡格恩斯·让访谈
原文:https://pyimagesearch.com/2020/09/02/an-interview-with-huguens-jean-video-ai-researcher-at-google/
在这篇文章中,我采访了我以前的 UMBC 实验室伙伴胡格恩斯·吉恩博士,他刚刚被谷歌视频人工智能小组聘为人工智能研究员。
胡格恩斯分享了他的励志故事,从他出生和长大的海地太子港开始,到他在 UMBC 的学校教育,以及现在他在谷歌的最新职位。
他还分享了他的人道主义努力的细节,他成功地将计算机视觉和深度学习应用到卢旺达农村,以帮助计算客流量。
他和他的团队通过客流量分析收集的数据被用于帮助一个非营利组织建设桥梁和道路等基础设施,以更好地连接撒哈拉以南非洲的村庄。
让我们热烈欢迎胡格恩斯·让博士分享他的故事。
谷歌视频人工智能研究员胡格恩斯·让博士访谈
阿德里安:你好,胡格人!谢谢你接受这次采访。非常高兴您能来到 PyImageSearch 博客。
胡格恩斯:很高兴和你在一起。
阿德里安:你能介绍一下你自己吗?你在哪里上学,是如何对计算机视觉产生兴趣的?
胡格恩派教徒:我来自海地的太子港。我去了圣路易学院,冈萨格。
2010 年海地地震后,我和 UMBC 大学的校友 Philip Knowlton 一起拍摄了一部非常亲密的纪录片。这部电影讲述了两兄弟信守对祖父的承诺的故事。在这本书里,我更多地谈论了我的家人和在海地的生活。
当我 1997 年来到美国时,我去了霍华德高中。蔻驰·大卫·格伦向我介绍了跳高。我被 UMBC 的蔻驰·吉姆·弗洛格纳和蔻驰·大卫·鲍勃招募了。这让我在 UMBC 大学学习了计算机工程和电子工程。
我读研期间在 NASA 工作。2010 年海地地震后,我进入了私营部门,开始做软件工程师。我想这场悲剧让我不再相信我的导师们想获得博士学位的愿景。
一天,UMBC 研究生院院长珍妮特·拉特利奇博士带我出去吃午饭。她说:“你让我看起来很糟糕。”我辞掉了工作,去看蒂姆·奥茨医生。我们赢得了一些研究资金,我最终在 2015 年获得了博士学位。
我不相信我能做到,直到我去了坦桑尼亚。我在伯克利大学读过匡辰的研究。他的作品激励了我。在 Captricity,我和他一起写了一份关于分析数字图像内容的专利,毕业后我在加州奥克兰住了大约 3 年。
阿德里安:你最近在谷歌的视频人工智能部门获得了一个职位,祝贺你!你是怎么得到这么好的机会的?
胡格恩斯:我重新联系了两年前的招聘人员。在谷歌第一次失败后,人们需要等待一年才能再次尝试。两年前我尝试过,但没有成功。我在纽约办公室面试,我的表现不是很好。我知道它会进去。
但 6 周前,我是另一个工程师。我对计算机科学有不同的感受。面试前,我拼命学习了大约两个星期。
我按照他们的指导,专注于真正了解数据结构,比如列表、堆栈、队列、树、堆、图和 trie。我练习了像 DFS、BFS、A*和排序这样的算法。我想做好一切准备。对于计算机视觉和数据科学部分,我从你那里学到了很多。
阿德里安:我们都知道谷歌因挑战性面试而在臭名昭著。计算机视觉/深度学习工作的面试过程是怎样的?
如你所说,这是出了名的困难。一周内,我做了 7 次技术面试。一天 5 次视频采访和两次技术展示,一次在谷歌,另一次在脸书。
在谷歌,我同时面试两个职位:机器学习通才和数据科学职位。对于机器学习通才的角色,前两次面试是关于数据结构的。用数据结构解决问题需要练习。你必须快速思考,避免过度思考解决方案。我不是最好的应试者,在没有运行代码的情况下,在谷歌文档中解决这些问题是很伤脑筋的。
第三次面试是在谷歌上。第四次和第五次面试是关于计算机视觉的。这是因为我的招聘人员提出了一个特殊的要求,以确保我有公平的机会展示我在机器学习方面的优势。领域广阔。
有太多的东西需要了解,谷歌已经准备好询问 NLP 和强化学习。我在这些领域不是很强。
对于数据科学的角色,经过技术筛选,Google 觉得我会更适合他们的视频 AI 组。
Adrian: 在谷歌工作之前,你参与了一些令人难以置信的人道主义工作,这些工作在撒哈拉以南非洲的农村地区使用了计算机视觉和深度学习技术。你能告诉我们关于这个项目,以及你是如何提交一篇关于这个主题的论文发表的吗?
一名研究人员雇佣了 Synaptiq 来进行这个项目。 Synaptiq.ai 归蒂姆·奥茨博士所有。作为 UMBC 大学的博士生,他给你和我都提了建议。
我需要离女儿近一点,而在马里兰州当地工作提供了合适的机会。奥茨博士需要一个 OCR 项目的人,我开始在那里做顾问。蒂姆和我过去做过类似的研究。
我在那里的工作最终引导我做了这个项目。他在撒哈拉以南的非洲农村架设了摄像机来观察行人过桥。
Figure 4: An example pedestrian footbridge in Subsaharan Africa.
起初,研究人员试图使用你的代码对人计数,但在该教程中,预先训练的 MobileNet SSD 用于检测物体的性能很差。在 Synaptiq 的帮助下,我们能够在 GPU 上将探测器升级到 YOLOv3,并使用 DeepSort 加强质心跟踪器。
注: 最初我曾收录了一张展示胡格恩派和研究团队工作的图;然而,该团队要求我在他们的论文正式发表之前记下这个数字。
在我们的论文中引用这两个教程确实是一种荣誉。在 GPU 上使用这些新模型,我们能够及时地从数小时的视频中提取有意义的信息。
Adrian: 在你的农村人流计数器项目中,最困难的方面是什么,为什么?
即使在 GPU 机器上,为了收集数据而处理数小时的视频也需要很长时间。我的合同快到期了,我们需要一个 NVIDIA docker 容器,它可以在 RTX2080 计算机(也就是 UMBC 的 Synaptiq 机器)上自动运行几个小时剩余镜头的代码。就在那时,蒂姆和我们的另一个共同朋友祖贝尔·艾哈迈德冲过了终点线。
阿德里安:如果你必须选择你在研究过程中应用的最重要的技术,那会是什么?
胡格恩斯:如果你在谈论计算机科学技术,递归胜出。但如果你在谈论计算机视觉和机器学习,聚类运动向量是一个很好的方法。
Adrian: 你平时用什么深度学习/计算机视觉工具和库?哪些是你的最爱?
**胡格恩斯:**我用了很多 OpenCV。这是迄今为止我最喜欢的计算机视觉 Python 库。通过深度学习,我又一次从你们身上学到了很多。我是 Keras 和 Tensorflow 的超级粉丝。
Adrian: 你会给想进行计算机视觉/深度学习研究但不知道如何入门的人什么建议?
**胡格恩斯:**读完研究生后,我自己也不确定从哪里开始,直到从 PyImageSearch 购买了大量资料,并开始关注你的博客。我们边做边学。你在你的书里说过。那不是谎言。
如果你想真正擅长某件事,你必须练习。我像运动员一样思考。关于学习新的东西,我试着比前一天做得更多。我的心灵不像我的身体那样疼痛。我一天都不用翘课。我上 LinkedIn 或脸书,搜索一个引人注目的知识库,或者一些令人惊叹的技术/书籍,然后阅读。
Adrian: 你是 PyImageSearch 的长期读者和客户,已经阅读了用 Python 编写的 用于计算机视觉的深度学习 、 用于计算机视觉的树莓派 ,并参加了 PyImageSearch 大师课程。这些书籍和课程对你的职业生涯有什么帮助?
胡格恩派教徒:他们给了我很大的帮助。就像我的朋友,Jezette 工作室的首席执行官 Salette Thimot-Campos 在脸书上写道:
消除疑虑的唯一方法是通过教育。我学得越多,就越觉得自己强大,越觉得自己与这个世界联系紧密。4 年前,我在探索一些我从未想过自己有任何业务需要探究的话题。但是现在,随着我对每一个技术术语和功能的理解和掌握,我感到越来越强大和勇敢。
我对你的书和博客的体验与她的话相呼应。博士学位只会提醒我,我一直都很优秀,足以学习任何东西。
我不知道你是否记得蔡福森教授。他和蒂姆一起给我出主意。他会说*【广度和深度】*。对我来说,这通常意味着对一件事知道很多,对每件事都知道一点。他鼓励我永远保持好奇心。
除了为你的读者提供评论良好的代码之外,你还有一种创造性的方式来解释事情,很多时候是通过图片和视频。我等待你的下一个博客,就像等待下一部 iPhone,因为我不知道会发生什么。有时候我很忙,但每周一早上,我至少会努力去回忆你做了什么。你永远不知道在哪里会再次看到类似的想法。
Adrian: 您会向其他试图学习计算机视觉和深度学习的开发人员、学生和研究人员推荐使用 PythonT5、Raspberry Pi for Computer Vision和 PyImageSearch Gurus 课程的?
**胡格恩派:**绝对。像电影《T4 空手道小子》中的上蜡,下蜡一样学习基本原理。我不得不在 Linux 上多次安装 OpenCV。为 GPU 机器做,需要耐心。训练深度学习模型需要耐心,但体验其中的魔力是值得的。
阿德里安:如果有人想追随你的脚步,学习计算机视觉和深度学习,然后在谷歌找到一份令人惊叹的工作,你有什么建议吗?
胡格恩斯:我鼓励人们把他们的教育当成一种运动,一种精神上的运动,就像国际象棋一样,并且永远向比你年长和年轻的人学习。练习。练习。为月亮练习和射击。
Adrian: 如果一个 PyImageSearch 的读者想聊天,最好在哪里联系你?
**胡格恩派:**他们可以在 LinkedIn 上关注我,在me@huguensjean.com给我发电子邮件,或者在 huguensjean.ai 查看我的网站。
摘要
在这篇博文中,我们采访了谷歌视频 AI 小组的人工智能研究员胡格恩斯·让博士。
我和胡格恩斯在 UMBC 大学读研时是实验室的同事。从那以后我们就成了朋友(他甚至参加了我的婚礼)。
分享胡格恩斯的作品真的是一种荣誉——他真的改变了世界。
如果你想成功地将计算机视觉和深度学习应用到现实世界的项目中(就像胡格恩斯所做的那样),一定要拿起一本用 Python 编写的 用于计算机视觉的深度学习。
使用本书,您可以:
- 成功地将深度学习和计算机视觉应用到您自己的工作项目中
- 转换职业,在一家受人尊敬的公司/组织获得一个简历/DL 职位
- 获得完成理学硕士或博士学位所需的知识
- 进行值得在著名期刊和会议上发表的研究
- 周末完成你的业余爱好 CV/DL 项目
我希望你能加入我,Huguens Jean 博士,以及成千上万的其他 PyImageSearch 的读者,他们不仅掌握了计算机视觉和深度学习,而且利用这些知识改变了他们的生活。
我们在另一边见。
在 PyImageSearch 上发布未来的博客文章和采访时,我们会通知您,只需在下面的表格中输入您的电子邮件地址,,我会确保让您随时了解情况。
OpenCV 空间人工智能竞赛冠军 Jagadish Mahendran 访谈
在这篇文章中,我采访了高级计算机视觉/人工智能(AI)工程师 Jagadish Mahendran,他最近使用新的 OpenCV AI 套件(OAK)在 OpenCV 空间 AI 比赛中获得了第一名。
Jagadish 的获奖项目是一个为视障人士设计的计算机视觉系统,让用户能够成功地在 T2 和 T4 导航。他的项目包括:
- 人行横道自动检测
- 人行横道和停车标志检测
- 悬垂障碍物检测
- …还有更多!
最重要的是,整个项目是围绕新的 OpenCV 人工智能套件(OAK)构建的,这是一种专为计算机视觉设计的嵌入式设备。
和我一起了解 Jagadish 的项目,以及他如何使用计算机视觉来帮助视障人士。
采访 OpenCV 空间人工智能竞赛冠军 Jagadish Mahendran
阿德里安:欢迎你,贾加迪什!非常感谢你能来。很高兴您能来到 PyImageSearch 博客。
阿德里安,很高兴接受你的采访。谢谢你邀请我。
阿德里安:在我们开始之前,你能简单介绍一下你自己吗?你在哪里工作,你在那里的角色是什么?
Jagadish: 我是一名高级计算机视觉/人工智能(AI)工程师。我曾为多家创业公司工作,在那里我为库存管理机器人和烹饪机器人构建了 AI 和感知解决方案。
阿德里安:你最初是如何对计算机视觉和机器人感兴趣的?
Jagadish: 我从本科开始就对 AI 感兴趣,在那里我有机会和朋友一起制作了一个微型鼠标机器人。我在硕士期间被计算机视觉和机器学习吸引住了。从那以后,与这些令人惊奇的技术一起工作变得非常有趣。
Adrian: 您最近在 OpenCV 空间人工智能竞赛中获得了第一名,祝贺您!你能给我们更多关于比赛的细节吗?有多少支队伍参加了比赛,比赛的最终目标是什么?
Jagadish: 谢谢。由英特尔赞助的 OpenCV Spatial AI 2020 竞赛分为两个阶段。包括大学实验室和公司在内的约 235 个具有各种背景的团队参与了第一阶段,其中涉及提出一个使用带有深度(OAK-D)传感器的 OpenCV AI 套件解决现实世界问题的想法。31 个团队被选入第二阶段,我们必须用 3 个月的时间来实现我们的想法。最终目标是开发一个使用 OAK-D 传感器的全功能人工智能系统。
Adrian: 你的获奖解决方案是一个为视障人士设计的视觉系统。你能告诉我们更多关于你的项目吗?
Jagadish: 文献上甚至市场上都有各种视觉辅助系统。由于硬件限制、成本和其他挑战,他们中的大多数人不使用深度学习方法。但最近,在 edge AI 和传感器空间方面有了显著的改善,我认为这可以为硬件有限的视觉辅助系统提供深度学习支持。
我开发了一个可穿戴视觉辅助系统,使用 OAK-D 传感器进行感知,使用外部神经计算棒(NCS2)和我 5 岁的笔记本电脑进行计算。该系统可以执行各种计算机视觉任务,帮助视障人士理解场景。
这些任务包括:探测障碍物;海拔变化;了解道路、人行道和交通状况。
该系统可以检测交通标志以及许多其他类别,如人、汽车、自行车等。该系统还可以使用点云检测障碍物,并使用语音界面更新个人关于其存在的信息。个人也可以使用语音识别系统与系统交互。
以下是一些输出示例:
阿德里安:请告诉我们用于开发项目提交材料的硬件。个人是否需要佩戴大量笨重的硬件和设备?
Jagadish: 我采访了一些视障人士,了解到走在街上受到太多关注是视障人士面临的主要问题之一。因此,物理系统作为辅助设备不引人注目是一个主要目标。开发的系统很简单——物理设置包括我 5 岁的笔记本电脑、2 个神经计算棒、藏在棉背心内的摄像头、GPS,如果需要,还可以在腰包/腰包内放置一个额外的摄像头。大多数这些设备都很好地包装在背包里。总的来说,它看起来像一个穿着背心到处走的大学生。我在我的商业区走来走去,完全没有引起特别的注意。
Adrian: 你为什么选择 OpenCV AI Kit (OAK),更确切的说是可以计算深度信息的 OAK-D 模块?
Jagadish: 主办方提供 OAK-D 作为比赛的一部分,它有很多好处。它很小。除了 RGB 图像,它还可以提供深度图像。这些深度图像对于探测障碍物非常有用,即使不知道障碍物是什么。此外,它还有一个片上人工智能处理器,这意味着计算机视觉任务在帧到达主机之前就已经执行了。这使得系统超快。
阿德里安:你有针对视觉障碍的视觉系统的演示吗?
Jagadish: 演示可以在这里找到:
https://www.youtube.com/embed/ui_p5x8n2tA?feature=oembed
采访 ImageZMQ 的创造者杰夫·巴斯
原文:https://pyimagesearch.com/2019/04/17/an-interview-with-jeff-bass-creator-of-imagezmq/
本周早些时候,我分享了一个关于使用 OpenCV 通过 ImageZMQ — 在网络上传输实时视频的教程,今天我很高兴分享对 ImageZMQ 的创始人杰夫·巴斯的采访!
Jeff 拥有超过 40 年的电脑和电子产品黑客经验,现在他将计算机视觉+ Raspberry Pis 应用于他的永久农场:
- 数据收集
- 野生动物监测
- 水表和温度读数
杰夫是我有幸遇到的最喜欢的人之一。在他 40 年的职业生涯中,他积累了大量计算机科学、电子学、统计学等方面的知识。
他还在一家大型生物技术公司做了 20 年的统计和数据分析。他给的建议实用、中肯,而且总是说得很好。很荣幸他今天能来到这里。
就个人而言,Jeff 也是 PyImageSearch Gurus course course 的最初成员之一。他是一个长期的读者和支持者——他是真正的帮助这个博客成为可能。
很高兴今天有 Jeff 在这里,无论您是在寻找计算机视觉和 OpenCV 的独特、实用的应用,还是只是在寻找如何为计算机科学职业生涯建立投资组合的建议, 看看这个采访就知道了!
采访 ImageZMQ 的创造者杰夫·巴斯
阿德里安:嘿,杰夫!谢谢你今天来到这里。很高兴你能来到 PyImageSearch 博客。对于不认识你的人,你是谁,你是做什么的?
杰夫:我是一个终生学习者,已经玩了 40 多年的电子产品和电脑。我在研究生院学习计量经济学、统计学和计算机科学。当个人电脑还是新事物的时候,我为个人电脑开发了一个统计软件包。我在一家大型生物技术公司做了 20 年的统计和数据分析。
现在,我已经从创收事业中退休,并在南加州建立了一个小型永久性农场。我正在使用计算机视觉、传感器和树莓 Pis 作为工具来观察和管理农场。我偶尔在花园俱乐部和会议上发言。我真的很喜欢成为 2018 年 PyImageConf 的演讲者。
Adrian: 你最初是如何对计算机视觉和深度学习产生兴趣的?
Jeff:2013 年,当它们首次上市时,我得到了一个树莓 Pi 和一个 Pi 相机模块。当我开始经营农场时,我想用它们来观察和记录野生动物的活动。我已经非常熟悉 Linux 和 C,但是最好的 Pi 相机接口是 Python 中的“Picamera”模块。我开始了“web 漫游”来学习更多关于 Python 编程和计算机视觉的知识。我浏览了你的教程博客,买了你的 实用 Python 和 OpenCV 的书。一旦我看完你书中的例子,我就被吸引住了。
Figure 1: Jeff Bass runs Ying Yang Ranch, a permaculture farm designed to grow food with long term sustainability.
阿德里安:你能告诉我们更多关于你农场的事吗?什么是永久农业?为什么它很重要,它与“传统”农业有什么不同?
杰夫:我把这个农场叫做阴阳农场。这是一个位于郊区的 2 英亩的小型“科学项目”。我开始了解永久栽培的同时,我开始了解树莓。
永久农业是以长期可持续性为主要目标的种植食物的实践和设计原则的集合。它从创造具有不同微生物的深层土壤开始,模仿古老的森林。永久性的设计选择将可持续性置于效率之上。它以科学为基础,强调仔细观察、可重复实验和开放共享最佳实践的循环。
永久性农场通常很小,包括许多不同种类的植物在一起生长,而不是一排排相似的作物。食用植物与本地植物生长在同一空间。我种植无花果、梨、石榴、李子、葡萄、鳄梨、橙子、桑葚、黑莓和其他食物。但是它们与加州海岸的橡树和悬铃木套种在一起。它看起来不太像传统的农场。传统农业效率很高,但会破坏土壤和水资源。永久文化正试图改变这种状况。
Figure 2: Jeff uses Raspberry Pis + computer vision around his farm. An example of such is automatic water meter reading using OpenCV.
阿德里安:树莓汁和计算机视觉对你的农场有什么帮助?
**杰夫:**我们在南加州,距离马里布海岸约 10 英里。干旱和降雨量有限是最严峻的气候问题。监控和观察很重要,所以我建了一个覆盆子 Pi 摄像系统来读取水表和监控温度,以优化灌溉。
这引出了更多的问题和许多收集和分析数据的有趣方法:
- 今天浇桑葚花了多少加仑?
- 郊狼最后一次跑到谷仓后面是什么时候?
- 鳄梨树下的温度和土壤湿度是多少?
- 5 个堆肥堆的温度和含水量是多少?
- 它是如何随时间变化的?
- 我们今天生产了多少太阳能电力?
- 雨水桶有多满?
- 鸟儿、蝴蝶和其他生物的活动是如何随着季节和开花结果的变化而变化的?
树莓派还记录了车库和谷仓门的开关。他们可以让我知道包裹什么时候送到。
阿德里安:你创建了一个名为 imagezmq 的库。它是什么,有什么作用?
Jeff:imagezmq 库实现了一个简单快速的 Raspberry Pis(客户端)和服务器网络。
早期,我决定采用分布式设计,使用 Raspberry Pis 来捕获图像,使用 MAC 来分析图像。目标是让 Raspberry Pis 进行图像捕捉和运动检测(水表在旋转吗?)并以编程方式决定将一小部分图像传递给 Mac。
我花了一年时间尝试不同的方法将图像从多个树莓电脑发送到 Mac 电脑。我选择了开源的 ZMQ 库和它的 PyZMQ python 包装器。我的 imagezmq 库使用 zmq 将图像和事件消息从十几个 Raspberry Pis 发送到 Mac hub。ZMQ 快速、小巧、易于使用,并且不需要消息代理。
下面是一对代码片段,展示了如何使用 imagezmq 从 Raspberry Pi 向 Mac 连续发送图像。首先,在每个 Raspberry Pi 上运行的代码:
# run this program on each RPi to send a labelled image stream
import socket
import time
from imutils.video import VideoStream
import imagezmq
sender = imagezmq.ImageSender(connect_to='tcp://jeff-macbook:5555')
rpi_name = socket.gethostname() # send RPi hostname with each image
picam = VideoStream(usePiCamera=True).start()
time.sleep(2.0) # allow camera sensor to warm up
while True: # send images as stream until Ctrl-C
image = picam.read()
sender.send_image(rpi_name, image)
然后是运行在 Mac(服务器)上的代码:
# run this program on the Mac to display image streams from multiple RPis
import cv2
import imagezmq
image_hub = imagezmq.ImageHub()
while True: # show streamed images until Ctrl-C
rpi_name, image = image_hub.recv_image()
cv2.imshow(rpi_name, image) # 1 window for each RPi
cv2.waitKey(1)
image_hub.send_reply(b'OK')
每个 Raspberry Pi 的主机名允许 Mac 将来自该 Raspberry Pi 的图像流放在一个单独的、标记为cv2.imshow()
的窗口中。我在我的 imagezmq github 存储库中有一张照片,显示 8 个 Raspberry Pi 摄像头同时显示在一台 Mac 上:
Figure 3: Live streaming video from 8 Raspberry Pis to a central hub using Python, OpenCV, and ImageZMQ.
它在每个 Raspberry Pi 上使用了 12 行 Python 代码,在 Mac 上使用了 8 行 Python 代码。一台 Mac 可以以 10 FPS 的速度跟上 8 到 10 个树莓 pi。 ZMQ 快。
imagezmq 使计算机视觉管道能够轻松地分布在多个 Raspberry Pis 和 MAC 上。Raspberry Pi 以每秒 16 帧的速度捕捉图像。它可以检测水表指针旋转引起的运动。它只发送指针开始移动或停止移动的图像,这只是它捕获的图像的一小部分。然后,Mac 使用更先进的计算机视觉技术读取水表图像的“数字”部分,并确定使用了多少水。每台计算机都能够完成它最适合的计算机视觉管道部分。imagezmq 实现了这一点。
Adrian: 你在阴阳牧场部署过的最喜欢的计算机视觉+树莓 Pi 项目是什么?
杰夫:我用红外线泛光灯在谷仓的后墙上安装了一个树莓派。当运动“像动物一样”时,它跟踪运动并发送图像。我捕捉到了郊狼、浣熊、负鼠、蝙蝠、鹰、松鼠和兔子的图像。我还在研究深度学习模型,以便正确分类。对我和我的邻居来说,更多地了解我们周围的野生动物非常有趣。
Figure 4: A selection of Raspberry Pi components and cameras, including (left to right) Waveshare Combo IR lens and dual IR floodlights, PiNoir IR Camera with IR “Ring Light” floodlight, RPi Zero with PiCamera in white light “Ring Light” with DS18B20 temperature probe, RPi Zero with “Spy Cam” and longer range WiFi, and RPi Zero with older model (and half price) PiCamera.
阿德里安:树莓派虽然便宜,但功能远不及标准笔记本电脑/台式机。在农场使用树莓 Pis 的过程中有哪些经验教训?
杰夫:树莓馅饼很擅长捕捉图像。Pi 相机模块在 Python 中是非常可控的,可以改变曝光模式之类的东西。USB 或笔记本电脑网络摄像头通常根本无法控制。控制曝光和其他相机设置对追踪野生动物甚至读取水表非常有帮助。
Raspberry Pi GPIO 引脚可以收集温度传感器、湿度传感器和其他传感器的读数。GPIO 引脚可以用来控制灯,比如照亮我的水表和谷仓区域的灯。笔记本电脑和台式机不容易做到这些。
另一方面,Raspberry Pis 缺乏高速磁盘驱动器——sd 卡不适合写入大量二进制图像文件。在我的系统中,Raspberry Pis 通过网络发送图像文件,而不是将它们存储在本地。笔记本电脑和台式机有快速的磁盘存储和大量的 RAM 内存,允许更精细的图像处理。我试图让我的树莓派做他们擅长的事情,让苹果做他们擅长的事情。
我的大多数 Raspberry Pi 是 Raspberry Pi 3,但我也使用更便宜、更小的 Raspberry Pi Zero,用于只需要进行简单运动检测的 Pi 相机,如我的车道摄像头。当不需要额外的图像处理时,即使 Pi Zero 的内存更小、处理器功能更弱也足够了。
阿德里安:你在农场使用什么类型的硬件、相机和树莓派配件?你如何保护你的 Pis 不被淋湿和毁坏?
Jeff: 我在农场的很多地方使用带有 Pi 摄像头的树莓 Pi。它们通常有温度、湿度和其他传感器。我建造了多种围栏来保护树莓。
我最喜欢的一个方法是将现有的户外灯具改造成防水的树莓派容器。你卸下灯泡,拧上一个简单的交流插座适配器,你就有了一个简单的防雨外壳,可以容纳树莓 Pi 和 Pi 相机模块。GPIO 温度探头也很合适。添加 Raspberry Pi 控制的 led 灯很容易,因此灯具仍能像以前一样提供照明:
Figure 5: Converting an outdoor light fixture into a waterproof Raspberry Pi container.
另一个外壳是一个简单的带塑料盖的玻璃缸。它适合一个树莓皮和防水。电源和摄像头电缆可以穿过塑料盖中的孔。这就是我的水表 Pi 相机的构造,它已经在各种天气下工作了两年多:
Figure 6: A simple Raspberry Pi enclosure using a simple mason jar.
对于红外应用,比如我的谷仓后面的夜间生物摄像机,我把树莓派放在谷仓里面。摄像头和温度传感器电缆穿过谷仓墙壁上的小孔。Pi NoIR 相机模块被保护在一个简单的旧木瓦下。红外光不能穿过玻璃,因此 Pi NoIR 相机模块不能在玻璃外壳中。在其他未受保护的引脚模块上的木瓦悬垂非常有效:
Figure 7: A simple wooden overhang to protect the Raspberry Pi.
下面可以看到更近的视图:
Figure 8: A closer up view of the overhang (you can see the red light from the Raspberry Pi camera if you look closely).
我还发现便宜(大约 5 美元)的“假安全摄像头”外壳和防水的 Raspberry Pi 和 Pi 摄像头外壳一样好用。他们可以轻松地拿着一个树莓派,他们有一个三脚架一样的角度调节器:
Figure 9: The shell of a fake security security camera can easily house a Raspberry Pi + camera module.
一旦将“假”安全摄像机组合在一起,就变成了真正的安全摄像机:
Figure 10: Adding the Raspberry Pi + camera components to the security camera shell.
对于电源,我倾向于在 12 伏下运行更长的电源线(超过 20 英尺长),然后在树莓码头转换为 5 伏。我使用 12 伏的电源适配器,就像汽车上用来给手机充电的那种。便宜又有效。我的大多数树莓 Pis 都与 WiFi 联网,但我在我的谷仓和房子周围的各个地方都有以太网,所以我的一些树莓 Pis 正在使用以太网发送图像。
Adrian: 在你的 PyImageConf 2018 演讲中,你讨论了像这样的项目如何实际上帮助人们建立他们的计算机视觉和深度学习简历。你能详细说明你在那里的意思吗?
Jeff: 在我管理编程和数据分析团队的 30 年中,我发现当求职者带着展示他们优势的特定项目来面试时,会非常有帮助。一个计算机视觉项目——甚至是像我的树莓派水表摄像头这样的爱好项目——真的可以帮助展示实际技能和能力。
一个记录良好的项目展示了实践经验和解决问题的能力。它展示了完全完成大型项目的能力(80%的解决方案是好的,但 100%的解决方案展示了完成的能力)。一个 portfolio 项目可以展示其他特定的技能,比如使用多个计算机视觉库、编写有效文档的能力、使用 Git / GitHub 作为协作工具的能力以及技术交流技能。能够讲述一个简短的、引人注目的项目故事——关于你的投资组合项目的“电梯演讲”——是很重要的。
**Adrian:**PyImageSearch 博客、PyImageSearch 大师课程和书籍/课程是如何帮助你使这个项目成功的?
Jeff: 当我开始学习计算机视觉时,我发现网上的许多材料要么过于理论化,要么给出简单的代码片段,没有任何具体的例子或完整的代码。
当我发现你的 PyImageSearch 博客时,我发现你的教程项目非常完整和有用。你为每个正在解决的问题提供了一个可以理解的故事线。你的解释清晰完整,代码功能齐全。运行你博客中的一些程序让我买了你的 实用 Python 和 OpenCV 的书。
我参加了你的 PyImageSearch 大师课程,学习了许多特定的计算机视觉技术的编码。我以前读过许多这类技术,但是您的具体代码示例提供了我为自己的项目编写计算机视觉代码所需的“如何做”。
你的大师课程中的车牌号码读取部分是我的水表数字读取程序初稿的基础。你的深度学习书籍正在帮助我编写下一版本的物体识别软件,用于标记农场周围的动物(浣熊或负鼠?).
Adrian: 你会向其他开发者、研究人员和试图学习计算机视觉+深度学习的学生推荐 PyImageSearch 和书籍/课程吗?
杰夫:我肯定会向那些试图了解这个快速发展领域的人推荐你的 PyImageSearch 博客、书籍和课程。你非常擅长用代码和叙述性讨论的有益组合来解释复杂的技术。你的书和课程为我理解现代计算机视觉算法的理论和实践提供了一个跳跃的起点。
我以前没有用 Python 编程过,它的一些习惯用法对我的 C 语言大脑来说有点奇怪。您的实际例子帮助我以“Python 化”的方式使用 Python 的最佳特性。你的大师课程结构良好,有一个很好的流程,建立在简单的例子上,一课一课地扩展成解决复杂问题的完全开发的程序。您对许多不同的计算机视觉和深度学习技术的报道广泛而全面。你的书和课程物有所值。强烈推荐。
Adrian: 你对阴阳牧场和你目前的计算机视觉/深度学习项目的下一步计划是什么?
杰夫:我想做更多的野生动物鉴定和计数工作。农场紧挨着一片空地,那是一条穿过郊区的野生动物走廊。我要用更先进的深度学习技术来按物种识别不同的动物。特定的动物什么时候来来去去?什么鸟和蝴蝶在季节的哪个部分出现?它们的数量与季节性降雨有什么关系?我想使用深度学习来识别狼群中的特定个体。一只特定的土狼会在我们的区域待多久?当我看拍摄的图像时,我能认出特定的个人。我想用深度学习的软件来做这件事。
阿德里安:你还有什么想分享的吗?
Jeff: 用软件和硬件构建东西会很有趣。**如果有人正在读这篇文章,不知道如何开始,我建议他们从自己热爱的事情开始。**计算机视觉和深度学习可能会以某种方式帮助他们感兴趣领域的项目。我想做一些永久性农业科学,我的计算机视觉项目正在帮助我做到这一点。我学到了很多东西,做了一些讲座和农场参观来帮助其他人学习…我玩得很开心。
Adrian: 如果一个 PyImageSearch 的读者想聊天,和你联系的最佳地点是哪里?
Jeff: 人们可以在我在 GitHub 上的阴阳农场仓库阅读和查看更多项目图片:
https://github.com/jeffbass/yin-yang-ranch
或者他们可以给我发电子邮件,地址是杰夫·yin-yang-ranch.com。
摘要
在这篇博文中,我们采访了 ImageZMQ 库的创建者 Jeff Bass(我们在上周的教程中使用了该库),该库用于使用 Python + OpenCV 促进从 Raspberry Pi 到中央服务器/中心的实时视频流。
Jeff 的动机是创建 ImageZMQ 库来帮助他的永久农场。使用 ImageZMQ 和一套 Raspberry Pis,Jeff 可以应用计算机视觉和数据科学技术来收集和分析温度读数、水表流量、用电量、等等!
请花点时间感谢 Jeff 抽出时间接受采访。
在 PyImageSearch 上发布未来的博客文章和采访时,我们会通知您,请务必在下面的表格中输入您的电子邮件地址,,我会让您随时了解情况。
R&D Esri 数据科学家 Kapil Varshney 访谈
原文:https://pyimagesearch.com/2019/08/12/an-interview-with-kapil-varshney-data-scientist-at-esri-rd/
在今天的博客文章中,我采访了一位 PyImageSearch 读者 Kapil Varshney,他最近被 Esri 研发中心聘为数据科学家,专注于计算机视觉和深度学习。
Kapil 的故事非常重要,因为它表明,无论你的背景如何,你都可以在计算机视觉和深度学习方面取得成功——你只需要首先接受正确的教育!
你看,Kapil 是 PyImageSearch 的长期读者,去年用 Python (DL4CV)阅读了 用于计算机视觉的深度学习。
在阅读 DL4CV 后不久,Kapil 参加了由 Esri 赞助的一项挑战,即检测和定位卫星图像中的物体(包括汽车、游泳池等。).
他在 53 名参赛者中名列第三。
Esri 对 Kapil 的工作印象深刻,以至于比赛结束后他们叫他去面试。
Kapil 通过了面试,并被 Esri 研究院& D. 全职聘用
他在 Esri 的卫星图像分析工作现在每天影响着全球数百万人,这是他辛勤工作的真实证明。
我非常喜欢 Kapil(更不用说,作为一名 PyImageSearch 读者,我为他感到非常自豪)。
让我们热烈欢迎 Kapil 分享他的故事。在面试过程中,你将了解到你如何跟随他的脚步。
R&D Esri 数据科学家 Kapil Varshney 访谈
阿德里安:嗨,卡皮尔!谢谢你接受这次采访。很高兴您能来到 PyImageSearch 博客。
你好,阿德里安!谢谢你邀请我上 PyImageSearch 博客。很荣幸。我关注这个博客已经有一段时间了,并从中学到了很多。
Figure 1: Kapil works as a Data Scientist at Esri R&D in New Delhi. He applies Computer Vision and Deep Learning to satellite image analysis.
阿德里安:介绍一下你自己,你在哪里工作,你的工作是什么?
目前,我作为一名数据科学家在 Esri 研发中心(T2)工作。我的大部分工作都集中在应用于卫星和航空图像的计算机视觉和深度学习上。但是,我有过不同的职业生涯。
我喜欢称自己为从火箭科学家转变为数据科学家。我在伊利诺伊大学香槟分校学习航空航天工程。在过去的几年里,我做过航天设计工程师、营销经理、教师,也尝试过创业。
Adrian: 你最初是如何对计算机视觉和深度学习产生兴趣的?
Kapil: 它首先从分析开始。当我意识到基本分析的力量时,我开始在我的初创公司应用它。后来,随着我在这个领域的深入研究,我发现了机器学习,然后是深度学习,这最终将我引向了计算机视觉应用。我是一个视觉型的人。当我看到和想象事物时,我记得更清楚,而且我有更好的视觉回忆。你能让计算机像人类一样“看”和推断的想法天生就让我兴奋。
Figure 2: Satellite image analysis with deep learning (image source).
Adrian: 让我们投入到你参加的 Esri 航拍影像竞赛中。比赛的目标是什么,是什么让比赛如此具有挑战性?
Esri 最近举办了一场比赛,目标是在美国城市居民区的航空影像中识别汽车和游泳池。可用的数据集包括 3748 个 224×224 像素的图像芯片。主要挑战是:
- 可用的有限数据集
- 低分辨率图像
- 被探测的物体(尤其是汽车)的尺寸非常小
Figure 3: Left: Input image captured from satellite. Right: Output of applying the RetinaNet object detector to detect and localize vehicles in the image.
Adrian: 告诉我们你获得第三名的解决方案。你用了什么算法和技术?
Kapil: 我用 RetinaNet 解决了这个问题。RetinaNet 是一个最先进的对象检测模型,非常适合小对象。它采用特征金字塔网络和焦点损失来提供很好的结果。
我使用了 RetinaNet 的 TensorFlow/Keras 实现,这是你在简历书的深度学习中使用过的。
我对锚箱的比例和比率做了一点试验,以改善结果,最终得到了 77.99 的地图,这使我在比赛中获得了第三名。本部分的顶部显示了一个应用于其中一个芯片的检测示例。原始图像在左侧的处,右侧的处的图像带有用绿色方框标记的车辆检测。
Adrian: 在你获得第三名后,Esri 叫你去面试。你能告诉我们这个过程吗?它是什么样的?
比赛结束后,我收到一封来自 Esri 的电子邮件,要求下周在新德里安排一次面对面的面试。有两轮面试——一轮是采访新德里研发中心的总经理罗希特·辛格,另一轮是采访 ArcGIS Enterprise 的首席技术官杰伊·西奥多。
面试包括围绕我对挑战的解决方案、我的非传统背景以及许多关于计算机视觉和深度学习的技术问题的讨论。几天后,人力资源部又进行了一次简短的电话面试,几周后,我得到了肯定的答复。
阿德里安:你现在在 Esri 的研发团队&工作,恭喜你!从参加计算机视觉挑战赛到被公司录用,你有什么感受?那一定很棒!
Kapil: 谢谢。的确,这是一种奇妙的感觉。
我参加 Esri 挑战赛更多的是作为一个项目而不是竞赛,几个月后,我在新德里的 Esri R&D 中心全职工作。
我开始研究卫星/航空图像和空间数据,这结合了我对地理、GIS、航空航天技术、视觉和深度学习的兴趣。成千上万的 Esri 用户将使用我正在研究的问题解决方案,这将直接或间接影响全球数百万人和我们的星球。
Figure 4: Kapil used the knowledge inside Deep Learning for Computer Vision with Python to help prepare himself for the Esri competition and interview.
Adrian:用 Python 进行计算机视觉的深度学习 (DL4CV)是如何为你准备/帮助你参加航拍影像比赛的?
Kapil:DL4CV 这本书是一个巨大的资源,它不仅帮助我为 Esri 挑战赛和面试做好准备,还帮助我过渡到计算机视觉专业人员的角色。
我从你的书中了解了 RetinaNet(我在 Esri 比赛中使用的物体探测器)以及如何使用它。
此外,我在其他项目中也使用了很多从 DL4CV 中学到的东西。
Adrian: 你会向其他试图学习计算机视觉和深度学习的开发者、学生和研究人员推荐用 Python 进行计算机视觉的深度学习吗?
Kapil: 绝对!对于任何试图学习计算机视觉和深度学习的人来说,这是必不可少的。有很多资源,但你在书中和教程中采用的实用方法是惊人的。仅仅谈论概念和理论是一回事,但在数据集上实际应用模型并用结构良好的代码实现它是学习者需要练习的。DL4CV 正好有助于这一点。
我还想补充一下,用 Python 进行计算机视觉深度学习的是 SenseHawk 的 CTOSaideep Talari向我推荐的。他是一个好朋友,在我的转变过程中一直引导着我。现在我已经成功过渡了,我可以毫无疑问地提出同样的建议。
Adrian: 如果一个 PyImageSearch 的读者想聊天,联系你的最佳地点是哪里?
与我联系的最佳地点是 LinkedIn。以下是我个人资料的链接:
https://www.linkedin.com/in/kapilvarshney14/
读者也可以关注我的博客:
https://medium.com/@kapilvarshney
再次感谢阿德里安,感谢你为你的书和教程所做的一切。你的作品帮助并激励了我,就像它激励了成千上万的其他读者一样。保持下去。
摘要
在这篇博文中,我们采访了计算机视觉和深度学习从业者 Kapil Varshney,他刚刚被聘为 Esri 在新德里的研发团队的一部分。
Kapil 是一个长期的 PyImageSearch 读者,他最近读完了我的书, 用 Python 进行计算机视觉的深度学习。
读完这本书后不久,他参加了由 Esri 赞助的物体探测比赛。
挑战?
检测和定位卫星图像中的对象,包括汽车、游泳池和其他对象。
Kapil **在 53 名参赛选手中名列第三,**比赛结束后不久, Esri 为 Kapil 提供了一个全职职位。
他的故事表明,你可以在计算机视觉和深度学习方面取得成功。你只需要:
- 适当的教育
- 自我激励和奉献
Kapil 两者都有,但你呢?
如果你想追随他的脚步,一定要拿起一本用 Python (DL4CV)编写的 计算机视觉深度学习。
使用 DL4CV 图书您可以:
- 获得完成理学硕士或博士学位所需的知识
- 进行值得在期刊上发表的研究
- 转换职业,在一家公司或机构获得一个简历或 DL 职位
- 将深度学习和计算机视觉应用到您自己的工作项目中
- 周末完成你的业余爱好 CV/DL 项目
我希望你能加入我、Kapil 和其他成千上万的 PyImageSearch 读者的行列,他们不仅掌握了计算机视觉和深度学习,还利用这些知识改变了他们的生活。
我们在另一边见。
在 PyImageSearch 上发布未来的博客文章和采访时,我们会通知您,请务必在下面的表格中输入您的电子邮件地址,,我会让您随时了解情况。*
采访 OpenMV 的创始人之一、微控制器专家夸贝纳·阿杰曼
在上周发表了关于用 Python 和 OpenMV 读取条形码的博文后,我收到了很多来自读者的电子邮件,询问关于嵌入式计算机视觉以及微控制器如何用于计算机视觉的问题。
与其试图自己解决这些问题,我认为最好请一位真正的专家来——夸贝纳·阿杰曼,他是 OpenMV 的联合创始人,OpenMV 是一种小型、廉价、可扩展的嵌入式计算机视觉设备。
Kwabena 在这次采访中很谦虚,否认自己是专家(这是他善良性格和风度的真实证明),但相信我,与他见面和聊天是一次令人谦卑的经历。他在嵌入式编程和微控制器设计方面的知识令人难以置信。我可以整天听他谈论嵌入式计算机视觉。
我不经常在 PyImageSearch 上讨论嵌入式设备,所以今天有 Kwabena 在这里真是一种享受。
和我一起欢迎夸贝纳·阿杰曼来到图片搜索博客。要了解更多关于嵌入式计算机视觉的知识,请继续阅读。
采访 OpenMV 的创始人之一、微控制器专家夸贝纳·阿杰曼
Figure 1: The OpenMV camera is a powerful embedded camera board that runs MicroPython.
阿德里安:嘿,夸贝纳,谢谢你接受采访!很高兴有你在 PyImageSearch 博客上。对于不了解你和 OpenMV 的人来说,你是谁,你是做什么的?
Kwabena: 嗨,Adrian,谢谢你今天邀请我。我和我的联合创始人 Ibrahim 创建了 OpenMV Cam 并运行 OpenMV 项目。
OpenMV 致力于使嵌入式计算机/机器视觉更容易实现。该项目的最终目标是在比现在更多的嵌入式设备中实现机器视觉。
例如,假设您想在烤面包机上安装一个面部检测传感器。对于任何应用程序来说,这可能都是多余的,但是,请原谅我。
首先,你不能今天就出去买一个 50 美元的面部检测传感器。相反,您至少需要设置一个运行 OpenCV 的单板计算机(SBC) Linux 系统。这意味着给你的烤面包机添加人脸检测功能现在已经成为一个全新的项目。
如果你的目标只是检测视野中是否有人脸,然后在你看着烤面包机的时候拨动一根线来释放面包片,你就不一定想走 SBC 这条路了。
相反,你真正想要的是一个微控制器,它可以通过最少的设置来实现开箱检测人脸和切换电线的目标。
因此,OpenMV 项目基本上是为那些希望在项目中添加强大功能而不必关注所有细节的开发人员提供开箱即用的高级机器视觉功能,以完成各种任务。
Figure 2: The CMUcam4 is a fully programmable embedded computer vision sensor developed by Kwabena Agyeman while at Carnegie Mellon University.
Adrian: 对于必须设置一个 SBC Linux 系统、安装 OpenCV 并编写代码来实现一点点功能来说,这是一个很好的观点。我在嵌入式设备方面做的不多,所以从不同的角度来看很有见地。是什么激励你开始从事计算机视觉、机器学习和嵌入式领域的工作?
Kwabena: 感谢 Adrian 的提问,我回到卡耐基梅隆大学开始研究机器视觉,在 Anthony Rowe 手下工作,他创造了 CMUcam 1、2 和 3 。当我在那里上学的时候,我为简单的颜色跟踪应用程序开发了 CMUcam 4 。
虽然受到限制,但 CMUcams 能够很好地完成跟踪颜色的工作(如果部署在恒定的照明环境中)。我真的很喜欢在 CMUcam4 上工作,因为它在一个项目中融合了电路板设计、微控制器编程、GUI 开发和数据可视化。
Figure 3: A small, affordable, and expandable embedded computer vision device.
Adrian: 让我们更详细地了解 OpenMV 和 OpenMV Cam。OpenMV Cam 到底是什么,是用来做什么的?
Kwabena: 所以,OpenMV Cam 是一个低功率的机器视觉相机。我们当前的型号是 OpenMV Cam M7,它由 216 MHz Cortex-M7 处理器提供支持,每时钟可以执行两条指令,计算速度大约是 Raspberry Pi zero 的一半(单线程无 SIMD)。
OpenMV Cam 也是一个 MicroPython 板。这意味着你用 Python 3 编程。注意,这并不意味着桌面 python 库是可用的。但是,如果你会用 Python 编程,你就可以对 OpenMV Cam 编程,你会觉得用起来很舒服。
不过最酷的是,我们在 OpenMV Cam 的固件中内置了许多高级机器视觉算法(它是用 C 语言编写的——python 只是为了让你像使用 OpenCV 的 python 库绑定一样将视觉逻辑粘在一起)。
特别是,我们有:
- 多色斑点跟踪
- 人脸检测
- AprilTag 跟踪
- QR 码、条形码、数据矩阵检测和解码
- 模板匹配
- 相位相关
- 光流
- 帧差分
- 更内置。
基本上,它就像低功耗微控制器上的 OpenCV(通过 USB 端口运行)和 Python 绑定
无论如何,我们的目标是将尽可能多的功能包装到一个易于使用的函数调用中。例如,我们有一个“find_blobs()”方法,它返回图像中颜色 blobs 对象的列表。每个斑点对象都有一个质心、边界框、像素数、旋转角度等。因此,该函数调用通过颜色阈值列表自动分割图像(RGB 或灰度),找到所有斑点(连接的组件),基于它们的边界框合并重叠的斑点,并另外计算每个斑点的质心、旋转角度等。主观上,如果你是初学者,使用我们的“find_blobs()”比用 OpenCV 寻找彩色斑点要简单得多。也就是说,如果你需要做一些我们没有想到的事情,我们的算法也不太灵活。所以,有一个权衡。
继续,感知只是问题的一部分。一旦你察觉到什么,你就需要采取行动。因为 OpenMV Cam 是一个微控制器,所以您可以切换 I/O 引脚、控制 SPI/I2C 总线、发送 UART 数据、控制伺服系统等,所有这些都可以从您的视觉逻辑所在的同一个脚本中完成。使用 OpenMV Cam,您可以从一个简短的 python 脚本中感知、计划和行动。
**阿德里安:**伟大的解释。你能详细说明 OpenMV 的目标市场吗?如果你必须描述你理想的最终用户,他们必须有一个 OpenMV,他们会是谁?
Kwabena: 现在,我们的目标市场是业余爱好者。到目前为止,业余爱好者是我们最大的买家,去年帮助我们卖出了 5000 多台 OpenMV Cam M7s。我们也有一些公司购买相机。
无论如何,随着我们的固件变得越来越成熟,我们希望向更多生产产品的公司出售更多的相机。
目前,我们仍在快速构建我们的固件功能,以或多或少地补充 OpenCV 的基本图像处理功能。我们已经有了很多东西,但我们试图确保你有任何你需要的工具,如阴影去除和修复,以创建一个无阴影的背景帧差分应用程序。
Figure 4: An example of AprilTags.
**阿德里安:**阴影去除,真好玩。那么,在组装 OpenMV 时,你不得不争论的最困难的特性或方面是什么?
Kwabena: 将 AprilTags 移植到 OpenMV Cam 是在船上运行的最具挑战性的算法。
我从针对 PC 的 AprilTag 2 源代码开始。让它在 OpenMV Cam M7 上运行,与台式机相比,OpenMV Cam M7 只有 512 KB 的内存。我已经检查了所有 15K+行代码,并重做了内存分配如何更有效地工作。
有时这就像将大型数组分配从 malloc 转移到专用堆栈一样简单。有时我不得不改变一些算法的工作方式,以提高效率。
例如,AprilTags 用 0、1、2 等计算每个可能的汉明码字的查找表。尝试将检测到的标签位模式与标签字典匹配时出现位错误。这个查找表(LUT)对于一些标签字典可以超过 30 MBs!当然,索引 LUT 很快,但是,在标签字典中线性搜索匹配的标签也可以。
无论如何,在将算法移植到 OpenMV Cam M7 之后,它可以以 12 FPS 的速度运行 160×120 的 AprilTags。这让你可以用一个可以从你的 USB 端口运行的微控制器,从大约 8 英寸远的地方检测打印在 8 英寸 x11 英寸纸上的标签。
阿德里安:哇!不得不手动检查所有 15K 行代码和重新实现某些功能肯定是一项艰巨的任务。我听说在下一个版本中会有一些非常棒的 OpenMV 新特性。你能给我们讲讲他们吗?
是的,我们的下一款产品,由 STM32H7 处理器驱动的 OpenMV Cam H7 将使我们的性能翻倍。事实上,它的 coremark 得分与 1 GHz 的 Raspberry Pi zero 相当(2020.55 对 2060.98)。也就是说,Cortex-M7 内核没有 NEON 或 GPU。但是,我们应该能够跟上 CPU 有限的算法。
然而,最大的特点是增加了可移动的摄像头模块支持。这使得我们能够像现在一样为 OpenMV Cam H7 提供廉价的卷帘快门相机模块。但是,对于更专业的用户,我们将为那些试图在高速应用中进行机器视觉的人提供全局快门选项,如拍摄传送带上移动的产品。更好的是,我们还计划为机器视觉支持 FLIR 轻子热传感器。最重要的是,每个相机模块将使用相同的“sensor.snapshot()”构造,我们现在使用它来拍照,允许您在不更改代码的情况下将一个模块切换到另一个模块。
最后,多亏了 ARM,你现在可以在 Cortex-M7 上构建神经网络。以下是 OpenMV Cam 在船上运行 CIFAR-10 网络的视频: