【秋招】计算机视觉面试题

计算机视觉相关:

1.如果提高深层神经网络的特征表示能力?

①增加隐藏层个数

②pooling操作

③使用非线性激活

  1. 如何防止过拟合?

    ①使用L1 L2正则化

    ②Dropout

    ③使用早停(现在基本不用),使深层神经网络早些停止以防止网络学习到的参数过多而造成过拟合。

    ④BN

    ④数据增广

    ⑤减少模型

  2. 样本不均衡会造成什么问题,如何解决?

    样本不均衡:不同类别的样本数量差异很大

    样本不均衡的影响:模型很难学习到小样本的特征,容易造成过拟合

    如何解决:采样(过采样小样本、欠采样多样本)、数据增广、改变正负样本的惩罚权重、、人工产生数据样本

  3. 均值滤波、高斯滤波、中值滤波、双边滤波

    均值滤波器和高斯滤波器属于线性滤波器。 非线性滤波器的原始数据与滤波结果是一种逻辑关系,即通过比较一定邻域内的灰度值大小来实现的 。

    从待处理图像首元素开始用模板对原始图像进行卷积。 均值滤波直观地理解就是用相邻元素灰度值的平均值代替该元素的灰度值,高斯滤波是用高斯核函数对图像进行卷积操作。

    应用场景:

​ 均值滤波: 均值模糊无法克服边缘像素信息丢失的缺陷 (缺点是图像会丢失边缘信息),不能保存细节

​ 高斯滤波 能够很好的抑制图像输入时随机引入的噪声 ,用于消除高斯噪声

​ 中值滤波:对椒盐噪声有很好的抑制, 常用于保护边缘信息

​ 双边滤波: 好处是可以做边缘保存(edge preserving), 但是由于保存了过多的高频信息,对于彩色图像里的高频噪声,双边滤波器不能够干净的滤掉,只能够对于低频信息进行较好的滤波。

  1. PCA降维

    PCA(Principal Component Analysis) 是一种常见的数据分析方式,常用于高维数据的降维,可用于提取数据的主要特征分量 。 在一维空间中我们可以用方差来表示数据的分散程度。而对于高维数据,我们用协方差进行约束,协方差可以表示两个变量的相关性。为了让两个变量尽可能表示更多的原始信息,我们希望它们之间不存在线性相关性,因为相关性意味着两个变量不是完全独立,必然存在重复表示的信息。

    PCA的步骤:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0FlaehlW-1653462129947)(C:\Users\sxj96\AppData\Roaming\Typora\typora-user-images\1634020707808.png)]

  2. BN的作用

    ①加快网络训练和收敛速度

    ②防止梯度消失或梯度爆炸

    ③防止过拟合

  3. 沿负梯度一定是最优方向

  4. SVM, SVM核函数, SVM引入核函数的本质是什么

  5. SIFT特征提取方法

  6. 数据增强方法

  7. 小样本训练深度神经网络,可以用什么方法提高性能

  8. 为什么要引入非线性激活

  9. CNN模型压缩方法

  10. CRF函数

  11. 冒泡排序

  12. CNN特点

  13. 判别式模型与生成式模型

  14. 概率论与数理统计

  15. 二分查找

  16. 两个栈实现一个队列

  17. 超大正整数类加法

  18. 最大子数组

  19. Triplet Loss

  20. Precission 与Recall

  21. 极大似然估计与最大后验估计的联系与区别

  22. Bayes optimal error

  23. Step可以作为激活函数吗

  24. 常见的激活函数都有哪些,各有哪些优缺点

  25. 感受野如何计算

  26. LSTM

  27. Adam optimalizer中使用weight decay是否相当于在Loss中加入L2

  28. SGD L2

  29. 贝叶斯分类器

  30. L1 L2损失函数

    L1 损失函数称为最小绝对误差,目标值与绝对值差值最小化。

    L2损失函数称为最小平方误差,是吧目标值与预测值之间的误差的平方最小化。

  31. C++多线程与多进程,进程如何开启和关闭

  32. Linux常见命令 vi

  33. C++ 中STL ,vector常见指令

    string vector set list map
    
    

    vector 就是动态数组,它也是在堆中分配内存,元素连续存放。它能够存放各种类型的对象。

    容器特性:

    顺序序列、动态数组、能够感知内存分配

    顺序序列:容器中的元素按照严格的线性顺序排序,可以通过元素在序列中的位置访问对应的元素

    动态数组:支持对序列中的任意元素进行快速直接访问,甚至可以通过指针进行该操作。

    基本函数实现:

    vector():创建一个空vector
    vector(int nSize):创建一个vector,元素个数为nSize
    void  push_back(const T& x):向向量尾部增加一个元素X
    
    
  34. Python 列表与字典常见操作

  35. 图像中常见的颜色空间

  36. python修饰器

  37. Python GIL

  38. Python 多线程 多进程

  39. 如何用数学方法判断线性可分与线性不可分

  40. 局部最优 怎么办

  41. mask注意力机制

  42. RNN LSTM GRU Transfromer

  43. Transformer 为什么加位置编码

  44. 光流法

  45. 图片特征提取法 SIFT

  46. KNN

  47. K-MEANS

  48. 朴素贝叶斯

  49. 决策树

  50. 优化器、激活函数

  51. BN和LN的区别

  52. 迭代和递归的区别

  53. 传统图像处理与深度学习的区别

  54. 卷积的作用

  55. 对卷积神经网络的了解程度

  56. 卷积神经网络与BP相比的优势

  57. C++ python 数组和链表的区别

  58. 学习率调节策略

  59. 动量的优点

  60. Adam的原理

  61. 卷积神经网络的卷积核为什么是正方形,为什么是奇数

  62. 如何理解卷积神经网络的感受野

  63. 为什么要进行图像预处理,图像白化的过程

  64. BN层的原理,为什么BN能加速收敛

  65. 卷积神经网络的特点

  66. SGD的缺点

  67. L1 L2 loss定义、优缺点、优缺点原因

  68. 逻辑回归与线性回归的区别

  69. L0-norm、L1-norm、L2-norm

  70. 增加决策树的深度可能导致随机森林过拟合

  71. C++ 虚函数、虚函数表

  72. 为什么要数据归一化

    归一化后有什么好处呢?原因在于神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度,这也正是为什么我们需要对数据都要做一个归一化预处理的原因。

    ​ 对于深度网络的训练是一个复杂的过程,只要网络的前面几层发生微小的改变,那么后面几层就会被累积放大下去。一旦网络某一层的输入数据的分布发生改变,那么这一层网络就需要去适应学习这个新的数据分布,所以如果训练过程中,训练数据的分布一直在发生变化,那么将会影响网络的训练速度。

  73. python数据类型
    不可变数据类型:字符串,整数,浮点,布尔,元组
    可变数据类型:列表 字典 集合

  74. 序列: 列表,字符串,元组,集合,字典
    有序序列:列表,字符串,元组(有序功能特点:索引 遍历 切片)
    无序序列:集合,字典

  75. 浅拷贝和深拷贝的区别

    深拷贝就是完全跟以前就没有任何关系了,原来的对象怎么改都不会影响当前对象

    浅拷贝,原对象的list元素改变的话会改变当前对象,如果当前对象中list元素改变了,也同样会影响原对象。

    在浅拷贝时,拷贝出来的新对象的地址和原对象是不一样的,但是新对象里面的可变元素(如列表)的地址和原对象里的可变元素的地址是相同的,也就是说浅拷贝它拷贝的是浅层次的数据结构(不可变元素),对象里的可变元素作为深层次的数据结构并没有被拷贝到新地址里面去,而是和原对象里的可变元素指向同一个地址,所以在新对象或原对象里对这个可变元素做修改时,两个对象是同时改变的,但是深拷贝不会这样,这个是浅拷贝相对于深拷贝最根本的区别

  76. python 字典删除键值对

    pop(“key”) 删除某一键值对

  77. python 如何合并字典

    dict(a, **b)

    dict.update(other_dict)

  78. python 多线程与多进程

    1.同一个进程中的线程共享同一内存空间,但是进程之间是独立的。
    2.同一个进程中的所有线程的数据是共享的(进程通讯),进程之间的数据是独立的。

    线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。一个线程是一个execution context(执行上下文),即一个cpu执行时所需要的一串指令。

    python中有两种方式实现线程:

    1. 实例化一个threading.Thread的对象,并传入一个初始化函数对象(initial function )作为线程执行的入口;

    2. 继承threading.Thread,并重写run函数;

  79. python init 与new的区别

    • __new__是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例对象,是个静态方法。
    • __init__是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值,通常用在初始化一个类实例的时候。是一个实例方法。

    new必须有返回值 init没有返回值

  80. python zip()

    zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

  81. python *

    1. 算数运算

    * 代表乘法

    ** 代表乘方

    *args 和 **kwargs 主要用于函数定义。

    你可以将不定数量的参数传递给一个函数。不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场景下使用这两个关键字。其实并不是必须写成 *args 和 **kwargs。 *(星号) 才是必须的. 你也可以写成 *ar 和 k 。而写成 *args 和kwargs 只是一个通俗的命名约定。

    python函数传递参数的方式有两种:

    位置参数(positional argument)
    关键词参数(keyword argument)
    *args 与 **kwargs 的区别,两者都是 python 中的可变参数:

    *args 表示任何多个无名参数,它本质是一个 tuple
    **kwargs 表示关键字参数,它本质上是一个 dict

  82. python range()函数作用

    可以创建一个整数列表

  83. python 生成器与迭代器

    生成器是通过函数的形式中调用 yield 或()的形式创建的。

    迭代器可以通过 iter() 内置函数创建。

    b、用法上:

    生成器在调用next()函数或for循环中,所有过程被执行,且返回值。

    迭代器在调用next()函数或for循环中,所有值被返回,没有其他过程或动作。

  84. 一句话求和1到100

    sum(range(1,101))

  85. python 内置函数都用过哪些

    os、time 、json 、sys 、random

    import random 
    
    print(random.random())#0,1之间时间生成的浮点数  float
    
    #随机生成传入参数范围内的数字 即 1,2,3
    print(random.randint(1, 3))
    
    #随机选择任意两个数字
    print(random.sample([1, '23', [4, 5]], 2))
    
    
    import sys
     
    #命令行参数List,第一个元素是程序本身路径
    print(sys.argv)
    #结果['D:/Pycharm Community/python内置函数/sysTest.py']
     
    #获取Python解释程序的版本信息
    print(sys.version)
    
    import os
    
    os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
    os.chdir("dirname")  改变当前脚本工作目录;相当于shell下cd
    os.curdir  返回当前目录: ('.')
    os.pardir  获取当前目录的父目录字符串名:('..')
    os.makedirs('dirname1/dirname2')    可生成多层递归目录
    os.removedirs('dirname1')    若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
    os.mkdir('dirname')    生成单级目录;相当于shell中mkdir dirname
    os.rmdir('dirname')    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
    os.listdir('dirname')    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
    os.remove()  删除一个文件
    os.rename("oldname","newname")  重命名文件/目录
    os.stat('path/filename')  获取文件/目录信息
    os.sep    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
    os.linesep    输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
    os.pathsep    输出用于分割文件路径的字符串 win下为;,Linux下为:
    os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
    os.system("bash command")  运行shell命令,直接显示
    os.environ  获取系统环境变量
    os.path.abspath(path)  返回path规范化的绝对路径
    os.path.split(path)  将path分割成目录和文件名二元组返回
    os.path.dirname(path)  返回path的目录。其实就是os.path.split(path)的第一个元素
    os.path.basename(path)  返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
    os.path.exists(path)  如果path存在,返回True;如果path不存在,返回False
    os.path.isabs(path)  如果path是绝对路径,返回True
    os.path.isfile(path)  如果path是一个存在的文件,返回True。否则返回False
    os.path.isdir(path)  如果path是一个存在的目录,则返回True。否则返回False
    os.path.join(path1[, path2[, ...]])  将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
    os.path.getatime(path)  返回path所指向的文件或者目录的最后存取时间
    os.path.getmtime(path)  返回path所指向的文件或者目录的最后修改时间
    
  86. os用过哪些功能 ,如何获取文件绝对地址,如何删除文件

    current_path = os.path.abspath(file)

    os.remove()

  87. time 如何格式化

  88. 多线程多进程

  89. linux常用指令

    cd ls shutdown

    cd /        切换到根目录
    cd /usr        切换到根目录下的usr目录
    cd ../        切换到上一级目录 或者  cd ..
    cd ~        切换到home目录
    cd -        切换到上次访问的目录
    
    ls                查看当前目录下的所有目录和文件
    ls -a            查看当前目录下的所有目录和文件(包括隐藏的文件)
    ls -l 或 ll       列表查看当前目录下的所有目录和文件(列表查看,显示更多信息)
    ls /dir            查看指定目录下的所有目录和文件   如:ls /usr
    
    ps -ef    查看所有正在运行的进程
    
    
  90. python生成器与迭代器

  91. python with 原理

  92. 常用数据结构有哪些

  93. 堆和栈的区别

  94. 多线程挂起进程也会挂起吗

  95. 多线程死锁

  96. python 常见数据类型,哪些可变,哪些不可变

  97. python 异常获取

  98. http了解吗

  99. 反转链表

  100. 快速排序

  101. GIT 拉取并且推代码(原理 命令)

  102. http状态码

    200("OK"):代表操作成功
    400:客户端
    500:服务器端方面的问题
    404("Not Found") 和410("Gone")
    当客户端所请求的URI不对应于任何资源时,发送此响应代码。404用于服务器端不知道客户端要请求哪个资源的情况;410用于服务器端知道客户端所请求的资源曾经存在,但现在已经不存在了的情况。
    405:客户端试图使用一个本资源不支持的HTTP方法
    
    
    

你可能感兴趣的:(python,计算机理论,计算机视觉,人工智能,机器学习)