|
个人背景:硕士毕业1年,面试的岗位大部分是计算机视觉算法工程师,少部分算法优化、部署岗。然后这个面经是去年写的,今天突然看到了,就发出来防止丢失。 社招面经
我面的基本都是计算机视觉算法岗,总的来说,大部分公司的技术面试都分为这几个部分:项目描述和细节提问、深度学习+目标检测算法、数据结构和算法代码及编程语言相关。下面是我面试当中问到的一些问题。
一,项目
主要是描述项目背景、项目实现的功能及使用的方法和流程,面试官会针对他感兴趣的点问一些技术细节,基本上只要能把项目流利的描述出来就问题不大。
二,深度学习、模型部署
2.1,目标检测相关
1,两阶段检测网络(Faster RCNN 系列)和一阶段检测网络(YOLO 系列)有什么区别?以及为什么两阶段比一阶段精度高?
2,说说你对 Focal Loss 的理解,为什么能解决分类问题中的类别不平衡问题?
3,如何判断过拟合,及模型过拟合问题如何解决?
4,如何判断欠拟合,及模型欠拟合问题如何解决?
5,描述以下 YOLOv3 算法及 YOLOv4、YOLOv5 的改进点,及为什么 CIoU Loss 比 IoU Loss 效果好?
6,描述下 RoI Pooling 过程和作用,以及 RoI Align 的改进点。
7,YOLOv3 的标签编码解码过程,以及正负样本采样策略。
8,详细讲解下 Faster RCNN 和 Mask RCNN 算法过程。
9,最新的目标检测算法有哪些?
10,手写 Soft NMS 和 Focal Loss。
2.2,深度学习相关
1,BN 的作用及 BN 工作流程,以及训练和推理的区别?
2,普通卷积层、分组卷积、深度可分离卷积的 FLOPs 计算公式。
3,普通卷积层、分组卷积、深度可分离卷积的 MAC 计算公式。
4,详细描述下你知道的轻量级网络:MobileNetV1、ShuffleNetv1-v2。
5,L2 正则化(权重衰减)原理,为什么它能防止模型过拟合?系数 λ\lambda 如何取值?
6,L1 正则化原理,系数 λ\lambda 如何取值?
7,Pytorch 的 conv2d 函数的参数有哪些?以及模型输出大小计算公式,并解释为什么公式是这样。
8,Pytorch 的 DataLoader 原理。
9,普通卷积过程描述下。
2.3,模型部署相关
1,浮点数在计算机中的表示方式?
2,描述下你知道的模型量化知识。
3,知识蒸馏原理,及温度系数如何取值?
4,通用矩阵乘(GEMM)优化算法有哪些?
二维矩阵相乘的 C++ 代码如下;
vector<vector<int>> matrix_mul(vector<vector<int>> A, vector<vector<int>> B){
/*二维矩阵相乘函数,时间复杂度 O(n^3)
*/
// vector<vector<int>> A_T = matrix_transpose(A);
assert((*A.begin()).size()==B.size()); //断言,第一个矩阵的列必须等于第二个矩阵的行
int new_rows = A.size();
int new_cols = (*B.begin()).size();
int L = B.size();
vector<vector<int>> C(new_rows, vector<int>(new_cols,0));
for(int i=0; i<new_rows; i++){
for(int j=0; j<new_cols;j++){
for(int k=0; k<L; k++){
C[j] += A[k]*B[k][j];
}
// C[j] = vector_mul(A, get_col(B, j));
}
}
return C;
}
对这样的矩阵乘的算法优化可分为两类:
- 基于算法分析的方法:根据矩阵乘计算特性,从数学角度优化,典型的算法包括 Strassen 算法和 Coppersmith–Winograd 算法。
- 基于软件优化的方法:根据计算机存储系统的层次结构特性,选择性地调整计算顺序,主要有循环拆分向量化、内存重排等。
2.4,编程语言相关
1,虚函数原理及作用?
2,C++ 构造函数和析构函数的初始化顺序。
3,智能指针描述下?
4,static 关键字作用?
5,STL 库的容器有哪些,讲下你最熟悉的一种及常用函数。
6,vector 和 数组的区别?vector 扩容在内存中是怎么操作的?
7,引用和指针的区别?
8,C++ 中定义 int a = 2,; int b = 2 和 Python 中定义 a = 2 b=3 有什么区别?
9,OpenCV 读取图像返回后的矩阵在内存中是怎么保存的?
10,内存对齐原理描述,为什么需要内存对齐?
三,数据结构与算法 coding
1,二分查找算法 + 可运行代码。
2,白板写链表反转。
3,包含 min 函数的栈 + 可运行代码(剑指 Offer 30. 包含min函数的栈)
4,最长回文子串 + 时间复杂度
5,TOP k 问题-最小的 K 个数 + 说下你知道哪几种解法,及各自时间复杂度
6,返回转置后的矩阵(逆时针)
7,冒泡排序及优化
8,求数组中比左边元素都大同时比右边元素都小的元素,返回这些元素的索引
9,手写快速排序
10,手写 softmax 算子 + 解释代码及衍生问题
12,无重复字符的最长子串 |
|