图像算法实习生--面经1

系列文章目录


文章目录

  • 系列文章目录
  • 前言
  • 一、为什么torch里面要用optimizer.zero_grad()进行梯度置0
  • 二、Unet神经网络为什么会在医学图像分割表现好?
  • 三、transformer相关问题
  • 四、介绍一下胶囊网络的动态路由
  • 五、yolo系列出到v9了,介绍一下你最熟悉的yolo算法
  • 六、一阶段目标检测算法和二阶段目标检测算法有什么区别?
  • 七、讲一下剪枝
  • 八、讲一下PTQ and QAT量化的区别
  • 九、默写一下GAN的损失函数
  • 十、了解其他的变种GAN吗?CycleGAN?
  • 十一、不平衡数据怎么处理?
  • 十二、讲一下神经网络反向传播原理
  • 十三、torch里面保存模型的两种方法
  • 总结


前言

图像算法实习生–面经1


一、为什么torch里面要用optimizer.zero_grad()进行梯度置0

optimizer.zero_grad()意思是把梯度置零,也就是把loss关于weight的导数变成0

在PyTorch中,使用optimizer.zero_grad()是为了在每次反向传播之前将模型参数的梯度置零。这是因为在PyTorch中,梯度是累积的,即每次计算梯度时都会将新的梯度值加到之前的梯度上。如果不在每次反向传播前将梯度清零,那么梯度值会一直累积下去,导致错误的梯度更新。

因此,通过调用optimizer.zero_grad()可以确保在每次反向传播之前将梯度清零,以便正确计算新的梯度并进行参数更新。这是训练神经网络时非常重要的一步,可以避免梯度累积导致的错误更新。

二、Unet神经网络为什么会在医学图像分割表现好?

  1. U形结构(U-shape architecture):Unet 的结构采用了一种编码器-解码器结构,其中编码器负责逐步提取特征并减少空间分辨率,而解码器则负责逐步恢复空间分辨率和生成分割结果。这种 U 形结构有助于捕获不同尺度的特征信息,适用于医学图像中存在的各种大小和形状的目标。

  2. 跳跃连接(Skip Connections):Unet 中引入了跳跃连接,将编码器中不同层的特征图与解码器对应的层相连接,使得解码器能够利用更丰富的信息进行细致的分割。这种结构有助于减轻信息丢失和梯度消失问题,提高了网络对细节信息的捕获能力。

  3. 数据增强和正则化:医学图像数据通常数量有限且噪声较多,Unet 在训练过程中可以通过数据增强技术(如旋转、翻转、缩放等)增加数据多样性,提高模型的泛化能力。此外,正则化技术(如 Dropout、Batch Normalization 等)也有助于提高模型的鲁棒性和泛化能力。

  4. 适应性损失函数:在医学图像分割任务中,常常需要考虑到目标与背景之间的类别不平衡和边界细节的重要性。Unet 结合了适应性损失函数(如 Dice 系数、交叉熵损失等),能够更好地处理类别不平衡和边界模糊等问题,提高了分割的准确性。

三、transformer相关问题

可参考transformer灵魂21问

四、介绍一下胶囊网络的动态路由

动态路由过程:

  1. 预测输出向量:每个低层胶囊通过乘以权重矩阵预测高层胶囊的输出向量。

  2. 计算相关性:根据低层胶囊输出向量与高层胶囊预测输出向量之间的相似性,计算它们之间的相关性得分。

  3. 更新权重:根据相关性得分动态调整低层胶囊到高层胶囊的权重,使得相关性高的胶囊能够增强其输出信号,而相关性低的胶囊则减弱其输出信号。

  4. 迭代路由:通过多轮迭代的动态路由过程,不断更新权重,使得网络能够学习到输入特征之间的层级关系和整体结构。

五、yolo系列出到v9了,介绍一下你最熟悉的yolo算法

YOLO(You Only Look Once)是一种流行的实时目标检测算法,通过单个神经网络模型同时预测图像中多个目标的类别和边界框。我目前熟悉的是 YOLOv3 版本,接下来我将简要介绍 YOLOv3 的主要特点和工作原理:

YOLOv3 主要特点:

单阶段检测:YOLOv3 是一种单阶段目标检测算法,在一个网络中完成目标检测任务,速度较快。

全图检测:YOLOv3 将整个图像作为输入,在单个前向传播过程中直接输出目标类别和边界框信息。

多尺度预测:YOLOv3 通过使用不同尺度的特征图进行目标检测,可以检测不同大小的目标。

三种不同尺度的输出:YOLOv3 在输出层使用了三种不同尺度的特征图来检测不同尺寸的目标,提高了检测精度。

YOLOv3 工作原理:

基础网络:YOLOv3 使用 Darknet-53 作为基础网络来提取特征,Darknet-53 是一个包含多个卷积层和残差连接的深度卷积神经网络。

特征提取:Darknet-53 提取图像特征,并通过多层卷积和池化操作得到不同尺度的特征图。

检测头:在每个尺度上,YOLOv3 使用检测头来预测目标的类别概率、边界框位置和置信度得分。

非极大值抑制:对于每个尺度上检测到的边界框,采用非极大值抑制(NMS)来去除重叠较多的边界框,得到最终的目标检测结果。

总的来说,YOLOv3 是一种快速而准确的目标检测算法,通过全图检测和多尺度预测实现实时目标检测,并在各种应用中取得了良好的效果。

六、一阶段目标检测算法和二阶段目标检测算法有什么区别?

一阶段目标检测算法:

单阶段检测:一阶段目标检测算法直接在单个网络中完成目标检测任务,不需要额外的区域建议(region proposals)生成步骤。

全图检测:一阶段算法将整个图像作为输入,在一个前向传播过程中直接预测目标的类别和位置信息。

速度快:由于只需一次前向传播,一阶段算法通常速度较快,适用于实时目标检测应用。

二阶段目标检测算法:

两阶段检测:二阶段目标检测算法通常包含两个阶段,第一阶段生成候选区域(region proposals),第二阶段对候选区域进行分类和边界框回归。

区域生成:二阶段算法先通过一些方法(如Selective Search、RPN等)生成可能包含目标的候选区域,然后再对这些区域进行目标检测。

更精准:由于分为两个阶段,二阶段算法通常在检测精度上表现较好,尤其在小目标和复杂场景下效果更佳。

区别总结:

速度 vs 精度:一阶段算法在速度上更快,适合实时性要求高的场景,而二阶段算法在精度上通常更优秀。

区域生成:一阶段算法省略了独立的区域生成步骤,直接通过网络输出得到目标检测结果,而二阶段算法需要额外的区域生成操作。

应用场景:根据具体应用需求和性能要求选择合适的算法,一阶段算法适合要求速度快的实时应用,而二阶段算法适合追求更高检测精度的应用

七、讲一下剪枝

参考 TensorRT模型优化部署 (八)–模型剪枝Pruning

八、讲一下PTQ and QAT量化的区别

参考 TensorRT优化部署(七)–Quantization量化(PTQ and QAT)(二)

九、默写一下GAN的损失函数

生成器的目标是生成尽量真实的数据,最好能够以假乱真、让判别器判断不出来,因此生成器的学习目标是让判别器上的判断准确性越来越低;相反,判别器的目标是尽量判别出真伪,因此判别器的学习目标是让自己的判别准确性越来越高。
当生成器生成的数据越来越真时,判别器为维持住自己的准确性,就必须向辨别能力越来越强的方向迭代。当判别器越来越强大时,生成器为了降低判别器的判断准确性,就必须生成越来越真的数据。在这个奇妙的关系中,判别器判断的准确性由GAN论文中定义的特殊交叉熵来衡量,判别器与生成器共同影响交叉熵,同时训练、相互内卷,对该交叉熵的控制时此消彼长的,这是真正的零和博弈。
特殊交叉熵在生成器与判别器的内卷关系中,GAN的特殊交叉熵公式如下:
图像算法实习生--面经1_第1张图片

其中,字母是原始GAN论文中指定用来表示该交叉熵的字母,对数的底数为自然底数,表示共有个样本,因此以上表达式是全部样本交叉的均值表达式。表示任意真实数据,与真实数据相同结构的任意随机数据,表示在生成器中基于生成的假数据,而表示判别器在真实数据上的输出结果

十、了解其他的变种GAN吗?CycleGAN?

参考 CycleGAN

十一、不平衡数据怎么处理?

参考 动态加权平衡损失

十二、讲一下神经网络反向传播原理

前向传播:
在神经网络的训练过程中,首先对输入数据进行前向传播,计算神经网络的输出结果。具体而言,对于每一层神经元,都会计算加权输入并通过激活函数得到输出,然后将该输出作为下一层神经元的输入。

损失函数:
在前向传播的过程中,根据神经网络的输出结果和真实标签计算损失函数(loss function),用于衡量神经网络的输出与真实值之间的差距。

反向传播:
反向传播是指根据损失函数,从神经网络的输出层开始向输入层逐层计算梯度,并利用梯度下降法来更新神经网络中的参数(权重和偏置)。具体步骤如下:

  1. 从损失函数开始,计算损失函数对网络输出的梯度。
  2. 将该梯度沿着网络反向传播,计算每一层的梯度,使用链式法则将上一层的梯度乘以当前层的激活函数的导数。
  3. 利用计算得到的梯度信息,通过梯度下降法等优化算法来更新神经网络中的权重和偏置,使得损失函数尽可能减小。

十三、torch里面保存模型的两种方法

参考pytorch保存模型的两种方式


总结

多吃核桃补补脑

你可能感兴趣的:(算法)