计算机视觉一些面试基础整理(持续更新)

1.IOU的原理及伪代码实现:

图像示例
在这里插入图片描述
原理:
IoU(Intersection over Union)是目标检测中常用的评价指标,用于衡量预测边界框(Bounding Box)与真实边界框之间的重叠程度。IoU 的计算方式是通过目标框的交集面积除以它们的并集面积。
IoU 的数学定义如下:在这里插入图片描述
IoU(Intersection over Union)是目标检测中常用的评价指标,用于衡量预测边界框与真实边界框之间的重叠程度。IoU 的计算方式是通过目标框的交集面积除以它们的并集面积。

以下是 IoU 的伪代码:

def calculate_iou(boxA, boxB):
    # boxA 和 boxB 分别表示两个边界框,每个边界框是一个四元组 (x, y, w, h),表示左上角坐标和宽高
    # 计算交集的坐标
    xA = max(boxA[0], boxB[0])
    yA = max(boxA[1], boxB[1])
    xB = min(boxA[0] + boxA[2], boxB[0] + boxB[2])
    yB = min(boxA[1] + boxA[3], boxB[1] + boxB[3])
    # 计算交集和并集的面积
    intersection_area = max(0, xB - xA + 1) * max(0, yB - yA + 1)
    boxA_area = (boxA[2] + 1) * (boxA[3] + 1)
    boxB_area = (boxB[2] + 1) * (boxB[3] + 1)
    union_area = boxA_area + boxB_area - intersection_area
    # 计算 IoU
    iou = intersection_area / union_area
    
    return iou

2.非极大值抑制(NMS)

NMS是一种用于去除冗余边界框的技术,通常用于目标检测任务。其基本原理是在一系列具有置信度得分的边界框中,选择置信度最高的边界框,然后移除与该边界框重叠度过高的其他边界框,以保留最具代表性的框。

NMS 的伪代码简要阐述如下:

输入: 一组边界框 boxes,每个边界框对应的置信度得分 scores,以及两个阈值 conf_threshold(置信度阈值)和 iou_threshold(IoU 阈值)。

按照置信度得分排序: 将边界框按照其置信度得分从高到低进行排序,得到排序后的索引列表 sorted_indices。

初始化结果列表: 创建一个空列表 selected_indices 用于存储最终选定的边界框的索引。

循环选择边界框: 从排序后的列表中选择置信度最高的边界框,将其索引加入 selected_indices 中。然后,计算该边界框与剩余边界框的 IoU(交并比),移除与该边界框重叠度过高的其他边界框。

迭代过程: 重复上述步骤,直到排序后的列表中没有边界框。

输出: 返回 selected_indices,即最终选定的边界框的索引列表。

def non_max_suppression(boxes, scores, conf_threshold=0.5, iou_threshold=0.5):
    # boxes: 边界框坐标列表 [(x1, y1, x2, y2), ...]
    # scores: 对应边界框的置信度列表 [score1, score2, ...]
    # conf_threshold: 置信度阈值
    # iou_threshold: IoU 阈值

    selected_indices = []
    
    # 按照置信度对边界框进行排序
    sorted_indices = sorted(range(len(scores)), key=lambda i: scores[i], reverse=True)

    while len(sorted_indices) > 0:
        # 选出置信度最高的边界框
        best_box_index = sorted_indices[0]
        selected_indices.append(best_box_index)

        # 计算最高置信度边界框与其它边界框的 IoU
        other_indices = sorted_indices[1:]
        indices_to_remove = []
        for idx in other_indices:
            iou = calculate_iou(boxes[best_box_index], boxes[idx])
            if iou > iou_threshold:
                indices_to_remove.append(idx)

        # 移除与最高置信度边界框重叠度过高的边界框
        for idx in indices_to_remove:
            sorted_indices.remove(idx)

        # 移除已处理的最高置信度边界框
        sorted_indices = sorted_indices[1:]

    return selected_indices

3.decoupled head“解耦头”

在目标检测中,Decouple Head的实现主要是将目标位置和类别信息的提取分开处理。
具体来说,Decouple Head会将特征图分成不同的分支,每个分支负责提取目标位置或类别信息。这些分支分别进行训练,然后对提取的特征进行融合,生成最终的检测结果。
Decoupled Head的优势在于可以更好地处理不同尺度和精细度的语义信息。通过将像素级的预测与特征提取分开,可以更好地利用底层和高层特征之间的语义信息,从而提高分割的准确性和细节保留能力。
在这里插入图片描述
yolox和之前的yolo系列的分类头的区别,对于由backbone得到的特征图,经过一系列降维后,在之前的yolo系列中,关于分类的概率和bbox坐标的预测都是同时完成,它们共享前一层的参数。实验表明,解耦合检测头能加快模型收敛速度、提高检测精度,同时也会带来一点额外的参数量和计算成本。

相关推荐

  1. 【嵌入式】面试笔试问题整理 (持续更新

    2023-12-20 14:28:03       23 阅读
  2. 笔试面试(持续更新)

    2023-12-20 14:28:03       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-20 14:28:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-20 14:28:03       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-20 14:28:03       82 阅读
  4. Python语言-面向对象

    2023-12-20 14:28:03       91 阅读

热门阅读

  1. 机器学习之逻辑回归(Logistic Regression)

    2023-12-20 14:28:03       61 阅读
  2. nginx配置端口转发

    2023-12-20 14:28:03       67 阅读
  3. 第30节: Vue3 监听事件

    2023-12-20 14:28:03       84 阅读
  4. 搜索区间—-二分查找,力扣-go实现

    2023-12-20 14:28:03       55 阅读
  5. 我们应该了解的前端缓存

    2023-12-20 14:28:03       45 阅读
  6. 【无标题】

    2023-12-20 14:28:03       62 阅读
  7. C++中的类型转换概念详解和示例代码

    2023-12-20 14:28:03       55 阅读
  8. hackrf OOK算法简单数据分析(傅里叶计算)

    2023-12-20 14:28:03       55 阅读
  9. @Configuration 什么时候被执行

    2023-12-20 14:28:03       59 阅读
  10. 后端架构演进过程

    2023-12-20 14:28:03       65 阅读
  11. 算法竞赛进阶指南学习目录

    2023-12-20 14:28:03       64 阅读
  12. Android_adb_基本常用命令

    2023-12-20 14:28:03       81 阅读
  13. 在ubuntu中显示bmp图片

    2023-12-20 14:28:03       56 阅读