一. 池化簡介
平均池化:將圖片按照固定大小網格分割,網格內的像素值取網格內所有像素的平均值。
池化:使用均等大小的網格將圖片分割,並求網格內代表值的過程。
池化是卷積神經網絡(convolutional neural network)中非常重要的處理方式,能夠有效地降低圖像的維度。
平均池化定義:
二. 將輸入圖像用4*4網格做平均池化
import cv2 import numpy as np # average pooling def average_pooling(img, G=4): 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.mean(out[G*y:G*(y+1), G*x:G*(x+1), c]).astype(np.int) return out # Read image img = cv2.imread("../paojie.jpg") # Average Pooling out = average_pooling(img) # Save result cv2.imwrite("out.jpg", out) cv2.imshow("result", out) cv2.waitKey(0) cv2.destroyAllWindows()
三. 輸出結果

4*4平均池化結果

原圖
四. 深度學習中的平均池化操作,以pytorch庫為例
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 avgPool = nn.AvgPool2d(4) #4*4的窗口,步長為4的平均池化 img = avgPool(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()
五. pytorch中的平均池化輸出結果( AvgPool2d() 函數 )

AvgPool2d后結果
可以看到,pytorch中 AvgPool2d 函數,平均池化后降低了圖像的維度。
六. 參考內容