BIGO 计算机视觉BIGO面经总结

  • MobileNets V1 与 MobileNets V2
    MobileNets V1:

    1. 深度可分离卷积,kernel_size x kernel_size + 1 x 1 x C_out
    2. 两个全局超参数来平衡延迟性和准确性;
      (1)宽度乘数\alpha:对一个给定的层,输入通道数M变成\alpha M,输出通道数N变成\alpha N
      (2)分辨率乘数\rho:将其应用于输入图像,缩放输入图片大小

    MobileNets V2:

    1. 引入残差结构,先升维再降维,增强梯度的传播
    2. 去掉 Narrow layer(low dimension or depth) 后的 ReLU,保留特征多样性,增强网络的表达能力(Linear Bottlenecks)
    3. 网络为全卷积的,使得模型可以适应不同尺寸的图像;使用 RELU6(最高输出为 6)激活函数,使得模型在低精度计算下具有更强的鲁棒性
image.png
  • python 2 与 python 3 的区别
  1. print:在 Python 2 中,print 是一条语句,而 Python3 中作为函数存在
# py2
print("hello")  # 等价 print  ("hello")

#py3
print("hello")
前者是把 ("hello")当作一个整体,
而后者 print()是个函数,接收字符串作为参数。
  1. 编码:Python2 的默认编码是 asscii,Python 3 默认采用了 UTF-8 作为默认编码

  2. 字符串:在 Python2 中,字符串有两个类型,一个是 unicode,一个是 str,前者表示文本字符串,后者表示字节序列;在 Python3 中两者做了严格区分,分别用 str 表示字符串,byte 表示字节序列

  3. True 和 False:True 和 False,在python 2中,是两个全局变量的名字,可以被修改,而在python 3中,变为关键字,用于指向两个固定对象,不允许被重新赋值

  • “==”的实现机制
    ==是值比较

  • 多任务学习中每部分损失函数的权重确定

    1. 损失合并:为多个任务定义单个损失函数。虽然单个任务有定义明确的损失函数,但多个任务会带来多个损失。直接将所有的损失相加。发现,当一个任务趋同于好的结果时,其他任务看起来相当糟糕。造成这个现象的原因很简单,因为损失的规模是如此的不同,以至于一个任务主导了整个损失,而其余的任务没有机会影响共享层的学习过程。
      一个快速解决办法是用一个加权和替代损失的直接相加和,使所有的损失对共享层的影响大致相同

    2. 调整学习速率:选择较高的学习率会导致其中一个任务的dying Relu,而使用较低的学习率会导致另一个任务的收敛缓慢。那我们该怎么办?我们可以让每个特定于任务的子网调整为单独的学习速率,并将共享子网调整为另一个速率。

    3. 使用评估作为特征:一旦我们通过了创建预测多个任务的 NN 的第一个阶段,我们可能会将某个任务的评估作为另一个任务的结果

  • BN 针对的是哪个维度:通道维度
    BN就是通过一定的规范化手段,把每层神经网络任意神经元这个输入值的分布强行拉回到均值为0方差为1的标准正态分布,其实就是把越来越偏的分布强制拉回比较标准的分布,这样使得激活输入值落在非线性函数对输入比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,意思是这样让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。

    对于CNN来说,特征是(N,H,W,C),我们需要把数据变成 (NHW,C)。

image.png
  • 训练的时候为什么要分成训练集、验证集


    image.png

    训练集是用来训练模型内参数的数据集;
    验证集用于调整超参数, 根据几组模型验证集上的表现 决定哪组超参数拥有最好的性能, 同时用来监控模型是否发生过拟合。
    测试集用来评价模型泛化能力, 即之前模型使用验证集确定了超参数, 最后使用一个从没有见过的新数据集来判断这个模型是否工作。

  • BN在训练和测试的时候分别是怎么操作的

    1. 在训练过程中,只能计算当前batch样本上的均值和方差;
    2. 在训练结束时候,网络的mean和std就固定住了。因为测试时计算batch的均值方差不适合,因此会直接拿训练过程中对整个样本空间估算的mean和var来使用(对训练过程中每个batch的mean,var做指数加权平均来将batch上的mean和var近似成整个样本空间上的mean和var)。
  • 空洞卷积(Dilated / Atrous Convolution)
    空洞卷积广泛应用于语义分割与目标检测等任务中。
    对于普通的卷积层,其为了减少网络的参数量,卷积核通常旋转较小的 1 x 1,3 x 3 感受野大小。小卷积核使得网络提取特征时的感受野区域有限,但是增大感受野的区域又会增加网络的参数量和计算代价。

    空洞卷积的提出较好地解决了这个问题,空洞卷积在普通卷积的感受野上增加了一个 dilation rate 参数,用于控制感受野区域的采样步长。

    当 dilation rate 为1时,空洞卷积退化为普通的卷积;
    当 dilation rate 为2时,感受野每两个单元采样一个点。

    空洞卷积感受野计算:F = F + (F -1)(r - 1),K 为原始卷积核大小,r 为空洞卷积参数空洞率
    然后带入到标准卷积输出大小计算公式就能得到通过空洞卷积后的规模:N = (W - F + 2P) / S + 1

image.png
  • 上采样方法都有哪些?
    (1)基于线性插值的上采样:
    最近邻算法,双线性插值算法,双三次插值算法
    (2)基于深度学习的上采样:
    转置卷积,PixelShuffle(亚像素卷积,CVPR2016),PixelShuffle(亚像素卷积,CVPR2016),Meta-Upscale(任意尺度缩放,CVPR2019),CAPAFE(内容关注与核重组,思路新颖,ICCV2019)

    转置卷积(Transposed Convolution 或 Fractionally Strided Convolution,或者反卷积/Deconvolution):并不能恢复成原卷积的输入,通过在输入之间填充大量的padding来实现高宽大于输入高宽的效果,从而实现向上采样的目的。

image.png

只讨论 h = w 的情况:
(1) o + 2p - k 为 s 倍数时:
o = (i -1) * s + k - 2 * p
(2) o + 2p - k 不为 s 倍数时:
a = (o + 2p - k) % s
o = (i - 1) * s + k - 2 * p + a

  • FCN
    (1)FCN对图像进行像素级的分类,从而解决了语义级别的图像分割问题。与经典的CNN在卷积层使用全连接层得到固定长度的特征向量进行分类不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷基层的特征图(feature map)进行上采样,使它恢复到输入图像相同的尺寸,从而可以对每一个像素都产生一个预测,同时保留了原始输入图像中的空间信息,最后奇偶在上采样的特征图进行像素的分类。
    (2)FCN将传统CNN中的全连接层转化成一个个的卷积层。

  • 编程


    image.png
class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        dp = [0] * len(nums)
        dp[0] = nums[0]
        for i in range(1,len(nums)):
            if dp[i-1] <= 0:
                dp[i] = nums[i]
            else:
                dp[i] = dp[i-1] + nums[i]
        return max(dp)
image.png
image.png
image.png
class Solution:
    def rearrangeString(self, s: str, k: int) -> str:
        from collections import Counter
        import heapq
        if k <= 1: return s
        c = Counter(s)
        n = len(s)
        heap = [(-v, k) for k, v in c.items()]
        heapq.heapify(heap)
        res = ""
        while heap:
            tmp = []
            for _ in range(k):
                if not heap:return res if len(res) == n else ""
                num, alp = heapq.heappop(heap)
                num += 1
                res += alp
                if num != 0:
                    tmp.append((num, alp))
            for t in tmp:
                heapq.heappush(heap, t)
        return res
  • 评价指标
    准确率,召回率,F1,TPR,FRR
    P-R曲线:横坐标是召回率,纵坐标是准确率
    ROC曲线:横坐标是FPR,纵坐标是TPR。

    AUC是POC曲线下的面积,面积的计算可以通过梯形去插值计算
    image.png

一般情况下,模型评估选择P-R或者ROC没啥区别,但是当正样本的个数严重少于负样本个数时,P-R曲线相比较于ROC曲线能够更加直观的表现模型之间的差异,更加合适。

当正样本比例减小时,ROC曲线变化不明显,但是P-R曲线的纵坐标,即准确率出现了明显的衰减。原因是,当样本严重倾斜时,我们假定召回率不变,那么表现较差的模型必然会召回更多的负样本,那么FP(假正例)就会迅速增加,准确率就会大幅衰减。

  • 数据不平衡怎么办

    1. 从数据角度:
      (1)主动获取:获取更多的少量样本数据
      (2) 算法采样:上采样、下采样、生成合成数据
      (3)数据增强
      (4)改变权重;惩罚因子
    2. 从评价指标:
      (1)谨慎选择AUC作为评价指标
      (2)不要只看Accuracy
  • 梯度消失和梯度爆炸的原因
    使用标准化初始w,那么各个层次的相乘都是0-1之间的小数,而激活函数f的导数也是0-1之间的数,其连乘后,结果会变的很小,导致梯度消失。若我们初始化的w是很大的数,w大到乘以激活函数的导数都大于1,那么连乘后,可能会导致求导的结果很大,形成梯度爆炸。

  • sigmoid和relu区别,为什么现在都用relu而不用sigmoid
image.png
image.png
  • ResNet 优缺点

    1. 优点:使前馈/反馈传播算法顺利进行,结构更加简单;恒等映射增加基本不会降低网络的性能。
    2. 缺点:训练时间长
  • L1,L2正则化的区别
    (1)L1是模型各个参数的绝对值之和;
    (2)L2是模型各个参数的平方和的开方值;
    (3)L1会趋向于产生少量的特征,而其他的特征都是0,产生稀疏权重矩阵;
    (4)L2会选择更多的特征,这些特征都会接近于0。

  • 交叉熵和散度之间的关系


    image.png

参考资料:
https://blog.csdn.net/cui841923894/article/details/82632639
https://www.cnblogs.com/lyr2015/p/8718104.html
https://blog.csdn.net/lujiandong1/article/details/53320174?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.channel_param
https://www.jianshu.com/p/f86002b7fcc4
https://blog.csdn.net/b876144622/article/details/80009867
https://zhuanlan.zhihu.com/p/95619637
https://blog.csdn.net/qq_36269513/article/details/80420363
https://blog.csdn.net/weixin_42137700/article/details/92760531
https://blog.csdn.net/qq_24502469/article/details/104737427
https://www.sohu.com/a/294959901_114877

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342