一. 最大池化
池化:把圖片使用均等大小網格分割,並求網格內代表值的操作
最大池化:將網格中的最大值作為這個網格的代表值
二. 使用4*4網格對圖像進行最大池化操作
import cv2 import numpy as np # max pooling,G is the size of the window def max_pooling(img, G=4): # Max Pooling out = img.copy() H, W, C = img.shape Nh = int(H / G) Nw = int(W / G) for y in range(Nh): for x in range(Nw): for c in range(C): out[G*y:G*(y+1), G*x:G*(x+1), c] = np.max(out[G*y:G*(y+1), G*x:G*(x+1), c]) return out # Read image img = cv2.imread("../paojie.jpg") # Max pooling out = max_pooling(img) # Save result cv2.imwrite("out.jpg", out) cv2.imshow("result", out) cv2.waitKey(0) cv2.destroyAllWindows()
三. 輸出結果:

最大池化后圖像

原圖
四. 利用pytorch中MaxPool2d函數對圖像進行最大池化
import cv2 import numpy as np import torch import torch.nn as nn img = cv2.imread('../paojie.jpg',0) #讀入灰度圖像 img = np.array(img,dtype='float32') img = torch.from_numpy(img.reshape(1,1,img.shape[0],img.shape[1])) # 將灰度圖像轉換為tensor maxPool = nn.MaxPool2d(4) #4*4的窗口,步長為4的最大池化 img = maxPool(img) img = torch.squeeze(img) #去掉1的維度 img = img.numpy().astype('uint8') #轉換格式,准備輸出 cv2.imwrite("out.jpg", img) cv2.imshow("result", img) cv2.waitKey(0) cv2.destroyAllWindows()
五. pytoch中MaxPool2d函數最大池化的輸出結果

MaxPool2d輸出結果
六. 參考內容