主頁 >  其他 > 2021年暑期實習、秋招深度學習演算法崗面試要點及答案分享

2021年暑期實習、秋招深度學習演算法崗面試要點及答案分享

2021-07-27 09:06:33 其他

本文主要整理了深度學習相關演算法面試中經常問到的一些核心概念,并給出了細致的解答,分享給大家,

內容整理自網路,原文鏈接:https://github.com/HarleysZhang/2019_algorithm_intern_information/blob/master/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E9%A2%98.md

感受野

后一層神經元在前一層神經元的感受空間,如下圖所示:

圖片

注意:小卷積核(如33)通過多層疊加可取得與大卷積核(如77)同等規模的感受野,此外采用小卷積核有兩個優勢:

1、小卷積核需多層疊加,加深了網路深度進而增強了網路容量(model capacity)和復雜度(model complexity)

2、增強了網路容量的同時減少了引數個數,

卷積操作作用

卷積網路中的卷積核引數是通過網路訓練出來的

通過卷積核的組合以及隨著網路后續操作的進行,卷積操作可獲取影像區域不同型別特征;基本而一般的模式會逐漸被抽象為具有高層語意的“概念”表示,也就是自動學習到影像的高層特征,

CNN權值共享問題

首先權值共享就是濾波器共享,濾波器的引數是固定的,即是用相同的濾波器去掃一遍影像,提取一次特征特征,得到feature map,在卷積網路中,學好了一個濾波器,就相當于掌握了一種特征,這個濾波器在影像中滑動,進行特征提取,然后所有進行這樣操作的區域都會被采集到這種特征,就好比上面的水平線,

CNN結構特點

區域連接,權值共享,池化操作,多層次結構,

1、區域連接使網路可以提取資料的區域特征

2、權值共享大大降低了網路的訓練難度,一個Filter只提取一個特征,在整個圖片(或者語音/文本) 中進行卷積

3、池化操作與多層次結構一起,實作了資料的降維,將低層次的區域特征組合成為較高層次的特征,從而對整個圖片進行表示,

pooling層作用

增加特征平移不變性,匯合可以提高網路對微小位移的容忍能力,

減小特征圖大小,匯合層對空間區域區域進行下采樣,使下一層需要的引數量和計算量減少,并降低過擬合風險,

最大匯合可以帶來非線性,這是目前最大匯合更常用的原因之一,

Reference

(二)計算機視覺四大基本任務(分類、定位、檢測、分割

深度特征的層次性

卷積操作可獲取影像區域不同型別特征,而匯合等操作可對這些特征進行融合和抽象,隨著若干卷積、匯合等操作的堆疊,各層得到的深度特征逐漸從泛化特征(如邊緣、紋理等)過渡到高層語意表示(軀干、頭部等模式),

什么樣的資料集不適合深度學習

資料集太小,資料樣本不足時,深度學習相對其它機器學習演算法,沒有明顯優勢,

資料集沒有區域相關特性,目前深度學習表現比較好的領域主要是影像/語音/自然語言處理等領域,這些領域的一個共性是區域相關性,影像中像素組成物體,語音信號中音位組合成單詞,文本資料中單詞組合成句子,這些特征元素的組合一旦被打亂,表示的含義同時也被改變,對于沒有這樣的區域相關性的資料集,不適于使用深度學習演算法進行處理,舉個例子:預測一個人的健康狀況,相關的引數會有年齡、職業、收入、家庭狀況等各種元素,將這些元素打亂,并不會影響相關的結果,

什么造成梯度消失問題

神經網路的訓練中,通過改變神經元的權重,使網路的輸出值盡可能逼近標簽以降低誤差值,訓練普遍使用BP演算法,核心思想是,計算出輸出與標簽間的損失函式值,然后計算其相對于每個神經元的梯度,進行權值的迭代,

梯度消失會造成權值更新緩慢,模型訓練難度增加,造成梯度消失的一個原因是,許多激活函式將輸出值擠壓在很小的區間內,在激活函式兩端較大范圍的定義域內梯度為0,造成學習停止,

Overfitting怎么解決

首先所謂過擬合,指的是一個模型過于復雜之后,它可以很好地“記憶”每一個訓練資料中隨機噪音的部分而忘記了去“訓練”資料中的通用趨勢,過擬合具體表現在:模型在訓練資料上損失函式較小,預測準確率較高;但是在測驗資料上損失函式比較大,預測準確率較低,

Parameter Norm Penalties(引數范數懲罰);Dataset Augmentation (資料集增強);Early Stopping(提前終止);Parameter Tying and Parameter Sharing (引數系結與引數共享);Bagging and Other Ensemble Methods(Bagging 和其他集成方法);dropout;regularization;batch normalizatin,是解決Overfitting的常用手段,

L1和L2區別

L1 范數(L1 norm)是指向量中各個元素絕對值之和,也有個美稱叫“稀疏規則算子”(Lasso regularization),比如 向量 A=[1,-1,3], 那么 A 的 L1 范數為 |1|+|-1|+|3|,簡單總結一下就是:

1、L1 范數: 為 x 向量各個元素絕對值之和,

2、L2 范數: 為 x 向量各個元素平方和的 1/2 次方,L2 范數又稱 Euclidean 范數或 Frobenius 范數

3、Lp 范數: 為 x 向量各個元素絕對值 p 次方和的 1/p 次方. 在支持向量機學習程序中,L1 范數實際是一種對于成本函式求解最優的程序,因此,L1 范數正則化通過向成本函式中添加 L1 范數,使得學習得到的結果滿足稀疏化,從而方便人類提取特征,

L1 范數可以使權值引數稀疏,方便特征提取,L2 范數可以防止過擬合,提升模型的泛化能力,

TensorFlow計算圖

Tensorflow 是一個通過計算圖的形式來表述計算的編程系統,計算圖也叫資料流圖,可以把計算圖看做是一種有向圖,Tensorflow 中的每一個計算都是計算圖上的一個節點,而節點之間的邊描述了計算之間的依賴關系,

BN(批歸一化)的作用

(1). 可以使用更高的學習率,如果每層的scale不一致,實際上每層需要的學習率是不一樣的,同一層不同維度的scale往往也需要不同大小的學習率,通常需要使用最小的那個學習率才能保證損失函式有效下降,Batch Normalization將每層、每維的scale保持一致,那么我們就可以直接使用較高的學習率進行優化,

(2). 移除或使用較低的dropout, dropout是常用的防止overfitting的方法,而導致overfit的位置往往在資料邊界處,如果初始化權重就已經落在資料內部,overfit現象就可以得到一定的緩解,論文中最后的模型分別使用10%、5%和0%的dropout訓練模型,與之前的40%-50%相比,可以大大提高訓練速度,

(3). 降低L2權重衰減系數,還是一樣的問題,邊界處的區域最優往往有幾維的權重(斜率)較大,使用L2衰減可以緩解這一問題,現在用了Batch Normalization,就可以把這個值降低了,論文中降低為原來的5倍,

(4). 取消Local Response Normalization層,由于使用了一種Normalization,再使用LRN就顯得沒那么必要了,而且LRN實際上也沒那么work,

(5). Batch Normalization調整了資料的分布,不考慮激活函式,它讓每一層的輸出歸一化到了均值為0方差為1的分布,這保證了梯度的有效性,可以解決反向傳播程序中的梯度問題,目前大部分資料都這樣解釋,比如BN的原始論文認為的緩解了Internal Covariate Shift(ICS)問題,

什么是梯度消失和爆炸,怎么解決?

當訓練較多層數的模型時,一般會出現梯度消失問題(gradient vanishing problem)和梯度爆炸問題(gradient exploding problem),注意在反向傳播中,當網路模型層數較多時,梯度消失和梯度爆炸是不可避免的,

深度神經網路中的梯度不穩定性,根本原因在于前面層上的梯度是來自于后面層上梯度的乘積,當存在過多的層次時,就出現了內在本質上的不穩定場景,前面的層比后面的層梯度變化更小,故變化更慢,故引起了梯度消失問題,前面層比后面層梯度變化更快,故引起梯度爆炸問題,

解決梯度消失和梯度爆炸問題,常用的有以下幾個方案:

預訓練模型 + 微調

梯度剪切 + 正則化

relu、leakrelu、elu等激活函式

BN批歸一化

CNN中的殘差結構

LSTM結構

RNN回圈神經網路理解

回圈神經網路(recurrent neural network, RNN), 主要應用在語音識別、語言模型、機器翻譯以及時序分析等問題上,在經典應用中,卷積神經網路在不同的空間位置共享引數,回圈神經網路是在不同的時間位置共享引數,從而能夠使用有限的引數處理任意長度的序列,RNN可以看做作是同一神經網路結構在時間序列上被復制多次的結果,這個被復制多次的結構稱為回圈體,如何設計回圈體的網路結構是RNN解決實際問題的關鍵,RNN的輸入有兩個部分,一部分為上一時刻的狀態,另一部分為當前時刻的輸入樣本,

訓練程序中模型不收斂,是否說明這個模型無效,致模型不收斂的原因有哪些?

不一定,導致模型不收斂的原因有很多種可能,常見的有以下幾種:

沒有對資料做歸一化,

沒有檢查過你的結果,這里的結果包括預處理結果和最終的訓練測驗結果,

忘了做資料預處理,

忘了使用正則化,

Batch Size設的太大,

學習率設的不對,

最后一層的激活函式用的不對,

網路存在壞梯度,比如Relu對負值的梯度為0,反向傳播時,0梯度就是不傳播,

引數初始化錯誤,

網路太深,隱藏層神經元數量錯誤,

更多回答,參考此鏈接,

影像處理中平滑和銳化操作是什么?

平滑處理(smoothing)也稱模糊處理(bluring),主要用于消除影像中的噪聲部分,平滑處理常用的用途是用來減少影像上的噪點或失真,平滑主要使用影像濾波,在這里,我個人認為可以把影像平滑和影像濾波聯系起來,因為影像平滑常用的方法就是影像濾波器,在OpenCV3中常用的影像濾波器有以下幾種:

方框濾波——BoxBlur函式

均值濾波(鄰域平均濾波)——Blur函式

高斯濾波——GaussianBlur函式(高斯低通濾波是模糊,高斯高通濾波是銳化)

中值濾波——medianBlur函式

雙邊濾波——bilateralFilter函式 影像銳化操作是為了突出顯示影像的邊界和其他細節,而影像銳化實作的方法是通過各種算子和濾波器實作的——Canny算子、Sobel算子、Laplacian算子以及Scharr濾波器,

VGG使用2個3*3卷積的優勢在哪里?

(1). 減少網路層引數,用兩個33卷積比用1個55卷積擁有更少的引數量,只有后者的2?3?35?5=0.72,但是起到的效果是一樣的,兩個33的卷積層串聯相當于一個55的卷積層,感受野的大小都是5×5,即1個像素會跟周圍5*5的像素產生關聯,把下圖當成動態圖看,很容易看到兩個3×3卷積層堆疊(沒有空間池化)有5×5的有效感受野,

2個3*3卷積層

(2). 更多的非線性變換,2個33卷積層擁有比1個55卷積層更多的非線性變換(前者可以使用兩次ReLU激活函式,而后者只有一次),使得卷積神經網路對特征的學習能力更強,

paper中給出的相關解釋:三個這樣的層具有7×7的有效感受野,那么我們獲得了什么?例如通過使用三個3×3卷積層的堆疊來替換單個7×7層,首先,我們結合了三個非線性修正層,而不是單一的,這使得決策函式更具判別性,其次,我們減少引數的數量:假設三層3×3卷積堆疊的輸入和輸出有C個通道,堆疊卷積層的引數為3(32C2)=27C2個權重;同時,單個7×7卷積層將需要72C2=49C2個引數,即引數多81%,這可以看作是對7×7卷積濾波器進行正則化,迫使它們通過3×3濾波器(在它們之間注入非線性)進行分解,

此回答可以參考TensorFlow實戰p110,網上很多回答都說的不全,

Relu比Sigmoid效果好在哪里?

Sigmoid函式公式如下:$\sigma (x)=\frac{1}{1+exp(-x)}$

ReLU激活函式公式如下:

圖片

relu激活函式

relu函式方程 ReLU 的輸出要么是 0, 要么是輸入本身,雖然方程簡單,但實際上效果更好,在網上看了很多版本的解釋,有從程式實體分析也有從數學上分析,我找了個相對比較直白的回答,如下:

1、ReLU函式計算簡單,可以減少很多計算量,反向傳播求誤差梯度時,涉及除法,計算量相對較大,采用ReLU激活函式,可以節省很多計算量;

2、避免梯度消失問題,對于深層網路,sigmoid函式反向傳播時,很容易就會出現梯度消失問題(在sigmoid接近飽和區時,變換太緩慢,導數趨于0,這種情況會造成資訊丟失),從而無法完成深層網路的訓練,

3、可以緩解過擬合問題的發生,Relu會使一部分神經元的輸出為0,這樣就造成了網路的稀疏性,并且減少了引數的相互依存關系,緩解了過擬合問題的發生,

4、相比sigmoid型函式,ReLU函式有助于隨機梯度下降方法收斂,

參考鏈接

ReLU為什么比Sigmoid效果好

神經網路中權值共享的理解?

權值(權重)共享這個詞是由LeNet5模型提出來的,以CNN為例,在對一張圖偏進行卷積的程序中,使用的是同一個卷積核的引數,比如一個3×3×1的卷積核,這個卷積核內9個的引數被整張圖共享,而不會因為影像內位置的不同而改變卷積核內的權系數,說的再直白一些,就是用一個卷積核不改變其內權系數的情況下卷積處理整張圖片(當然CNN中每一層不會只有一個卷積核的,這樣說只是為了方便解釋而已),

參考資料

如何理解CNN中的權值共享

對fine-tuning(微調模型的理解),為什么要修改最后幾層神經網路權值?

使用預訓練模型的好處,在于利用訓練好的SOTA模型權重去做特征提取,可以節省我們訓練模型和調參的時間,

至于為什么只微調最后幾層神經網路權重,是因為:(1). CNN中更靠近底部的層(定義模型時先添加到模型中的層)編碼的是更加通用的可復用特征,而更靠近頂部的層(最后添加到模型中的層)編碼的是更專業業化的特征,微調這些更專業化的特征更加有用,它更代表了新資料集上的有用特征,(2). 訓練的引數越多,過擬合的風險越大,很多SOTA模型擁有超過千萬的引數,在一個不大的資料集上訓練這么多引數是有過擬合風險的,除非你的資料集像Imagenet那樣大,

參考資料

Python深度學習p127.

什么是dropout?

dropout可以防止過擬合,dropout簡單來說就是:我們在前向傳播的時候,讓某個神經元的激活值以一定的概率p停止作業,這樣可以使模型的泛化性更強,因為它不會依賴某些區域的特征,

圖片

dropou直觀展示

dropout具體作業流程

以 標準神經網路為例,正常的流程是:我們首先把輸入資料x通過網路前向傳播,然后把誤差反向傳播一決定如何更新引數讓網路進行學習,使用dropout之后,程序變成如下:

(1). 首先隨機(臨時)刪掉網路中一半的隱藏神經元,輸入輸出神經元保持不變(圖3中虛線為部分臨時被洗掉的神經元);

(2). 然后把輸入x通過修改后的網路進行前向傳播計算,然后把得到的損失結果通過修改的網路反向傳播,一小批訓練樣本執行完這個程序后,在沒有被洗掉的神經元上按照隨機梯度下降法更新對應的引數(w,b);

(3). 然后重復這一程序:

1、恢復被刪掉的神經元(此時被洗掉的神經元保持原樣沒有更新w引數,而沒有被洗掉的神經元已經有所更新)

2、 從隱藏層神經元中隨機選擇一個一半大小的子集臨時洗掉掉(同時備份被洗掉神經元的引數),

3、對一小批訓練樣本,先前向傳播然后反向傳播損失并根據隨機梯度下降法更新引數(w,b) (沒有被洗掉的那一部分引數得到更新,洗掉的神經元引數保持被洗掉前的結果),

dropout在神經網路中的應用

(1). 在訓練模型階段

不可避免的,在訓練網路中的每個單元都要添加一道概率流程,標準網路和帶有dropout網路的比較圖如下所示:

dropout在訓練階段

(2). 在測驗模型階段

預測模型的時候,輸入是當前輸入,每個神經單元的權重引數要乘以概率p,

圖片

dropout在測驗模型時

如何選擇dropout 的概率

input 的dropout概率推薦是0.8, hidden layer 推薦是0.5, 但是也可以在一定的區間上取值,(All dropout nets use p = 0.5 for hidden units and p = 0.8 for input units.)

參考資料

[Dropout:A Simple Way to Prevent Neural Networks from Overfitting]

深度學習中Dropout原理決議

HOG演算法原理描述

方向梯度直方圖(Histogram of Oriented Gradient, HOG)特征是一種在計算機視覺和影像處理中用來進行物體檢測的特征描述子,它通過計算和統計影像區域區域的梯度方向直方圖來構成特征,在深度學習取得成功之前,Hog特征結合SVM分類器被廣泛應用于影像識別中,在行人檢測中獲得了較大的成功,

HOG特征原理

HOG的核心思想是所檢測的區域物體外形能夠被光強梯度或邊緣方向的分布所描述,通過將整幅影像分割成小的連接區域(稱為cells),每個cell生成一個方向梯度直方圖或者cell中pixel的邊緣方向,這些直方圖的組合可表示出(所檢測目標的目標)描述子,為改善準確率,區域直方圖可以通過計算影像中一個較大區域(稱為block)的光強作為measure被對比標準化,然后用這個值(measure)歸一化這個block中的所有cells,這個歸一化程序完成了更好的照射/陰影不變性,與其他描述子相比,HOG得到的描述子保持了幾何和光學轉化不變性(除非物體方向改變),因此HOG描述子尤其適合人的檢測,

HOG特征提取方法就是將一個image:

1、灰度化(將影像看做一個x,y,z(灰度)的三維影像)

2、劃分成小cells(2*2)

3、計算每個cell中每個pixel的gradient(即orientation)

4、統計每個cell的梯度直方圖(不同梯度的個數),即可形成每個cell的descriptor,

HOG特征檢測步驟

HOG特征檢測步驟

顏色空間歸一化——–>梯度計算————->梯度方向直方圖———->重疊塊直方圖歸一化———–>HOG特征

參考資料

HOG特征檢測-簡述

移動端深度學習框架知道哪些,用過哪些?

知名的有TensorFlow Lite、小米MACE、騰訊的ncnn等,目前都沒有用過,

如何提升網路的泛化能力

和防止模型過擬合的方法類似,另外還有模型融合方法,

BN演算法,為什么要在后面加加伽馬和貝塔,不加可以嗎?

最后的“scale and shift”操作則是為了讓因訓練所需而“刻意”加入的BN能夠有可能還原最初的輸入,不加也可以,

激活函式的作用

激活函式實作去線性化,神經元的結構的輸出為所有輸入的加權和,這導致神經網路是一個線性模型,如果將每一個神經元(也就是神經網路的節點)的輸出通過一個非線性函式,那么整個神經網路的模型也就不再是線性的了,這個非線性函式就是激活函式,常見的激活函式有:ReLU函式、sigmoid函式、tanh函式,

ReLU函式:$f(x)=max(x,0)$

sigmoid函式:$f(x)=\frac{1}{1+e^{-x}}$

tanh函式:$f(x)=\frac{1+e^{-2x}}{1+e^{-2x}}$

卷積層和池化層有什么區別

1、卷積層有引數,池化層沒有引數

2、經過卷積層節點矩陣深度會改變,池化層不會改變節點矩陣的深度,但是它可以縮小節點矩陣的大小,

卷積層引數數量計算方法

假設輸入層矩陣維度是96963,第一層卷積層使用尺寸為55、深度為16的過濾器(卷積核尺寸為55、卷積核數量為16),那么這層卷積層的引數個數為553*16+16=1216個

卷積層輸出大小計算

卷積中的特征圖大小計算方式有兩種,分別是‘VALID’和‘SAME’,卷積和池化都適用,除不盡的結果都向下取整,公式:O = (W-F+2P)/S+1,輸入圖片(Input)大小為I=WW,卷積核(Filter)大小為FF,步長(stride)為S,填充(Padding)的像素數為P,

1、SAME填充方式:填充像素,conv2d函式常用,

2、VALID填充方式:不填充像素,Maxpooling2D函式常用,"SAME"卷積方式,對于輸入55影像,影像的每一個點都作為卷積核的中心,最后得到55的結果,通俗的來說:首先在原圖外層補一圈0,將原圖的第一點作為卷積核中心,若一圈0不夠,繼續補一圈0,如下圖所示:

圖片

卷積填充方式

神經網路為什么用交叉熵損失函式

判斷一個輸出向量和期望的向量有多接近,交叉熵(cross entroy)是常用的評判方法之一,交叉熵刻畫了兩個概率分布之間的距離,是分類問題中使用比較廣泛的一種損失函式,給定兩個概率分布p和q,通過q來表示p的交叉熵公式為:H(p,q)=?∑p(x)logq(x)

softmax公式寫一下:

圖片

softmax(y){i} = \frac{e^{yi}}{\sum{j=1}^{n}e^{yj}} softmax公式

1*1卷積的主要作用有以下幾點

1、降維( dimension reductionality ),比如,一張500 * 500且厚度depth為100 的圖片在20個filter上做11的卷積,那么結果的大小為500500*20,

2、加入非線性,卷積層之后經過激勵層,1*1的卷積在前一層的學習表示上添加了非線性激勵( non-linear activation ),提升網路的表達能力;

目標檢測基本概念

準確率、召回率、F1

混淆矩陣:

True Positive(真正例, TP):將正類預測為正類數.

True Negative(真負例, TN):將負類預測為負類數.

False Positive(假正例, FP):將負類預測為正類數 → 誤報 (Type I error).

False Negative(假負例子, FN):將正類預測為負類數 → 漏報 (Type II error).

查準率(準確率)P = TP/(TP+FP) 查全率(召回率)R = TP/(TP+FN) 準確率描述了模型有多準,即在預測為正例的結果中,有多少是真正例;召回率則描述了模型有多全,即在為真的樣本中,有多少被我們的模型預測為正例,以查準率P為縱軸、查全率R為橫軸作圖,就得到了查準率-查全率曲線,簡稱**”P-R“曲線,顯示改該曲線的圖稱為”P-R“圖,查準率、查全率性能的性能度量,除了”平衡點“(BEP),更為常用的是F1度量**:$$F1 = \frac{2PR}{P+R} = \frac{2*TP}{樣例總數+TP-TN}$$

F1度量的一般形式:$F_{\beta}$,能讓我們表達出對查準率/查全率的偏見,公式如下:$$F_{\beta} = \frac{1+\beta ^{2}PR}{(\beta ^{2}*P)+R}$$ $\beta >1$對查全率有更大影響,$\beta < 1$對查準率有更大影響,

不同的計算機視覺問題,對兩類錯誤有不同的偏好,常常在某一類錯誤不多于一定閾值的情況下,努力減少另一類錯誤,在目標檢測中,mAP(mean Average Precision)作為一個統一的指標將這兩種錯誤兼顧考慮,

map指標解釋

具體來說就是,在目標檢測中,對于每張圖片檢測模型會輸出多個預測框(遠超真實框的個數),我們使用IoU(Intersection Over Union,交并比)來標記預測框是否預測準確,標記完成后,隨著預測框的增多,查全率R總會上升,在不同查全率R水平下對準確率P做平均,即得到AP,最后再對所有類別按其所占比例做平均,即得到mAP指標,

交并比IOU

交并比(Intersection-over-Union,IoU),目標檢測中使用的一個概念,是產生的候選框(candidate bound)與原標記框(ground truth bound)的交疊率,即它們的交集與并集的比值,最理想情況是完全重疊,即比值為1,計算公式如下:

代碼實作如下:

# candidateBound = [x1, y1, x2, y2]

def calculateIoU(candidateBound, groundTruthBound):

cx1 = candidateBound[0]

cy1 = candidateBound[1]

cx2 = candidateBound[2]

cy2 = candidateBound[3]

gx1 = groundTruthBound[0]

gy1 = groundTruthBound[1]

gx2 = groundTruthBound[2]

gy2 = groundTruthBound[3]

carea = (cx2 - cx1) * (cy2 - cy1) #C的面積

garea = (gx2 - gx1) * (gy2 - gy1) #G的面積

x1 = max(cx1, gx1)

y1 = min(cy1, gy1) # 原點為(0, 0),所以這里是min不是max

x2 = min(cx2, gx2)

y2 = max(cy2, gy2)

w = max(0, (x2 - x1))

h = max(0, (y2 - y1))

area = w * h #C∩G的面積

iou = area / (carea + garea - area)

return iou

資料增強方法,離線資料增強和在線資料增強有什么區別?

常用資料增強方法:

翻轉:Fliplr,Flipud,不同于旋轉180度,這是類似鏡面的翻折,跟人在鏡子中的映射類似,常用水平、上下鏡面翻轉,

旋轉:rotate,順時針/逆時針旋轉,最好旋轉90-180度,否則會出現邊緣缺失或者超出問題,如旋轉45度,

縮放:zoom,影像可以被放大或縮小,imgaug庫可用Scal函式實作,

裁剪:crop,一般叫隨機裁剪,操作步驟是:隨機從影像中選擇一部分,然后降這部分影像裁剪出來,然后調整為原影像的大小,

平移:translation,平移是將影像沿著x或者y方向(或者兩個方向)移動,我們在平移的時候需對背景進行假設,比如說假設為黑色等等,因為平移的時候有一部分影像是空的,由于圖片中的物體可能出現在任意的位置,所以說平移增強方法十分有用,

放射變換:Affine,包含:平移(Translation)、旋轉(Rotation)、放縮(zoom)、錯切(shear),

添加噪聲:過擬合通常發生在神經網路學習高頻特征的時候,為消除高頻特征的過擬合,可以隨機加入噪聲資料來消除這些高頻特征,imgaug庫使用GaussianBlur函式,

亮度、對比度增強:這是影像色彩進行增強的操作

銳化:Sharpen,imgaug庫使用Sharpen函式,

資料增強分兩類,一類是離線增強,一類是在線增強:

離線增強 : 直接對資料集進行處理,資料的數目會變成增強因子 x 原資料集的數目 ,這種方法常常用于資料集很小的時候

在線增強 : 這種增強的方法用于,獲得 batch 資料之后,然后對這個batch的資料進行增強,如旋轉、平移、翻折等相應的變化,由于有些資料集不能接受線性級別的增長,這種方法長用于大的資料集,很多機器學習框架已經支持了這種資料增強方式,并且可以使用GPU優化計算,

ROI Pooling替換為ROI Align

,及各自原理

faster rcnn將roi pooling替換為roi align效果有所提升

ROI Pooling原理

ROI Align原理

Reference

1.深度學習中的資料增強

Reference

1、《Batch Normalization Accelerating Deep Network Training by Reducing Internal Covariate Shift》閱讀筆記與實作

2、深度學習中 Batch Normalization為什么效果好

3、詳解機器學習中的梯度消失、爆炸原因及其解決方法

Python/C/C++/計算機基礎/影像處理基礎

static關鍵字作用

在全域變數前加上關鍵字static,全域變數就定義為一個全域靜態變數,全域靜態變數在宣告它的檔案之外是不可見的,作用域范圍為從定義之處開始,到檔案結尾,

在函式回傳型別前加static,函式就變為靜態函式,靜態函式只在宣告它的檔案中使用,不被其他檔案所用,

C++指標和參考的區別

指標有自己的記憶體空間,而參考只是一個別名,類似于Python淺拷貝和深拷貝的區別

不存在空參考, 參考必須鏈接到一塊合法的記憶體地址;

一旦參考被初始化為一個物件,就不能指向另一個物件,指標可以在任何時候指向任何一個物件;

參考必須在創建時被初始化,指標可以在任何時間初始化,

C++中解構式的作用

解構式與建構式對應,類的解構式是類的一種特殊的成員函式,它會在每次洗掉所創建的物件時執行,解構式的名稱與類的名稱是完全相同的,只是在前面加了個波浪號(~)作為前綴,它不會回傳任何值,也不能帶有任何引數,解構式有助于在跳出程式(比如關閉檔案、釋放記憶體等)前釋放資源,

C++靜態函式和虛函式的區別

靜態函式在編譯的時候就已經確定運行時機,虛函式在運行的時候動態系結,虛函式因為用了虛函式表機制,呼叫的時候會增加一次記憶體開銷,

++i和i++區別

++i 先自增1,再回傳,i++,先回傳 i,再自增1.

const關鍵字作用

const型別的物件在程式執行期間不能被修改改變,

Python裝飾器解釋

裝飾器本質上是一個 Python 函式或類,它可以讓其他函式或類在不需要做任何代碼修改的前提下增加額外功能,裝飾器的回傳值也是一個函式/類物件,它經常用于有切面需求的場景,比如:插入日志、性能測驗、事務處理、快取、權限校驗等場景,裝飾器是解決這類問題的絕佳設計,有了裝飾器,我們就可以抽離出大量與函式功能本身無關的雷同代碼到裝飾器中并繼續重用,概括的講,裝飾器的作用就是為已經存在的物件添加額外的功能,

多行程與多執行緒區別

執行緒是行程的一部分,一個行程至少有一個執行緒;

對于作業系統來說,一個任務就是一個行程,行程內的“子任務”稱為執行緒;

多執行緒和多行程最大的不同在于,多行程中,同一個變數,各自有一份拷貝存在于每個行程中,互不影響,而多執行緒中,所有變數都由所有執行緒共享,所以,任何一個變數都可以被任何一個執行緒修改,因此,執行緒之間共享資料最大的危險在于多個執行緒同時改一個變數,把內容給改亂了,

行程間呼叫、通訊和切換開銷均比多執行緒大,單個執行緒的崩潰會導致整個應用的退出,

存在大量IO,網路耗時或者需要和用戶互動等操作時,使用多執行緒有利于提高系統的并發性和用戶界面快速回應從而提高友好性,

map與reduce函式用法解釋下

1、 map函式接收兩個引數,一個是函式,一個是Iterable,map將傳入的函式依次作用到序列的每個元素,并將結果作為新的Iterator回傳,簡單示例代碼如下:

# 示例1

def square(x):

return x ** 2

r = map(square, [1, 2, 3, 4, 5, 6, 7])

squareed_list = list(r)

print(squareed_list) # [1, 4, 9, 16, 25, 36, 49]

# 使用lambda匿名函式簡化為一行代碼

list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))

# 示例2

list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])) # ['1', '2', '3', '4', '5', '6', '7', '8', '9']

注意map函式回傳的是一個Iterator(惰性序列),要通過list函式轉化為常用串列結構,map()作為高階函式,事實上它是把運算規則抽象了,

2、reduce()函式也接受兩個引數,一個是函式(兩個引數),一個是序列,與map不同的是reduce把結果繼續和序列的下一個元素做累積計算,效果如下:reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4) 示例代碼如下:

from functools import reduce

CHAR_TO_INT = {

'0': 0,

'1': 1,

'2': 2,

'3': 3,

'4': 4,

'5': 5,

'6': 6,

'7': 7,

'8': 8,

'9': 9

}

def str2int(str):

ints = map(lambda x:CHAR_TO_INT[x], str) # str物件是Iterable物件

return reduce(lambda x,y:10*x + y, ints)

print(str2int('0'))

print(str2int('12300'))

print(str2int('0012345')) # 0012345

Python深拷貝、淺拷貝區別

1、直接賦值:其實就是物件的參考(別名),

2、淺拷貝(copy):拷貝父物件,不會拷貝物件的內部的子物件,copy淺拷貝,沒有拷貝子物件,所以原始資料改變,子物件會改變,

3、深拷貝(deepcopy):copy 模塊的 deepcopy 方法,完全拷貝了父物件及其子物件,兩者是完全獨立的,深拷貝,包含物件里面的自物件的拷貝,所以原始物件的改變不會造成深拷貝里任何子元素的改變,看一個示例程式,就能明白淺拷貝與深拷貝的區別了:

#!/usr/bin/Python3

# -*-coding:utf-8 -*-

import copy

a = [1, 2, 3, ['a', 'b', 'c']]

b = a # 賦值,傳物件的參考

c = copy.copy(a) # 淺拷貝

d = copy.deepcopy(a) # 深拷貝

a.append(4)

a[3].append('d')

print('a = ', a)

print('b = ', b)

print('c = ', c)

print('d = ', d) # [1, 2, 3, ['a', 'b', 'c']]

程式輸出如下:

a = [1, 2, 3, ['a', 'b', 'c', 'd'], 4] b = [1, 2, 3, ['a', 'b', 'c', 'd'], 4] c = [1, 2, 3, ['a', 'b', 'c', 'd']] d = [1, 2, 3, ['a', 'b', 'c']]

影像銳化方法

銳化主要影響影像中的低頻分量,不影響影像中的高頻分量像銳化的主要目的有兩個

1、增強影像邊緣,使模糊的影像變得更加清晰,顏色變得鮮明突出,影像的質量有所改善,產生更適合人眼觀察和識別的影像;

2、過銳化處理后,目標物體的邊緣鮮明,以便于提取目標的邊緣、對影像進行分割、目標區域識別、區域形狀提取等,進一步的影像理解與分析奠定基礎,

影像銳化一般有兩種方法:

1、微分法

2、高通濾波法

一般來說,影像的能量主要集中在其低頻部分,噪聲所在的頻段主要在高頻段,同時影像邊緣資訊也主要集中在其高頻部分,這將導致原始影像在平滑處理之后,影像邊緣和影像輪廓模糊的情況出現,為了減少這類不利效果的影響,就需要利用影像銳化技術,使影像的邊緣變得清晰,影像銳化處理的目的是為了使影像的邊緣、輪廓線以及影像的細節變得清晰,經過平滑的影像變得模糊的根本原因是因為影像受到了平均或積分運算,因此可以對其進行逆運算(如微分運算)就可以使影像變得清晰,微分運算是求信號的變化率,由傅立葉變換的微分性質可知,微分運算具有較強高頻分量作用,從頻率域來考慮,影像模糊的實質是因為其高頻分量被衰減,因此可以用高通濾波器來使影像清晰,但要注意能夠進行銳化處理的影像必須有較高的性噪比,否則銳化后影像性噪比反而更低,從而使得噪聲增加的比信號還要多,因此一般是先去除或減輕噪聲后再進行銳化處理,

Reference

影像增強-影像銳化

numpy手撕代碼

人臉識別的場景下,輸入10512的feature map,用這個在1000512的特征庫當中用歐氏距離去匹配10512的feature map,用這個在1000512的特征庫當中用歐氏距離去匹配101000的特征,得到這個output,

機器學習

Focal Loss 介紹一下

資料不平衡怎么辦?

AUC的理解

AUC的計算公式

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/290378.html

標籤:其他

上一篇:5.1 Python影像處理之影像編碼-哈夫曼編碼

下一篇:【OpenCV】QT編譯opencv與opencv_contrib

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more