๐ ํ์ต ๋ชฉํ
์์ ์ฐ๊ฒฐ ๊ณ์ธต์ ๋ฌธ์ ์
= '๋ฐ์ดํฐ ํ์์ ๋ฌด์'
์ด๋ฏธ์ง๋ ์ธ๋ก, ๊ฐ๋ก, ์ฑ๋(์์)๋ก ๊ตฌ์ฑ๋ 3์ฐจ์ ๋ฐ์ดํฐ์ด์ง๋ง
์ ์ฐ๊ฒฐ(FC, Fully Connected) ์ ๊ฒฝ๋ง์ ํ์ต์์ผ์ผ ํ ๊ฒฝ์ฐ์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ 1์ฐจ์(๋ฐฐ์ด) ํํ๋ก ํ์ ๋์ด 3์ฐจ์ ์ฌ์ง ๋ฐ์ดํฐ๋ฅผ 1์ฐจ์์ผ๋ก ํ๋ฉดํ(Flatten)์์ผ์ผ ํ๋ค.
์ด ๋ ์ฌ์ง ๋ฐ์ดํฐ๋ฅผ ํ๋ฉดํ ์ํค๋ ๊ณผ์ ์์ ๊ณต๊ฐ ์ ๋ณด๊ฐ ์์ค๋ ์๋ฐ์ ์๋ค.
์ด๋ฏธ์ง๋ 3์ฐจ์ ํ์์ด๋ฉฐ, ์ด ํ์์๋ ์์คํ ๊ณต๊ฐ์ ์ ๋ณด ์ฆ, 3์ฐจ์ ์์์ ์๋ฏธ๋ฅผ ๊ฐ๋ ๋ณธ์ง์ ์ธ ํจํด์ด ์จ์ด ์๋ค. (ex. ๊ณต๊ฐ์ ์ผ๋ก ๊ฐ๊น์ด ํฝ์ ์ ๊ฐ์ด ๋น์ทํ๊ฑฐ๋, RGB์ ๊ฐ ์ฑ๋์ ์๋ก ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ด ์๊ฑฐ๋, ๊ฑฐ๋ฆฌ๊ฐ ๋จผ ํฝ์ ๋ผ๋ฆฌ๋ ๋ณ ์ฐ๊ด์ด ์๋ ๋ฑ) ๊ทธ๋ฌ๋ ์์ ์ฐ๊ฒฐ ๊ณ์ธต์ ์ด๋ฌํ ํ์์ ๋ฌด์ํ๊ณ ๋ชจ๋ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ๋๋ฑํ ๋ด๋ฐ(๊ฐ์ ์ฐจ์์ ๋ด๋ฐ)์ผ๋ก ์ทจ๊ธํ์ฌ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ด๋ฏธ์ง ๊ณต๊ฐ ์ ๋ณด ์ ์ค๋ก ์ธํ ์ ๋ณด ๋ถ์กฑ์ผ๋ก ์ธ๊ณต ์ ๊ฒฝ๋ง์ด ํน์ง์ ์ถ์ถ ๋ฐ ํ์ต์ด ๋นํจ์จ์ ์ด๊ณ ์ ํ๋๋ฅผ ๋์ด๋๋ฐ ํ๊ณ๊ฐ ์๋ค.
ํํธ, ํฉ์ฑ๊ณฑ ๊ณ์ธต์ ํ์์ ์ ์งํ๋ค. ์ด๋ฏธ์ง๋ 3์ฐจ์์ผ๋ก ์ ๋ ฅ๋ฐ์ผ๋ฉฐ, ๋ง์ฐฌ๊ฐ์ง๋ก ๋ค์ ๊ณ์ธต์๋ 3์ฐจ์ ๋ฐ์ดํฐ๋ก ์ ๋ฌํ๋ค. ๊ทธ๋์ CNN์์๋ ์ด๋ฏธ์ง์ฒ๋ผ ํ์์ ๊ฐ์ง ๋ฐ์ดํฐ๋ฅผ ์ ๋๋ก ์ดํดํ (๊ฐ๋ฅ์ฑ์ด ์๋) ๊ฒ์ด๋ค.
CNN์ ํฌ๊ฒ ์ด๋ฏธ์ง์ ํน์ง์ ์ถ์ถํ๋ ๋ถ๋ถ + Flatten + ํด๋์ค๋ฅผ ๋ถ๋ฅํ๋ ๋ถ๋ถ์ผ๋ก ๋๋๋ค.
Feature extraction (ํน์ง ์ถ์ถ ์์ญ)
Convolution Layer
: ์
๋ ฅ ๋ฐ์ดํฐ์ ํํฐ๋ฅผ ์ ์ฉ ํ ํ์ฑํ ํจ์๋ฅผ ๋ฐ์ํ๋ ํ์ ์์Pooling Layer
: ์ ํ์ ์ธ ๋ ์ด์ดFlatten layer : ์ด๋ฏธ์ง ํํ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์ด ํํ๋ก ๋ง๋ฆ
Classification (ํด๋์ค ๋ถ๋ฅ ์์ญ)
CNN์ ์ธ๊ธฐ๋น๊ฒฐ
CNN ์ฃผ์ ์ฉ์ด
- (ํฉ์ฑ๊ณฑ)
- ์ฑ๋ ()
- ํํฐ ()
- ์ปค๋ ()
- ์คํธ๋ผ์ด๋ ()
- ํจ๋ฉ ()
- ํผ์ฒ ๋งต (), ์กํฐ๋ฒ ์ด์ ๋งต ()
- ํ๋ง () ๋ ์ด์ด
ํฉ์ฑ๊ณฑ, Convolution
- 1-D Convolution
### np.convolve() import numpy as np input = [0, 0, 26, 51, 58, 59, 53, 29, 0, 0, 0] patch = [-1, 2, -1] # filter output = np.convolve(input, patch) # convolution print(output) # "edge"๋ค์ ์ฐพ์๋ """ [ 0 0 -26 1 18 6 7 18 5 -29 0 0 0] """
- 2-D Convolution
์ด๋ฏธ์ง์ ๋ ธ๋์ ๋ถ๋ถ์ผ๋ก ๋ณํ๋ ๋ถ๋ถ์ด Convolution filter์ ๋ง๋๋ ๋ถ๋ถ์ด๋ฉฐ
๊ทธ๋ ๊ฒ ์ฐ์ฐ์ด ๋์์ ๋, ๋ถํ์์ output๊ฐ์ ์ป์ ์ ์๋ค.
์ฑ๋, Channel
์ด๋ฏธ์ง ํฝ์ ํ๋ํ๋๋ ์ค์
์ฑ๋์ ์ = convolution์ ์ํ matrices์
์ปฌ๋ฌ ์ฌ์ง : ๊ฐ ํฝ์ ์ RGB 3๊ฐ์ ์ค์๋ก ํํํ 3์ฐจ์ ๋ฐ์ดํฐ๋ก 3๊ฐ์ ์ฑ๋๋ก ๊ตฌ์ฑ
โ์ฃผ์ํด์ผํ ์
- ํํฐ์ ๊ฐ์์ ๊ฐ ํํฐ๋ณ ์ฑ๋์ ๊ฐ์๋ฅผ ํผ๋ํ์ง ์์์ผ ํ๋ค!
- feature map์ channel๊ณผ depth๋ ํผ์ฉํด์ ์ฐ๋ ์ฉ์ด์ด๋ค. channel์ด ๋ง์์๋ก depth๊ฐ ๊น๋ค๊ณ ํ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ ๊ฐ channel์ ๋ฐ๋์ ์๊น๋ก ๊ตฌ๋ถ๋๋ ๊ฒ ์๋๋ค. ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์ ๋ ฅ๋ ์ด๋ฏธ์ง๋ฅผ 5๊ฐ ์ด์์ ์ฑ๋๋ก ๋ง๋ค์ด์ฃผ๋ Conv2D ๋ชจ๋ธ์ ๋ง๋ค์ด์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฌผ์ ๊ฐ channel์ ์ง์ ์ถ๋ ฅํ์ฌ ํ์ธํด ๋ณด์๋ ๊ฒ์ด๋ค. Conv2D์์ filter๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฐ๋ ์ด์ ๋ ์ฌ๋ฌ ๊ฐ์ channel์ ๋ง๋๋ ๊ฒ ์์ฒด๊ฐ ๋ชฉ์ ์ด ์๋๋ผ, ๋ค์ํ ํน์ง(ํจํด)์ ์ถ์ถํด ๋ด๊ธฐ ์ํจ์ด๋ค.
x x (=width of image, =height of image, =number of channels)
ex. (39, 31, 3)
ํ๋ฐฑ ์ฌ์ง(grayscale image) : 2์ฐจ์ ๋ฐ์ดํฐ๋ก 1๊ฐ ์ฑ๋๋ก ๊ตฌ์ฑ
x
ex. (39, 31, 1)
Convolution Layer์ n๊ฐ์ ํํฐ ์ ์ฉ -> ์ถ๋ ฅ ๋ฐ์ดํฐ= n๊ฐ์ ์ฑ๋
ํํฐ(Filter), ์ปค๋(Kernel), ๋ง์คํฌ(mask)
์ด๋ฏธ์ง์ ํน์ง์ ์ฐพ์๋ด๊ธฐ ์ํ ๊ณต์ฉ ํ๋ผ๋ฏธํฐ
๊ฐ์ค์น (weights parameters)์ ์งํฉ(Filter์ ๋งค๊ฐ๋ณ์ = ๊ฐ์ค์น)์ผ๋ก ์ด๋ฃจ์ด์ ธ
๊ฐ์ฅ ์์ ์ด๋ฏธ์ง์ ํน์ง์ ์ก์๋ด๋ ์ฐฝ
์ ์ฌ๊ฐํ๋ ฌ๋ก ์ ์ : (2, 2), (3, 3), (4, 4)
Filter ์ฐ์ฐ = ํฉ์ฑ๊ณฑ ์ฐ์ฐ
Filter์ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ฉด ์ถ๋ ฅ๋๋ feature map์ด ์์์ง (๋ฐ๋น๋ก ๊ด๊ณ)
์
๋ ฅ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ฌ ์ฑ๋(RGB)์ ๊ฐ์ง ๊ฒฝ์ฐ
ํํฐ๋ ์
๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ง์ ๋ ๊ฐ๊ฒฉ์ผ๋ก ์ํํ๋ฉฐ ํฉ์ฑ๊ณฑ์ ๊ณ์ฐํ ํ,
์ฑ๋๋ณ ํผ์ฒ ๋งต์ ๋ง๋ค๊ณ ๊ฐ ์ฑ๋์ ํผ์ฒ ๋งต์ ๋ชจ๋ ํฉ์ฐํ์ฌ ์ต์ข
ํผ์ฒ ๋งต์ผ๋ก ๋ฐํํ๋ค.
์
๋ ฅ ๋ฐ์ดํฐ๋ ์ฑ๋ ์์ ์๊ด์์ด ํํฐ ๋ณ๋ก 1๊ฐ์ ํผ์ฒ๋งต์ด ๋ง๋ค์ด์ง๋ค.
ํ๋์ Convolution Layer์ ํฌ๊ธฐ๊ฐ ๊ฐ์ ์ฌ๋ฌ ๊ฐ์ ํํฐ๋ฅผ ์ ์ฉํ ์ ์๋ค.
์ด ๊ฒฝ์ฐ์ ์
๋ ฅ๋ฐ์ดํฐ์ ์ ์ฉํ ํํฐ์ ๊ฐ์
-> ์ถ๋ ฅ ๋ฐ์ดํฐ์ธ Feature Map์ ์ฑ๋
์คํธ๋ผ์ด๋ (Stride)
ํจ๋ฉ(Padding)
Convolution ๋ ์ด์ด์์ Filter
์ Stride
์ ์์ฉ์ผ๋ก
Feature Map ํฌ๊ธฐ(output)๋ ์
๋ ฅ๋ฐ์ดํฐ๋ณด๋ค ์๋ค.
Convolution ๋ ์ด์ด์ ์ถ๋ ฅ ๋ฐ์ดํฐ๊ฐ ์ค์ด๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ ๋ฐฉ๋ฒ์ผ๋ก
์
๋ ฅ ๋ฐ์ดํฐ์ ์ธ๊ฐ์ ์ง์ ๋ ํฝ์
๋งํผ ํน์ ๊ฐ์ผ๋ก ์ฑ์ ๋ฃ๋ ๊ฒ์ ์๋ฏธํ๋ฉฐ
๋ณดํต ํจ๋ฉ ๊ฐ์ผ๋ก 0์ ์ฑ์ ๋ฃ๋๋ค.
๋ชฉ์
Zeros(zero-padding) ๋๋ ๋ค๋ฅธ ๊ฐ์ ์ด๋ฏธ์ง์ ์ธ๊ฐ(๊ฐ์ฅ์๋ฆฌ)์ ๋ฐฐ์นํ์ฌ
conv๋ฅผ ํ ๋ ์๋ ์ด๋ฏธ์ง์ ๊ฐ์ ๋ฐ์ดํฐ์ ์๋ฅผ ๊ฐ์ง ์ ์๋๋ก ๋์์ค (Stride = 1์ผ ๋)
padding์ ํ๊ฒ ๋๋ฉด ์ ํ ๊ฑฐ์ ๋นํด Flatten๋ FC ์ฐจ์์ด ํฌ๋ค
(feature map์ ํฌ๊ธฐ๊ฐ ์ค์ง ์์ผ๋ฏ๋ก)
valid
: padding ์ฌ์ฉ ์ ํจ / same
: padding ์ฌ์ฉ
ํผ์ฒ ๋งต (Feature Map), ์กํฐ๋ฒ ์ด์ ๋งต (Activation Map)
Convolution Layer์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ํํฐ๊ฐ ์ํํ๋ฉฐ ํฉ์ฑ๊ณฑ์ ํตํด์ ๋ง๋ ์ถ๋ ฅ
Feature Map
: ํฉ์ฑ๊ณฑ ๊ณ์ฐ์ผ๋ก ๋ง๋ค์ด์ง ํ๋ ฌActivation Map
: Feature Map ํ๋ ฌ์ ํ์ฑ ํจ์๋ฅผ ์ ์ฉํ ๊ฒฐ๊ณผ๋ก Convolution ๋ ์ด์ด์ ์ต์ข
์ถ๋ ฅ ๊ฒฐ๊ณผfeature map ์ฑ๋ ์ : 3 -> 32
ํ๋ง (pooling) ๋ ์ด์ด
CNN์ ์ผ๋ฐ์ ์ธ ์ถ๋ ฅ ๊ณ์ธต์ ๋ถ๋ฅ ๋๋ ๊ฐ์ง ๋ฌธ์ ๋ฅผ ์งํฅ
-> "์ด ์ฌ์ง์ ๊ณ ์์ด, ๊ฐ ๋๋ ๋ค๋ฅธ ๋๋ฌผ์ด ํฌํจ๋์ด ์์ต๋๊น?"
๋ฒค์น๋งํฌ ๋ชจ๋ธ : ResNet50
ResNet์ CNN์ ์ผ์ข ์ธ๋ฐ, ๊ธฐ์กด์ Squential ๋ชจ๋ธ๊ณผ ๋ฌ๋ฆฌ skipped connection์ด ์๋ ๋ชจ๋ธ์ด๋ค. ์ด ์ฐ๊ฒฐ์ ํตํด์ ๋ ๊น์ ์ธต์ ๋ง๋ค๋๋ผ๋ ํ์ต์ด ๊ฐ๋ฅํด์ง๋ค.