添加微信:julyedufu77,回复 “ 11 ”,领取最新升级版《名企 AI 面试 100 题》电子书!!
21、简述孪生随机网络(Siamese Network)
简单来说,Siamese Network 就是“连体的神经网络”,神经网络的“连体”是通过共享权值来实现的,如下图所示:
大家可能会有疑问:共享权值是什么意思?左右两个神经网络的权重一模一样?
答:是的,在代码实现的时候,甚至可以是同一个网络,不用实现另外一个,因为权值都一样。对于 Siamese Network,两边可以是 LSTM 或者 CNN,都可以。
大家可能还有疑问:如果左右两边不共享权值,而是两个不同的神经网络,叫什么呢?
答:Pseudo-Siamese Network,伪孪生神经网络,如下图所示。对于 Pseudo-Siamese Network,两边可以是不同的神经网络(如一个是 LSTM,一个是 CNN),也可以是相同类型的神经网络。
Yann LeCun 养乐村同志在 NIPS 1993 上发表了论文《Signature Verification using a ‘Siamese’ Time Delay Neural Network》用于美国支票上的签名验证,即验证支票上的签名与银行预留签名是否一致。1993 年,Yann LeCun 就在用两个卷积神经网络做签名验证了。
随着 SVM 等算法的兴起,Neural Network 被人们遗忘,还好有一些执着的人们,坚守在了神经网络研究的阵地。2010 年 Hinton 在 ICML 上发表了文章《Rectified Linear Units Improve Restricted Boltzmann Machines》,用来做人脸验证,效果很好。其原理很简单,将两个人脸 feed 进卷积神经网络,输出 same or different。
22、DPM(Deformable Parts Model)算法流程
解析 1:
将原图与已经准备好的每个类别的“模板”做卷积操作,生成一中类似热力图(hot map)的图像,将不同尺度上的图合成一张,图中较量点就是与最相关“模板”相似的点。
拓展:
- SGD(stochastic gradient descent)到 training 里
- NMS(non-maximum suppression)对后期 testing 的处理非常重要
- Data mining hard examples 这些概念至今仍在使用
解析 2:
DPM 算法由 Felzenszwalb 于 2008 年提出,是一种基于部件的检测方法,对目标的形变具有很强的鲁棒性。目前 DPM 已成为众多分类、分割、姿态估计等算法的核心部分,Felzenszwalb 本人也因此被 VOC 授予"终身成就奖"。
DPM 算法采用了改进后的 HOG 特征,SVM 分类器和滑动窗口(Sliding Windows)检测思想,针对目标的多视角问题,采用了多组件(Component)的策略,针对目标本身的形变问题,采用了基于图结构(Pictorial Structure)的部件模型策略。此外,将样本的所属的模型类别,部件模型的位置等作为潜变量(Latent Variable),采用多示例学习(Multiple-instance Learning)来自动确定。
1、通过 Hog 特征模板来刻画每一部分,然后进行匹配。并且采用了金字塔,即在不同的分辨率上提取 Hog 特征。
2、利用提出的 Deformable PartModel,在进行 object detection 时,detect window 的得分等于 part 的匹配得分减去模型变化的花费。
3、在训练模型时,需要训练得到每一个 part 的 Hog 模板,以及衡量 part 位置分布 cost 的参数。文章中提出了 LatentSVM 方法,将 deformable part model 的学习问题转换为一个分类问题:利用 SVM 学习,将 part 的位置分布作为 latent values,模型的参数转化为 SVM 的分割超平面。具体实现中,作者采用了迭代计算的方法,不断地更新模型。
rootfilters 根滤波器数组,其每个元素表示一个组件模型的根滤波器的信息,每个元素包括 3 个字段:
size:根滤波器的尺寸,以 cell 为单位,w*h
w:根滤波器的参数向量,维数为(w*h)*31
blocklabel:此根滤波器所在的数据块标识
滤波器(模版)就是一个权重向量,一个 w * h 大小的滤波器 F 是一个含 w * h * 9 * 4 个权重的向量(9*4 是一个 HOG 细胞单元的特征向量的维数)。所谓滤波器的得分就是此权重向量与 HOG 金字塔中 w * h 大小子窗口的 HOG 特征向量的点积(DotProduct)。
23、什么是 NMS(Non-maximum suppression 非极大值抑制)?
解析 1:
NMS 是一种 Post-Procession(后处理)方式,跟算法无关的方式。
NMS 应用在所有物体检测的方法里。
NMS 物体检测的指标里,不允许出现多个重复的检测。
NMS 把所有检测结果按照分值(conf. score)从高到底排序,保留最高分数的 box,删除其余值。
解析 2:
概述
非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索。这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二是邻域的大小。这里不讨论通用的 NMS 算法(参考论文《Efficient Non-Maximum Suppression》对 1 维和 2 维数据的 NMS 实现),而是用于目标检测中提取分数最高的窗口的。例如在行人检测中,滑动窗口经提取特征,经分类器分类识别后,每个窗口都会得到一个分数。但是滑动窗口会导致很多窗口与其他窗口存在包含或者大部分交叉的情况。这时就需要用到 NMS 来选取那些邻域里分数最高(是行人的概率最大),并且抑制那些分数低的窗口。
NMS 在计算机视觉领域有着非常重要的应用,如视频目标跟踪、数据挖掘、3D 重建、目标识别以及纹理分析等。
NMS 在目标检测中的应用-人脸检测框重叠例子:
我们的目的就是要去除冗余的检测框,保留最好的一个.
目标检测 pipline
产生 proposal 后使用分类网络给出每个框的每类置信度,使用回归网络修正位置,最终应用 NMS.
NMS 原理
对于 Bounding Box 的列表 B 及其对应的置信度 S,采用下面的计算方式.选择具有最大 score 的检测框 M,将其从 B 集合中移除并加入到最终的检测结果 D 中.通常将 B 中剩余检测框中与 M 的 IoU 大于阈值 Nt 的框从 B 中移除.重复这个过程,直到 B 为空.
重叠率(重叠区域面积比例 IOU)阈值:常用的阈值是 0.3 ~ 0.5.
其中用到排序,可以按照右下角的坐标排序或者面积排序,也可以是通过 SVM 等分类器得到的得分或概率,R-CNN 中就是按得分进行的排序.
就像上面的图片一样,定位一个车辆,最后算法就找出了一堆的方框,我们需要判别哪些矩形框是没用的。非极大值抑制的方法是:先假设有 6 个矩形框,根据分类器的类别分类概率做排序,假设从小到大属于车辆的概率 分别为 A、B、C、D、E、F。
(1)从最大概率矩形框 F 开始,分别判断 A~E 与 F 的重叠度 IOU 是否大于某个设定的阈值;
(2)假设 B、D 与 F 的重叠度超过阈值,那么就扔掉 B、D;并标记第一个矩形框 F,是我们保留下来的。
(3)从剩下的矩形框 A、C、E 中,选择概率最大的 E,然后判断 E 与 A、C 的重叠度,重叠度大于一定的阈值,那么就扔掉;并标记 E 是我们保留下来的第二个矩形框。
就这样一直重复,找到所有被保留下来的矩形框。
更多内容请参考:非极大值抑制(Non-Maximum Suppression,NMS)
24、列举出常见的损失函数(三个以上)?
什么是损失函数?
损失函数 (Loss Function) 也可称为代价函数 (Cost Function)或误差函数(Error Function),用于衡量预测值与实际值的偏离程度。一般来说,我们在进行机器学习任务时,使用的每一个算法都有一个目标函数,算法便是对这个目标函数进行优化,特别是在分类或者回归任务中,便是使用损失函数(Loss Function)作为其目标函数。机器学习的目标就是希望预测值与实际值偏离较小,也就是希望损失函数较小,也就是所谓的最小化损失函数。
损失函数是用来评价模型的预测值与真实值的不一致程度,它是一个非负实值函数。损失函数越小,模型的性能就越好。
25、做过目标检测项目么?比如 Mask R-CNN 和 Python 做一个抢车位神器
每逢春节过年,就要开始走亲访友了。这时候的商场、饭馆也都是“人声鼎沸”,毕竟走亲戚串门必不可少要带点礼品、聚餐喝茶。
热闹归热闹,这个时候最难的问题可能就是怎样从小区、商场、菜市场的人山人海里准确定位,找到一个“车位”。
一位名叫 Adam Geitgey 的软件工程师、AI 软件工程博主也被“停车难”的问题困扰已久。为了让自己能给迅速定位空车位,他用实例分割模型 Mask R-CNN 和 python 写了一个抢占停车位的小程序。
以下是作者以第一人称给出的教程,enjoy。
一、如何找停车位
我住在一个大都市,但就像大多数城市一样,在这里很难找到停车位。停车场总是停得满满的,即使你自己有私人车位,朋友来访的时候也很麻烦,因为他们找不到停车位。
我的解决方法是:
用摄像头对着窗外拍摄,并利用深度学习算法让我的电脑在发现新的停车位时给我发短信。
这可能听起来相当复杂,但是用深度学习来构建这个应用,实际上非常快速和简单。有各种现有的实用工具 - 我们只需找到这些工具并且将它们组合在一起。
26、如何理解 Faster RCNN
目前学术和工业界出现的目标检测算法分成 3 类:
1. 传统的目标检测算法: Cascade + HOG/DPM + Haar/SVM 以及上述方法的诸多改进、优化;
2. 候选区域/框 + 深度学习分类: 通过提取候选区域,并对相应区域进行以深度学习方法为主的分类的方案,如:
R-CNN(Selective Search + CNN + SVM)
SPP-net(ROI Pooling)
Fast R-CNN(Selective Search + CNN + ROI)
Faster R-CNN(RPN + CNN + ROI)
R-FCN
等系列方法;
3. 基于深度学习的回归方法: YOLO/SSD/DenseBox 等方法;以及最近出现的结合 RNN 算法的 RRC detection;结合 DPM 的 Deformable CNN 等
经过 R-CNN 和 Fast RCNN 的积淀,Ross B. Girshick 在 2016 年提出了新的 Faster RCNN,在结构上,Faster RCNN 已经将特征抽取(feature extraction),proposal 提取,bounding box regression(rect refine),classification 都整合在了一个网络中,使得综合性能有较大提高,在检测速度方面尤为明显。
图 1 Faster RCNN 基本结构(来自原论文)
依作者看来,如图 1,Faster RCNN 其实可以分为 4 个主要内容:
①Conv layers。作为一种 CNN 网络目标检测方法,Faster RCNN 首先使用一组基础的 conv+relu+pooling 层提取 image 的
②feature maps。该 feature maps 被共享用于后续 RPN 层和全连接层。
③Region Proposal Networks。RPN 网络用于生成 region proposals。该层通过 softmax 判断 anchors 属于 foreground 或者 background,再利用 bounding box regression 修正 anchors 获得精确的 proposals。
Roi Pooling。该层收集输入的 feature maps 和 proposals,综合这些信息后提取 proposal feature maps,送入后续全连接层判定目标类别。
④Classification。利用 proposal feature maps 计算 proposal 的类别,同时再次 bounding box regression 获得检测框最终的精确位置。
所以本文以上述 4 个内容作为切入点介绍 Faster R-CNN 网络。
27、one-stage 和 two-stage 目标检测方法的区别和优缺点?
众所周知,物体检测的任务是找出图像或视频中的感兴趣物体,同时检测出它们的位置和大小。
当然,物体检测过程中有很多不确定因素,如图像中物体数量不确定,物体有不同的外观、形状、姿态,加之物体成像时会有光照、遮挡等因素的干扰,导致检测算法有一定的难度。
由于目标检测的应用场景广泛,所以在 CV 面试中经常出现,比如七月在线有一 CV 就业班的学员出去面试时,便被问到“one-stage 和 two-stage 目标检测方法的区别和优缺点?”(详见此文:从测试到 CV 算法工程师的转型之路:最终连拿 4 个 offer - 七月在线
虽然我们在本文中详细介绍了各个目标检测的方法:AI 笔试面试题库 - 七月在线 ,但如果你是第一次听到 one-stage 和 two-stage,你会不会瞬间一脸懵逼,这是啥?
其实很简单,顾名思义,区别在于是一步到位还是两步到位。
具体说来,进入深度学习时代以来,物体检测发展主要集中在两个方向:
two stage 算法,如 R-CNN 系列;
ones-tage 算法,如 YOLO、SSD 等。
两者的主要区别在于 two stage 算法需要先生成 proposal(一个有可能包含待检物体的预选框),然后进行细粒度的物体检测,而 one stage 算法会直接在网络中提取特征来预测物体分类和位置。
所以说,目标检测算法 two-stage,如 Faster R-CNN 算法会先生成候选框(region proposals,可能包含物体的区域),然后再对每个候选框进行分类(也会修正位置)。这类算法相对就慢,因为它需要多次运行检测和分类流程。
而另外一类 one-stage 目标检测算法(也称 one-shot object detectors),其特点是一步到位,仅仅需要送入网络一次就可以预测出所有的边界框,速度相对较快,非常适合移动端,最典型的 one-stage 检测算法包括 YOLO,SSD,SqueezeDet 以及 DetectNet。
简单吧,恍然大悟,原来如此!而且 one-stage 看起来更高级。
28、请画下 YOLOv3 的网络结构
本人是小白,看后表示有点蒙。于是在 Github 上搜了大牛们基于 Tensorflow 搭建的 YOLOv3 模型进行分析(本人只接触过 TF,所以就不去看 caffe 的源码了)。接下来我会根据我阅读的代码来进一步分析网络的结构。Github YOLOv3 大牛代码链接。
1.Darknet-53 模型结构
在论文中虽然有给网络的图,但我还是简单说一下。这个网络主要是由一系列的 1x1 和 3x3 的卷积层组成(每个卷积层后都会跟一个 BN 层和一个 LeakyReLU)层,作者说因为网络中有 53 个 convolutional layers,所以叫做 Darknet-53(2 + 12 + 1 + 22 + 1 + 82 + 1 + 82 + 1 + 4*2 + 1 = 53 按照顺序数,不包括 Residual 中的卷积层,最后的 Connected 是全连接层也算卷积层,一共 53 个)。
下图就是 Darknet-53 的结构图,在右侧标注了一些信息方便理解(卷积的 strides 默认为(1,1),padding 默认为 same,当 strides 为(2,2)时 padding 为 valid)
看完上图应该就能自己搭建出 Darknet-53 的网络结构了,上图是以输入图像 256 x 256 进行预训练来进行介绍的,常用的尺寸是 416 x 416,都是 32 的倍数。下面我们再来分析下 YOLOv3 的特征提取器,看看究竟是在哪几层 Features 上做的预测。
2.YOLOv3 模型结构
作者在论文中提到利用三个特征层进行边框的预测,具体在哪三层我感觉作者在论文中表述的并不清楚(例如文中有“添加几个卷积层”这样的表述),同样根据代码我将这部分更加详细的分析展示在下图中。
注意:原 Darknet53 中的尺寸是在图片分类训练集上训练的,所以输入的图像尺寸是 256x256,下图是以 YOLO v3 416 模型进行绘制的,所以输入的尺寸是 416x416,预测的三个特征层大小分别是 52,26,13。
在上图中我们能够很清晰的看到三个预测层分别来自的什么地方,以及 Concatenate 层与哪个层进行拼接。注意 Convolutional 是指 Conv2d+BN+LeakyReLU,和 Darknet53 图中的一样,而生成预测结果的最后三层都只是 Conv2d。通过上图小伙伴们就能更加容易地搭建出 YOLOv3 的网络框架了。
29、请简单说下 YOLOv1,v2,v3,v4 各自的特点与发展史
文章目录
一、任务描述
二、设计思想
三、发展历程
- YOLOv1
- YOLOv2
- YOLOv3
- YOLOv4
四、总结
一、任务描述
目标检测是为了解决图像里的物体是什么,在哪里的问题。输入一幅图像,输出的是图像里每个物体的类别和位置,其中位置用一个包含物体的框表示。
需要注意,我们的目标,同时也是论文中常说的感兴趣的物体,指我们关心的类别(行人检测只检测人,交通检测只关心交通工具等),或者数据集包含的类别,并不是图像里所有的物体都是目标,比如建筑,草坪也是物体,但他们常常是背景。
从计算机视觉的角度看,目标检测是分类 + 定位,从机器学习的角度看,目标检测是分类 + 回归。
二、设计思想
目标检测架构分为两种,一种是 two-stage,一种是 one-stage,区别就在于 two-stage 有 region proposal 过程,类似于一种海选过程,网络会根据候选区域生成位置和类别,而 one-stage 直接从图片生成位置和类别。
今天提到的 YOLO 就是一种 one-stage 方法。YOLO 是 You Only Look Once 的缩写,意思是神经网络只需要看一次图片,就能输出结果。
30、如何理解 YOLO:YOLO 详解
从五个方面解读 CVPR2016 目标检测论文 YOLO: Unified, Real-Time Object Detection
创新
核心思想
效果
改进
实践
1 创新
YOLO 将物体检测作为回归问题求解。基于一个单独的 end-to-end 网络,完成从原始图像的输入到物体位置和类别的输出。从网络设计上,YOLO 与 rcnn、fast rcnn 及 faster rcnn 的区别如下:
[1] YOLO 训练和检测均是在一个单独网络中进行。YOLO 没有显示地求取 region proposal 的过程。而 rcnn/fast rcnn 采用分离的模块(独立于网络之外的 selective search 方法)求取候选框(可能会包含物体的矩形区域),训练过程因此也是分成多个模块进行。Faster rcnn 使用 RPN(region proposal network)卷积网络替代 rcnn/fast rcnn 的 selective
search 模块,将 RPN 集成到 fast rcnn 检测网络中,得到一个统一的检测网络。尽管 RPN 与 fast rcnn 共享卷积层,但是在模型训练过程中,需要反复训练 RPN 网络和 fast rcnn 网络(注意这两个网络核心卷积层是参数共享的)。
[2]YOLO 将物体检测作为一个回归问题进行求解,输入图像经过一次 inference,便能得到图像中所有物体的位置和其所属类别及相应的置信概率。而 rcnn/fast rcnn/faster rcnn 将检测结果分为两部分求解:物体类别(分类问题),物体位置即 bounding box(回归问题)。
2. 核心思想
2.1 网络定义
YOLO 检测网络包括 24 个卷积层和 2 个全连接层,如下图所示。
其中,卷积层用来提取图像特征,全连接层用来预测图像位置和类别概率值。YOLO 网络借鉴了 GoogLeNet 分类网络结构。不同的是,YOLO 未使用 inception
module,而是使用 1x1 卷积层(此处 1x1 卷积层的存在是为了跨通道信息整合)+3x3 卷积层简单替代。
YOLO 论文中,作者还给出一个更轻快的检测网络 fast YOLO,它只有 9 个卷积层和 2 个全连接层。使用 titan x GPU,fast YOLO 可以达到 155fps 的检测速度,但是 mAP 值也从 YOLO 的 63.4% 降到了 52.7%,但却仍然远高于以往的实时物体检测方法(DPM)的 mAP 值。
31、怎么理解 YOLOv4
本题解析来源:McGL:YOLOv4
Jonathan Hui 的博文依然是 YOLO 系列解读写得最好的,不像抢首发的媒体基本上就是把 paper 简要翻译了一下,也没有洋洋洒洒的直接罗列所有细节。本文从 YOLOv4 改进的 intuition 出发,循序渐进层次清晰的介绍了各个模块和影响,这样会有更全面的把握,不会迷失在繁枝密叶中,而需要了解更多的话也可以顺藤摸瓜去仔细研读。
YOLO v1 - v3 回顾
McGL:实时目标检测 YOLO 系列进化史 McGL:实时目标检测 YOLO 系列进化史
YOLOv4 by Jonathan Hui
https://medium.com/@jonathan_hui/yolov4-c9901eaa8e61
即使目标检测在最近几年开始成熟,竞争仍然激烈。 如下图所示,YOLOv4 声称具有 state-of-the-art 的精度,同时保持了高帧率。 在 Tesla V100 上,以大约 65 FPS 的推理速度,MS COCO 达到了 43.5% AP (65.7% AP50)。 在目标检测领域,高准确率不再是唯一的圣杯。 我们希望模型能够在边缘设备上顺利运行。 如何用低成本的硬件实时处理输入视频也变得非常重要。
阅读 YOLOv4 开发的有趣部分是什么新技术已经被评估、修改并集成到 YOLOv4 中。 并且它还做了一些改变,使得检测器更适合在单一 GPU 上进行训练。
Bag of freebies (BoF) & Bag of specials (BoS)
在训练过程中可以进行一些改进(如数据增强、类别不均衡、成本函数、软标记等......) 来提高精度。 这些改进对推理速度没有影响,被称为“赠品袋(bag of freebies)”。 然后,还有“特价品袋(bag of specials)” ,它对推理时间的影响较小,性能回报较好。 这些改进包括感受野的增加、注意力的使用、特征整合(如 skip 连接和 FPN)以及后处理(如 NMS)。 在本文中,我们将讨论特征提取器和颈部(neck)如何设计,以及所有 BoF 和 BoS 这些好东西。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于