目录
1. 有哪些可以解决目标检测中正负样本不平衡问题的方法
方法大致可以分为两种:
1)Hard Sampling: 从所有样本中选择来训练模型: hard negative mining, OHEM
2)Soft sampling: 为样本赋予不同的权值: Focal Loss, GHM, PISA
- Focal Loss认为正负样本的不平衡,本质上是因为难易样本的不平衡,于是通过修改交叉熵,使得训练过程更加关注那些困难样本,
- 而GHM在Focal Loss的基础上继续研究,发现难易样本的不平衡本质上是因为梯度范数分布的不平衡,和Focal Loss的最大区别是GHM认为最困难的那些样本应当认为是异常样本,让检测器强行去拟合异常样本对训练过程是没有帮助的。
- PISA则是跳出了Focal Loss的思路,认为采样策略应当从mAP这个指标出发,通过IoU Hierarchical Local Rank (IoU-HLR),对样本进行排序并权值重标定,从而使得recall和precision都能够提升。
2. ORB特征提取的缺陷及如何进行改进
3. Anchor-Based检测器在正负样本标签分配阶段,如何去除对anchor的依赖?
- OTA
4. 在CNN网络中,更大的核是否可以取得更高的精度?
单尺度核尺寸的局限性,模型需要大尺寸核捕获高分辨率模式,同时需要小尺寸核捕获低分辨率模式以及获得更高的精度和效率。比如混合深度分离卷积(MDConv),它将不同尺寸卷积核混叠到同一个卷积OP单元中,故而它可以轻易的捕获不同分辨率的特征模式。
5. 在轻量化模型中,举例一些从参数量、浮点运算量、模型推理时延进行优化的代表模型?
在移动端比较流行的轻量化神经网络模型,包括 MobileViT、MobileNet、EfficientNet、和 SqueezeNet 等。
- 较早期的 SqueezeNet 和较新的 MobileViT,其实现轻量化的方式主要是在模型的参数数量方面进行了优化;
- 而对于每秒浮点运算量的优化,流行模型有 EfficientNet、MobileNet、ShuffleNet、GhostNet 和 MixNet 等。
- 较少有方法像 MobileNet-V3 和 ShuffleNet-V2 等一样,直接针对模型推理时延进行优化。
6. FPN的特征融合为什么是相加操作呢?
假设两路输入来说,如果是通道数相同且后面带卷积的话,add等价于concat之后对应通道共享同一个卷积核。FPN里的金字塔,是希望把分辨率最小但语义最强的特征图增加分辨率,从性质上是可以用add的。如果用concat,因为分辨率小的特征通道数更多,计算量是一笔不小的开销。所以FPN里特征融合使用相加操作可以理解为是为了降低计算量。
7. 如何理解concat和add这两种常见的feature map特征融合方式?
两者都可以理解为整合特征图信息。concat是通道数的增加;add是特征图相加,通道数不变。
add是描述图像的特征下的信息量增多了,但是描述图像的维度本身并没有增加,只是每一维下的信息量在增加,这显然是对最终的图像的分类是有益的。而concat是通道数的合并,也就是说描述图像本身的特征数(通道数)增加了,而每一特征下的信息是没有增加。concat每个通道对应着对应的卷积核。 而add形式则将对应的特征图相加,再进行下一步卷积操作,相当于加了一个先验:对应通道的特征图语义类似,从而对应的特征图共享一个卷积核(对于两路输入来说,如果是通道数相同且后面带卷积的话,add等价于concat之后对应通道共享同一个卷积核)。因此add可以认为是特殊的concat形式。但是add的计算量要比concat的计算量小得多。
8. GAN中的模式坍缩的识别和解决?
模式坍缩表现为生成器倾向于生成某一种特定类型的图像,而忽略了其他类型。
使用Mini-Batch Discrimination:这种方法可以帮助判别器识别生成器生成的不同样本之间的差异,从而鼓励生成器生成更多样化的图像。
使用Wasserstein GAN (WGAN):WGAN使用Wasserstein距离作为损失函数,可以提供更平滑的梯度信息,有助于提高训练的稳定性,并降低模式坍塌的风险。
使用WGAN-GP(Wasserstein GAN with Gradient Penalty):在WGAN的基础上,通过添加梯度惩罚项,进一步增强训练稳定性。
9. 解释YOLOv5模型输出(1, 25200, 85)的含义,及解码过程?
在Yolov5中,输出张量的形状通常是(1, 25200, 85),其中1表示批量大小,25200是预测框的数量(通常为3 x (H/32) x (W/32) + 3 x (H/16) x (W/16) + 3 x (H/8) x (W/8),其中H和W是输入图像的高度和宽度),85是每个预测框的编码信息(4个坐标、1个置信度和80个类别概率)。
def process_output(output):
predictions = np.squeeze(output[0])
# Filter out object confidence scores below threshold
obj_conf = predictions[:, 4]
predictions = predictions[obj_conf > self.conf_threshold]
obj_conf = obj_conf[obj_conf > self.conf_threshold]
# Multiply class confidence with bounding box confidence
predictions[:, 5:] *= obj_conf[:, np.newaxis]
# Get the scores
scores = np.max(predictions[:, 5:], axis=1)
# Filter out the objects with a low score
predictions = predictions[obj_conf > self.conf_threshold]
scores = scores[scores > self.conf_threshold]
# Get the class with the highest confidence
class_ids = np.argmax(predictions[:, 5:], axis=1)
# Get bounding boxes for each object
boxes = self.extract_boxes(predictions)
# Apply non-maxima suppression to suppress weak, overlapping bounding boxes
indices = nms(boxes, scores, self.iou_threshold)
return boxes[indices], scores[indices], class_ids[indices]
10. 模型问题:分割网络采用编解码的方式,在解码器中使用反池化/空洞卷积/双线性插值对特征图进行上采样的区别?
- SegNet 在解码器中使用反池化对特征图进行上采样,并在分割中保持高频细节的完整性。
- 对特征图使用反卷积,将低分辨率分割图上采样至输入图像分辨率,或者花费大量计算成本,使用空洞卷积在编码器上部分避免分辨率下降。
- 空洞卷积允许我们显式地控制在深度卷积神经网络中计算的特征响应的分辨率。它还允许我们有效地扩大过滤器的视野,在不增加参数数量或计算量的情况下引入更大的上下文。