ํŒจ๋”ฉ

์ปจ๋ณผ๋ฃจ์…˜ ์—ฐ์‚ฐ์˜ ํ–‰๋ ฌ

  • nร—nn\times n ์˜ ์ด๋ฏธ์ง€์— fร—ff\times f ํฌ๊ธฐ์˜ ํ•„ํ„ฐ๋ฅผ ์ปจ๋ณผ๋ฃจ์…˜ ์—ฐ์‚ฐ ํ–ˆ์„ ๋•Œ ๊ฒฐ๊ณผ์˜ ํฌ๊ธฐ๋Š” (nโˆ’f+1)ร—(nโˆ’f+1)(n-f+1)\times (n-f+1) ์ด๋‹ค.

  • ์ฆ‰ ์—ฐ์‚ฐ์„ ๊ณ„์† ํ• ์ˆ˜๋ก ์ด๋ฏธ์ง€๊ฐ€ ์ค„์–ด๋“ค๊ฒŒ ๋˜๊ณ  ์ด๋Š” ๋‹จ์ ์œผ๋กœ ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ด๋ฏธ์ง€ ๊ตฌ์„์— ์žˆ๋Š” ํ”ฝ์…€์€ ํ•˜๋‚˜์˜ ํ•„ํ„ฐ์™€๋งŒ ์—ฐ์‚ฐ๋˜๋ฏ€๋กœ ์ •๋ณด๊ฐ€ ๋ฒ„๋ ค์ง„๋‹ค.

  • ์ด๋Ÿฐ ๋‹จ์ ์ด ์žˆ๊ธฐ ๋–„๋ฌธ์— ํŒจ๋”ฉ ๊ธฐ์ˆ ์„ ๋„์ž…ํ•œ๋‹ค.

  • ๊ธฐ์กด ์ด๋ฏธ์ง€์— ํ…Œ๋‘๋ฆฌ ํ•œ ๊ฒน์„ ๋ง๋Œ€์–ด ์—ฐ์‚ฐ ๊ฒฐ๊ณผ ํ–‰๋ ฌ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

padding_amount = 1
data = np.array([
    [0, 0, 0, 10, 10, 10],
    [0, 0, 0, 10, 10, 10],
    [0, 0, 0, 10, 10, 10],
    [0, 0, 0, 10, 10, 10],
    [0, 0, 0, 10, 10, 10],
    [0, 0, 0, 10, 10, 10]
])

data = np.pad(data, padding_amount, 'constant', constant_values=0)

# now data is
# [[ 0  0  0  0  0  0  0  0]
#  [ 0  0  0  0 10 10 10  0]
#  [ 0  0  0  0 10 10 10  0]
#  [ 0  0  0  0 10 10 10  0]
#  [ 0  0  0  0 10 10 10  0]
#  [ 0  0  0  0 10 10 10  0]
#  [ 0  0  0  0 10 10 10  0]
#  [ 0  0  0  0  0  0  0  0]]

kernel = np.array([
    [1, 0, -1],
    [1, 0, -1],
    [1, 0, -1]
])

result = conv2d(data, kernel)
print(result)
  • Valid Convolution: ํŒจ๋”ฉ์„ ํ•˜์ง€ ์•Š๊ณ  ์ปจ๋ณผ๋ธŒ ํ•˜๋Š” ๊ฒƒ
  • Same Convolution: ํŒจ๋”ฉ์„ ํ†ตํ•ด ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์™€ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ๊ฐ™๊ฒŒํ•˜์—ฌ ์ปจ๋ณผ๋ธŒ ํ•˜๋Š” ๊ฒƒ
    • n+2pโˆ’f+1=nn+2p-f+1=n
    • p=fโˆ’12p=\frac{f-1}{2}
  • ff ๋Š” ๊ฑฐ์˜ ๋ชจ๋“  ๊ณณ์—์„œ ํ™€์ˆ˜์ž„