Tensorflow2.0相比1.0有哪些改进,Pytorch相比Tensorflow2.0有什么区别?
答:(1)Tensorflow1.0存在文档和接口混乱、默认占用所有GPU的所有内存、使用繁琐、调式困难等问题;Tensorflow2.0无需运行会话、无需变量,占位符、使用动态图操作,调试过程简单、可以自动求微分。
实现方式不同:符号式编程和命令式编程
tensorflow是纯符号式编程,运行效率高,
Pytorch是纯命令式编程,实现方便,但是运行效率低。
图的定义不同:动态定义和静态定义
Tensorflow是静态图计算
Pytorch是动态图计算,随时定义、更改和执行节点。\\因此更容易调试、灵活
网络训练可视化
TensorFlow最吸引人的地方之一就是TensorBoard,可以清晰地看出计算图、网络架构;
Pytorch没有类似TensorBoard的工具,但是Pytorch可以导入TensorBoardx或者matplotlib之类的工具包用于数据可视化。
Yolov5的相比yolov3的改进,细节;以及它的结构?
Yolov5有n,s,m,l,x五个版本,32倍下采样,n6,s6,m6,l6,x6针对超分辨率1280×1280,64倍下采样。
backbone:New CSP-Darknet53 focus模块换成了6×6卷积,更加高效;
CSP(跨阶段局部网络) 缓解计算问题
neck:SPPF New CSP-PAN SPP模块(空间金字塔池化模块)
SPP变为SPPF,并行通过多个不同大小的最大池化,再融合;串行多个5×5大小的MaxPool层,再融合;此外就是在PAN结构中加入了CSP。
head:YOLOv3head 输出端,不同的输出特征层预测不同尺寸的目标
自适应图片缩放
数据增强:马赛克(Mosaic),四张图像拼成一张图像;copy past:将部分目标随机粘贴到图片中,数据要有实例分割信息才行;缩放和平移;两张图片按照一定的透明度融合在一起。
自适应锚框计算、多尺度训练
激活函数:Leaky ReLU 和 Sigmoid 激活函数。
损失函数:CIOU 做边界框损失函数,只计算正样本的定位损失;
BCE计算正样本类别概率损失;
BCE计算目标得分损失,计算所有样本的目标损失。
跨网格预测(新的Loss计算方法)
Seetaface种的特征向量是怎么比对的,余弦距离,还有什么,Lossfunction怎么计算的
余弦距离、角度距离;
Yolov3的剪枝,yolov3-tiny网络, BP神经网络前向和后向是啥?
网络分为backbone:Darknet-53网络结构,由一系列1×1和3×3卷积层组成,每个卷积层会包括一个BN和LeakyReLu层,网络种有53个卷积层,最后的全连接层也算卷积层。
Neck:使用FPN,将多尺度的输入特征进行特征融合;没有深层特征向浅层特征融合(PAN)。
Head:
没有融合比较低维的信息,适合预测尺寸比较大的目标;
融合了相对比较低维的信息,适合预测中等尺寸的目标;
融合了比较低维的信息,保留了图像上比较多的细节信息,适合预测一些小尺寸的目标。
损失部分:
其损失有置信度损失(是否存在目标,二值交叉熵损失,Sigmoid)、分类损失(是否属于某个类别,依然使用二元交叉熵损失,应对更加复杂的场景,Sigmoid)、定位损失(真实偏差值与预测偏差值的平方和)。
剪枝网络,结构更简单,只有两个输出;
BP神经网络前向是权重相乘加偏移量,后向传播是求偏导。
剪枝:分为神经元的突触剪枝和神经元剪枝,剪枝后重新训练。
优化器有哪些:
针对分批次而引入的优化器:SGD(易受样本噪声影响、可能陷入局部最优解;)加入Momentum动量,有效抑制样本噪声的影响。
针对学习率的优化器:Adagrad优化器(自适应学习率),学习率下降过快还没有收敛就停止;进而引入RMSProp优化器,防止学习率下降过快,加入了衰减系数;Adam优化器更好的优化了自适应学习率,加入了一阶动量和二阶动量。
分类的损失:
有二值化损失(sigmoid),多元交叉熵损失(SoftMax)
回归问题用什么损失函数:
均方差、平均绝对值误差。
抑制过拟合的方法:
dropout、正则化、图像增强(增加训练集各种样式,翻转、旋转、噪声)
正则化的作用:过拟合的时候函数的系数往往非常大,而正则化就是通过约束参数的范数使其不要太大,所以在一定程度上减少过拟合。L1正则化,绝对值距离;L2正则化,平方差距离。
常用的注意力机制:
空间域注意力:空间区域注意力可以理解为让神经网络在看哪里。通过注意力机制,将原始图片中的空间信息变换到另一个空间中并保留了关键信息。
通道注意力:通道注意力可以理解为让神经网络在看什么,典型的代表是SENet。卷积网络的每一层都有好多卷积核,每个卷积核对应一个特征通道,相对于空间注意力机制,通道注意力在于分配各个卷积通道之间的资源,分配粒度上比前者大了一个级别。
SE、CA、CBAM、ECA
SE:主要包含压缩和激励两个部分,
压缩:全局平均池化
激励:两个全连接层+激活函数组成,其中SERadio属于缩放参数,减少通道个数。
Scale操作:通道权重相乘,计算量和参数量都会增加,但计算量相加是在全连接层相比卷积层并不大。
梯度消失和梯度爆炸
激活函数求导后与权重相乘,结果大于1时,层数增多出现梯度爆炸;结果小于1时,层数增多出现梯度消失。Sigmoid激活函数,梯度消失出现的普遍
解决方案:
a) Relu、leakrelu、elu等激活函数,正数部分恒等于1,不会出现梯度消失和爆炸;但是复数部分恒为0,会导致一些神经元无法激活。
b) batch normalization 批标准化,通过批标准化将输出信号规范化到均值为0,方差为1的正态分布,保证网络的稳定性,消除了权重放大缩小的影响。
c)预训练加微调
CNN的演变
Lenet:2个卷积和3个全连接层,最早用于数字识别
AlexNet:12年的imagenet冠军,5个卷积3个全连接层,多个小卷积代替大卷积,relu激活,解决梯度小数问题,引入dropout避免模型过拟合,最大池化。
ZF-net:13年Imagenet冠军,卷积核由11变为7,步长由4变为2.
Vggnet:14年Imagenet第二名,更深的网络,多个小卷积核堆叠
Googlenet:14年Imagenet第一名,引入inception模块,不同的卷积核感受野不同,拼接表示不同尺度特征融合;采用平均池化代替全连接层;避免梯度消失,增加2个辅助的Softmax用于向前传导梯度
Resnet:引入残差结构,解决深度网络特征提取退化问题;有效解决训练过程中梯度消失和爆炸问题。
DenseNet:密集链接;特征加强传播,特征重用,极大的减少了参数量。
目标检测
Faster R-CNN、SSD、Yolo系列、Retainnet
模型的量化
模型的量化指的是压缩参数、提升速度、降低内存占用、精度会损失;量化的算术:模型从Int32转化为Int8,以及使用Int8进行推理。TensorFlow Lite部署量化的网络。
卷积算子
输出图片大小是W×W,卷积核大小是F×F,步长是S,padding的像素数是P,于是我们可以得到N=(W-F+2P)/ S + 1 输出特征矩阵是N×N。池化:最大值、最小值、均值、中值(用的少)。
感受野的计算
可以联想到VGG网络,可以通过堆叠两个3×3卷积来代替5×5卷积核,堆叠三个3×3卷积核来替代7×7卷积核。 F(i) = (F(i+1)-1)×Stride + Ksize,第i+1层感受野减去1乘以步距加上卷积核大小。提高感受野的方式有:1、多个卷积核堆叠,2、空洞卷积:用卷积扩张率a来表示卷积扩张的程度。K = K+(k-1)*(a-1)。感受野:2^(a+2) -1 = 5。作用:扩大感受野、获取多尺度上下文信息(不同的扩展率的空洞卷积核叠加),可以降低计算量。
面试项目介绍:
只介绍研究生的两个项目:昆虫梳理行为识别、船舶水尺读数
余弦相似度,计算两个向量的相似性,夹角越小,相似性越高,余弦值越接近于1。
介绍论文的创新点:
1、船舶水尺读数:水线检测(Yolov3检测),水尺字符识别(Yolov3),应用创新、改进Yolov3
2、昆虫行为识别:应用创新,Yolov5检测,加入了注意力机制,时空特征提取,ResNet分类。应用创新
3、猪肉部位分类:应用创新,网络的改进:主要是针对ResNet分类网络添加注意力机制的改进
4、诱虫瓶害虫进洞检测:三种方法,密集光流、改进的U-Net、改进的Yolov5加了注意力机制(ECA效果最好)。应用创新、诱虫瓶计数。
5、储粮害虫行为预测和轨迹跟踪:DeepSort中有检测器和跟踪器,检测器原生是Faster
R-CNN,可以改进为Yolov5,跟踪器里面包含匈牙利算法和卡尔曼滤波,前者是跟踪,后者是位置更新(卡尔曼滤波)。①卡尔曼滤波预测和检测匹配成功,视频中的每帧图像经过卡尔曼滤波后生成当前帧中所有目标的预测轨迹边界框,根据检测器的结果将检测和当前帧的边界框进行数据关联,对于相应的检测结果匹配卡尔曼滤波的预测结果更新其估计的跟踪轨迹边界框,再跟踪下一帧,并循环执行观测、预测、匹配更新的流程。②匹配失败的情况:检测器漏检,造成匹配失败;长时间被遮挡超出连续匹配的次数,匹配丢失跟踪也就丢失。其解决方案:会再次计算IOU进行第二次匹配,减少遗留的检测和跟踪。若二次匹配失败,会建立新的轨迹,经过三次匹配考察,若为匹配成果就加入轨迹集合,否则标记为不真实轨迹,到了生命周期还匹配失败就会删除轨迹。
Vivo图像算法面试经验总结:
C和C++的区别
(1)C是面向过程的结构化编程语言,C++是面向对象的言语,C++有封装、继承、多态三种特性,增加强制类型转换,支持模板类和模板函数。
(2)结构体:C只能定义变量不能定义函数,可以定义函数指针,C++可以定义函数,修饰符,可以有虚函数,可以继承。
(3)C语言有标准函数库,功能相同的放在一个头文件中,C++对与大多数函数都有很紧密的集成,有可用的API函数。
面向对象思想
OOP是一种围绕对象构建的编程语言模型,它使用对象和数据作为核心组件,数据划分为对象数据字段,可以通过类的方法声明描述对象的内容和行为。
进程和线程的区别
(1)进程是资源分配的最小单位,线程是程序执行的最小单位
(2)进程有自己的独立地址空间,每启动一个进程,系统就会自动为它分配地址空间,建立数据库表来维护代码段、堆栈段和数据段;线程是共享进程中的数据,使用相同的地址空间,因此CPU切换一个线程花费要更小,同时创建线程的花费也更小。
(3)线程之间通信更方便,同一进程下的线程共享全局变量、静态变量等数据;而进程之间的通信是以通信的方式进行。多线程要解决同步和互斥问题;
(4)多进程程序更加健壮,多线程程序只要一个线程死掉,整个进程就会死掉;而一个进程死掉并不会对另一个进程造成影响。
Soft-NMS
在NMS算法中,直接将IOU超过阈值的检测框的得分设置为0,而Soft-NMS则将其得分进行衰减,有两种衰减方式。第一种是使用1-IOU与得分的乘积作为衰减后的值,但这种方式在略低于阈值或高于阈值的部分,经过惩罚衰减之后,导致排序得分变乱,应该是搞IOU有搞惩罚函数、低IOU有低惩罚函数,中间逐渐过渡,提出高斯惩罚函数。
端到端的检测器
可以参照Faster R-CNN的一个演化过程:一开始的RCNN分为四步:候选框选择(选择搜索算法)、特征提取、SVM分类、边界框回归;再到Fast RCNN总的分为两步:候选框选择,特征提取,候选框投影到特征图得到特征矩阵,再通过ROI Pooling层缩放到同等大小;再到最后的Faster RCNN,RPN和Fast RCNN联合训练,以实现一种端到端的目标检测算法。6、线性回归和逻辑回归
(1)线性回归做预测;逻辑回归做分类
(2)前者拟合合适的模型函数;后者预测函数的输出值;
(3)参数的更新,前者是最小二乘法;后者是梯度下降;
(4)因变量:前者连续的数据;后者是离散的label;
比如:饮食对体重的影响,如果输入数据是(性别、饮食习惯、身高、年龄等)预测重量的具体值,是线性回归;如果是预测体型,如微胖、正常等分类,是逻辑回归问题。
小目标检测的trick
1、数据增强
2、小目标的重采样
3、根据数据集小目标的分布进行anchor的调整(guide-anchor,k-means)
4、多感受野:FPN,可变型卷积
5、添加注意力机制,比如SENET,让网络更加注重小目标
6、HRnet超高分辨率的backbone。
7、LN和BN的区别:
LN是层标准化,对于一个样本是“横着”来的,经过同一层的所有神经元做归一化。
BN是批标准化,BN是“竖”着来的,经过一个神经元的所有样本做归一化,所以与batch size有关。
Canny边缘检测:
(1)应用高斯滤波去平滑图像为了去除噪音的影响。(2)计算图像的x轴和y轴的梯度,并计算梯度的合方向。(3)使用非极大值抑制,对那些伪边界点抑制。(4)把min_max应用到上面得到的图像(5)通过滞后跟踪边缘:通过抑制所有其他弱且未连接到强边缘的边缘来完成边缘的检测。
传统机器学习有了解哪些:传统机器学习了解的有:分类算法:朴素贝叶斯
优点:(1)算法逻辑简单,易于实现;(2)分类过程中时空开销小;缺点:粗暴的认为属性之间相互独立,实际情况下属性越多其之间的关联性越高,所以实际的分类效果往往不好。
还有支持向量机SVM:1963年提出的,是最受欢迎的分类方法,最经典。本质是线性分类,特征空间中最大化间隔的线性分类器,是独一无二的分类模型,解决的是二值分类问题。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ndord9Qa-1662292749380)(en-resource://database/1117:1)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7r8uQgca-1662292749382)(en-resource://database/1115:1)]
SVM核函数:
支持向量机的核函数主要有:线性核,多项式核,径向基核函数(也叫高斯核函数),作用是将低纬非线性数据映射到高维空间,从而变成线性可分的数据。
PCA、SVD分解:
PCA主成分分析,是降维中的非常常用的一种手段,一个空间向量可以使用向量基进行表示,PCA降维指的是将d维度降到d‘维度,数据是(a1,a2,a3,hellip;,am),而我们要做的是求出d’个基向量p,相乘得到d‘×M维度的矩阵,即每个数据ai的维度变成了d’。
SVD:奇异值分解,进行特征分解时需要方阵,但是进行奇异值分解时不需要方阵
霍夫变换
(What)霍夫变换是一种特征提取手段,用来提取形状(直线,圆等)边界。(why)形状边界假设是直线,这条线是很多点组成的一个集合。处理这个集合比处理一个点要复杂的多。简单讲,霍夫变换就是想把一条直线用点来处理,这样更容易提取出边界。(How)前面提到把线换成点来处理,其实就是通过空间变换来实现的,变换后的空间就是霍夫空间
过拟合:
训练集准确率在上升,而测试集准确率在下降,出现过拟合。解决方法,增大数据集,dropout,L1核L2正则化(在损失函数上增加某些规则,缩小解空间,从而减少求出过拟合的解的可能性),BN,提前终止迭代。
L1、L2范数,L1趋向于0,但L2不会,为什么?
L1向量中各个元素绝对值的和,L2向量中各个元素平方和再求平方根。L1范数更容易产生稀疏的权重,L2范数更容易产生分散的权重。
正则化有哪些,分别有什么作用?
L0范数和L1范数都能达到使参数稀疏的目的,但L0范数更难优化求解,L1范数是L0范数的最优凸近似,而且它比L0范数要容易优化求解。L2范数不但可以防治过拟合,提高模型的泛化能力,还可以让我们的优化求解变得稳定和快速。L2范数对大数和异常值更敏感。
偏差、方差、噪声:
偏差:偏差是用所有可能的训练数据集训练出的所有模型的输出的平均值与真实模型的输出值之间的差异。
方差:针对不同的训练集而言,描述的是不同数据训练得出的模型之间的方差。
噪声:其存在是学习算法所无法解决的问题,数据的质量决定了学习的上限。假设在数据已经给定的情况下,此时上限已定,我们要做的就是尽可能地接近这个上限。
inception v2、v3区别:
主要讲inceptionv3:①使用RMSprop优化器;②标签平滑正则化;③分解7×7卷积;④辅助分类器的FC层使用BN。
resnet好处:
①网络更容易在某些层学到恒等变换;②残差网络是很多浅层网络的集成,层数指数级多;③残差网络使信息更容易在各层之间流动,包括在前向传播时提供特征重用,在反向传播时缓解梯度信号消失。
为什么用LR,不是0-1:
拿二分类来说。LR模型里分类标签就是让数据容易表示为伯努利形式而已,方便后续似然函数的表达和梯度下降的计算。这是SVM,感知机让标签分为{-1,1}是一样的。就是方便而已。
sigmoid优缺点:
优点:函数处处连续,便于求导;可以将函数值约束到[0, 1],可以压缩数据,且幅度不变;便于向前传输。缺点:在趋向无穷的地方,函数值变化很小,容易丢失梯度,不利于深度神经网络的反馈传输;幂函数还是比较难算的;函数均值不为0,当输出大于0时,则梯度方向将大于0,也就是说接下来的反向运算中将会持续更新正向更新;同理,当输出小于0时,接下来的方向运算将持续负向更新。
讲一下LSTM:
长短期记忆网络,属于RNN类别
图像的特征提取有哪些算法:
三大算法:①HOG算法,方向梯度直方图,用于物体检测;②LBP特征,局部二值模式,是一种描述局部纹理特征的算子,具有旋转不变性和灰度不变性;③Haar特征分为三类:边缘特征、线性特征、中心特征和对角线特征。
L1 L2范数了解吗?区别:
L1范数是向量中的各个元素绝对值之和;L2范数是向量中的所有元素的平方和的开平方。L1可以进行特征选择,让特征系数为0;L2可以防治过拟合,提升模型泛化能力。
余弦相似度距离和欧氏距离的区别?
两者都是评定个体间差异大小的。欧几里得距离度量会受指标不同单位刻度的影响,所以一般需要先进行标准化,同时距离越大,个体间差异越大。空间向量的余弦夹角的相似度度量不会受指标刻度的影响,余弦值落于区间[-1,1],值越大,差异越小。
如果数据不好怎么办,数据不均衡怎么处理、只有少量带标签怎么处理?
具体问题具体分析,比如和筛选数据,自己扩充数据,增强数据,重新标注等。