计算机视觉面试常见问题(含解答)
最近忙著找實習(xí),對計算機視覺中常見的問題做了簡單梳理,會不定時更新。
CNN
CNN在圖像上表現(xiàn)好的原因
直接將圖像數(shù)據(jù)作為輸入,不僅無需人工對圖像進(jìn)行預(yù)處理和額外的特征抽取等復(fù)雜操作,而且以其特有的細(xì)粒度特征提取方式,使得對圖像的處理達(dá)到了幾近人力的水平。
參數(shù)和計算量的計算
卷積輸入為W×H×C
W×H×C,卷積核K×K×NK×K×N,輸出W1×H1×C1
W1?×H1?×C1?
??? 計算量: W1×H1×C1×K×K×C
W1?×H1?×C1?×K×K×C
參數(shù)量:C1×K×K×C?
??? C1?×K×K×C?
調(diào)試、修改模型的經(jīng)驗
??? 數(shù)據(jù)層面
??? 獲取更多的數(shù)據(jù)、數(shù)據(jù)擴增或生成、對數(shù)據(jù)進(jìn)行歸一化或者標(biāo)準(zhǔn)化、重新進(jìn)行特征選擇
??? 算法層面
??? 對算法進(jìn)行抽樣調(diào)查。選取性能最好的算法,然后通過進(jìn)一步的調(diào)參和數(shù)據(jù)準(zhǔn)備來提升。
??? 重采樣方法??梢韵仍谛?shù)據(jù)集上完成模型選擇和參數(shù)調(diào)優(yōu),然后再將最終的方法擴展到全部數(shù)據(jù)集上。
??? 調(diào)參
??? 診斷。在每個周期, 評估模型在訓(xùn)練集和驗證集上的表現(xiàn), 并作出圖表;
??? 權(quán)重初始化。嘗試所有不同的初始化方法,考察是否有一種方法在其他情況不變的情況下(效果)更優(yōu);
??? 學(xué)習(xí)率。嘗試隨周期遞減的學(xué)習(xí)率或增加動量項;
??? 激活函數(shù)。嘗試常見的激活函數(shù),并且重縮放你的數(shù)據(jù)以滿足激活函數(shù)的邊界;
??? Batch size和周期。嘗試不同的批次 batch size 和周期數(shù),batch size 大小會決定最后的梯度, 以及更新權(quán)重的頻度。
??? 正則化。嘗試不同的正則化方式,權(quán)重衰減(Weight decay) 去懲罰大的權(quán)重、激活約束(Activation constraint) 去懲罰大的激活值、分別在輸入, 隱藏層和輸出層中試驗 dropout 方法或者使用L1、L2正則化。
??? 優(yōu)化算法和損失函數(shù)。嘗試不同的優(yōu)化算法(SGD、ADAM、RMSprop、、、)。要被優(yōu)化的損失函數(shù)與你要解決的問題高度相關(guān),也得適當(dāng)調(diào)整。
??? Early Stopping/早停法。一旦訓(xùn)練過程中出現(xiàn)(驗證集)性能開始下降, 你可以停止訓(xùn)練與學(xué)習(xí),是避免模型在訓(xùn)練數(shù)據(jù)上的過擬合的正則化方式。
??? 通過嵌套模型提升性能
??? 通過組合多個“足夠好的”模型來得到優(yōu)秀的預(yù)測能力, 而不是通過組合多個高度調(diào)參的(脆弱的)模型。
簡述 Inception v1-v4區(qū)別、改進(jìn)
V1
??? 采用不同大小的卷積核意味著不同大小的感受野,最后拼接意味著不同尺度特征的融合;
??? 將CNN中常用的卷積(1x1,3x3,5x5)、池化操作(3x3)堆疊在一起(卷積、池化后的尺寸相同,將通道相加),一方面增加了網(wǎng)絡(luò)的寬度,另一方面也增加了網(wǎng)絡(luò)對尺度的適應(yīng)性;
??? 為了減少計算量,增加了1x1卷積。
V2
??? 卷積分解,將單個的5x5卷積層用2個連續(xù)的3x3卷積層組成的小網(wǎng)絡(luò)來代替,在保持感受野范圍的同時又減少了參數(shù)量,也加深了網(wǎng)絡(luò)。
??? 提出了著名的Batch Normalization (BN) 方法。BN會對每一個mini-batch數(shù)據(jù)的內(nèi)部進(jìn)行標(biāo)準(zhǔn)化(normalization),使輸出規(guī)范到N(0,1)的正態(tài)分布,加快了網(wǎng)絡(luò)的訓(xùn)練速度,還可以增大學(xué)習(xí)率。
??? BN某種意義上起到了正則化的作用,所以可以減少或者取消dropout,簡化網(wǎng)絡(luò)結(jié)構(gòu)。V2在訓(xùn)練達(dá)到V1準(zhǔn)確率時快了14倍,最后收斂的準(zhǔn)確率也比V1高。
V3
??? 考慮了nx1卷積核,將一個較大的二維卷積拆成兩個較小的一維卷積(7x7拆成了7x1和1x7,3x3拆成了1x3和3x1),一方面節(jié)約了大量參數(shù),加速運算并減輕了過擬合),同時網(wǎng)絡(luò)深度進(jìn)一步增加,增加了網(wǎng)絡(luò)的非線性。
??? 優(yōu)化了Inception Module的結(jié)構(gòu)。
V4
利用殘差連接(Residual Connection)來改進(jìn)V3結(jié)構(gòu)。
Inception v1中的inception結(jié)構(gòu)怎么設(shè)計的
??? 采用不同大小的卷積核意味著不同大小的感受野,最后拼接意味著不同尺度特征的融合;
??? 該結(jié)構(gòu)將CNN中常用的卷積(1x1,3x3,5x5)、池化操作(3x3)堆疊在一起(卷積、池化后的尺寸相同,將通道相加),一方面增加了網(wǎng)絡(luò)的寬度,另一方面也增加了網(wǎng)絡(luò)對尺度的適應(yīng)性。
然而上面這個Inception原始版本,所有的卷積核都在上一層的所有輸出上來做,而那個5x5的卷積核所需的計算量就太大了,約需要1.2億次的計算量,造成了特征圖的厚度很大。
3. 為了避免這種情況,在3x3前、5x5前、max pooling后分別加上了1x1的卷積核,以起到了降低特征圖厚度的作用,這也就形成了Inception v1的網(wǎng)絡(luò)結(jié)構(gòu),如下圖所示:
為什么使用1x1卷積核
??? 1x1卷積的主要目的是為了減少維度,還用于修正線性激活(ReLU)。比如上一層的輸出為100x100x128,經(jīng)過具有256個通道的5x5卷積層之后(stride=1,pad=2),輸出數(shù)據(jù)為100x100x256,其中,卷積層的參數(shù)為128x5x5x256= 819200。而假如上一層輸出先經(jīng)過具有32個通道的1x1卷積層,再經(jīng)過具有256個輸出的5x5卷積層,那么輸出數(shù)據(jù)仍為為100x100x256,但卷積參數(shù)量已經(jīng)減少為128x1x1x32 + 32x5x5x256= 204800,大約減少了4倍。
??? 加深了網(wǎng)絡(luò)的層次,同時也增強了網(wǎng)絡(luò)的非線性。
簡述 CNN 的演變
??? LeNet:2個卷積3個全連接,最早用于數(shù)字識別
??? AlexNet:12年ImageNet冠軍,5個卷積3個全連接,多個小卷積代替單一大卷積;使用ReLU激活函數(shù),解決梯度小數(shù)問題;引入dropout避免模型過擬合;最大池化。
??? ZF-Net:13年ImageNet冠軍,只用了一塊 GPU 的稠密連接結(jié)構(gòu);將AlexNet第一層卷積核由11變成7,步長由4變?yōu)?。
??? VGG-Nets:14年ImageNet分類第二名,更深的網(wǎng)絡(luò),卷積層使用更小的filter尺寸和間隔;多個小卷積讓網(wǎng)絡(luò)有更多的非線性,更少的參數(shù)。
??? GoogLeNet:14年ImageNet分類第一名。引入Inception模塊,采用不同大小的卷積核意味著不同大小的感受野,最后拼接意味著不同尺度特征的融合;采用了average pooling來代替全連接層;避免梯度消失,網(wǎng)絡(luò)額外增加了2個輔助的softmax用于向前傳導(dǎo)梯度。
??? ResNet:引入殘差單元,簡化學(xué)習(xí)目標(biāo)和難度,加快訓(xùn)練速度,模型加深時,不會產(chǎn)生退化問題;能夠有效解決訓(xùn)練過程中梯度消失和梯度爆炸問題。
??? DenseNet:密集連接;加強特征傳播,鼓勵特征復(fù)用,極大的減少了參數(shù)量。
講一下CNN,每個層,及作用
CNN的特征檢測層通過訓(xùn)練數(shù)據(jù)進(jìn)行學(xué)習(xí)
??? 所以在使用CNN時,避免了顯示的特征抽取,而隱式地從訓(xùn)練數(shù)據(jù)中進(jìn)行學(xué)習(xí);
??? 由于同一特征映射面上的神經(jīng)元權(quán)值相同,所以網(wǎng)絡(luò)可以并行學(xué)習(xí),這也是卷積網(wǎng)絡(luò)相對于神經(jīng)元彼此相連網(wǎng)絡(luò)的一大優(yōu)勢。
??? 卷積神經(jīng)網(wǎng)絡(luò)以其局部權(quán)值共享的特殊結(jié)構(gòu)在語音識別和圖像處理方面有著獨特的優(yōu)越性。權(quán)值共享降低了網(wǎng)絡(luò)的復(fù)雜性,特別是多維輸入向量的圖像可以直接輸入網(wǎng)絡(luò)這一特點避免了特征提取和分類過程中數(shù)據(jù)重建的復(fù)雜度。
卷積神經(jīng)網(wǎng)絡(luò)(CNN)主要由卷積層、激活函數(shù)、池化層、全連接層組成。
??? 卷積層(Conv):使用卷積核進(jìn)行特征提取和特征映射
??? 激活函數(shù)(Activation):由于卷積也是一種線性運算,因此需要增加非線性映射
??? 池化層(Pool):對輸入的特征圖進(jìn)行壓縮,一方面使特征圖變小,簡化網(wǎng)絡(luò)計算復(fù)雜度;一方面進(jìn)行特征壓縮,提取主要特征
??? 全連接層(FC):連接所有的特征,將輸出值送給分類器
Pooling層怎么反向傳播
CNN網(wǎng)絡(luò)中另外一個不可導(dǎo)的環(huán)節(jié)就是Pooling池化操作,因為Pooling操作使得feature map的尺寸變化,假如做2×2的池化(步長也為2),假設(shè)那么第l+1層的feature map有16個梯度,那么第l層就會有64個梯度,這使得梯度無法對位的進(jìn)行傳播下去。其實解決這個問題的思想也很簡單,就是把1個像素的梯度傳遞給4個像素,但是需要保證傳遞的loss(或者梯度)總和不變。根據(jù)這條原則,mean pooling和max pooling的反向傳播也是不同的
??? mean pooling
??? mean pooling的前向傳播就是把一個patch中的值求取平均來做pooling,那么反向傳播的過程也就是把某個元素的梯度等分為n份分配給前一層,這樣就保證池化前后的梯度(殘差)之和保持不變,圖示如下 :
??? max pooling
??? max pooling也要滿足梯度之和不變的原則,max pooling的前向傳播是把patch中最大的值傳遞給后一層,而其他像素的值直接被舍棄掉。那么反向傳播也就是把梯度直接傳給前一層某一個像素,而其他像素不接受梯度,也就是為0。所以max pooling操作和mean pooling操作不同點在于需要記錄下池化操作時到底哪個像素的值是最大,也就是max id,這個變量就是記錄最大值所在位置的,因為在反向傳播中要用到,那么假設(shè)前向傳播和反向傳播的過程就如下圖所示 :
解釋 ResNet 流行的原因
從上面兩個圖可以看出,在網(wǎng)絡(luò)很深的時候(56層相比20層),模型效果卻越來越差了(誤差率越高),并不是網(wǎng)絡(luò)越深越好。
ResNet創(chuàng)造性的引入了殘差單元,很好的解決了這個問題。
??? 引入殘差單元,簡化學(xué)習(xí)目標(biāo)和難度,加快訓(xùn)練速度,模型加深時,不會產(chǎn)生退化問題
??? 引入殘差單元,能夠有效解決訓(xùn)練過程中梯度消失和梯度爆炸問題
Resnet第二個版本做了哪些改進(jìn)
ResNet_v2與v1的最大區(qū)別就是v2的BN和ReLU是在卷積之前使用的,好處:
??? 反向傳播基本符合假設(shè),信息傳遞無阻礙;
??? BN層作為pre-activation,起到了正則化的作用;
mobileNet、shuffleNet知道嗎?
??? MobileNet是為移動和嵌入式設(shè)備提出的高效模型。MobileNets基于流線型架構(gòu)(streamlined),使用深度可分離卷積(即Xception變體結(jié)構(gòu))來構(gòu)建輕量級深度神經(jīng)網(wǎng)絡(luò)。寬度因子α用于控制輸入和輸出的通道數(shù),分辨率因子ρ控制輸入的分辨率。
??? 例如,對于深度分離卷積,把標(biāo)準(zhǔn)卷積(4,4,3,5)分解為:
??? 深度卷積部分:大小為(4,4,1,3),作用在輸入的每個通道上,輸出特征映射為(3,3,3)
??? 逐點卷積部分:大小為(1,1,3,5),作用在深度卷積的輸出特征映射上,得到最終輸出為(3,3,5)
??? shuffleNet專門應(yīng)用于計算力受限的移動設(shè)備,主要包含2個操作:逐點群卷積(降低計算復(fù)雜度)和通道混洗(幫助信息流通)。
講一下pooling的作用, 為什么max pooling要更常用?哪些情況下,average pooling比max pooling更合適?
??? 作用:對輸入的特征圖進(jìn)行壓縮,一方面使特征圖變小,簡化網(wǎng)絡(luò)計算復(fù)雜度;一方面進(jìn)行特征壓縮,提取主要特征。
??? 通常來講,max-pooling的效果更好,雖然max-pooling和average-pooling都對數(shù)據(jù)做了下采樣,但是max-pooling感覺更像是做了特征選擇,選出了分類辨識度更好的特征,提供了非線性。 pooling的主要作用一方面是去掉冗余信息,一方面要保留feature map的特征信息,在分類問題中,我們需要知道的是這張圖像有什么object,而不大關(guān)心這個object位置在哪,在這種情況下顯然max pooling比average pooling更合適。在網(wǎng)絡(luò)比較深的地方,特征已經(jīng)稀疏了,從一塊區(qū)域里選出最大的,比起這片區(qū)域的平均值來,更能把稀疏的特征傳遞下去。
??? average-pooling更強調(diào)對整體特征信息進(jìn)行一層下采樣,在減少參數(shù)維度的貢獻(xiàn)上更大一點,更多的體現(xiàn)在信息的完整傳遞這個維度上,在一個很大很有代表性的模型中,比如說DenseNet中的模塊之間的連接大多采用average-pooling,在減少維度的同時,更有利信息傳遞到下一個模塊進(jìn)行特征提取。
??? average-pooling在全局平均池化操作中應(yīng)用也比較廣,在ResNet和Inception結(jié)構(gòu)中最后一層都使用了平均池化。有的時候在模型接近分類器的末端使用全局平均池化還可以代替Flatten操作,使輸入數(shù)據(jù)變成一位向量。
哪些領(lǐng)域(數(shù)據(jù)集)不能使用深度學(xué)習(xí)?
??? 數(shù)據(jù)集太小,數(shù)據(jù)樣本不足時,深度學(xué)習(xí)相對其它機器學(xué)習(xí)算法,沒有明顯優(yōu)勢
??? 數(shù)據(jù)集沒有局部相關(guān)特性,目前深度學(xué)習(xí)表現(xiàn)比較好的領(lǐng)域主要是圖像/語音/自然語言處理等領(lǐng)域,這些領(lǐng)域的一個共性是局部相關(guān)性。圖像中像素組成物體,語音信號中音位組合成單詞,文本數(shù)據(jù)中單詞組合成句子,這些特征元素的組合一旦被打亂,表示的含義同時也被改變。對于沒有這樣的局部相關(guān)性的數(shù)據(jù)集,不適于使用深度學(xué)習(xí)算法進(jìn)行處理。舉個例子:預(yù)測一個人的健康狀況,相關(guān)的參數(shù)會有年齡、職業(yè)、收入、家庭狀況等各種元素,將這些元素打亂,并不會影響相關(guān)的結(jié)果。
細(xì)粒度分類
LSTM&RNN
解釋LSTM結(jié)構(gòu)(相對于RNN)的好處
RNN的梯度消失原因和解決辦法
Object Detection
Unet的介紹
FCN和Unet的區(qū)別
RCNN系列的算法流程和區(qū)別
Fast RCNN中 bbox 回歸的損失函數(shù)什么
解釋 ROI Pooling 和 ROI Align
Mask RCNN中 mask branch 如何接入 Faster RCNN中
解釋 FPN
解釋 ROI Align
簡述 YOLO 和 SSD
簡述 Hough 直線檢測、Sobel 邊緣檢測算法流程
Mask RCNN中的anchors如何判定為正負(fù)樣本
簡述 NMS 算法流程
attention起源是用在哪里?pixel還是frame,是soft還是hard
anchor的正負(fù)樣本比是多少
算法和激活函數(shù)等
BN的原理和作用
BN層反向傳播,怎么求導(dǎo)
BN 的作用和缺陷,以及針對batch_size小的情況的改進(jìn)(GN)
BN層,先加BN還是激活,有什么區(qū)別
手推BP
優(yōu)化算法舉例和他們的區(qū)別(SGD、SGDM、RMSprop、Adam)
隨機梯度下降和梯度下降
訓(xùn)練不收斂的原因有哪些
簡述 SVM 流程、核函數(shù)尋參及常見的核函數(shù)舉例
batch_size 和 learning rate 的關(guān)系(怎么平衡和調(diào)整二者)
解釋過擬合和欠擬合,以及解決方法
激活函數(shù)有哪些,各自區(qū)別
損失函數(shù)有哪些
Sigmoid 和 ReLu 對比(各自優(yōu)缺點)
為什么不用sigmoid而用relu?做出了哪些改進(jìn)?
梯度消失和梯度爆炸的原因和解決方法
Precision 和 Recall 的定義
精確率高、召回率低是為什么
SVM,線性回歸和邏輯回歸的原理及區(qū)別
PCA原理,PCA和SVD的區(qū)別和聯(lián)系
正則化怎么選擇,有哪些方式
L1、L2范數(shù),區(qū)別
boost、Adaboost
dropout和batch normalization
講一下決策樹和隨機森林
講一下GBDT的細(xì)節(jié),寫出GBDT的目標(biāo)函數(shù)。 GBDT和Adaboost的區(qū)別與聯(lián)系
偏差、方差
距離度量公式哪些,區(qū)別
多標(biāo)簽識別怎么做
data argumentation怎么處理的
數(shù)據(jù)不均衡怎么處理、只有少量帶標(biāo)簽怎么處理
權(quán)重初始化方法都有哪些
權(quán)值衰減這個參數(shù)怎么設(shè)置
分類問題有哪些評價指標(biāo)?每種的適用場景。
無監(jiān)督學(xué)習(xí)了解哪些
圖像處理Opencv
邊緣檢測算子有哪些
霍夫變換
直方圖是什么
canny算子是怎么做的
圖像的特征提取有哪些算法,適用范圍、優(yōu)缺點
————————————————
原文鏈接:https://blog.csdn.net/bluesliuf/article/details/89389117
總結(jié)
以上是生活随笔為你收集整理的计算机视觉面试常见问题(含解答)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习(计算机视觉)面试中问题(二)
- 下一篇: 全网最全数据分析师干货-python篇