Pooling与马赛克的秘密

  说到Pooling,相信学习过CNN的朋友们都不会感到陌生。Pooling在当中的意思是“池化”,在神经当中非常常见,通常用的比较多的一种是Max Pooling,具体操作如下图:

Pooling与马赛克的秘密

  结合图像理解,相信你也会大概明白其中的本意。不过Pooling并不是只可以选取2×2的窗口大小,即便是3×3,5×5等等没问题,步长(Stride)也是一个道理。除了在神经网络方面,Pooling为图片打马赛克也是可以取得不错的效果,结合几个例子看看。

Pooling与马赛克的秘密

  我们可以用Max Pooling先看看效果如何:

Pooling与马赛克的秘密

  Min Pooling和Average Pooling的操作也差不多,只不过把对应的操作函数变了而已。

  Min Pooling:

Pooling与马赛克的秘密

  小动物的皮肤颜色都换了,再看看Average Pooling:

Pooling与马赛克的秘密

  综上来看,Average Pooling似乎更加逼真一些,不过换一张图片可能效果就不一样了。

  以下是Pooling操作的

import cv2
import numpy as np


def average_pooling(img, G=5):
    out = img.copy()

    H, W, C = img.shape
    Nh = H // G
    Nw = W // G

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

    return out
def max_pooling(img, G=5):
    out = img.copy()

    H, W, C = img.shape
    Nh = H // G
    Nw = 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]).astype(np.int64)

    return out
def min_pooling(img, G=5):
    out = img.copy()

    H, W, C = img.shape
    Nh = H // G
    Nw = 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.min(out[G*y:G*(y+1), G*x:G*(x+1), c]).astype(np.int64)

    return out

  由于是多颜色通道的图片,所以记得别漏了这个

给TA打赏
共{{data.count}}人
人已打赏
其他

“视界”尽在眼前,海纳视联大模型来了!

2023-11-18 14:34:10

运维笔记

4月15日快讯:骨干网又断了:京汉广光缆驻马店一带发生中断

2023-10-10 17:04:59

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索