图像处理需要学习啥知识_图像处理 学习知识 - CSDN
  • 计算机视觉分很多方向,个人比较熟悉的是图像方面的,包括:图像分类、目标检测、图像分割、视频处理等,这些小的方面每一个也学要很长的一段时间去学习. 入门这个东西很难定义,如果只是对一个方向看一下,了解...

    计算机视觉分很多方向,个人比较熟悉的是图像方面的,包括:图像分类、目标检测、图像分割、视频处理等,这些小的方面每一个也学要很长的一段时间去学习.

    入门这个东西很难定义,如果只是对一个方向看一下,了解一点东西,有一点谈资的话不算入门,我认为入门至少代表你对这个领域的某些东西进行过处理实践才可以,所以我比较喜欢的一种学习新知识的方式就是:先找一个综述的书随便翻一翻,对目录有个印象就行,然后针对自己喜欢的部分,去查资料,做实例,看论文,一段时间后,自然就会有自己的理解了.

    需要哪些数学编程工具等知识?

    数学知识的话,大概基础的就是概率论、数理统计、矩阵论

    编程基础的是python、matlab工具上,现在一般是用框架,我常用caffe,还有一些其他常用的框架tensorflow、pytorch、mxnet等入门的话,本科的数学知识基本就够了,然后开始看论文吧。

    基本现在搞计算机视觉(ComputerVision,CV)都是基于深度学习的。第一篇推荐alexnet,算是深度学习搞CV的开山之作,接着基本就是需要先把分类的看一看,现在的CV大多数任务都是基于分类任务的深度网络进行扩展的。
      人工智能、大数据、云计算和物联网的未来发展值得重视,均为前沿产业,有兴趣的朋友,可以查阅多智时代,在此为你推荐几篇优质好文:
    1.模式识别应用于哪些领域,模式识别技术的发展趋势
    http://www.duozhishidai.com/article-15389-1.html
    2.计算机视觉与图像处理、模式识别和机器学习,之间有什么关系?
    http://www.duozhishidai.com/article-4119-1.html
    3.语音的识别过程主要分哪几步,常用的识别方法是什么?
    http://www.duozhishidai.com/article-1739-1.html
    自然语言理解过程主要有哪些层次,各层次的功能是怎么样?
    http://www.duozhishidai.com/article-1726-1.html


    多智时代-人工智能大数据学习入门网站|人工智能、大数据、物联网云计算的学习交流网站

    多智时代-人工智能大数据学习入门网站|人工智能、大数据、云计算、物联网的学习服务的好平台

    展开全文
  • 图像处理岗位面试题搜罗汇总

    万次阅读 多人点赞 2018-06-21 15:11:46
    原文...图像处理基础知识 彩色图像、灰度图像、二...

    传统图像处理部分

    图像处理基础知识

    彩色图像、灰度图像、二值图像和索引图像区别?

    彩色图像:RGB图像。灰度图像:0-255像素值。二值图像:0和1,用于掩膜图像。

    索引图像:在灰度图像中,自定义调色板,自定义输出256种颜色值。

    常用的图像空间

    HSI、HSV、RGB、CMY、CMYK、HSL、HSB、Ycc、XYZ、Lab、YUV色彩空间(颜色模型)

    RGB颜色空间是算法处理中应用最多的颜色空间。

    HSI颜色空间,色调(Hue)、色饱和度(Saturation或Chroma)和亮度(Intensity或Brightness)

    YUV,分为三个分量,“Y”表示明亮度(Luminance或Luma),也就是灰度值;而“U”和“V” 表示的则是色度(Chrominance或Chroma),作用是描述影像色彩及饱和度,用于指定像素的颜色。YUV 4:4:4采样,每一个Y对应一组UV分量。YUV 4:2:2采样,每两个Y共用一组UV分量。 YUV 4:2:0采样,每四个Y共用一组UV分量。 紧缩格式(packed formats)平面格式(planar formats)。YYYYYYYYUVUV YYYYYYYYUUVV

    图像的像素数与分辨率有什么区别?

    像素数为图像实际组成的像素的个数,像素是没有固定宽度和高度的,是一个感光单元。

    分辨率的单位为 像素/英寸(1英寸(inch)=2.54厘米(cm)),这里指的不是面积,而是对角线的长度,即dpi、ppi。分辨率也称之为点密度,分辨率越高,看的越细腻。

    视频帧播放速度的单位

    PAL制式是——25fps,NTSC是——30fps。

    图像预处理

    叙述GABOR滤波器原理?

    使用一个三角函数(如正弦函数)与一个高斯函数叠加我们就得到了一个Gabor滤波器。Gabor滤波器可以抽取空间局部频度特征,是一种有效的纹理检测工具。

    附:图像的空域是指二维坐标系上的操作,频域指的是图像经过傅里叶变换后的频谱。在频率域中,高频分量表示图像中灰度变换比较快的那些地方,比如物体的边缘就是灰度的突然变化,所以物体边缘就是高频分量。而物体内部比较平坦的区域,灰度基本没有变化,对应的就是低频分量。比如低通滤波只让低频分量通过,往往就是使图像模糊,因为边缘信息被去除了。高频对应图像细节,低频对应图像大致轮廓。

    椒盐噪声用什么滤波处理比较有效?

    参考:中值滤波与椒盐噪声

    椒盐噪声:也称为脉冲噪声:

    在图像中,它是一种随机出现的白点或者黑点,可能是亮的区域有黑色像素或是在暗的区域有白色像素(或是两者皆有)。

    滤除椒盐噪声比较有效的方法是对信号进行中值滤波处理。

    插值

    最近邻插值

    双线性插值

    立方卷积插值

    二值图像连通域搜索

    matlab中连通区域标记函数bwlabel中的算法,一次遍历图像,并记下每一行(或列)中连续的团(run)和标记的等价对,然后通过等价对对原来的图像进行重新标记。

    1. 创建RUN(团)结构体,包含(纵坐标、横坐标开始、横坐标结束、标记号)
    2. 开始逐行扫描图像,寻找所有的团,将他们放到一个二维数组vector< vector<Stuct> >中,以下为每一行的操作。
      1. 当遇到一个255时,创建一个团的对象,标记纵坐标和横坐标的开始。
      2. 从开始点向右寻找,直到遇到0或者这行结束,则标记为这个团的横坐标结束。
      3. 将该行的RUN push到对应的位置。回到步骤2.1.
    3. 对众多的团进行分析,对团进行标记且得到等价对,创建一个vector< pair<int, int> >用于存放所有的等价对。
      1. 遍历所有相邻行。
      2. 若该行为第一行,则直接进行标记。
      3. 对于相邻行,遍历该行的所有RUN,对于每一个RUN,遍历上一行的所有RUN(超出范围即停止循环)。
        1. 若上一行中没有与该行RUN邻接,则创建新的标记。
        2. 若上一行只有一个与该RUN邻接,则沿用相邻RUN的标记。
        3. 若上一行有多个与该RUN邻接,则使用这多个RUN中最小的标记,并创建多个等价对。
    4. 消除等价对,可使用并查集,使得所有的团都拥有自己的祖先。
      1. 假设标记从0开始,到1000结束。标记对为类似的(0,10).(10,39)。
      2. 创建一个prev[1000]数组,初始化值为-1,记录该标记的上一级领导。初始prev[10]=0,prev[39]=10。初始化所有的等价对。
      3. 遍历所有的等价对,修改每一级的上一级领导为最上层领导。
    5. 修改每个团中的标记为最上层领导的标记。

    代码见github

    开源库cvBlob中使用的标记算法,它通过定位连通区域的内外轮廓来标记整个图像,这个算法的核心是轮廓的搜索算法

    TODO:轮廓跟踪算法

    并行计算

    Intel指令集中MMX,SSE,SSE2,SSE3和SSE4指的是什么?

    MMX(Multi Media eXtension,多媒体扩展指令集)是一些整数并行运算指令。

    SSE(Streaming SIMD Extensions,单指令多数据流扩展)是一系列浮点并行运算指令。

    SIMD,单指令多数据流,是指用一条指令执行多个计算,比如图像像素一般是BYTE占8位,而计算机中总线是64位,所以理论上可以同时进行8个像素的运算。

    并行计算有哪些实现方式?

    单指令多数据流SIMD、对称多处理机SMP、大规模并行处理机MPP、工作站机群COW、分布共享存储DSM多处理机。

    机器学习面试题链接

    机器学习部分

    特征算子

    常用边缘检测有哪些算子,各有什么特性和优缺点?

    1. Prewitt算子
      优点:一阶微分算子,平均滤波,对低噪声的图像有较好的检测效果。缺点:抗噪性差。
    2. Sobel算子Sobel算子
      优点:一阶微分算子,加权平均滤波,对低噪声的图像有较好的检测效果。缺点:抗噪性差。
    3. Roberts算子Roberts
      优点:一种利用局部差分算子寻找边缘的算子,定位比较精确。缺点:对噪声敏感,无法抑制噪声的影响。
    4. Laplacian算子
      优点:各向同性,二阶微分,精确定位边缘位置所在。缺点:无法感知边缘强度。只适用于无噪声图象。存在噪声情况下,使用Laplacian算子检测边缘之前需要先进行低通滤波。
    5. Laplacian of Gaussian(LoG)算子:先对图像做高斯滤波,再做Laplacian算子检测。
    6. Canny算子:一个具有滤波,增强,检测的多阶段的优化算子。先利用高斯平滑滤波器来平滑图像以除去噪声,采用一阶偏导的有限差分来计算梯度幅值和方向,然后再进行非极大值抑制。

    请描述以下任一概念:SIFT/SURF LDA/PCA

    SIFT/SURF为了实现不同图像中相同场景的匹配,主要包括三个步骤:
    1. 尺度空间的建立;
    2. 特征点的提取;
    3. 利用特征点周围邻域的信息生成特征描述子;
    4. 特征点匹配。

    之所以采用尺度空间,是为了应对尺度不变性。

    SIFT

    1. 生成高斯差分金字塔(DOG金字塔),尺度空间构建
      • 通过对原始图像进行尺度变换,获得图像多尺度下的尺度空间表示序列
      • 对这些序列进行尺度空间主轮廓的提取,并以该主轮廓作为一种特征向量,实现边缘、角点检测不同分辨率上的关键点提取等
      • 尺度空间构建的基础是DOG金字塔,DOG金字塔构建的基础是高斯金字塔
    2. 空间极值点检测(关键点的初步查探)
      • 为了寻找DOG函数的极值点,每一个像素点要和它所有的相邻点比较,看其是否比它的图像域和尺度空间域的相邻点大或者小
      • 在二维图像空间,中心点与它3*3邻域内的8个点做比较,在同一组内的尺度空间上,中心点和上下相邻的两层图像的2*9个点作比较,如此可以保证检测到的关键点在尺度空间和二维图像空间上都是局部极值点
    3. 稳定关键点的精确定位
      • DOG值对噪声和边缘比较敏感,所以在第2步的尺度空间中检测到的局部极值点还要经过进一步的筛选,去除不稳定和错误检测出的极值点,另一点就是在构建高斯金字塔过程中采用了下采样的图像,在下采样图像中提取的极值点对应在原始图像中的确切位置,也是要在本步骤中解决的问题。
    4. 稳定关键点方向信息分配
      • 稳定的极值点是在不同尺度空间下提取的,这保证了关键点的尺度不变性。为关键点分配方向信息所要解决的问题是使得关键点对图像角度和旋转具有不变性。方向的分配是通过求每个极值点的梯度来实现的。
      • 分配给关键点的方向并不直接是关键点的梯度方向,而是按照一种梯度方向直方图的方式给出的。
      • 具体的方法是:计算以关键点为中心的邻域内所有点的梯度方向,当然梯度方向一定是在0~360°范围内,对这些梯度方向归一化到36个方向内,每个方向代表了10°的范围。然后累计落到每个方向内的关键点个数,以此生成梯度方向直方图。
    5. 关键点描述
      • 对关键点的描述是后续实现匹配的关键步骤,描述其实就是一种以数学方式定义关键的过程。描述子不但包含关键点,也包括关键点周围对其有贡献的邻域点。
      • 描述的思路是:对关键点周围像素区域分块,计算快内梯度直方图,生成具有独特性的向量,这个向量是该区域图像信息的一种抽象表述。
      • 如下图,对于2*2块,每块的所有像素点的荼毒做高斯加权,每块最终取8个方向,即可以生成2*2*8维度的向量,以这2*2*8维向量作为中心关键点的数学描述。
      • David G.Lowed的实验结果表明:对每个关键点,采用4*4*8共128维向量的描述子进项关键点表征,综合效果最佳:
    6. 特征点匹配
      • 特征点的匹配是通过计算两组特征点的128维的关键点的欧式距离实现的。欧式距离越小,则相似度越高,当欧式距离小于设定的阈值时,可以判定为匹配成功。

    线性判别分析(LDA), 主成分分析(PCA)

    参考参考

    LDA和PCA最终的表现都是解一个矩阵特征值的问题,分类的目标是,使得类别内的点距离越近越好(集中),类别间的点越远越好。

    LDA的全称是Linear Discriminant Analysis(线性判别分析),是一种supervised learning。

    LDA的原理是,将带上标签的数据(点),通过投影的方法,投影到维度更低的空间中,使得投影后的点,会形成按类别区分,一簇一簇的情况,相同类别的点,将会在投影后的空间中更接近。要说明白LDA,首先得弄明白线性分类器(Linear Classifier):因为LDA是一种线性分类器。对于K-分类的一个分类问题,会有K个线性函数 y = wx+b.

    当满足条件:对于所有的j,都有Yk > Yj,的时候,我们就说x属于类别k。对于每一个分类,都有一个公式去算一个分值,在所有的公式得到的分值中,找一个最大的,就是所属的分类了。

    y = wx+b实际上就是一种投影,是将一个高维的点投影到一条高维的直线上,LDA最求的目标是,给出一个标注了类别的数据集,投影到了一条直线之后,能够使得点尽量的按类别区分开

    主成分分析(PCA)与LDA有着非常近似的意思,LDA的输入数据是带标签的,而PCA的输入数据是不带标签的,所以PCA是一种unsupervised learning。

    PCA更像是一个预处理的方法,它可以将原本的数据降低维度,而使得降低了维度的数据之间的方差最大

    它的目标是通过某种线性投影,将高维的数据映射到低维的空间中表示,并期望在所投影的维度上数据的方差最大,以此使用较少的数据维度,同时保留住较多的原数据点的特性。

    通俗的理解,如果把所有的点都映射到一起,那么几乎所有的信息(如点和点之间的距离关系)都丢失了,而如果映射后方差尽可能的大,那么数据点则会分散开来,以此来保留更多的信息。可以证明,PCA是丢失原始数据信息最少的一种线性降维方式。(实际上就是最接近原始数据,但是PCA并不试图去探索数据内在结构)

    Linear Discriminant Analysis (也有叫做Fisher Linear Discriminant)是一种有监督的(supervised)线性降维算法。与PCA保持数据信息不同,LDA是为了使得降维后的数据点尽可能地容易被区分!

    特征点匹配

    如下图所示,请以准确快速实现配准为目标,设计算法,让两图中对应的特征点(至少一部分特征点)配准(即精准地地找出对应点之间对应的坐标关系值)。

    参考

    之前是用角点检测,后来采用SIFT算子,Sift算法的实质是在不同的尺度空间上查找关键点(特征点),计算关键点的大小、方向、尺度信息,利用这些信息组成关键点对特征点进行描述的问题。

    1. 生成高斯差分金字塔(DOG金字塔),尺度空间构建
    2. 空间极值点检测(关键点的初步查探)
    3. 稳定关键点的精确定位
    4. 稳定关键点方向信息分配
    5. 关键点描述(128维向量算子)
    6. 特征点匹配(欧氏距离)

    极值点邻域筛选

    对于一般应用图像中,景物可能存在任意特征(如折线,弧形、亮度极值、色调等),请设计合适的算法,找到图像中可以作为明显特征点的灰度的极值点所在的邻域。以准确快速实现极值点邻域筛选为目标,设计算法。用流程图表达)。

    也使用SIFT特征

    特征离散化的好处

    1. 增减特征较为方便,易于迭代。
    2. 离散化后运算速度快,存储方便。
    3. 对脏数据的鲁棒性较强。
    4. 离散化一定程度简化了模型,可以防止过拟合。

    分类算法

    常用的分类器有哪些,并简述其原理?

    线性分类器:Logistic回归 y=sigmoid(wx+b)

    传统方式:特征描述和检测

    KNN,K最近邻,判断图像与各个类别的距离

    SVM,选定特征, SVM算法输出一个最优化的分隔超平面(分类面)。本科课题:SIFT、k-means、Bag of Words、SVM。映射函数可能为多项式。

    BPNN,全连接网络,计算量巨大

    CNN,卷积神经网络

    迁移学习,利用别人训练好的参数,自定义网络

    LR与线性回归的对比

    LR的优化函数为似然函数,经典线性回归的优化函数为最小二乘。

    LR将预测范围缩小到了[0,1],而经典线性回归的预测范围为整个实数。

    LR与SVM的对比

    相同:都是分类模型。都处理二分类。都可以添加正则项。

    区别:LR是参数模型,SVM是非参数模型;LR采用logistical loss,SVM采用hinge loss;SVM之所以称之为支持向量,是因为SVM只考虑了与分类最相关的少数点来学习分类器。

    KNN的K是如何选取的

    K值较小意味着模型会越复杂,容易发生过拟合。K值过大会使模型过于简单,使得预测发生错误。实际使用中K一般取较小的数字。

    什么是SVM?

    参考http://blog.csdn.net/v_july_v/ … 24837

    是一个二分分类器,找寻数据之间间隔最大的线性分类器。其学习策略是使分隔间隔最大化。对于线性可分的数据,SVM构造一个分隔面。对于线性不可分的数据,SVM采用核函数将低维空间的问题映射到了高维空间,从而线性可分。常用核函数有多项式核函数、高斯核函数、线性核函数。为了应对维度爆炸的情形,核函数事先在低维空间上进行计算,再将分类的实际效果展现在高维上。

    SVM的损失函数叫做Hinge(hɪndʒ) Loss,形式为max(0,1-y*a),y为真实值+-1,a为预测值,介于-1到1之间。

    简述BP神经网络

    BP(back propagation)神经网络,输入X,通过隐藏节点的非线性变换后,输出信号Y,通过误差分析,来调整隐藏节点的W和b。

    AdaBoost的基本原理?

    AdaBoost是一个广泛使用的BOOSTING算法,其中训练集上依次训练弱分类器,每次下一个弱分类器是在训练样本的不同权重集合上训练。权重是由每个样本分类的难度确定的。分类的难度是通过分类器的输出估计的。

    参考资料

    //TODO 详细学习

    聚类算法

    简述你熟悉的聚类算法并说明其优缺点

    K均值聚类(K-meansClustering)

    将输入数据分到K个类中。K均值是通过循环更新类中心的初始估计值来实现的。优势是实现起来很简单,是并行化的。主要缺陷是,类的数目需要提前确定。

    主要分三步:
    1. 随机选取k个聚类质心点(cluster centroids)
    2. 对于每一个样例i,计算其应该属于的类
    3. 对于每一个类j,重新计算该类的质心
    1. 重复下面过程直到收敛

    层次聚类

    层次聚类(或者叫做凝聚聚类)是另一个简单但是强大的聚类算法。其思想是基于成对距离建立一棵相似度树。该算法首先分组成为两个最近的对象(基于特征向量之间的距离),并且在一棵有着两个对象作为孩子的树中创建一个平均结点。然后在余下的结点中找到一个最近的pair,并且也包含任何平均节点,等等。在每一个结点,两个孩子之间的距离也会被存储。簇然后可以通过遍历这棵树并在距离比某个阈值小以至于决定聚类的大小的结点处停止来被提取出来。

    层次聚类有几个优势。比如,树结构可以被用来可视化关系,并且显示簇是如何关联起来的。一个好的特征向量将得到树中好的分离。另一个优势是树可以在不同的簇阈值中被重用,而不需要重新计算树。缺点是需要选择一个阈值如果实际的簇需要的话

    谱聚类

    对于n个元素的相似度矩阵(或者叫affinity matrix, 有时也叫距离矩阵)是一个有着成对相似度分数的n*n矩阵。谱聚类的这个名称是从相似度矩阵构造的矩阵的谱的使用得来。这个矩阵的特征向量被用来降维,然后再聚类。

    谱聚类方法的其中一个优势是唯一的输入就是这个矩阵,并且可以被你可以想到的任何相似度度量构造出来。像K均值和层次聚类这样的方法计算特征向量的平均值,这个限制了特征(或者是描述符)对向量(为了能够计算平均值)。有了谱方法,不再需要任何类型的特征向量,只有“距离”或者“相似度”。

    Mean Shift 聚类算法

    1. 在未被标记的数据点中随机选择一个点作为中心center;
    2. 找出离center距离在bandwidth之内的所有点,记做集合M,认为这些点属于簇c。同时,把这些求内点属于这个类的概率加1,这个参数将用于最后步骤的分类
    3. 以center为中心点,计算从center开始到集合M中每个元素的向量,将这些向量相加,得到向量shift。
    4. center = center+shift。即center沿着shift的方向移动,移动距离是||shift||。
    5. 重复步骤2、3、4,直到shift的大小很小(就是迭代到收敛),记住此时的center。注意,这个迭代过程中遇到的点都应该归类到簇c。
    6. 如果收敛时当前簇c的center与其它已经存在的簇c2中心的距离小于阈值,那么把c2和c合并。否则,把c作为新的聚类,增加1类。
    7. 重复1、2、3、4、5直到所有的点都被标记访问。
    8. 分类:根据每个类,对每个点的访问频率,取访问频率最大的那个类,作为当前点集的所属类。

    简单的说,mean shift就是沿着密度上升的方向寻找同属一个簇的数据点。

    欧式距离和曼哈顿距离的区别

    欧式距离为最常见的2点之间的距离,为2点之间的直线距离。

    曼哈顿距离又称为L1距离或者城市区块距离,是两个点的1范数距离。

    图像分割

    Graph-cut的基本原理和应用?

    Graph cuts是一种十分有用和流行的能量优化算法,在计算机视觉领域普遍应用于前背景分割(Image segmentation)、立体视觉(stereo vision)、抠图(Image matting)等。

    利用图,将目标和背景进行分割。

    图像融合,镶嵌

    已知两幅拼接好的图像,两幅图像在几何关系配准之后,但两图之间存在明显灰度差别跳变,请设计一个算法对图像进行处理,让两幅图之间的灰度看不出跳变,形成自然过渡。(可以不考虑两图之间的黑图部分)。

    影像融合是指高分辨率灰度图像和低分辨率彩色图像融合得到具有高分辨率的彩色图像。该算法称之为图像镶嵌。简单的做法可以是寻找两幅影像的镶嵌线,镶嵌线是指两幅影像公共区域区别最小的一条线,可以利用相关系数法判断得到,然后根据镶嵌线上两幅影像的灰度差异对右影像进行反差调整,最后拼接。

    其他模型

    Random Forest的随机性表现在哪里。

    Bagging方法是ensemble methods中获得用于训练base estimator的数据的重要一环。 正如其名,Bagging方法就是将所有training data放进一个黑色的bag中,黑色意味着我们看不到里面的数据的详细情况,只知道里面有我们的数据集。然后从这个bag中随机抽一部分数据出来用于训练一个base estimator。抽到的数据用完之后我们有两种选择,放回或不放回。

    我们可以看到从根节点开始往下会有分支,最终会走向叶子节点,得到分类结果。每一个非叶子节点都是一个特征,上图中共有三维特征。但是决策树的一个劣势就是容易过拟合,下面我们要结合上文提到的bagging技术来中和一下。

    img

    bagging + decision trees,我们得到了随机森林。将决策树作为base estimator,然后采用bagging技术训练一大堆小决策树,最后将这些小决策树组合起来,这样就得到了一片森林(随机森林)。

    (X[1],Y[1])….(X[n],Y[n])是数据集,我们要训练T棵决策树g[1]….g[t]…g[T]。 每次从数据中有放回地随机抽取size-N’的子数据集D[t]用于训练第t棵决策树g[t]。

    随机森林的随机性体现在每颗树的训练样本是随机的,树中每个节点的分裂属性集合也是随机选择确定的。有了这2个随机的保证,随机森林就不会产生过拟合的现象了。

    GMM的基本原理和应用

    高斯混合模型(Gaussian Mixture Model, GMM)将一个事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型。

    高斯混合模型(GMM,Gaussian mixture model)是建模最为成功的方法之一,同时GMM可以用在监控视频索引与检索。

    用于动目标检测中的背景建模。

    • 混合高斯模型使用K(++基本为3到5个++) 个高斯模型来表征图像中各个像素点的特征。
    • 在新一帧图像获得后更新混合高斯模型,用当前图像中的每个像素点与混合高斯模型匹配,如果成功则判定该点为背景点, 否则为前景点。
    • 通观整个高斯模型,他主要是有++方差++和++均值++两个参数决定,,对均值和方差的学习,采取不同的学习机制,将直接影响到模型的稳定性、精确性和收敛性。
    • 由于我们是对运动目标的背景提取建模,因此需要对高斯模型中方差和均值两个参数实时更新。
    • 为提高模型的学习能力,改进方法对均值和方差的更新采用不同的学习率
    • 为提高在繁忙的场景下,大而慢的运动目标的检测效果,引入权值均值的概念,建立背景图像并实时更新,然后结合权值、权值均值和背景图像对像素点进行前景和背景的分类。

    其他理论

    监督学习和非监督学习。

    • 监督学习:通过已有的一部分输入数据与输出数据之间的对应关系,生成一个函数,将输入映射到合适的输出,例如分类。
    • 非监督学习:直接对输入数据集进行建模,例如聚类。
    • 半监督学习:综合利用有类标的数据和没有类标的数据,来生成合适的分类函数。

    目前最广泛被使用的分类器有人工神经网络、支持向量机、最近邻居法、高斯混合模型、朴素贝叶斯方法、决策树和径向基函数分类。

    无监督学习里典型的例子就是聚类了。聚类的目的在于把相似的东西聚在一起,而我们并不关心这一类是什么。因此,一个聚类算法通常只需要知道如何计算相似度就可以开始工作了。

    过拟合的解决方法

    减小模型复杂度、加大数据、batch normalization、dropout、正则化、early stopping。

    谈谈判别式模型和生成式模型?

    常见的判别模型有:K近邻、SVM、决策树、感知机、线性判别分析(LDA)、线性回归、传统的神经网络、逻辑斯蒂回归、boosting、条件随机场。通过决策函数来进行判别。

    常见的生成模型有:朴素贝叶斯、隐马尔可夫模型、高斯混合模型、文档主题生成模型(LDA)、限制玻尔兹曼机。通过联合概率密度分布函数来进行预测。

    L1和L2的区别

    • L1范数为向量中各个元素的绝对值之和,符合拉普拉斯分布,可以使权值稀疏。
    • L2范数为向量中各个元素的平方和的1/2次方,符合高斯分布,可以防止过拟合。
    • Lp范数为向量中各个元素的p次方和的1/p次方。

    归一化的好处

    归一化加快了梯度下降求解最优解的速度;归一化还可能会提高精度。

    归一化的种类

    • 线性归一化。利用max和min进行归一化,如果max和min不稳定,则常用经验值来替代max和min。
    • 标准差归一化。利用所有样本的均值和方差将样本归一化为正态分布。
    • 非线性归一化。比如指数、对数、三角函数等。

    归一化和标准化的区别

    标准化是依照特征矩阵的列处理数据,其通过求z-score的方法,将样本的特征值转换到同一量纲下。归一化是依照特征矩阵的行处理数据,其目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准,也就是说都转化为“单位向量”。

    对于深度网络而言,归一化的目的是方便比较,可以加快网络的收敛速度;标准化是将数据利用z-score(均值、方差)的方法转化为符合特定分布的数据,方便进行下一步处理,不为比较。

    熵是指样本的随机程度。样本越无序,熵越大, 信息越多。

    完成机器学习项目流程

    1. 抽象成数学问题。明确我们可以获得什么样的数据,这个问题是回归还是分类。
    2. 获取数据。增加数据的代表性,防止因数据引起的过拟合。
    3. 特征预处理和特征选择。进行数据清洗,包括归一化、离散化等操作。结合数据和业务的特点来确定需要选取的特征算子。
    4. 训练模型和调优。选择一个模型进行训练,并对超参数进行调节。
    5. 模型诊断。分析模型是否过拟合或者欠拟合,然后进行相应的操作。同时可以进行误差分析,针对不同的问题来优化模型。
    6. 模型融合。将预处理和预测进行统一。
    7. 上线运行。

    深度学习部分

    潮流

    图像检测和分割,增强学习,生成对抗网络,预测学习

    基础理论

    SGD 中 S(stochastic)代表什么

    Stochastic Gradient Descent 随机梯度下降。GD即Full-Batch,SGD即为Mini-Batch。随机性表现在训练数据的shuffle。

    Softmax Loss推一下

    Sigmoid、Tanh、ReLU比较

    Rectified Linear Unit, ReLU

    ReLU比Sigmoid、Tanh好的原因

    1. 指数函数运算量大。ReLU节省运算量。
    2. Sigmoid容易引发梯度消失问题,因为Sigmoid函数在两端的导数趋近于0.
    3. ReLU使得一部分神经元死亡,这样可以使得网络变得比较稀疏,缓解了过拟合的发生。

    引入非线性激活函数的原因?

    若使用线性激活函数,则无论神经网络有多少层,输出都是输入的线性组合。

    好的激活函数有以下特点:

    1. 非线性:即导数不是常数。
    2. 几乎处处可微:可微性保证了在优化中梯度的可计算性。
    3. 计算简单。
    4. 非饱和性(saturation):饱和指的是在某些区间梯度接近于零(即梯度消失),使得参数无法继续更新的问题。
    5. 单调性(monotonic):即导数符号不变。
    6. 输出范围有限:有限的输出范围使得网络对于一些比较大的输入也会比较稳定
    7. 接近恒等变换(identity):即约等于x。这样的好处是使得输出的幅值不会随着深度的增加而发生显著的增加
    8. 参数少:大部分激活函数都是没有参数的。
    9. 归一化(normalization):这个是最近才出来的概念,对应的激活函数是SELU。类似于Batch Normalization。

    什么造成了梯度消失和梯度膨胀?

    深度网络的链式连乘法则,使得反向传播时到达前几层时,权值更新值非常小或非常大。

    可以通过ReLU解决一部分。

    各大指标

    先是混淆矩阵,这是基础。

    混淆矩阵

    包含四部分的信息:
    1. True negative(TN),称为真阴率,表明实际是负样本预测成负样本的样本数
    2. False positive(FP),称为假阳率,表明实际是负样本预测成正样本的样本数
    3. False negative(FN),称为假阴率,表明实际是正样本预测成负样本的样本数
    4. True positive(TP),称为真阳率,表明实际是正样本预测成正样本的样本数

    前面有的表示预测正确。

    ROC曲线

    二分类标签的输出概率需要定义一个阈值p,p值的选取反映了分类器的分类性能。ROC曲线的横轴为FP(将真实负样本预测为了正样本,越低越好),纵轴为TP(将真实正样本预测为正样本,越高越好)

    ROC

    • (0,0):假阳率和真阳率都为0,即分类器全部预测成负样本
    • (0,1):假阳率为0,真阳率为1,全部完美预测正确,happy
    • (1,0):假阳率为1,真阳率为0,全部完美预测错误,悲剧
    • (1,1):假阳率和真阳率都为1,即分类器全部预测成正样本
    • TPR=FPR,斜对角线,预测为正样本的结果一半是对的,一半是错的,随机分类

    则,若ROC曲线处于对角线之下,则分类性能差于随机分类器。希望该曲线向左上角凸。

    AUC指标

    AUC(Area under the ROC curve),适用于二元分类问题,AUC实际上就是ROC曲线下的面积。AUC直观地反映了ROC曲线表达的分类能力。

    • AUC = 1,代表完美分类器
    • 0.5 < AUC < 1,优于随机分类器
    • 0 < AUC < 0.5,差于随机分类器

    求解步骤:

    1. 获得样本的输出概率和标签值。
    2. 对于不同的从高到低的阈值,计算不同的TP和FP。
    3. 绘制ROC曲线,计算面积。

    AUC含义:从所有真实的正样本中取一个数据,判断这个样本是正样本的概率是p1,从所有真实的负样本中取一个数据,判断这个样本是正样本的概率是p2。对于分类器来说p1越大越好,p2越小越好。则p1大于p2的概率称之为AUC。

    mAP

    计算步骤,参考

    1. 得到所有测试样本的id、输出概率和真实标签值。
    2. 对输出概率进行排序。
    3. 假设有M个recall值,分别计算不同recall下的准确率。
    4. 取M个准确率的平均值。

    AP(average precision),

    卷积神经网络

    图像预处理手段

    卷积和相关

    相关和卷积的机理相似,但卷积滤波器首先要旋转180度。

    卷积算法的时间复杂度

    因为在图像的每个位置都要计算一遍卷积核,所以图像像素数为M,卷积核大小为N,则卷积的时间复杂度为O(M*N)。

    池化层的作用

    • 保留主要特征的同时进行降维和减少计算量,防止过拟合,提高模型泛化能力。
    • 增加一定的不变性,在池化窗口内。包括平移、旋转、尺度不变性。

    CNN特性

    CNN的四个特点:局部连接、权值共享、池化操作、多层次结构。

    局部连接使网络可以提取数据的局部特征;权值共享降低了网络的训练难度,一个Filter只提取一个特征;池化操作与多层次结构一起,实现了数据的降维,将低层次的局部特征组合成为较高层次的特征,从而对整个图片进行表示。

    为什么很多做人脸的Paper会最后加入一个Local Connected Conv?

    人脸在不同的区域存在不同的特征(眼睛/鼻子/嘴的分布位置相对固定),当不存在全局的局部特征分布时,Local-Conv更适合特征的提取。

    循环神经网络

    LSTM为何比RNN好

    LSTM可以防止梯度消失或者爆炸

    其他网络

    生成对抗网络

    简称GAN。该网络包含2个部分,一个称之为生成器generator,主要作用是生成图片,并且尽量使得其看上去是来自于训练样本的。另一方是discriminator,其目标是判断输入图片是否属于真实训练样本。

    TensorFlow

    如何理解TensorFlow的计算图?

    TensorFlow分为二部分,一部分是构造部分,用来构造网络;一部分是执行部分,用来执行网络中的计算。

    图像相关开放性知识

    怎样在一张街拍图像中识别明星的衣着服饰信息?

    我们需要把服装与背景、人物、建筑等等元素区别开来,确定是否有衣服以及衣服在什么位置。接下来需要对衣服进行分析,提取出服装的属性、特征等等。最后再根据这些特征,在庞大的数据库里搜索同款或者类似的服装图片。

    上衣纯色,裙子花色,怎样做区分?

    方差判断,梯度变化。

    怎样判断一张广告图片中是否有文字信息?是否用到OCR技术?怎样应用?

    场景文字检测与识别,先用CNN等对文字进行定位,然后再使用LSTM、OCR进行文字识别。

    给一张二值化图片(包含一个正方形),怎样识别图片中的正方形?如果图片污损严重,怎样识别并恢复?

    首先检测轮廓,然后对轮廓进行分析(角点)。

    如果图像污损严重,如何识别?

    简述图像识别在移动互联网中的应用

    人脸识别、识别各类东西、检索各类图像。

    图像处理领域相关顶级论文

    • Image and Vision Computing (IVC)
    • Pattern Recognition (PR)
    • ICCV: IEEE International Conference on Computer Vision
    • CVPR: IEEE Conf on Comp Vision and Pattern Recognition
    • NIPS: Neural Information Processing Systems

    数学部分

    公式

    贝叶斯全概率公式题

    全概率公式

    对任一事件A,若有互不相容的事件Bi(i=1,2,...,n),满足P(Bi)>0,i=1nP(Bi)=1(i=1,2,...,n)i=1nBiA,则事件A的概率可用下式计算:

    P(A)=i=1nP(Bi)P(A|Bi)

    img

    此概率称之为全概率公式。

    Bayes公式

    利用乘法公式与全概率公式可导出Bayes公式

    对任一事件A,若有互不相容的事件Bi(i=1,2,,n),满足P(Bi)>0,i=1nP(Bi)=1(i=1,2,...,n)i=1nBiA,(跟上个公式条件相同)则

    P(Bi|A)=P(Bi)P(A|Bi)i=1nP(Bi)P(A|Bi)(i=1,2,,n)

    最小二乘拟合的公式推导和代码实现。

    最小二乘法通常用于 曲线拟合 (least squares fitting) 。

    推导过程

    核心思想是最小化损失函数:距离差值的平方((diR)2),若想公式可导,则可以计算平方差的平方(di2R2)2

    C/C++部分

    基本概念

    关键字static的作用是什么?

    1. 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。
    2. 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数,它是一个本地的全局变量。
    3. 在模块内,一个被声明为静态的函数只可被这一模块的它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

    简述C,C++程序编译的内存分配情况?

    C,C++中内存分配方式可以分为三种:

    1. 从静态存储区域分配:内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在。速度快,不容易出错,因有系统自行管理。它主要存放静态数据、全局数据和常量。会默认初始化,其他两个不会自动初始化。
    2. 在栈上分配:在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。
    3. 从堆上分配:即运态内存分配。程序在运行时候用malloc或new申请任意大小的内存,程序员自己负责在何进用free 和delete释放内存。

    一个C、C++程序编译时内存分为5大存储区:堆区、栈区、全局区、文字常量区和程序代码区。

    new 和 malloc的区别

    1. malloc/free是C的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。
    2. 当使用一些非内置数据类型的对象时,maloc/free不能自动执行构造函数和析构函数。这是因为malloc/free是库函数,不在编译器控制下。

    图的遍历

    深度搜索DFS

    递归写法

    1. 定义一个visited数组。
    2. 访问当前节点,输出该节点。
    3. 循环遍历该节点的相邻的,未被访问过的节点。
      1. 递归第二步。

    非递归写法

    1. 定义一个栈和一个visited数组。
    2. 将初始节点入栈。开始循环,直道栈空。循环如下:

    广度搜索BFS

    设置队列

    1. 定义一个队列Queue和visited数组。
    2. 将开头节点入队。
    3. 开始循环
      1. 出队,访问该节点
      2. 遍历该节点的相邻的未被访问过的节点,入队

    hash 冲突及解决办法

    键字值不同的元素可能会映象到哈希表的同一地址上就会发生哈希冲突。解决办法:

    1. 开放定址法。按照一定的方法进行顺延。
    2. 再哈希法。同时构造多个不同的哈希函数。
    3. 链地址法。数组后的每个元素后添加单链表。

    红黑树的特征

    具有二叉查找树的所有特征。二叉查找树查找的效率最坏为O(n),红黑树通过颜色着色的方法将最坏降低到平均水平。

    1. 每个结点要么是红的要么是黑的。
    2. 根节点是黑的。
    3. 每个叶结点(树尾端的NIL指针或者NULL结点)都是黑的。
    4. 如果一个节点是红色,他的两个孩子都是黑色。
    5. 对于任意结点而言,其到叶结点树尾端NIL指针的每条路径都包含相同数目的黑结点。

    是红黑树的这5条性质,使一棵n个结点的红黑树始终保持了logn的高度,从而也就解释了上面所说的“红黑树的查找、插入、删除的时间复杂度最坏为O(log n)”

    其他编程

    嵌入式系统总是用户对变量或寄存器进行位操作。给定一个整型变量a,写两段代码,第一个设置a的bit3,第二消除a的 bit 3。在以上两个操作中,要保持其它位不变.

    #include <iostream>
    #include <bitset>
    using namespace std;
    
    #define BIT3 (0x1<<3)
    void set_bit3(unsigned &a)
    {
        a |= BIT3;
    }
    void clear_bits(unsigned &a)
    {
        a &= ~BIT3;
    }
    
    int main()
    {
        unsigned a = UINT_MAX;
        clear_bits(a);
        cout << (bitset<32>)a << endl;
        set_bit3(a);
        cout << (bitset<32>)a << endl;
        return 0;
    }

    行列递增矩阵的查找

    解法一、分治法

    因为矩阵的行和列都是递增的,所以整个矩阵的对角线上的数字也是递增的,故我们可以在对角线上进行二分查找,如果要找的数是6介于对角线上相邻的两个数4、10,可以排除掉左上和右下的两个矩形,而在左下和右上的两个矩形继续递归查找

    解法二、定位法

    首先直接定位到最右上角的元素,比要找的数大就往左走,比要找数的小就往下走,直到找到要找的数字为止,走不动,说明这个数不存在。这个方法的时间复杂度O(m+n)。代码如下:

    #include <iostream>
    #include <vector>
    using namespace std;
    
    bool YoungMatrix(vector< vector<int> > mat, int target){
        int y = 0, x = mat[y].size() - 1;
        int var = mat[y][x];
        while (true) {
            if (var == target){
                printf("Mat[%d][%d]=%d\n", y, x, target);
                return true;
            }
            else if (var < target && y < mat.size() - 1){
                var = mat[++y][x];
            }
            else if (var > target && x > 0){
                var = mat[y][--x];
            }
            else{
                return false;
            }
        }
    }
    
    int main(){
        vector<vector<int> > matrix(20);
        for (int i = 0; i < 20; i++){
            for (int j = 0; j < 20; j++) {
                matrix[i].push_back(i+j);
                cout << matrix[i][j] << " ";
            }
            cout << endl;
        }
        cout << YoungMatrix(matrix, 38) << endl;
        return 0;
    }

    从1到500的500个数,第一次删除奇数位上的所有数,第二次删除剩下来的奇数位,以此类推,最后剩下的唯一一位数是什么?

    就是当1~n,2^i

    给出了一个n*n的矩形,编程求从左上角到右下角的路径数(n > =2),限制只能向右或向下移动,不能回退。例如当n=2时,有6条路径。

    从左上角到右下角总共要走2n步,其中横向要走n步,所以总共就是C2nn次。

    给出一棵二叉树的前序和中序遍历,输出后续遍历的结果。

    已知一棵二叉树前序遍历和中序遍历分别为ABDEGCFH和DBGEACHF,则该二叉树的后序遍历为多少?

    #include <iostream>
    #include <string>
    using namespace std;
    
    string Subsequent(string pre, string mid) {
        if (pre.size() != mid.size() || pre.empty()) return "";
        char root = pre[0];
        int rootIndex = mid.find(root);
        string leftPre = pre.substr(1, rootIndex);
        string leftMid = mid.substr(0, rootIndex);
        string rightPre = pre.substr(rootIndex + 1);
        string rightMid = mid.substr(rootIndex + 1);
    
        string res;
        res += Subsequent(leftPre, leftMid);
        res += Subsequent(rightPre, rightMid);
        res += root;
        return res;
    }
    
    int main(){
        string pre = "ABDEGCFH";
        string mid = "DBGEACHF";
        cout << Subsequent(pre, mid) << endl;
        return 0;
    }

    自定义实现字符串转为整数的算法,例如把“123456”转成整数123456.(输入中可能存在符号,和数字)

    代码见github

    字符串最长公共子序列

    动态规划推导式

    img

    代码见github

    字符串最长公共子串

    与上文区别是不等时的处理方式,和最后是整个矩阵中寻找最大值。

    代码见github

    请实现一个函数:最长顺子。输入很多个整数(1<=数值<=13),返回其中可能组成的最长的一个顺子(顺子中数的个数代表顺的长度); 其中数字1也可以代表14;

    直方图

    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;
    
    vector<int> LongestShunZi(vector<int> input) {
        // 统计直方图
        vector<int> hist;
        hist.resize(15);
        for (int i = 0; i < input.size(); i++)
            if (input[i] > 0 && input[i] < 15)
                hist[input[i]] ++;
        hist[14] = hist[1];
        //最大牌数
        int maxCount = 0;
        for (int i = 1; i < 15; i++)
            if (hist[i] > maxCount)
                maxCount = hist[i];
        //求结果
        int resLen = 0;
        int resCount = 0;
        int resEnd = 0;
        for (int i = 1; i <= maxCount; i++)
        {
            int len = 0;
            int longestLen = 0;
            int longestEnd = 1;
            for (int j = 1; j < 15; j++) {
                if (hist[j] >= i) {
                    len++;
                    if (len > longestLen) {
                        longestLen = len;
                        longestEnd = j;
                    }
                }
                else {
                    len = 0;
                }
            }
            if (longestLen == 14 && 2 * i > hist[1]) longestLen--;
            if (longestLen * i > resLen * resCount) {
                resLen = longestLen;
                resCount = i;
                resEnd = longestEnd;
            }
        }
    
        vector<int> res;
        for (int i = resEnd - resLen + 1; i <= resEnd; i++)
            for (int j = 0; j < resCount; j++)
                res.push_back(i);
        return res;
    }
    
    int main() {
        int arr[] = { 1, 5, 2, 3, 4, 4, 5, 9, 6, 7, 2, 3, 3, 4 };
        vector<int> v(arr, arr+sizeof(arr)/sizeof(int));
        vector<int> res = LongestShunZi(v);
        for (int i = 0; i < res.size(); i++) cout << res[i] << " ";
        cout << endl;
        return 0;
    }

    对一批编号为1-100,全部开关朝上(开)的亮灯进行如下操作

    对一批编号为1-100,全部开关朝上(开)的亮灯进行如下操作:凡是编号为1的倍数的灯反方向拨一次开关;凡是编号为2的倍数的灯反方向又拨一次开关;编号为3的倍数的灯反方向又拨一次开关……凡是编号为100的倍数的灯反方向拨一次开关。编写程序,模拟此过程,最后打印出所熄灭灯的编号。

    #include <iostream>
    using namespace std;
    
    int main() {
        bool arr[101];
        memset(arr, 0, 101);
    
        for (int i = 2; i <= 100; i++) {
            for (int j = 1; j <= 100; j++) {
                if (j % i == 0) {
                    arr[j] = !arr[j];
                }
            }
        }
        for (int i = 1; i <= 100; i++) {
            if (!arr[i])
                cout << i << endl;
        }
        return 0;
    }
    1
    4
    9
    16
    25
    36
    49
    64
    81
    100

    一个数的约数个数为奇数。所有的数都包含1和自己,平方数的约数肯定是奇数个。

    实现个函数 unsigned int convect(char* pstr)

    实现个函数 unsigned int convect(char* pstr)。其中pstr是十六进制数的字符串。函数convectpstr转换成数字返回(比如:字符串’1A’,将返回数值26.注意,pstr[0]是’1’)。pstr中只有数字字符0到9、A到F。不得借助其它的系统函数调用。

    #include <iostream>
    using namespace std;
    
    unsigned int convect(char* pstr) {
        char *p = pstr;
        unsigned long long res = 1;
        unsigned long long maxInt = (res << 32) - 1;
        res = 0;
        while (*p != '\0') {
            if (*p >= '0' && *p <= '9') {
                res = res * 16 + *p - '0';
            }
            else if (*p >= 'A' && *p <= 'F') {
                res = res * 16 + *p - 'A' + 10;
            }
            else return 0;
            p++;
        }
        if (res > maxInt) return 0;
        return res;
    }
    
    int main() {
        cout << convect((char*)"1A") << endl;
        cout << convect((char*)"FFFFFFFF") << endl;
        cout << convect((char*)"FFFFFFFFF") << endl;
        return 0;
    }

    实现一个函数unsigned int counter(char* pstr)

    实现一个函数unsigned int counter(char* pstr)。函数将打印出匹配的括号对。比如:字符串”a(bc(d)ef(12)g)”就存在3对匹配的括号对,分别是:
    1. 位置4上的(与位置6上的)匹配。打印4 6即可。
    1. 位置9上的(与位置12上的)匹配。打印9 12即可。
    1. 位置1上的(与位置14上的)匹配。打印1 14即可。

    软件编程部分

    设计

    给你一个模块要求,你要做出这个模块,那么你的做出该模块的思路和步骤是什么?

    明确这个模块的功能,明确其输入以及输出。

    尽量去除与其他模块的耦合关系,确保独立性。

    我会首先编写输入和输出的接口函数,然后由粗到精,逐步实现细节算法。

    同时还需要编写模块的测试代码,保证交付的可靠性。

    Matlab编程

    Matlab 中读、写及显示一幅图像的命令各是什么?

    imread(), imwrite(), imshow()

    Matlab 与VC++混合编程有哪几种方式?

    Matlab引擎方式(Matlab后台程序为服务器,VC前端为客户端,C/S结构)、Matlab编译器(将Matlab源代码编译为C++可以调用的库文件)及COM组件(Matlab生成COM组件,VC调用)

    Matlab运算中 .** 的区别?

    .*表示矩阵元素分别相乘,要求两个矩阵具有相同的shape。*表示矩阵相乘。

    逻辑推理部分

    智力题

    药丸问题

    有四人装药丸的罐子,每个药丸都有一定的重量,被污染的药丸是没被污染的重量+1.只称量一次,如何判断哪个罐子的药被污染了?

    答:在四个罐子里面分别取1、2、3、4颗药丸,然后进行称量。如果称量结果比实际(污染前)重了n,就是第n罐被污染了。 (因为每加一颗被污染的药丸就增加1所以增加n就是增加n颗就是在第n个罐子里拿的)

    帽子黑白问题

    一群人开舞会,每人头上都戴着一顶帽子。帽子只有黑白两种,黑的至少有一顶。每个人都能看到其他人帽子的颜色,却看不到自己的。主持人先让大家看看别人头上戴的是什么帽子,然后关灯,如果有人认为自己戴的是黑帽子,就打自己一个耳光。第一次关灯,没有声音。于是再开灯,大家再看一遍,关灯时仍然鸦雀无声。一直到第三次关灯,才有劈劈啪啪打耳光的声音响起。问有多少人戴着黑帽子?

    解:假如只有一个人戴黑帽子,那他看到所有人都戴白帽,在第一次关灯时就应自打耳光,所以应该不止一个人戴黑帽子;如果有两顶黑帽子,第一次两人都只看到对方头上的黑帽子,不敢确定自己的颜色,但到第二次关灯,这两人应该明白,如果自己戴着白帽,那对方早在上一次就应打耳光了,因此自己戴的也是黑帽子,于是也会有耳光声响起;可事实是第三次才响起了耳光声,说明全场不止两顶黑帽,依此类推,应该是关了几次灯,有几顶黑帽。

    金条问题

    让工人为你工作7天,给工人的回报是一根金条。金条平分成相连的7段,你必须在每天结束时给他们一段金条,如果只许你两次把金条弄断,你如何给你的工人付费?

    答:分成1、2、4段。利用1,2,4可以组合成1,2,3,4,5,6,7

    拆字游戏

    下面玩一个拆字游戏,所有字母的顺序都被打乱。你要判断这个字是什么。假设这个被拆开的字由5个字母组成:
    1. 共有多少种可能的组合方式?
    2. 如果我们知道是哪5个字母,那会怎么样?
    3. 找出一种解决这个问题的方法。

    个人解答:
    1. A55=54321=120
    1. 会依靠英文字母的规则等大致弄几种可能性出来。
    1. 将弄出来的可能性的单词进行查找。

    为什么下水道的盖子是圆的?

    解:很大程度上取决于下水道的形状,一般为了使得各个方向的管子都可以接入到下水道中,所以下水道设计成了圆柱形,所以盖子相应的也是圆形。且圆形比较省材料,便于运输。

    请估算一下CNTOWER电视塔的质量

    首先在纸上画出了CNTOWER的草图,然后快速估算支架和各柱的高度,以及球的半径,算出各部分体积,然后和各部分密度运算,最后相加得出一个结果。

    展开全文
  • 根据《人工智能影响力报告》显示: 人工智能科学家主要毕业于清华大学、中国科学院、中国科技大学、麻省理工大学、北京大学等知名学校,学历上看,73%的人工智能科学家都...学习人工智能需要具备最最最总要的是...

    https://www.toutiao.com/a6661754579887063566/

     

    根据《人工智能影响力报告》显示:

    人工智能科学家主要毕业于清华大学、中国科学院、中国科技大学、麻省理工大学、北京大学等知名学校,学历上看,73%的人工智能科学家都拥有博士学历,可见人工智能领域是高端人士的聚集地,普通人根本玩不了,你有没有瑟瑟发抖呢?

    人工智能的学习,需要学习哪些算法和数学知识呢?需要什么学历?

     

    学习人工智能需要具备最最最总要的是学习态度和学习能力,毕竟是前沿科学行业,其次才是数学知识和编程能力,数学知识如果你是做学问做算法突破,那么对于你的数学能力要求是相当高的,如果是做工程等,数学这块要求并不高,大概大专文化水平就行。而编程能力是后面长期累积的,这个不是必要条件

    首先要掌握必备的数学基础知识,

    具体来说包括:

    线性代数:如何将研究对象形式化?

    概率论:如何描述统计规律?

    数理统计:如何以小见大?

    最优化理论: 如何找到最优解?

    信息论:如何定量度量不确定性?

    形式逻辑:如何实现抽象推理?

    线性代数:如何将研究对象形式化?

    事实上,线性代数不仅仅是人工智能的基础,更是现代数学和以现代数学作为主要分析方法的众多学科的基础。从量子力学到图像处理都离不开向量和矩阵的使用。而在向量和矩阵背后,线性代数的核心意义在于提供了⼀种看待世界的抽象视角:万事万物都可以被抽象成某些特征的组合,并在由预置规则定义的框架之下以静态和动态的方式加以观察。

    着重于抽象概念的解释而非具体的数学公式来看,线性代数要点如下:线性代数的本质在于将具体事物抽象为数学对象,并描述其静态和动态的特性;向量的实质是 n 维线性空间中的静止点;线性变换描述了向量或者作为参考系的坐标系的变化,可以用矩阵表示;矩阵的特征值和特征向量描述了变化的速度与方向。

    总之,线性代数之于人工智能如同加法之于高等数学,是一个基础的工具集。

    概率论:如何描述统计规律?

    除了线性代数之外,概率论也是人工智能研究中必备的数学基础。随着连接主义学派的兴起,概率统计已经取代了数理逻辑,成为人工智能研究的主流工具。在数据爆炸式增长和计算力指数化增强的今天,概率论已经在机器学习中扮演了核心角色。

    同线性代数一样,概率论也代表了一种看待世界的方式,其关注的焦点是无处不在的可能性。频率学派认为先验分布是固定的,模型参数要靠最大似然估计计算;贝叶斯学派认为先验分布是随机的,模型参数要靠后验概率最大化计算;正态分布是最重要的一种随机变量的分布。

    数理统计:如何以小见大?

    在人工智能的研究中,数理统计同样不可或缺。基础的统计理论有助于对机器学习的算法和数据挖掘的结果做出解释,只有做出合理的解读,数据的价值才能够体现。数理统计根据观察或实验得到的数据来研究随机现象,并对研究对象的客观规律做出合理的估计和判断。

    虽然数理统计以概率论为理论基础,但两者之间存在方法上的本质区别。概率论作用的前提是随机变量的分布已知,根据已知的分布来分析随机变量的特征与规律;数理统计的研究对象则是未知分布的随机变量,研究方法是对随机变量进行独立重复的观察,根据得到的观察结果对原始分布做出推断。

    用一句不严谨但直观的话讲:数理统计可以看成是逆向的概率论。 数理统计的任务是根据可观察的样本反过来推断总体的性质;推断的工具是统计量,统计量是样本的函数,是个随机变量;参数估计通过随机抽取的样本来估计总体分布的未知参数,包括点估计和区间估计;假设检验通过随机抽取的样本来接受或拒绝关于总体的某个判断,常用于估计机器学习模型的泛化错误率。

    最优化理论: 如何找到最优解?

    本质上讲,人工智能的目标就是最优化:在复杂环境与多体交互中做出最优决策。几乎所有的人工智能问题最后都会归结为一个优化问题的求解,因而最优化理论同样是人工智能必备的基础知识。最优化理论研究的问题是判定给定目标函数的最大值(最小值)是否存在,并找到令目标函数取到最大值 (最小值) 的数值。 如果把给定的目标函数看成一座山脉,最优化的过程就是判断顶峰的位置并找到到达顶峰路径的过程。

    通常情况下,最优化问题是在无约束情况下求解给定目标函数的最小值;在线性搜索中,确定寻找最小值时的搜索方向需要使用目标函数的一阶导数和二阶导数;置信域算法的思想是先确定搜索步长,再确定搜索方向;以人工神经网络为代表的启发式算法是另外一类重要的优化方法。

    信息论:如何定量度量不确定性?

    近年来的科学研究不断证实,不确定性就是客观世界的本质属性。换句话说,上帝还真就掷骰子。不确定性的世界只能使用概率模型来描述,这促成了信息论的诞生。

    信息论使用“信息熵”的概念,对单个信源的信息量和通信中传递信息的数量与效率等问题做出了解释,并在世界的不确定性和信息的可测量性之间搭建起一座桥梁。

    总之,信息论处理的是客观世界中的不确定性;条件熵和信息增益是分类问题中的重要参数;KL 散度用于描述两个不同概率分布之间的差异;最大熵原理是分类问题汇总的常用准则。

    形式逻辑:如何实现抽象推理?

    1956 年召开的达特茅斯会议宣告了人工智能的诞生。在人工智能的襁褓期,各位奠基者们,包括约翰·麦卡锡、赫伯特·西蒙、马文·闵斯基等未来的图灵奖得主,他们的愿景是让“具备抽象思考能力的程序解释合成的物质如何能够拥有人类的心智。”通俗地说,理想的人工智能应该具有抽象意义上的学习、推理与归纳能力,其通用性将远远强于解决国际象棋或是围棋等具体问题的算法。

    如果将认知过程定义为对符号的逻辑运算,人工智能的基础就是形式逻辑;谓词逻辑是知识表示的主要方法;基于谓词逻辑系统可以实现具有自动推理能力的人工智能;不完备性定理向“认知的本质是计算”这一人工智能的基本理念提出挑战。

    人工智能的学习,需要学习哪些算法和数学知识呢?需要什么学历?

     

    人工智能的学习,需要学习哪些算法和数学知识呢?需要什么学历?

     

    人工智能的学习,需要学习哪些算法和数学知识呢?需要什么学历?

     

     

    展开全文
  • //2018/09/27 兵荒马乱、浩浩荡荡的秋招终于差不多要结束了。 秋招这段时间真是感慨很多,一时得意一时失意,还要平衡一不小心就来的心理落差。 先写点废话吧,毕竟最近感受挺多的,在自己的博客里也不用顾忌措辞...

    相关链接:【计算机视觉算法岗面经】“吐血”整理:2019秋招面经


    //2018/09/27

    兵荒马乱、浩浩荡荡的秋招终于差不多要结束了。

    秋招这段时间真是感慨很多,一时得意一时失意,还要平衡一不小心就来的心理落差。

    先写点废话吧,毕竟最近感受挺多的,在自己的博客里也不用顾忌措辞。强行给自己灌一波鸡汤~

    1、努力永远和收获成正比,即使这个比率很小。一直觉得自己没有特别的天赋,只能一点一点努力,而这点努力还经常被“比你优秀的人比你更努力”所击溃。但这又怎样呢,不努力连现在的自己都超越不了。个人觉得“比上不足”比“比下有余”更有分量。

    2、向优秀的人看齐。忘记在哪看的一句话了,“当你超过别人一点点时,他们会嫉妒你,当你超过别人一大截时,他们只会羡慕你”,是啊,因为换位思考放在自己身上也是这样,我会嫉妒何恺明,嫉妒陆奇吗,很明显不会,我只会仰望。还是要脚踏实地啊。

    3、对于秋招,运气真的蛮重要。因为你不知道刚好哪次就是你的人生际遇。但运气也是实力的一部分,若不是之前的厚积薄发,若不是敢于尝试,又哪里有这些机会呢。所以要不要海投呢?看你的精力是否支撑这些,看你想得到什么。

    好了,下面整理面经。主要是自己整理的一些经常被问到的问题,然后搜集的一些资料(附了很多链接,如果侵权请告知删除),主要分为几大模块:HR面、深度学习、机器学习、图像处理、数学、计算机基础、C++、Python等。看整理的面经长度就知道哪个模块经常被问到了。

    再说下面试基本会问的内容,目前个人所碰到的,占比可能有所不同,有些面试官喜欢问项目,有些喜欢问基础。

    1. 介绍项目、实习,一般会问很久,在你介绍中会问各种开放性问题;通常我的面试中这个占很大篇幅,60%-90%;
    2. 问算法相关,包括ML\DL\图像处理等的基础知识,占40%-60%,其中大概ML40%,DL10%,图像处理10%;
    3. 问数学基础,大部分是概率论,占5%;
    4. 问语言,C++,STL容器之类的,占10%;python也会问一点;
    5. 编程题,一般2、3题;
    6. Linux命令,一般问几个,不经常问到;

    1、HR面

    1. 自我介绍
    2. 你和竞争者相比的优势是什么
    3. 实习收获了什么
    4. 从实习导师身上学到了什么
    5. 导师给你的意见是什么
    6. 从面试官身上学到了什么
    7. .秋招意向的企业有哪些
    8. 你为什么想来我们公司?
    9. 你来了之后的三年怎么打算的?
    10. 讲一讲实习公司的产品架构,比如一个新的需求产生到落地的流程是怎样?
    11. 优缺点
    12. 介绍项目,难点,从中学到什么,重新做如何改进
    13. 期望薪资
    14. 自己主动学习过哪些知识,通过什么方式学的
    15. 后面打算学习什么知识,为什么
    16. 英语怎么样
    17. 兴趣
    18. 竞赛、考研保研
    19. 团队合作遇到的分歧
    20. 有没有投过其他公司,有拿到offer吗?
    21. 项目中怎么分工的,有遇到过水平低的吗,是怎么沟通的
    22. 对你帮助很大的一个人
    23. 学习的路径,怎么学习
    24. 被批评以后的心里状态
    25. 课题研究进展以及创新点、课题遇到的困难
    26. 实习经历
    27. 是否读博
    28. 实习时间
    29. 最有挫败感的事
    30. 三-五年的规划
    31. 人生理想
    32. 最成功的一件事
    33. 小时候印象最深的一件事

    2、深度学习

    2.1、Inception系列网络

    https://blog.csdn.net/liuxiao214/article/details/81914743

    2.2、Resnet系列网络

    https://blog.csdn.net/liuxiao214/article/details/81914743

    https://blog.csdn.net/u014380165/article/details/71667916

    2.3、目标检测系列

    • RCNN
    • Fast RCNN

    ROI Pooling

    https://blog.csdn.net/lanran2/article/details/60143861

    https://blog.csdn.net/auto1993/article/details/78514071

    • Faster RCNN
    • YOLO
    • SSD
    • YOLO V2
    • YOLO V3
    • SSD V2
    • FCN

    2.4、主流CNN网络在imagenet上的准确率

    2.5、attention机制

    https://www.zhihu.com/question/68482809/answer/264070398

    https://zhuanlan.zhihu.com/p/31547842

    https://blog.csdn.net/yideqianfenzhiyi/article/details/79422857

    2.7、loss

    - triple loss
    - center loss:

    https://blog.csdn.net/u014380165/article/details/71181256

    https://blog.csdn.net/u014380165/article/details/76946339

    https://blog.csdn.net/LIYUAN123ZHOUHUI/article/details/77100650?locationNum=7&fps=1

    2.8、Normalization

    https://blog.csdn.net/liuxiao214/article/details/81037416

    • Batch Normalization
    • Layer Normalization
    • Instance Normalization
    • Group Normalization
    • Switchable Normalization

    2.9、NLP系列

    • RNN
    • LSTM

    2.10、优化方法

    https://www.baidu.com/link?url=ws6cxNIhWmVA1gbrUgFMRtACQhCMdYvcwZtLWOZfWZ0Iuujyt5Y4w08KNj7gn2ExUBD4jIybSJ8e3xb95cMWcL6hZXEn4IUJ5mRYnPoQbNC&wd=&eqid=ce9adcb10004685c000000035b5d4fb6

    https://blog.csdn.net/chenchunyue11/article/details/51290638

    • SGD
    • Momentum
    • RMSprop
    • Adam

    2.11、最优化方法

    1、梯度下降

    2、牛顿法

    3、拟牛顿法

    4、共轭梯度法

    https://www.cnblogs.com/happylion/p/4172632.html

    https://www.cnblogs.com/shixiangwan/p/7532830.html

    https://www.cnblogs.com/hlongch/p/5734105.html

    https://www.baidu.com/link?url=8EyCqGYnldJzHuqBBGagV9juEA_nhCYvRElM2Tw0lBdewSmc0qshAy_AHAEegO-wT3vLsrcY1xSDdyLOmL09Ltm_UICAFX_C02QdkkSCcWW&wd=&eqid=ce9adcb10004685c000000035b5d4fb6

    2.12、上采样、反卷积

    https://blog.csdn.net/a_a_ron/article/details/79181108

    https://blog.csdn.net/amor_tila/article/details/75635283

    https://www.cnblogs.com/cvtoEyes/p/8513958.html

    2.13、有哪些激活函数,各自的优缺点

    https://blog.csdn.net/nuannuanyingying/article/details/70064353

    https://blog.csdn.net/yangdashi888/article/details/78015448

    2.14、过拟合是什么,如何处理过拟合

    2.15、你认为深度学习是最好的算法吗?有哪些场景不适合深度学习?

    2.16、数据不完美问题

    数据不均衡问题:

    https://www.cnblogs.com/zhaokui/p/5101301.html

    数据缺失标签:

    2.17、BP算法推导

    2.18、全连接层的作用

    https://www.zhihu.com/question/41037974

    全局平均池化

    https://blog.csdn.net/qq_23304241/article/details/80292859

    2.19、softmax、softmax loss、cross cronty

    https://blog.csdn.net/u014380165/article/details/77284921

    https://blog.csdn.net/jasonzzj/article/details/52017438

    https://blog.csdn.net/u012494820/article/details/52797916

    https://www.zhihu.com/question/41252833

    https://zhuanlan.zhihu.com/p/27223959

    https://zhuanlan.zhihu.com/p/35709485

    2.20、为什么训练不收敛,如何解决

    https://www.zhihu.com/question/38035648

    https://www.zhihu.com/question/64966457

    https://blog.csdn.net/andylei777/article/details/72911189

    2.21、不收敛和过拟合的区别

    https://blog.csdn.net/limiyudianzi/article/details/79626702

    2.22、SGD参数设置,权值衰减是什么意思

    http://www.sohu.com/a/209594012_610300

    https://www.baidu.com/link?url=qzplPMRt1nQem66hMNLsJIJUxdVz2k5cKuXWw4uiERe2wxPvFB7gmU3NccDyesjd_PX4LIL-8WnLtt5UFqz-nK&wd=&eqid=d2a6ab69000357f3000000045b67f14c

    https://zhuanlan.zhihu.com/p/23906526

    https://www.zhihu.com/question/24529483

    https://zhuanlan.zhihu.com/p/38709373

    2.23 LSTM和naive RNN的区别

    2.24 人脸识别

    2.25 OCR技术

    2.26 深度学习在图像领域效果为什么这么好

    2.27 DL和ML的区别

    统计机器学习需要人工设计特征,特征工程很重要

    深度学习可以自动学习特征,特别是在图像、语音、文本方面,这些数据都有局部和整体关系,DL能发挥很大作用。

    2.28 卷积实现、反向传播如何做

    CNN的核心是什么?卷积操作是怎样进行的?卷积反向传播过程?Tensorflow中卷积操作是怎样实现的?

    池化又是怎样操作的,反向传播过程中池化层怎么接受后面传过来的损失的

    2.29 conv、pool反向传播怎么做

    max 怎么知道坐标

    http://www.cnblogs.com/pinard/p/6494810.html

    https://www.zhihu.com/question/58716267

    https://blog.csdn.net/junmuzi/article/details/53206600

    https://blog.csdn.net/Jason_yyz/article/details/80003271

    2.30 卷积层参数量、计算量是多少

    https://blog.csdn.net/dzkd1768/article/details/72763659

    https://blog.csdn.net/mtj66/article/details/80509713

    2.31 感受野的计算

    https://www.cnblogs.com/objectDetect/p/5947169.html

    2.32 轻量型网络

    https://blog.csdn.net/liuxiao214/article/details/81875251

    mobileNet

    https://blog.csdn.net/t800ghb/article/details/78879612

    https://blog.csdn.net/wfei101/article/details/78310226

    2.33 LSTM用在行为识别为什么不好

    https://blog.csdn.net/stdcoutzyx/article/details/79117869

    2.34 为什么梯度反方向是函数值下降最快的方向?

    https://blog.csdn.net/yizhen_acmer/article/details/54670733

    2.35 bagging和dropout

    https://blog.csdn.net/m0_37477175/article/details/77145459

    bagging:取多组训练数据,用相同的算法训练不同的模型;

    dropout:每个batch随机抑制一部分神经元,相当于做了不同的模型;

    2.36 ResNext

    resnext:https://arxiv.org/pdf/1611.05431.pdf

    https://blog.csdn.net/u014380165/article/details/71667916

    http://www.360doc.com/content/17/0214/19/36492363_628998225.shtml

    https://www.baidu.com/link?url=C2hA3ksVRYT-9cSneynsaSpoTjtwshlHNtfXDWnoag3etKgBs2PJvMV2FGO4Lx8gKe1-DQwPWCRWaZuqxg_wYoj59nf5pIPVCvfQvElxCnW&wd=&eqid=a3c0c32500021e6f000000035b7a3742

    2.37 senet

    senet:https://arxiv.org/pdf/1709.01507.pdf

    https://blog.csdn.net/xjz18298268521/article/details/79078551

    http://www.sohu.com/a/161633191_465975

    2.38 densenet

    densenet:https://arxiv.org/pdf/1608.06993.pdf

    https://blog.csdn.net/u014380165/article/details/75142664

    https://blog.csdn.net/malele4th/article/details/79429028

    2.39 se-resnext

    https://yq.aliyun.com/articles/603849#

    2.40 各种损失函数 交叉熵多标签分类问题

    https://www.jianshu.com/p/ac26866e81bc

    https://blog.csdn.net/weixin_37933986/article/details/68488339

    https://www.cnblogs.com/houjun/p/8956384.html

    https://blog.csdn.net/zhangjunp3/article/details/80467350

    smooth l1:

    https://www.cnblogs.com/573177885qq/p/6136991.html

    triple loss:

    https://blog.csdn.net/jcjx0315/article/details/77160273

    https://www.jianshu.com/p/46c6f68264a1

    https://blog.csdn.net/u011501388/article/details/79206957

    center loss

    https://blog.csdn.net/u014380165/article/details/76946339

    https://blog.csdn.net/wxb1553725576/article/details/80602786

    多标签:

    http://www.atyun.com/5376.html

    https://www.zhihu.com/question/35486862

    2.41 线性回归和逻辑回归的区别

    https://blog.csdn.net/yunhaitianguang/article/details/43877591

    https://blog.csdn.net/viewcode/article/details/8794401

    2.42 权重初始化方法有哪些

    https://blog.csdn.net/u012328159/article/details/80025785

    https://blog.csdn.net/hai008007/article/details/79735491

    https://www.baidu.com/link?url=m3U4agdoye6dXuyKQg03ZDbS2sMDDQ1MWsVbqdif7-gwgYj13XK78apTQQy4VgOR0CSLuJpZ4h9vOjJ1nCDSLapS6WwILhv_XbS9FC8kB8S&wd=&eqid=ec827bbf00009ec6000000035b87ad2f

    https://blog.csdn.net/fire_light_/article/details/79556192

    https://www.cnblogs.com/makefile/p/init-weight.html?utm_source=itdadao&utm_medium=referral

    2.43 性能度量方法

    2.44 VGG16与resnet152哪个参数量大

    https://imlogm.github.io/深度学习/vgg-complexity/

    VGG16参数量大,resnet采用了1x1 3x3 1x1卷积方式bottleneck结构

    2.45 最小二乘法

    https://blog.csdn.net/ACdreamers/article/details/44662633

    https://blog.csdn.net/iterate7/article/details/78992015

    https://blog.csdn.net/yuxiaoxi21/article/details/71469311

    2.46 online hard sample,不均衡样本

    标准的faster-RCNN中,假设正样本IOU(0.71.0)。负样本IOU(0.10.3),hard 负样本IOU(0.0~0.1)。比如实际的RPN网络中,实际最后的anchor经过NMS处理后的负样本是很多的,假如有100000个。而实际训练的正负样本比例为1:3,负样本大概只需要2000-3000个。这时就只选择那些hard负样本,这样实际训练出来的效果最好。

    https://blog.csdn.net/qq_16234613/article/details/79794588

    https://blog.csdn.net/songhk0209/article/details/71484469

    http://www.cnblogs.com/demian/p/9575735.html

    2.47 图像库相似度搜索

    1、哈希

    https://blog.csdn.net/jiandanjinxin/article/details/51281924

    2、三种深度学习的方法

    https://www.leiphone.com/news/201807/XvuvcU03PkYe7VcQ.html

    3、sift特征

    https://www.zhihu.com/question/27602122

    4、很全的综述文章!!建议看

    https://mp.weixin.qq.com/s/sM78DCOK3fuG2JrP2QaSZA

    https://mp.weixin.qq.com/s/yzVMDEpwbXVS0y-CwWSBEA

    5、一些论文

    https://zhuanlan.zhihu.com/p/43569947

    https://zhuanlan.zhihu.com/p/34084199

    6、深度学习应用

    https://www.zhihu.com/question/29467370

    2.48 CNN为什么用ReLU,为什么不用sigmoid?

    RNNs为什么用tanh不用ReLU?ReLU的问题以及解决方案。

    2.49 目标检测 小目标问题

    https://www.jianshu.com/p/78f614799cf2

    http://blog.51cto.com/yixianwei/2096060

    https://blog.csdn.net/maweifei/article/details/81058498

    2.50 某个类别准确率不高怎么办,混淆矩阵互分严重怎么办

    https://segmentfault.com/q/1010000014379836/

    2.51 untrimmed 视频如何处理

    可以使用行为检测定位,

    https://blog.csdn.net/xiaoxiaowenqiang/article/details/80752849

    2.52 精确率很高、召回率很低什么原因,如何解决

    数据小物体多,容易漏检,预测的少,但是准

    然后就说在多尺度预测,多加anchor之类的

    2.53 anchor的意义是什么,为什么不直接用四个坐标做回归

    2.54 有个类别的准确率比较低

    别的都高,就说明算法没问题,这一类数据有问题

    对这个类的数据做一个清洗

    2.55 最小二乘法拟合直线,如何拟合直线

    2.56 各个框架的比较

    https://blog.csdn.net/zuochao_2013/article/details/56024172

    https://blog.csdn.net/liyiafeia/article/details/52826600

    https://www.cnblogs.com/leoking01/p/7211645.html

    2.57 如何用softmax和sigmoid来做多类分类和多标签分类

    https://blog.csdn.net/u011734144/article/details/80915559

    2.58 小样本学习

    https://blog.csdn.net/mao_feng/article/details/78939864

    http://www.elecfans.com/d/695496.html

    http://chuansong.me/n/2131635951225

    2.59 eigenface fisherface

    1、eigenface

    https://blog.csdn.net/zouxy09/article/details/45276053

    https://blog.csdn.net/smartempire/article/details/21406005

    2、fisherface

    https://blog.csdn.net/smartempire/article/details/23377385

    https://www.cnblogs.com/little-monkey/p/8118938.html

    常用概念


    2.60 移动端应用问题

    2.60.1 项目线上部署怎么办?有些包线上好装,但无法访问外网时除了离线安装还有什么办法?

    docker虚拟机也可以,直接部署docker

    2.60.2 资料

    https://www.jianshu.com/p/53db67dd6c14

    http://ai.51cto.com/art/201711/558147.htm

    https://www.zhihu.com/question/46523847/answer/101665650

    https://link.zhihu.com/?target=https%3A//mp.weixin.qq.com/s%3F__biz%3DMzI1NTE4NTUwOQ%3D%3D%26mid%3D2650324711%26idx%3D1%26sn%3D8d833edfa7d856f0fc8db1d82ba0ad11%26scene%3D2%26srcid%3D0519F81hMdHH9R2wiQJQyqJ1%26from%3Dtimeline%26isappinstalled%3D0%26pass_ticket%3DrgAiSWRaxw%2BwO2hGFDol0lFn4Hp6VKBfPRJ8zvT0nCp56cPHQwxoOO45ZghhnAGI

    https://zhuanlan.zhihu.com/p/31063235

    https://zhuanlan.zhihu.com/p/38276869

    https://www.zhihu.com/question/57695571/answer/250062833

    https://www.zhihu.com/question/40503595

    2.60.3 介绍

    一些观点:

    观点一:

    现阶段 app 上使用的深度学习主要有两种模式:

    一种是 online 方式:移动端做初步预处理,把数据传到服务器执行深度学习模型,优点是这个方式部署相对简单,现成的框架(caffe,theano,mxnet,Torch) 做下封装就可以直接拿来用,服务器性能大, 能够处理比较大的模型,缺点是必须联网。

    另外一种是 offline 方式:在服务器进行训练的过程,在手机上进行预测的过程。

    观点二:

    做模型压缩。

    观点三:

    在移动端,直接拿模型来跑肯定不行,除了软件环境,最重要的其实有两个方面:

    第一是存储。为了解决这个问题,在DL领域有相当一部分人在做相关的问题,比如二值网络、网络压缩。其目的就是减少模型的参数规模利于存储。将权重怎么存可能也需要各种技巧吧。

    第二是计算。这个跟存储和平台也有一定的关系。以上我提到的这两个工作是object detection领域比较新的且能实时处理的工作。在mobile设备上不可能拿模型直接用,要做一下简化和妥协。另外可行的方案是在服务器端跑模型。

    另外还有一个比较有意思的工作是最近有一小部分人在做针对神经网络输入的图像采集设备,直接生成神经网络图片。这样就可以直接在输入端上解决存储的问题。

    观点四:

    注意三点:1、权重存储;2、计算速度;3、功耗。
    三点都很重要,可以看看斯坦福William dally组的工作(删减连接、编码存储、混合精度)

    观点五:

    可是真正的工业界哪里有这么简单?哪里有现成的数据集?数据集怎么构造?如何清洗?数据体量都是上亿 代码写不好 跑不死你?

    部门大量工具都是C写的不会C行只会python行吗?这么大数据 不会Hadoop spark搞得定?这么大数据训练 不会参数服务器 不会分布式搞得定?

    模型调参就简单?深度学习是黑箱,就更要有比较高的理论水平,否则你连怎么调参的门道都找不到,为什么不收敛,你都想不出来。

    模型训练出来就万事大吉了?模型太重速度太慢 不符合业务需求 怎么办?怎么模型压缩?模型怎么上移动端?移动端没有合适的机器学习架构,你能不能写一个?

    一个模型上线就完事了?想进一步提高性能,怎么办?是不是要紧跟学术前沿,能读懂paper,快速实验?这对英语和数学编程都有很高要求。

    这说的都是深度学习的,然而很多场景是不适合用深度学习的。那决策树模型,进一步的集成学习,随机森林和GBDT你得懂。统计学习的你得懂,贝叶斯SVM和LR你得懂。有些业务还得用HMM,CRF或者NLP的东西。所以还是要先虚心学习一个。

    观点六:

    1、移动端的训练问题,一般都是用现成的训练好的模型。
    2、模型的参数体积问题
    3、模型的计算时间问题

    当下还是流行使用服务器训练模型,移动端部署模型前向计算。用移动端进行训练现在的移动设备的内存及计算能力都有点吃力。自己大胆做个猜想:将来可以做成通用模型(服务器训练)加个性化模型(手机上训练)。

    至于部署到移动端当然还是会涉及到模型压缩及框架选择。

    观点七:

    个人总结:

    1、服务器端跑模型,移动端给结果,这样做必须联网;

    2、压缩模型,将参数权重存储在本地。存储问题需要考虑;

    3、框架轻量化;

    4、卷积硬件计算加速;

    5、优化移动端深度学习引擎;

    6、一些优化:使用低层语言;缓存友好:少用内存、连续访问、对齐访问、合并访问;多线程:线程开销、动态调度;稀疏化;定点化;包大小;编译优化;代码精简;模型压缩;内存精简;兼容性与可靠性;

    2.60.4

    SqueezeNet

    https://blog.csdn.net/csdnldp/article/details/78648543

    https://blog.csdn.net/u011995719/article/details/78908755

    mobileNet

    https://blog.csdn.net/t800ghb/article/details/78879612

    https://blog.csdn.net/wfei101/article/details/78310226

    https://blog.csdn.net/u014380165/article/details/72938047

    ShuffleNet

    https://blog.csdn.net/u011974639/article/details/79200559

    https://blog.csdn.net/u014380165/article/details/75137111

    Xception

    https://blog.csdn.net/u014380165/article/details/75142710

    https://www.baidu.com/link?url=ERPMsc_io0x0usMhZdLD5POp-4p3dHyNtg4z92eeNsIpzxbKJMtmEH39A5op8p2XiQ4CWDPMu03Ygbrs8GAOAK&wd=&eqid=e517c5270000c4ed000000035b7a2a44

    上述四个模型总结

    xception: https://arxiv.org/abs/1610.02357

    shufflenet: https://arxiv.org/pdf/1707.01083.pdf

    mobilenet: https://arxiv.org/pdf/1704.04861.pdf

    squeezenet: https://arxiv.org/pdf/1602.07360.pdf

    https://blog.csdn.net/u011995719/article/details/79100582

    https://www.sohu.com/a/233688290_500659

    2.60.5 deep compression

    https://www.sohu.com/a/233688290_500659

    https://blog.csdn.net/zijin0802034/article/details/53982812

    2.61 GAN

    https://zhuanlan.zhihu.com/p/27295635

    https://zhuanlan.zhihu.com/p/26491601

    https://zhuanlan.zhihu.com/p/28853704

    https://zhuanlan.zhihu.com/p/27663439

    https://zhuanlan.zhihu.com/p/28731033

    https://github.com/hindupuravinash/the-gan-zoo

    https://zhuanlan.zhihu.com/p/30107433

    2.62 手动实现卷积操作 矩阵相乘

    #include <opencv2/opencv.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/core/core.hpp>
    
    using namespace  std;
    using namespace  cv;
    
    #if 1
    Mat Kernel_test_3_3 = (
    	Mat_<double>(3, 3) <<
    	0, -1, 0,
    	-1, 5, -1,
    	0, -1, 0);
    void Convlution(Mat  InputImage, Mat  OutputImage, Mat kernel)
    {
    	//计算卷积核的半径
    	int sub_x = kernel.cols / 2;
    	int sub_y = kernel.rows / 2;
    	//遍历图片  
    	for (int image_y = 0; image_y < InputImage.rows - 2 * sub_y; image_y++)
    	{
    		for (int image_x = 0; image_x < InputImage.cols - 2 * sub_x; image_x++)
    		{
    			int pix_value = 0;
    			for (int kernel_y = 0; kernel_y < kernel.rows; kernel_y++)
    			{
    				for (int kernel_x = 0; kernel_x < kernel.cols; kernel_x++)
    				{
    					double  weihgt = kernel.at<double>(kernel_y, kernel_x);
    					int value = (int)InputImage.at<uchar>(image_y + kernel_y, image_x + kernel_x);
    					pix_value += weihgt*value;
    				}
    			}
    			OutputImage.at<uchar>(image_y + sub_y, image_x + sub_x) = (uchar)pix_value;
    			if ((int)pix_value != (int)saturate_cast<uchar>((int)pix_value))
    			{
    				//cout<<"没有防溢出"<<(int)pix_value<<endl;
    				//cout<<"防溢出"<<(int)saturate_cast<uchar>((int)pix_value)<<endl;
    				//cout<<"没有防溢出写入了什么?"<<(int)OutputImage.at<uchar>(image_y+sub_y,image_x+sub_x)<<endl;
    				//cout<<endl;
    			}
    		}
    	}
    }
    
    int main()
    {
    	Mat srcImage = imread("1.jpg", 0);
    	namedWindow("srcImage", WINDOW_AUTOSIZE);
    	imshow("原图", srcImage);
    
    	//filter2D卷积
    	Mat dstImage_oprncv(srcImage.rows, srcImage.cols, CV_8UC1, Scalar(0));;
    	filter2D(srcImage, dstImage_oprncv, srcImage.depth(), Kernel_test_3_3);
    	imshow("filter2D卷积图", dstImage_oprncv);
    	imwrite("1.jpg", dstImage_oprncv);
    
    	//自定义卷积
    	Mat dstImage_mycov(srcImage.rows, srcImage.cols, CV_8UC1, Scalar(0));
    	Convlution(srcImage, dstImage_mycov, Kernel_test_3_3);
    	imshow("卷积图3", dstImage_mycov);
    	imwrite("2.jpg", dstImage_mycov);
    
    	waitKey(0);
    	return 0;
    
    }
    #else
    #endif
    
    

    2.63 iou和NMS代码

    https://blog.csdn.net/sinat_34474705/article/details/80045294

    import numpy as np
    
    class Bounding_box:
        def __init__(self, x1, y1, x2, y2, score):
            self.x1 = x1
            self.y1 = y1
            self.x2 = x2
            self.y2 = y2
            self.score = score
    
    def get_iou(boxa, boxb):
        max_x = max(boxa.x1, boxb.x1)
        max_y = max(boxa.y1, boxb.y1)
        min_x = min(boxa.x2, boxb.x2)
        min_y = min(boxa.y2, boxb.y2)
        if min_x <= max_x or min_y <= max_y:
            return 0
        area_i = (min_x - max_x) * (min_y - max_y)
        area_a = (boxa.x2 - boxa.x1) * (boxa.y2 - boxa.y1)
        area_b = (boxb.x2 - boxb.x1) * (boxb.y2 - boxb.y1)
        area_u = area_a + area_b - area_i
        return float(area_i) / float(area_u)
    
    def NMS(box_lists, k):
        box_lists = sorted(box_lists, key=lambda x: x.score, reverse=True)
        NMS_lists = [box_lists[0]]
        temp_lists = []
        for i in range(k):
            for j in range(1, len(box_lists)):
                iou = get_iou(NMS_lists[i], box_lists[j])
                if iou < 0.7:
                    temp_lists.append(box_lists[j])
            if len(temp_lists) == 0:
                return NMS_lists
            box_lists = temp_lists
            temp_lists = []
            NMS_lists.append(box_lists[0])
        return NMS_lists
    
    box1 = Bounding_box(13, 22, 268, 367, 0.124648176)
    box2 = Bounding_box(18, 27, 294, 400, 0.35818103)
    box3 = Bounding_box(234, 123, 466, 678, 0.13638769)
    box_lists = [box1, box2, box3]
    NMS_list = NMS(box_lists, 2)
    print NMS_list
    print NMS_list[0].x1
    
    

    3、机器学习

    3.1 生成模型与判别模型

    判别性模型:

    • 支持向量机SVM
    • 传统的神经网络
    • 线性判别分析
    • 线性回归linear regression
    • 逻辑回归logistics regression
    • 神经网络NN
    • 高斯过程Gaussian process
    • 条件随机场CRF
    • CART(classification and regression tree)
    • Boosting

    生成型模型:

    • 高斯
    • 朴素贝叶斯Native bAYES
    • 混合多项式
    • 混合高斯模型Gaussians
    • 专家的混合物the mixture of experts model
    • 隐马尔科夫模型HM
    • 马尔科夫随机场Markov random fields
    • 判别式分析
    • K近邻KNN
    • sigmoid belief networks
    • 深度信念网络DBN
    • 隐含狄利克雷分布简称LDA(Latent Dirichlet allocation)

    3.2 Bagging、ensemble、boosting关系

    bagging与dropout关系

    https://blog.csdn.net/bymaymay/article/details/77824574

    https://blog.csdn.net/u014114990/article/details/50948079

    https://blog.csdn.net/taoyanqi8932/article/details/54098100

    http://www.cnblogs.com/onemorepoint/p/9264782.html

    3.3 L1、L2范数,区别是什么,为什么L1范数会趋于0,而L2范数不会。

    https://www.zhihu.com/question/37096933

    https://blog.csdn.net/zchang81/article/details/70208061

    https://blog.csdn.net/pan060757/article/details/73321681

    https://www.cnblogs.com/hellcat/p/7979711.html

    3.4 偏差、方差

    3.5 衡量距离的公式有哪些?

    https://blog.csdn.net/u010910642/article/details/51315517

    https://blog.csdn.net/xbinworld/article/details/43612603

    https://www.iteblog.com/archives/2317.html

    https://my.oschina.net/hunglish/blog/787596

    欧氏距离、

    余弦相似度距离

    KL散度:https://blog.csdn.net/ericcchen/article/details/72357411

    3.6 鞍点,如何处理鞍点?

    鞍点 (saddle point)的数学含义是: 目标函数在此点上的梯度(一阶导数)值为 0, 但从该点出发的一个方向是函数的极大值点,而在另一个方向是函数的极小值点。

    判断鞍点的一个充分条件是:函数在一阶导数为零处(驻点)的黑塞矩阵为不定矩阵。

    半正定矩阵: 所有特征值为非负。

    半负定矩阵:所有特征值为非正。

    不定矩阵:特征值有正有负。

    3.7 凸优化

    http://www.360doc.com/content/18/0522/09/32196507_756021531.shtml

    3.8 集成学习方法有哪些

    3.9 最大似然估计和贝叶斯估计

    3.10 SVM核函数

    https://www.zhihu.com/question/21883548

    3.11 监督学习、半监督学习、无监督学习

    3.12 KNN

    3.13 Logistic Regression

    3.14 降维方法有哪些?

    3.15 聚类算法有哪些,各自优缺点

    3.16 朴素贝叶斯

    3.17 决策树

    3.18 PCA,SVD分解

    3.19 强化学习算法有哪些

    3.20 RF、GBDT、XGBoost、lightGBM

    https://blog.csdn.net/u014248127/article/details/79015803

    https://blog.csdn.net/data_scientist/article/details/79022025

    https://blog.csdn.net/qq_28031525/article/details/70207918

    https://blog.csdn.net/bbbeoy/article/details/79590981

    https://www.cnblogs.com/mata123/p/7440774.html

    GBDT原理,和RF的区别

    https://www.cnblogs.com/peizhe123/p/5086128.html

    https://www.cnblogs.com/ScorpioLu/p/8296994.html

    https://www.cnblogs.com/ModifyRong/p/7744987.html

    https://www.cnblogs.com/EstherLjy/p/9372414.html

    3.21 CART、C4.5、ID3 三种决策树的区别

    https://blog.csdn.net/lzzdflg/article/details/78649925

    https://blog.csdn.net/qq_27717921/article/details/74784400

    https://blog.csdn.net/gamer_gyt/article/details/51242815

    https://www.cnblogs.com/itmorn/p/7918797.html

    3.22 逻辑回归中sigmoid函数的好处?以及为什么用极大似然?

    3.23 特征工程

    3.24 线性回归

    https://blog.csdn.net/lisi1129/article/details/68925799

    https://blog.csdn.net/u012535605/article/details/70919993

    3.25 逻辑回归

    https://blog.csdn.net/zjuPeco/article/details/77165974

    3.26 SVM

    https://blog.csdn.net/u012990623/article/details/40272619


    4、图像处理

    4.1 图像特征提取的算法有哪些,各自优缺点、适用范围

    https://blog.csdn.net/xiongchao99/article/details/78776629

    4.2 图像边缘检测算法

    https://www.jianshu.com/p/2334bee37de5

    https://blog.csdn.net/KYJL888/article/details/78253053

    • Roberts算子
    • Sobel算子
    • Prewit算子
    • Canny算子

    4.3 霍夫变换

    https://www.cnblogs.com/AndyJee/p/3805594.html

    https://blog.csdn.net/m0_37264397/article/details/72729423

    4.4 图像保边滤波器

    https://blog.csdn.net/Trent1985/article/details/80509232

    https://blog.csdn.net/eejieyang/article/details/52333112

    https://blog.csdn.net/LG1259156776/article/details/51816875

    https://blog.csdn.net/u012968002/article/details/44463229

    4.5 图像平移

    https://blog.csdn.net/qq_25867649/article/details/52131252

    https://blog.csdn.net/linqianbi/article/details/78593203

    4.6 图像开操作、闭操作

    https://blog.csdn.net/learning_tortosie/article/details/80030201

    https://blog.csdn.net/water_93/article/details/50859193

    https://www.cnblogs.com/daxiongblog/p/6289551.html

    4.7 图像旋转

    https://www.cnblogs.com/hustlx/p/5245226.html

    4.8 最近邻差值、双线性差值

    https://blog.csdn.net/ccblogger/article/details/72918354

    4.9 图像重建质量评价指标

    https://blog.csdn.net/smallstones/article/details/42198049

    4.10 光流法

    https://blog.csdn.net/longlovefilm/article/details/79824723

    https://www.xuebuyuan.com/3203656.html

    4.11 图像去噪的方法

    https://blog.csdn.net/eric_e/article/details/79504444

    4.12 度量图像patch相似度的方法

    https://blog.csdn.net/lg1259156776/article/details/47037583/

    https://blog.csdn.net/zchang81/article/details/73275155/

    https://blog.csdn.net/yangyangyang20092010/article/details/8472257

    4.13 传统图像处理CDC做过吗?

    4.14 傅里叶变换

    4.15 图像融合算法有哪些?

    4.16 图像增强算法有哪些

    4.17 图像滤波方法

    4.18 直方图均衡化

    https://www.cnblogs.com/hustlx/p/5245461.html

    https://www.cnblogs.com/tianyalu/p/5687782.html

    4.19 手动实现卷积

    https://blog.csdn.net/qq_32864683/article/details/79748027

    https://blog.csdn.net/chaipp0607/article/details/72236892?locationNum=9&fps=1

    4.20 LBP

    https://blog.csdn.net/quincuntial/article/details/50541815

    4.21 HOG

    https://blog.csdn.net/zouxy09/article/details/7929348

    https://blog.csdn.net/liulina603/article/details/8291093

    4.22 haar

    https://blog.csdn.net/soaringlee_fighting/article/details/52708638

    https://blog.csdn.net/lanxuecc/article/details/52222369

    4.23 Harris角点

    https://www.cnblogs.com/polly333/p/5416172.html#

    https://blog.csdn.net/lwzkiller/article/details/54633670

    4.24 sift

    https://blog.csdn.net/jaccen2012/article/details/78643286

    https://blog.csdn.net/lyl771857509/article/details/79675137

    https://blog.csdn.net/abcjennifer/article/details/7639681

    4.25 surf

    https://www.cnblogs.com/tornadomeet/archive/2012/08/17/2644903.html

    https://blog.csdn.net/lyl771857509/article/details/79675137

    https://blog.csdn.net/keith_bb/article/details/70225785

    4.26 DCT DFT IDFT

    1、DCT

    https://www.cnblogs.com/helloforworld/p/5283641.html

    https://blog.csdn.net/qq_29573053/article/details/78436325

    https://blog.csdn.net/qq_20613513/article/details/78744101

    2、

    https://blog.csdn.net/IMWTJ123/article/details/79831242

    4.27 图像目标检测与跟踪

    https://blog.csdn.net/try_again_later/article/details/78621720

    4.28 图像中求最值

    https://blog.csdn.net/qq_15642411/article/details/80486208

    4.29 理解图像中的低频分量和高频分量

    https://blog.csdn.net/Chaolei3/article/details/79443520

    https://blog.csdn.net/missingu1314/article/details/8675434


    5、数学

    5.1 概率分布

    5.2 期望、方差、协方差、相关系数

    5.3 假设检验

    https://support.minitab.com/zh-cn/minitab/18/help-and-how-to/statistics/basic-statistics/supporting-topics/basics/what-is-a-hypothesis-test/

    https://blog.csdn.net/pipisorry/article/details/51182843

    https://blog.csdn.net/YtdxYHZ/article/details/51780310

    5.4 54张牌,分3组,大王小王同在一组的概率

    分成3份 总的分法 M=(C54,18)(C36,18)(C18,18)

    大小王在同一份N=(C3,1)(C52,16)(C36,18)*(C18,18) P=N /M=17/53 。

    5.5 最大似然估计、贝叶斯估计

    https://blog.csdn.net/bitcarmanlee/article/details/52201858

    https://www.cnblogs.com/zjh225901/p/7495505.html

    https://blog.csdn.net/feilong_csdn/article/details/61633180

    5.6

    https://www.nowcoder.com/questionTerminal/836b01b7809248b7b6e9c30495d4680e?from=14pdf

    假设一段公路上,1小时内有汽车经过的概率为96%,那么,30分钟内有汽车经过的概率为?

    48%
    52%
    80%
    96%

    一小时有车的概率 = 1 - 一小时没车的概率 = 1 - 两个半小时都没车的概率 = 1 - (1 - 半小时有车的概率)^2
    1-(1-x)^2=0.96
    x = 0.8

    5.7 三门问题

    三个宝箱里有一个宝箱里有宝物,两个是空的,你选了一个,主持人打开剩下2个中的一个发现没有宝物,问你换不换

    假设A无,B无,C有,
    选A,则主持人只会开B,1/3概率;
    选B,则主持人只会开A,1/3概率;
    选C,则主持人会开A\B,1/3概率;

    可见,不换只有1/3的概率中,换的话,有2/3的概率中;

    5.8 概率题:抛一个骰子,直到集齐六面,问抛骰子的期望次数。

    5.9 概率题:抛色子连续n次正面向上的期望次数。

    5.10 一个人向北走了一公里,向东走了一公里,又向南走了一公里,最后回到了最开始的起点,为什么?

    南极点,刚好一个等边三角形;

    或者是一个一圈距离刚好是1公里的那个地方。向北走之后,达到那个地方,饶了一圈回到这个地方,再向南走回去。

    https://blog.csdn.net/Turinglife/article/details/7358061

    从逻辑上来讲,题目从好像缺少了一次向西的过程,才可以回到原地。有没有可能向东1公里还在原地,答案是肯定的,如果有一个纬度,绕其一圈恰好是1公里即可实现,所以这样的点有无穷多个,只要找到那个纬度即可。

    5.11 一个四位数abcd,满足abcd * 4 = dcba,求这个数

    a9没有进位,且为四位数,a只能为1
    d
    9个位数为1,d只能是9
    b9后为个位数(9加任何数进位),这个数只能是1或0,排除1,b=0
    c
    9+8的尾数为0,则c*9个位数为2,c=8

    a4没有进位,说明a=1或2,但是d4的个位是a,不可能a=1,所以a=2;

    d=a4=8;而且没有进位,说明b4+它的可能进位不超过10;

    如果b=0:则c*4的个位需要是7,不存在,不符;

    如果b=1:则c*4的个位需要是8,存c=2不符合,c=7符合,所以为2178;

    如果b=2:则c*4的个位需要是9,不符;

    5.12 概率题:一个家庭有两个孩子,已知其中一个是女孩,求另一个也是女孩的概率

    (1/21/2)/(1-1/21/2)
    =(1/4)/(3/4)
    =1/3

    5.13 16个球队中随机选2个,在大量选取后,越强的队越容易被选中

    5.14 有一个3L、一个5L的桶,请量出4L的水

    5L桶装满水,倒入3L桶;此时5L中有2L水,3L桶中有3L水;

    3L桶全部倒走,将5L桶的2L水道入3L桶中,此时5L桶中没有水,3L桶中有2L水;

    将5L桶倒满水,然后向3L桶中倒水,此时3L桶水已满,5L桶中还剩4L水。

    5.15 把1~9这9个数填入九格宫里,使每一横、竖、斜相等。

    https://zhidao.baidu.com/question/329122415632328485.html

    5.16 一个圆上随机三个点组成锐角三角形的概率

    一个圆周上,随机点三个点,这三个点在同一个半圆上的概率是多少?
    三个点在同一个半圆时,形成的三角形为直角或钝角三形(自己想为什么).
    不在同一个半圆时,为锐角三角形.
    三点在同一半圆的概率是3/4,所以你这题的答案为1/4.

    设在圆上任取的3点是A、B、C。圆心为 O
    先假定A、B的位置,设弦AB的圆心角为∠α,且∠α属于[0,π].那么满足锐角三角形的C点就要在AO延长线与BO延长线间,所以C点的取值范围只有圆心为α的弧,即概率为:α/(2π)
    对任意A、B的位置,C点的概率为对α/(2π)从[0,π]积分,结果是 π/4

    关于为什么C点就要在AO延长线与BO延长线间,因为C点如果不在这之间,则ABC三点就会处于同一个半圆中。而处于同一个半圆中的三个点构成直角或者钝角三角形。


    6、计算机基础

    6.1 进程线程区别

    https://www.cnblogs.com/zhuzhu2016/p/5804875.html

    地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
    资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
         一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。

    进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程

    执行过程:每个独立的进程程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
    线程是处理器调度的基本单位,但是进程不是。
    两者均可并发执行。

    优缺点:

    线程执行开销小,但是不利于资源的管理和保护。线程适合在SMP机器(双CPU系统)上运行。

    进程执行开销大,但是能够很好的进行资源管理和保护。进程可以跨机器前移。

    6.2 描述mysql中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响

    索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。索引的遵循原则:1、最左侧原则,表的最左侧的一列,往往数据不会发生改变,不影响其他列的数据;2、命名短小原则,索引命名过长会使索引文件变大,损耗内存。

    普通索引(由关键字KEY或INDEX定义得到索引):加快数据的查询速度

    唯一索引(由关键字UNIQUE把它定义为唯一索引):保证数据记录的唯一性

    主键:一种特殊的唯一索引,在一张表中只能定义一个主键索引,用来标识唯一一条数据,用PRIMARY KEY创建。

    联合索引:索引可以覆盖多个数据列,如像INDEX(columnA, columnB)索引,这就是联合索引。

    索引可以极大的提高查询访问速度,但是会降低插入,删除,更新表的速度,因为在执行写操作的时候还要操作索引文件。

    6.3 TCP传输的可靠性是如何保证的

    TCP提供一种面向连接的、可靠的字节流服务。
      面向连接:意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信。广播和多播不能用于TCP。
    TCP通过下列方式来提供可靠性:
    1、应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。 (将数据截断为合理的长度)
    2、当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
    (超时重发)
    3、当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒 。 (对于收到的请求,给出确认响应) (之所以推迟,可能是要对包做完整校验)
    4、 TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。 (校验出包有错,丢弃报文段,不给出响应,TCP发送数据端,超时时会重发数据)
    5、既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。 (对失序数据进行重新排序,然后才交给应用层)
    6、既然IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。(对于重复数据,能够丢弃重复数据)
    7、TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲区溢出。(TCP可以进行流量控制,防止较快主机致使较慢主机的缓冲区溢出)TCP使用的流量控制协议是可变大小的滑动窗口协议。
    字节流服务::
    两个应用程序通过TCP连接交换8bit字节构成的字节流。TCP不在字节流中插入记录标识符。我们将这称为字节流服务(bytestreamservice)。
    TCP对字节流的内容不作任何解释:: TCP对字节流的内容不作任何解释。TCP不知道传输的数据字节流是二进制数据,还是ASCII字符、EBCDIC字符或者其他类型数据。对字节流的解释由TCP连接双方的应用层解释。


    7、C++

    7.1 多态是什么,怎么实现

    https://www.cnblogs.com/dormant/p/5223215.html

    https://www.cnblogs.com/Allen-rg/p/6927129.html

    https://blog.csdn.net/xy913741894/article/details/52939323

    7.2 static

    https://www.cnblogs.com/songdanzju/p/7422380.html

    7.3 const

    7.4 模板

    7.5 静态库和动态库

    7.6 多态

    7.7 引用和指针

    7.8 vector实现原理

    https://blog.csdn.net/u012658346/article/details/50725933

    https://www.cnblogs.com/laodageblog/p/3777563.html

    7.9 C++的特性

    http://blog.jobbole.com/44015/

    https://www.jianshu.com/p/4f58ebc43b82

    7.10 手写代码实现一个string类,手写代码实现智能指针类

    7.11 多态和继承,构造函数,析构函数等。

    7.12 STL低层实现

    https://blog.csdn.net/csnd_ayo/article/details/72574924

    https://blog.csdn.net/TQH_Candy/article/details/52387714

    https://blog.csdn.net/u011408355/article/details/47957481


    8、Python

    8.1 函数传参会改变参数本身吗

    https://blog.csdn.net/u012614287/article/details/57149290

    https://blog.csdn.net/qq915697213/article/details/66972836

    8.2 xrange 和 range的区别

    8.3 为什么python的多线程鸡肋

    https://blog.csdn.net/q_l_s/article/details/58072799

    https://blog.csdn.net/syh_486_007/article/details/57405254

    https://blog.csdn.net/b9q8e64lo6mm/article/details/81031283

    什么是全局解释器锁GIL

    Python代码的执行由Python 虚拟机(也叫解释器主循环,CPython版本)来控制,Python 在设计之初就考虑到要在解释器的主循环中,同时只有一个线程在执行,即在任意时刻,只有一个线程在解释器中运行。对Python 虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行。
    在多线程环境中,Python 虚拟机按以下方式执行:

    1. 设置GIL
    2. 切换到一个线程去运行
    3. 运行:
      a. 指定数量的字节码指令,或者
      b. 线程主动让出控制(可以调用time.sleep(0))
    4. 把线程设置为睡眠状态
    5. 解锁GIL
    6. 再次重复以上所有步骤

    在调用外部代码(如C/C++扩展函数)的时候,GIL 将会被锁定,直到这个函数结束为止(由于在这期间没有Python 的字节码被运行,所以不会做线程切换)。
    全局解释器锁GIL设计理念与限制

    GIL的设计简化了CPython的实现,使得对象模型,包括关键的内建类型如字典,都是隐含可以并发访问的。锁住全局解释器使得比较容易的实现对多线程的支持,但也损失了多处理器主机的并行计算能力。
    但是,不论标准的,还是第三方的扩展模块,都被设计成在进行密集计算任务是,释放GIL。
    还有,就是在做I/O操作时,GIL总是会被释放。对所有面向I/O 的(会调用内建的操作系统C 代码的)程序来说,GIL 会在这个I/O 调用之前被释放,以允许其它的线程在这个线程等待I/O 的时候运行。如果是纯计算的程序,没有 I/O 操作,解释器会每隔 100 次操作就释放这把锁,让别的线程有机会执行(这个次数可以通过 sys.setcheckinterval 来调整)如果某线程并未使用很多I/O 操作,它会在自己的时间片内一直占用处理器(和GIL)。也就是说,I/O 密集型的Python 程序比计算密集型的程序更能充分利用多线程环境的好处。

    8.4 解释性语言、编译型语言的区别,python是哪种

    https://blog.csdn.net/u014647208/article/details/78329187

    展开全文
  • 谈谈我学习图像处理的经历与收获

    万次阅读 多人点赞 2016-12-29 12:25:57
    一个Java程序员转到图像处理的亲身经历,感悟与收获。
  • 图像处理需要哪些基础知识

    千次阅读 2016-05-28 21:28:18
    图像处理基础:冈萨雷斯的数字图像处理 图像中的目标更好的识别 模式识别相关理论‘机器学习、计算机视觉。这些都是交叉的学科 数学基础:高数(基础),概率论(比如高斯分布,马尔科夫,贝叶斯用的超多。每个...
  • 该系列文章是讲解Python OpenCV图像处理知识,前期主要讲解图像入门、OpenCV基础用法,中期讲解图像处理的各种算法,包括图像锐化算子、图像增强技术、图像分割等,后期结合深度学习研究图像识别、图像分类应用。...
  • 图像处理需要掌握的基本知识架构

    千次阅读 2018-03-20 18:34:45
    图像像素操作 几何运算-加减乘除 逻辑运算-与或非取反 像素读写 通道混合与调整 对比度与亮度调整 图像变换 插值(zoom in或out) 旋转(rotate) 透视变换 错切变换 翻转 像素统计 计算均值与方差 计算直方...
  • 图像处理(图像学习)的基础必备知识

    万次阅读 多人点赞 2016-04-12 22:12:34
    基础储备知识列表(图像必备基础) 1. 图像会表示成一个2D实数矩阵f(x,y),也称为是图像在那个像素的灰度或者是亮度,对于double类型的是0.0黑 1.0白,对于unit8类型是0黑,255是白 2. 图像常见的数字形式...
  • 图像处理基础知识总结1

    万次阅读 多人点赞 2017-05-18 17:49:18
    图像处理基础知识总结(1)前言:从接触图像处理、生物特征识别、视频编解码、机器学习已两年有余,还没有系统的总结过,正好最近刷一下Tsinghua的Tipa课件和PKU的Digital Image Processing,对以前的图像处理基础...
  • 数字图像处理期中学习报告

    千次阅读 2018-09-07 19:26:28
    数字图像处理数字图像处理学习内容总结 第一章 绪论 1 什么是数字图像处理 2 使用数字图像处理领域的实例 3 数字图像处理的基本步骤 4 图像处理系统的组成 第二章 数字图像处理基础 1 视觉感知要素 2 光和电磁...
  • 伴随着图像处理技术的发展,我们每天无时无刻都在接触着图像处理的一切,打开相机,设置美颜程度,伴随着快门键的按下,一张瘦脸磨皮的人像处理完成了。按下手机的解锁键,前置摄像头已经获取了你的人脸图像,并在你...
  • 数字图像处理基本知识(一)

    千次阅读 2018-09-28 16:43:24
     主要记载学习数字图像处理的基本知识,仅供参考。 目录 一、什么是图像处理? 二、图像的数字化表达 三、数字图像处理的基本知识 一、什么是图像处理?  图像处理就是对图像信息进行加工处理,满足实际的...
  • 选择了数字图像处理这个研究方向作为终身的目标,天赋+兴趣+努力,你将拥有了开启未来最前沿,最富活力技术的钥匙。人类获取的信息80%以上来自于视觉,但目前让机器来处理这些信息才刚刚开始呀,同志们要努力! ...
  • 个人总结知识点 1.问:为什么y=wx明明是一个矩阵,而损失函数是一个值 2,问:支持向量机SVM与逻辑回归的关系 SVM把逻辑回归的sigmoid函数换成核函数,损失函数由平均交叉熵换成了不同分类的距离间隔 3,问:...
  • 图像处理之深度学习

    万次阅读 2018-05-05 22:02:57
    第一种 自我激发型 基于图像处理的方法,如图像增强和图像复原,以及曾经很火的超分辨率算法。都是在不增加额外信息的前提下的实现方式。 1. 图像增强 图像增强是图像预处理中非常重要且常用的一种方法,图像...
  • 图像处理与识别学习小结

    万次阅读 2013-09-27 10:46:55
    图像处理与识别学习小结   数字图像处理是对图像进行分析、加工、和处理,使其满足视觉、心理以及其他要求的技术。图像处理是信号处理在图像域上的一个应用。目前大多数的图像是以数字形式存储,因而图像处理很多...
  • 如何学好图像处理——从小白到大神?

    万次阅读 多人点赞 2020-04-17 02:28:38
    什么是数字图像处理?历史、以及它所研究的内容。 说起图像处理,你会想到什么?你是否真的了解这个领域所研究的内容。纵向来说,数字图像处理研究的历史相当悠久;横向来说,数字图像处理研究的话题相当广泛。 ...
  • 图像处理-机器学习总结

    千次阅读 2016-03-26 17:53:09
    图像处理、矩阵论、模式识别、机器学习、最优化、凸优化、高性能计算 书单: 1、 数字图像处理的MATLAB实现(第2版)(国外计算机科学经典教材)(美)冈萨雷斯,(美)伍兹 著,阮秋琦 等译 /2011-06-01 /电子...
  • 图像处理中常用数学知识

    万次阅读 2016-07-04 10:38:28
    2.3.3 赋范空间 每个实数或复数,都有相对应的绝对值或者模,每一个n维矢量,也都可以定义其长度。如果把“长度”的概念推广到一般抽象空间中的元素上,就可以得到范数这个概念。 ...希尔伯特空间是一类性质非常...
1 2 3 4 5 ... 20
收藏数 99,349
精华内容 39,739
关键字:

图像处理需要学习啥知识