CV面试问题(手动狗头)


1、计算模型参数量:

def get_model_parameters_number(model):
    params_num = sum(p.numel() for p in model.parameters() if p.requires_grad)
    return params_num

2、(字节跳动)计算模型FLOPs:

1.1注册钩子:

handle = module.register_forward_hook(conv_flops_counter_hook) 

模型正向传播时执行 conv_flops_counter_hook 函数,register_forward_hook 是 PyTorch 中的一个方法,用于注册前向钩子(forward hook)。前向钩子是在模型前向传播过程中执行的函数,允许用户在每次模型进行前向计算时执行自定义操作。
具体来说,register_forward_hook 允许用户在模型的每一层(即每个 torch.nn.Module)的前向传播过程中注册一个函数,该函数将在前向传播的特定阶段被调用。这个函数可以访问输入和输出张量,以及该层的状态信息,例如权重和偏置。

1.2计算每个算子的FLOPs:

def conv_flops_counter_hook(conv_module, input, output):
    # Can have multiple inputs, getting the first one
    # input = input[0]c      conv_module=Conv2d(3,48,kernel(3,3),stride(1,1),padding=(1,1))     output(1,48,256,256)

    batch_size = output.shape[0]
    output_dims = list(output.shape[2:])

    kernel_dims = list(conv_module.kernel_size)
    in_channels = conv_module.in_channels
    out_channels = conv_module.out_channels
    groups = conv_module.groups

    filters_per_channel = out_channels // groups
    conv_per_position_flops = np.prod(kernel_dims) * in_channels * filters_per_channel

    active_elements_count = batch_size * np.prod(output_dims)
    overall_conv_flops = int(conv_per_position_flops) * int(active_elements_count)       # Cin*Cout*K*K *  B*H*W

    # overall_flops = overall_conv_flops

    conv_module.__flops__ += int(overall_conv_flops)


def linear_flops_counter_hook(module, input, output):
    input = input[0]
    if len(input.shape) == 1:
        batch_size = 1
        module.__flops__ += int(batch_size * input.shape[0] * output.shape[0])      # Cin*Cout*   B
    else:
        batch_size = input.shape[0]
        module.__flops__ += int(batch_size * input.shape[1] * output.shape[1])


def relu_flops_counter_hook(module, input, output): 
    active_elements_count = output.numel()  # relu =max(0.0,x) 所以Relu的Flops为B*C*H*W
    module.__flops__ += int(active_elements_count)
    # print(module.__flops__, id(module))
    # print(module)

1.3删除钩子:

del module.__activation_handle__

3、BN的参数优化有哪些?

对于BN层(推理模式),主要包含4个参数: μ(均值)、 σ 2(方差)、 γ和 β ,其中 μ 和 σ 2
是训练过程中统计得到的, γ 和 β是训练学习得到的。对于特征图第i个通道BN的计算公式如下,其中 ϵ 是一个非常小的常量,防止分母为零。BN在通道上进行Norm,LN在B纬度上Norm。

4、你知道的卷积有哪些?

  • Conv1d( in_channels, out_channels, kernel_size: _size_1_t)利用指定大小的一维卷积核对输入的多通道一维输入信号进行一维卷积操作的卷积层。
    在这里插入图片描述

  • 动态卷积

  • 1x1卷积(改变通道)

  • 空洞卷积(指数级扩展的感受野)

  • 转置卷积(上采样)

  • DW卷积(先用分组3x3卷积在Cin个的通道上生成Cin个特征图,再用Cout个1x1 卷积把特征图改变为Cout个通道)

5、如何解决loss曲线震荡?

在这里插入图片描述

6、什么是 准确率?精确率?召回率? F1值?

  • 准确率:Accuracy是针对所有类别而言的。Acc=模型预测正确的/模型预测的图片数。
    例:10张各种水果图片,让模型预测。Acc=模型预测正确的/10。
  • 精确率: Precision是针对某一类别而言的。P=模型正确预测某一类别的数/模型预测该类别的总数 。
    例:苹果的精确率,10张各种水果图片,苹果有5张,模型预测成了3张苹果,P=模型正确预测苹果的数量/3。
  • 召回率: Recall是针对某一类别而言的。R=模型预测某一类别对的数/该类别的总数 。
    例:苹果的召回率,10张各种水果图片,苹果有5张,模型预测成了3张苹果,R=模型正确预测苹果的数量/5。

7、(OPPO)++i为什么比i++快?

++i返回的是i+1后的值,返回的是右值,不需要创建临时变量。
i++先返回i的值,再对i+1, 返回的是左指,需要创建临时变量,这个额外的临时对象的创建和销毁会带来额外的开销,从而导致 i++ 的执行速度相对较慢。

8、什么是逻辑回归和BCE?

在这里插入图片描述


总结

提示:这里对文章进行总结:

你喜欢粉色

还是蓝色

这么大够不够
以上就是今天要讲的内容。

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
计算机视觉面试中常见的问题有很多,以下是一些可能会被问到的问题: 1. 请解释一下多尺度训练方法是什么? 多尺度训练方法是在训练和反向传播更新参数时,只考虑在指定的尺度范围内的目标。这种方法可以帮助模型更好地适应不同尺度的目标。 2. 为什么直接将图像数据作为输入可以达到几近人力的水平? 直接将图像数据作为输入可以避免人工对图像进行预处理和额外的特征抽取等复杂操作。同时,卷积神经网络以其特有的细粒度特征提取方式,使得对图像的处理达到了几近人力的水平。 3. YOLO是如何将物体检测任务当作回归问题的? YOLO创造性地将物体检测任务当作回归问题,通过一个神经网络直接从输入图像中得到检测框和每个检测框所属的类别的概率。这种方法可以进行端到端的优化,简化了检测过程。 4. 请解释一下focal loss。 Focal loss是一种损失函数,用于解决目标检测中的类别不平衡问题。它通过调整正负样本的权重,使得模型更加关注难以分类的样本,从而提高模型的性能。 这些是计算机视觉面试中常见的问题,希望对你有所帮助! #### 引用[.reference_title] - *1* [深度学习&计算机视觉常见的29道面试题及解析](https://blog.csdn.net/weixin_47196664/article/details/108656592)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [计算机视觉面试常见问题(含解答)](https://blog.csdn.net/weixin_43955293/article/details/120763638)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [计算机视觉(AI)面试大全](https://blog.csdn.net/sazass/article/details/125123785)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值