CV&感知算法面试常见手撕代码题目汇总(附实现代码)
在如今互联网大厂面试环节中,现场手撕代码已经成为了每位面试者必须要经历的一关。据我所知,目前85%以上的互联网公司都将面试者的现场编程能力作为能否拿到Offer的核心评价指标。如果可以在规定时间内流畅、顺利完成面试官给出题目的候选人,拿到高质量面评的概率要比其他人高出很多。
作为已经上岸互联网大厂算法岗的学长,本文将计算机视觉、自动驾驶感知岗位的高频算法题目进行了收录和整理,并且给出了参考答案,便于同学们实习和求职前复习,从而在面试手撕代码环节更加游刃有余!
无论你是即将开始秋招的应届毕业生,还是打算找实习的算法小白,这份凝结了互联网大厂高频手撕算法题目的高质量文章将为你的面试之路保驾护航。
一、2D卷积实现
题目要求:实现一个2D卷积的计算过程,要求考虑卷积步长、图像Padding、卷积核窗口大小以及卷积核输入输出通道数量。
import numpy as np def Conv2d(x, in_channels, out_channels, kernel, stride, padding): # x.shape = bs, cin, hin, win # kernel.shape = cout, cin, kh, kw bs, cin, hin, win = x.shape cout, cin, kh, kw = kernel.shape out_h = (hin + 2 * padding - kh) // stride + 1 out_w = (win + 2 * padding - kh) // stride + 1 x = np.pad(x, [(0, 0), (0, 0), (padding, padding), (padding, padding)]) # padding out = np.zeros((bs, out_channels, out_h, out_w)) # convolution process. for i in range(bs): for j in range(out_channels): for h in range(out_h): for w in range(out_w): for c in range(in_channels): for k_h in range(kh): for k_w in range(kw): out[i, j, h, w] += x[i, c, h * stride + k_h, w * stride + k_w] * kernel[j, c, k_h, k_w] return out if __name__ == '__main__': input = np.random.standard_normal(size=(2, 2, 5, 5)) kernel = np.random.standard_normal(size=(4, 2, 3, 3)) # kernel = [cout, cin, kh, kw] out = Conv2d(x=input, in_channels=2, out_channels=4, kernel=kernel, stride=1, padding=1) print(out.shape) # 测试输出张量维度 print(out)
二、BN归一化层实现
题目要求:实现Batch Normalization层
import torch import torch.nn as nn class BnLayer(nn.Module): def __init__(self, feat_nums): super(BnLayer, self).__init__() self.feat_nums = feat_nums self.eps = 1e-5 self.momentum = 0.9 shape = (1, feat_nums, 1, 1) self.gamma = nn.Parameter(torch.ones(shape), requires_grad=True) self.beta = nn.Parameter(torch.zeros(shape), requires_grad=True) self.moving_mean = torch.zeros(shape) self.moving_var = torch.ones(shape) def forward(self, x): if self.moving_mean.device != x.device: self.moving_mean = self.moving_mean.to(x.device) self.moving_var = self.moving_var.to(x.device) y, self.moving_mean, self.moving_var = batch_norm(x, self.gamma, self.beta, self.momentum, self.eps, self.moving_mean, self.moving_var, is_train=True) return y def batch_norm(x, gamma, beta, momentum, eps, moving_mean, moving_v
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
一站式智驾感知算法求职宝典 文章被收录于专栏
作为24届上岸自动驾驶感知算法的学长,将自己在秋招中的面试经验和心得体会总结成《一站式智驾感知算法求职宝典》,宝典包含【求职简历如何准备】、【论文/实习/科研项目经历如何包装】、【Leetcode算法刷题思路】、【十五家智驾感知算法面经汇总(附参考答案)】、【CV&感知算法面试常见代码题目汇总(附参考代码)】、【互联网大厂笔试ACM模式输入输出类型题目汇总】等多个板块,祝你拿下心仪Offer!