手寫單通道的pooling

  • max pooling
    橫向和縱向的step分別是m,n, data[i:i+m,j:j+n]個塊中取最大值(max pooling)。
    new_img_w = (w -kernel +2*padding)/ step + 1
import numpy as np
import cv2 as cv

def pooling(data, m, n):
    print(data.shape)
    h, w = data.shape[:2]
    img_new = []

    for i in range(0, h, m):
        line = []
        for j in range(0, w, n):
            x = data[i:i+m, j:j+n]
            line.append(np.max(x))
        img_new.append(line)
    return np.array(img_new)

im_bgr = cv.imread("/home/alex/Pictures/lizixuan.jpg")
b, g, r = cv.split(im_bgr)
im_bgr = pooling(r, 2, 2)
# cv.imshow("", im_bgr); cv.waitKey()
cv.imshow("", im_bgr); cv.waitKey()
  • avg pooling
def pooling(data, m, n):
    a,b = data.shape
    img_new = []
    for i in range(0,a,m):
        line = []
        for j in range(0,b,n):
            x = data[i:i+m,j:j+n]#選取池化區域
            line.append(np.sum(x)/(n*m))
        img_new.append(line)
    return np.array(img_new)

2*2的pooling輸出尺寸變化>>
(1368, 1080)
(684, 540)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章