1.最近鄰差值(Neareast Neighbor Interpolation)
插值算法 | 最近鄰插值法_嗶哩嗶哩_bilibili
上圖中最后一行,第一個圖像,因為目標像素(放大后,位于第1行第0列的像素)距離它最近的原圖的像素的像素值為1,因此該目標像素取值為1。
把原圖分別進行 上采樣
方式1:最近鄰插值
方式2:雙線性插值
肉眼觀看,方式2效果更好,沒有鋸齒狀,更平滑
雖然在上采樣階段,? 使用雙線性插值可以得到比最近鄰差值效果更好的 圖片,但是對于語義分割任務并不合適。
語義分割任務只能使用最近鄰插值,因為其標注時 將目標對應像素點的值賦值為1,背景賦值為0, 邊緣賦值為255,?當通過數據增強進行圖片縮放時,使用最近鄰插值? ,得到的新圖像的語義標簽中像素值只包含 0,1,255,? ?這個三個數值對語義分割網絡訓練具有意義, 其他數字沒有意義。
當使用雙線性插值,會導致語義標簽圖像中出現? 如? ?111,126等數字,這些數字沒有意義,對網絡訓練沒有用處。
個人
疑惑:對于實例實例分割,可以使用雙線性插值嗎??
語義分割網絡訓練時,? 可能進行圖像縮放這一數據增強方法,因此只能使用 最近鄰差值 防止語義標簽出現? 非規定中的數字。?
但是對于實例實例分割,可以使用雙線性插值嗎??
最近使用YOLO-SEG, 發現將最近鄰插值替換為 雙線性插值, 精度有些提升。
2.雙線性插值(bilinear? interpolation)
插值算法 |雙線性插值法_嗶哩嗶哩_bilibili
將源圖像t0進行上采樣, 使用雙線性插值, 首先:需要將放大的圖像(t1)等比例縮小為源圖像尺寸t3。
?
縮放為源圖像尺寸大小,需要進行對齊,有兩種對齊方式:
1.角對齊:需要將?t3與t0的網格中心點對齊, 這種需要t1縮小的尺度更大
2.邊對齊,需要將t3與t0的邊對齊,這種需要t1縮小的尺度比角對齊小一些
具體可以見pytorch官網的說明
該鏈接的內容
注意:像素值分別為v1,v2,v3,v4
?代碼示例
角對齊
邊對齊
角對齊
上述兩段代碼。第一個自已編寫, 第二個是調用函數庫
注意:這里以最左上角像素點的中心點的坐標作為原點坐標(0,0),而不是邊界框的角點
邊對齊
使用pytorch函數
?
3.雙三次插值算法(Bicubic)
雙: X,Y兩個方向
三次:計算目標像素點周圍像素權重時,使用三次項公式計算周圍權重
?
與上述兩種插值方法? 初始步驟相同,將放大的圖像t1進行縮小,縮小為源圖像t0尺度t2,然后對照源圖像,計算目標像素點
上圖中, 發現t2的一個像素點在t0中,剛好位于t0中四個像素點之間的中心
?
雙三次插值,取周圍16個像素點的值進行計算
上圖:
第一行表示 一維插值
第二行:二維差值,彩色點表示原圖像素點,彩色點的高低表示該像素點的像素值,黑色點表示放大圖像中的像素點,其高低表示所計算的采樣值。
x只能表示 X或Y一個方向的距離
因此需要計算兩次權重,分別表示X,Y方向
上圖:右邊第一個小圖,
藍色點(目標點)與源圖像素的一個紅點重合, X,Y方向距離均為0, 則該源圖的像素點在X或Y方向的對應的權重為1,
右邊第二個小圖,藍色點(目標點)與源圖像素的一個紅點在X,Y距離上均為1,?則該源圖的像素點在X或Y方向的對應的權重為0
因此:參考上圖的曲線圖
在X方向距離為0,則在X方向取得權重為1;
在X方向距離為1,則在X方向取得權重為0;
在X方向距離為2,則在X方向取得權重為0;
根據距離的不同(0.5,1.5等)分別選擇權重計算公式W(x)的三個不同分段函數
?
將在X,Y方向? ?計算出的16個值相加得到3.5?
使用個人編寫程序, 以及pytorch 程序進行驗證?
4.IoU與NMS
NMS 非極大值抑制 | IoU 交并比_嗶哩嗶哩_bilibili?
?待看
。。。
參考資料
1.插值算法 | 最近鄰插值法_嗶哩嗶哩_bilibili