网易2018校招计算机视觉算法工程师笔试卷
只用计算 a [ i ] ! = a [ i − 1 ] a[i]\ !=a[i-1] a[i] !=a[i−1] 的最大连续个数
#include
using namespace std;
#define maxn 100
char a[maxn];
int b[maxn];
int main(){
scanf("%s", &a);
int n=strlen(a);
memset(b,0,sizeof b);
for(int i=1;i<n;i++){
if(a[i]!=a[i-1]) b[i]=b[i-1]+1;
}
int ans=0;
for(int i=0;i<n;i++){
ans=max(ans,b[i]);
}
cout<<ans+1<<endl;
return 0;
}
最终棋子聚点可以等效在 ( a [ i ] . x , a [ j ] . y ) (a[i].x , a[j].y) (a[i].x,a[j].y)点上,
所以只需要枚举所有可能聚点,就能找到最优解
#include
using namespace std;
#define maxn 55
struct node{
int x,y;
}a[maxn];
int len(int x,int y,node a){
return abs(x-a.x)+abs(y-a.y);
}
int b[maxn];
int l[maxn*maxn];
int main(){
int n;
scanf("%d", &n);
memset(b,0x3f3f3f3f,sizeof b);
for(int i=0;i<n;i++) scanf("%d", &a[i].x);
for(int i=0;i<n;i++) scanf("%d", &a[i].y);
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
for(int k=0;k<n;k++){
l[k]=len(a[i].x,a[j].y,a[k]);
}
sort(l,l+n);
for(int k=1;k<n;k++){
l[k]+=l[k-1];
b[k]=min(b[k],l[k]);
}
}
}
cout<<0;
for(int i=1;i<n;i++){
cout<<' '<<b[i];
}
cout<<endl;
return 0;
}
以下均来自牛客讨论区
从贝叶斯的角度来看,正则化等价于对模型参数引入先验分布,
谈谈你对正则化的理解,并且阐述引入L2和L1分别对应什么分布。
答:
模型的参数分布P(w|X,y)= P(y|X,w)*P(w)/P(X),其中P(w)就是加入参数w的先验知识,就是正则化(增加惩罚)。
L1对应拉普拉斯分布,让模型更稀疏
L2对应高斯分布,对较大的参数的惩罚更大,让模型参数更小
从贝叶斯的角度看,正则化就相当于贝叶斯最大后验概率估计,
其中正则化项就对应后验估计中的先验信息,损失函数对应后验估计中的似然函数,
两者的乘积就是贝叶斯最大后验概率估计的形式
引入L2正则化项相当于给参数引入高斯先验分布,引入L1正则化项相当于给参数引入拉普拉斯先验分布。
从变换矩阵和变换效果等方面阐述相似变换、仿射变换、投影变换的区别。
答:
相似变换:图像平移+旋转+缩放
变换过程中的不变量有:角度、长度比例、面积比例
仿射变换:图像平移+旋转+缩放+切变(
变换过程中的不变量有:平行线、平行线的长度比例、面积比例
射影变换:图像平移+旋转+缩放+切变+射影
变换过程中的不变量有:重合关系、长度交比
详述卡尔曼滤波或粒子滤波的原理及其在目标跟踪中的应用
答:
定位跟踪时,可以通过某种定位技术得到一个位置估计,
也可以根据我们的经验由上一时刻的位置和速度来预测出当前位置。
把这个观测结果和预测结果做一个加权平均作为定位结果,
权值的大小取决于观测位置和预测位置的不确定性程度,
在数学上可以证明在预测过程和观测过程都是线性高斯时,
按照卡尔曼的方法做加权是最优的。
比如在运动轨迹中,使用EKF滤波后的轨迹更平滑,
很好地减小了噪声带来的影响,尤其是匀速且连续的运动。
F矩阵,E矩阵,H矩阵有什么关联性。
答:
基本矩阵不依赖于场景中的物体,只和两帧图像间的相对位姿和相机矩阵有关(本质矩阵则与相机矩阵无关)。
而单应矩阵不仅仅和帧间的相对位姿有关,还和特定的世界平面有关。
所以,当我们得到两帧图像并且知道图像中点的对应关系后,
不论场景是什么样的,通过基本矩阵就都已经直接恢复出帧间的运动;
而单应矩阵则不行,只有当匹配点都在特定的世界平面中,才可以使用单应来恢复帧间的运动。
视觉slam中常用的边缘化处理的原理和方法。
答:
边缘检测一般分为三步,分别是滤波、增强、检测。
基本原理都是用高斯滤波器进行去噪,之后在用卷积内核寻找像素梯度。
用的方法有四种算法:canny算子,sobel算子,laplacian算子,scharr滤波器
单目视觉slam中尺寸漂移是怎么产生的?
答:
根据SLAM重投影公式,还原3D点空间位置坐标需要用到深度信息,
双目摄像机可以根据视差获得,而单目相机根据一张图片无法得出一张图片中物体的实际大小,
同理也就无法得出运动的尺度大小,这是产生尺度漂移的根源。
而在优化过程中,单目相机使用对极几何中的三角测量原理,
而三角测量中,极小的角度误差在累积之后深度不确定都会变得很大,从而无法保证尺度一致性。
介绍主流深度学习模型的演化过程,以及每次演化的创新点和优势所在
答:
2012 AlexNet
(1)与最早的卷积神经网络LeNet相比,AlexNet的层数更深,共有7层,并且使用ReLU作为非线性激活函数
(2)使用dropout对抗过拟合
(3)使用max-pooling下采样
2014 VGG
(1)与AlexNet相比,VGG的层数更深,最高达到19层,可以增强网络的非线性表达能力
(2)与AlexNet相比,VGG使用更小的卷积核。VGG大量使用3×3的卷积,将多个3×3卷积排列起来形成一个卷积序列,该卷积序列与大卷积核具有相同的感受野,并具有更少的参数
2014 GoogLeNet
GoogLeNet有很多版本,包括Inception v1,v2,v3等,后者大多是对v1的改进
Inception v1
(1)Inception v1采用模块化的结构,每一模块以上一模块的输出作为输入。对输入分别进行1×1、3×3、5×5的卷积以及 3×3的max pooling后,将四路分支通过并联(Concat)融合起来。并且在3×3和5×5的卷积之前,先进行1×1的卷积进行降维,以减少计算复杂度,去除特征冗余,并且3×3max pooling后也进行1×1卷积,以提升网络非线性表达能力。
(2)Inception v1使用多种大小的卷积核,意味着多种不同大小的感受野,最后的拼接意味着多尺度特征的融合,从而提高网络表达能力。
(3)未来防止梯度消失,Inception v1除了在网络最后使用softmax之外,还在中间层使用额外的两个辅助softmax反传梯度
(4)网络的最后使用全局平均池化代替全连接,减少了参数数量
Inception v2:
(1)在v1的基础上增加了Batch Normalization
(2)使用两个3×3卷积代替5×5卷积
Inception v3:
(1)把n×n卷积分解为一个1×n卷积核一个n×1卷积,进一步缩减参数量
(2)输入图像大小由224×224放大至299×299
2015 ResNet
(1)ResNet的最大特点是网络层数大大加深,由前面的十几层可以加深至50层(ResNet-50)101层(Reset-101)甚至上千层
(2)ResNet提出residual结构,使用跳层连接对抗过拟合,residual结构进行特征汇聚时使用相加操作(Eltwise-sum)
(3)ResNet也使用1×1卷积进行降维,使用全局平均池化代替全连接,减小参数量和计算复杂度
2016 DenseNet
(1)DenseNet使用模块化结构,网络可以分为多个denseblock,denseblock之间使用transition layer相连,transition layer对dense block的输出进行处理,防止网络过于庞大
(2)denseblock内,每层都以前面所有层的输出作为输出,以防止梯度消失,加强特征传递,更有效地利用特征
(3)DenseNet与ResNet相比,二者在特征融合时存在不同,DenseNet使用Concat操作,ResNet使用Eltwise操作
简述回归,分类,聚类方法的区别和联系并分别举出一个例子,简要介绍算法思路
答:
回归方法是一种对数值型连续随机变量进行预测和建模的监督学习算法。
使用案例一般包括房价预测、股票走势或测试成绩等连续变化的案例。
回归任务的特点是标注的数据集具有数值型的目标变量。
也就是说,每一个观察样本都有一个数值型的标注真值以监督算法。
分类方法是一种对离散型随机变量建模或预测的监督学习算法。
使用案例包括邮件过滤、金融欺诈和预测雇员异动等输出为类别的任务。
许多回归算法都有与其相对应的分类算法,分类算法通常适用于预测一个类别(或类别的概率)而不是连续的数值。
聚类是一种无监督学习任务,该算法基于数据的内部结构寻找观察样本的自然族群(即集群)。
使用案例包括细分客户、新闻聚类、文章推荐等。
因为聚类是一种无监督学习(即数据没有标注),并且通常使用数据可视化评价结果。
如果存在「正确的回答」(即在训练集中存在预标注的集群),那么分类算法可能更加合适。
列举至少三种object-detection方法,并介绍其算法思路
答:
R-CNN
(1)使用SS从图像中产生1000-2000个region proposal
(2)将每一个proposal送入CNN提取特征
(3)将特征送入分类器得到object类别
(4)边界框回归精修预测框位置
(5)NMS去重
特点:无法实现端到端训练
Fast R-CNN
(1)使用SS从图像中产生1000-2000个region proposal
(2)将原始图像送入CNN提取特征
(3)对每一个proposal,得到由原图位置到特征图位置的映射,从特征图对应位置提取特征,经过roi pooling得到每一个proposal相同维度的特征表达
(4)特征送入分类器(softmax)进行分类
(5)边界框回归精修位置
(6)NMS去重
特点:
(1)卷积层共享
(2)roi pooling由不同大小的特征图得到相同维度的特征表示,从而可实现端到端训练
(3)softmax分类器
Faster R-CNN
(1)将图像送入CNN提取特征
(2)将共享特征图送入RPN网络获取proposal
(3)由roi pooling得到proposal的特征
(4)特征送入分类器得到类别信息
(5)边界框回归
(6)NMS
特点:RPN+fast R-CNN
YOLO
(1)将全图划分为S×S个相同大小的格子,每一个格子负责以该格子为中心的目标的检测
(2)使用回归的方式进行检测,没有生成proposal的过程
SSD:
(1)以VGG16作为基网络,将FC6与FC7替换为卷积层,并在后面增加4个卷积层
(2)使用5个不同卷积层生成default box,对于每一个卷积层,使用2个3×3的卷积进行处理,一个预测当前层生成的每一个default box的类别得分,另一个输出每一个default box的位置信息(x,y,w,h)
(3)最终将每一个default box的位置,回归得到的位置以及类别得分送入最后的loss层计算损失,实现反向传播
特点:
(1)多尺度特征融合策略
(2)使用default box(类似于RPN中anchor box的概念,但没有筛选过程)进行检测,没有生成region proposal的过程
Mask R-CNN:
roi align+Faster R-CNN+fcn
简述adaboost算法的基本思想和算法流程,举例说明cascade adaboost算法的大致实现过程
答:
adaboost基本思路:
1.给予数据集中每个样本一个初始的权重(alpha=1)
2.基学习器开始对数据集进行学习,得到一个分类
3.将第二步中得到的正确分类和错误分类的元素分别赋以不同的权重:
设错误率为e=分错的部分/总的样本数 alpha=1/2ln((1-e)/e)
正确的样本:Di*e^-alpha/sum(D)
错误的样本:Di*e^alpha/sum(D)
4.重复2,3步 直到基学习器的数目为T
5.对该学习器进行加权结合
列举至少三种损失函数,写出数学表达式并简述各自优点
答:
1、0-1损失函数
2、平方损失函数(Square Loss):主要是最小二乘法(OLS)中;
3、绝对值损失函数
4、对数损失函数(Cross Entropy Loss,Softmax Loss ):用于Logistic 回归与Softmax 分类中;
5、指数损失函数(Exponential Loss) :主要用于Adaboost 集成学习算法中;
6、铰链损失函数(Hinge Loss):主要用于支持向量机(SVM) 中;
列举常见深度学习算法的评价标准
答:
准确率
精确率
召回率
调和均值
列举Reinforcement Learning的应用场景,并简述其应用方法
答: