- 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)