n431.CNN

ssu_hyunยท2021๋…„ 11์›” 14์ผ
0

[codestates] AI Bootcamp

๋ชฉ๋ก ๋ณด๊ธฐ
45/62
post-thumbnail

๐Ÿ† ํ•™์Šต ๋ชฉํ‘œ

  • Part 1: Convolution & pooling ๊ฐœ๋…์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Part 2: CNN์„ ์ด์šฉํ•˜์—ฌ ๋ถ„๋ฅ˜(Classification)๋ฌธ์ œ์— ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Part 3: ์ „์ดํ•™์Šต(transfer learning)์„ ์ด์šฉํ•˜์—ฌ image classification์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.





์™„์ „์—ฐ๊ฒฐ ๊ณ„์ธต์˜ ๋ฌธ์ œ์ 
= '๋ฐ์ดํ„ฐ ํ˜•์ƒ์˜ ๋ฌด์‹œ'


์ด๋ฏธ์ง€๋Š” ์„ธ๋กœ, ๊ฐ€๋กœ, ์ฑ„๋„(์ƒ‰์ƒ)๋กœ ๊ตฌ์„ฑ๋œ 3์ฐจ์› ๋ฐ์ดํ„ฐ์ด์ง€๋งŒ
์ „์—ฐ๊ฒฐ(FC, Fully Connected) ์‹ ๊ฒฝ๋ง์„ ํ•™์Šต์‹œ์ผœ์•ผ ํ•  ๊ฒฝ์šฐ์— ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋Š” 1์ฐจ์›(๋ฐฐ์—ด) ํ˜•ํƒœ๋กœ ํ•œ์ •๋˜์–ด 3์ฐจ์› ์‚ฌ์ง„ ๋ฐ์ดํ„ฐ๋ฅผ 1์ฐจ์›์œผ๋กœ ํ‰๋ฉดํ™”(Flatten)์‹œ์ผœ์•ผ ํ•œ๋‹ค.
์ด ๋•Œ ์‚ฌ์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ํ‰๋ฉดํ™” ์‹œํ‚ค๋Š” ๊ณผ์ •์—์„œ ๊ณต๊ฐ„ ์ •๋ณด๊ฐ€ ์†์‹ค๋  ์ˆ˜๋ฐ–์— ์—†๋‹ค.
์ด๋ฏธ์ง€๋Š” 3์ฐจ์› ํ˜•์ƒ์ด๋ฉฐ, ์ด ํ˜•์ƒ์—๋Š” ์†Œ์ค‘ํ•œ ๊ณต๊ฐ„์  ์ •๋ณด ์ฆ‰, 3์ฐจ์› ์†์—์„œ ์˜๋ฏธ๋ฅผ ๊ฐ–๋Š” ๋ณธ์งˆ์ ์ธ ํŒจํ„ด์ด ์ˆจ์–ด ์žˆ๋‹ค. (ex. ๊ณต๊ฐ„์ ์œผ๋กœ ๊ฐ€๊นŒ์šด ํ”ฝ์…€์€ ๊ฐ’์ด ๋น„์Šทํ•˜๊ฑฐ๋‚˜, RGB์˜ ๊ฐ ์ฑ„๋„์€ ์„œ๋กœ ๋ฐ€์ ‘ํ•˜๊ฒŒ ๊ด€๋ จ๋˜์–ด ์žˆ๊ฑฐ๋‚˜, ๊ฑฐ๋ฆฌ๊ฐ€ ๋จผ ํ”ฝ์…€๋ผ๋ฆฌ๋Š” ๋ณ„ ์—ฐ๊ด€์ด ์—†๋Š” ๋“ฑ) ๊ทธ๋Ÿฌ๋‚˜ ์™„์ „์—ฐ๊ฒฐ ๊ณ„์ธต์€ ์ด๋Ÿฌํ•œ ํ˜•์ƒ์„ ๋ฌด์‹œํ•˜๊ณ  ๋ชจ๋“  ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ๋™๋“ฑํ•œ ๋‰ด๋Ÿฐ(๊ฐ™์€ ์ฐจ์›์˜ ๋‰ด๋Ÿฐ)์œผ๋กœ ์ทจ๊ธ‰ํ•˜์—ฌ ๊ฒฐ๊ณผ์ ์œผ๋กœ ์ด๋ฏธ์ง€ ๊ณต๊ฐ„ ์ •๋ณด ์œ ์‹ค๋กœ ์ธํ•œ ์ •๋ณด ๋ถ€์กฑ์œผ๋กœ ์ธ๊ณต ์‹ ๊ฒฝ๋ง์ด ํŠน์ง•์„ ์ถ”์ถœ ๋ฐ ํ•™์Šต์ด ๋น„ํšจ์œจ์ ์ด๊ณ  ์ •ํ™•๋„๋ฅผ ๋†’์ด๋Š”๋ฐ ํ•œ๊ณ„๊ฐ€ ์žˆ๋‹ค.


ํ•œํŽธ, ํ•ฉ์„ฑ๊ณฑ ๊ณ„์ธต์€ ํ˜•์ƒ์„ ์œ ์ง€ํ•œ๋‹ค. ์ด๋ฏธ์ง€๋„ 3์ฐจ์›์œผ๋กœ ์ž…๋ ฅ๋ฐ›์œผ๋ฉฐ, ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋‹ค์Œ ๊ณ„์ธต์—๋„ 3์ฐจ์› ๋ฐ์ดํ„ฐ๋กœ ์ „๋‹ฌํ•œ๋‹ค. ๊ทธ๋ž˜์„œ CNN์—์„œ๋Š” ์ด๋ฏธ์ง€์ฒ˜๋Ÿผ ํ˜•์ƒ์„ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๋Œ€๋กœ ์ดํ•ดํ•  (๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š”) ๊ฒƒ์ด๋‹ค.



1. CNN(Convolutional Neural Network)

  • ์ดˆ์ฐฝ๊ธฐ์— CNN์„ ๊ฐœ๋ฐœํ•œ ๋ถ„๋“ค์ด ๊ณ ์–‘์ด๊ฐ€ ๋ณด๋Š” ๊ฒƒ๋งˆ๋‹ค ์ž๊ทน ๋ฐ›๋Š” ๋‡Œ์˜ ์œ„์น˜๊ฐ€ ๋‹ค๋ฅธ๊ฒƒ์„ ๋ณด๊ณ  ์•„์ด๋””์–ด๋ฅผ ์–ป์–ด CNN์„ ๋งŒ๋“ฌ
  • ์ฆ‰, image ์ „์ฒด๋ฅผ ๋ณด๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ถ€๋ถ„์„ ๋ณด๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ ์•„์ด๋””์–ด
  • ์ด '๋ถ€๋ถ„'์— ํ•ด๋‹นํ•˜๋Š” ๊ฒƒ = filter
  • [Machine Learning] CNN์ด๋ž€?


1.1 ํŠน์ง•

  • CNN์€ ํฌ๊ฒŒ ์ด๋ฏธ์ง€์˜ ํŠน์ง•์„ ์ถ”์ถœํ•˜๋Š” ๋ถ€๋ถ„ + Flatten + ํด๋ž˜์Šค๋ฅผ ๋ถ„๋ฅ˜ํ•˜๋Š” ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

    • Feature extraction (ํŠน์ง• ์ถ”์ถœ ์˜์—ญ)

      • ์ž…๋ ฅ๋ฐ์ดํ„ฐ(input)์˜ ๊ณ ์œ ํ•œ ํŠน์ง•(invariance)์„ ์ฐพ๋Š” ๋‹จ๊ณ„
      • Convolution Layer์™€ Pooling Layer๋ฅผ ์—ฌ๋Ÿฌ ๊ฒน ์Œ“๋Š” ํ˜•ํƒœ
      • Convolution Layer : ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์— ํ•„ํ„ฐ๋ฅผ ์ ์šฉ ํ›„ ํ™œ์„ฑํ™” ํ•จ์ˆ˜๋ฅผ ๋ฐ˜์˜ํ•˜๋Š” ํ•„์ˆ˜ ์š”์†Œ
      • Pooling Layer : ์„ ํƒ์ ์ธ ๋ ˆ์ด์–ด
    • Flatten layer : ์ด๋ฏธ์ง€ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฐ์—ด ํ˜•ํƒœ๋กœ ๋งŒ๋“ฆ

    • Classification (ํด๋ž˜์Šค ๋ถ„๋ฅ˜ ์˜์—ญ)

      • ์ฐพ์•„์ง„ ํŠน์ง•๋“ค์„ ๊ฐ€์ง€๊ณ  class๋ฅผ ๊ณ ๋ฅด๋Š” ๋‹จ๊ณ„
      • ์ด๋ฏธ์ง€ ๋ถ„๋ฅ˜๋ฅผ ์œ„ํ•œ Fully Connected ๋ ˆ์ด์–ด ์ถ”๊ฐ€
  • CNN์˜ ์ธ๊ธฐ๋น„๊ฒฐ

    • ์ด์ „ ์ด๋ฏธ์ง€ ํ•™์Šต ๊ธฐ์ˆ ์— ๋น„ํ•ด ์ด๋ฏธ์ง€ ์ „์ฒ˜๋ฆฌ (์ž๋ฅด๊ธฐ / ์„ผํ„ฐ๋ง, ์ •๊ทœํ™” ๋“ฑ)๊ฐ€
      ์ƒ๋Œ€์ ์œผ๋กœ ๊ฑฐ์˜ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.
    • ์ด์™€ ๊ด€๋ จํ•˜์—ฌ ์ด๋ฏธ์ง€์˜ ๋ชจ๋“  ์ข…๋ฅ˜์˜ ์ผ๋ฐ˜์ ์ธ ๋ฌธ์ œ (์ด๋™, ์กฐ๋ช… ๋“ฑ)์— ๋Œ€ํ•ด ๊ฒฌ๊ณ ํ•จ



1.2 ์ฐจ๋ณ„์„ฑ (Fully Connected Neural Network ๋Œ€๋น„)

  • ๊ฐ ๋ ˆ์ด์–ด์˜ ์ž…์ถœ๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํ˜•์ƒ ์œ ์ง€
  • ์ด๋ฏธ์ง€์˜ ๊ณต๊ฐ„ ์ •๋ณด๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์ธ์ ‘ ์ด๋ฏธ์ง€์™€์˜ ํŠน์ง•์„ ํšจ๊ณผ์ ์œผ๋กœ ์ธ์‹
  • ๋ณต์ˆ˜์˜ ํ•„ํ„ฐ๋กœ ์ด๋ฏธ์ง€์˜ ํŠน์ง• ์ถ”์ถœ ๋ฐ ํ•™์Šต
  • ์ถ”์ถœํ•œ ์ด๋ฏธ์ง€์˜ ํŠน์ง•์„ ๋ชจ์œผ๊ณ  ๊ฐ•ํ™”ํ•˜๋Š” Pooling ๋ ˆ์ด์–ด
  • ํ•„ํ„ฐ๋ฅผ ๊ณต์œ  ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์ผ๋ฐ˜ ์ธ๊ณต ์‹ ๊ฒฝ๋ง๊ณผ ๋น„๊ตํ•˜์—ฌ ํ•™์Šต ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ ๋งค์šฐ ์ ์Œ






2. Feature extraction (ํŠน์ง• ์ถ”์ถœ ์˜์—ญ)


2.1 ์ฃผ์š” ์šฉ์–ด ์ •๋ฆฌ

CNN ์ฃผ์š” ์šฉ์–ด

  • ConvolutionConvolution (ํ•ฉ์„ฑ๊ณฑ)
  • ์ฑ„๋„ (ChannelChannel)
  • ํ•„ํ„ฐ (FilterFilter)
  • ์ปค๋„ (KernelKernel)
  • ์ŠคํŠธ๋ผ์ด๋“œ (StrideStride)
  • ํŒจ๋”ฉ (PaddingPadding)
  • ํ”ผ์ฒ˜ ๋งต (FeatureMapFeature Map), ์•กํ‹ฐ๋ฒ ์ด์…˜ ๋งต (ActivationMapActivation Map)
  • ํ’€๋ง (PoolingPooling) ๋ ˆ์ด์–ด



ํ•ฉ์„ฑ๊ณฑ, Convolution

  • ์ปดํ“จํ„ฐ ์œ„์—์„œ ๊ทธ๋ฆผ์ด๋ž€ ๊ฒƒ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”ฝ์…€๋กœ ์ด๋ฃจ์–ด์ง„ ํ–‰๋ ฌ(matrix)๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
    Convolution Matrix๋Š” ์ด ์ปค๋‹ค๋ž€ ํ”ฝ์…€ ๋ฐฐ์—ด์— ์ž‘์€ ํ–‰๋ ฌ์„ ํ†ตํ•ด ๊ทธ ํ”ฝ์…€์˜ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. (Wikipedia)
  • CNN์€ convolution์„ ํ†ตํ•ด ํŠน์ • ์˜์—ญ, ๋ชจ์–‘, ์ƒ‰์ƒ, ๋ฐฉํ–ฅ ๋ฐ ๊ธฐํƒ€ ์ผ๋ฐ˜์ ์ธ ์‹œ๊ฐ์  ํŠน์ง•์„ ์ˆ˜์šฉํ•˜๋„๋ก ์˜์—ญ๋ณ„๋กœ ์ „๋ฌธํ™”๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š” ๊ณ ์–‘์ด์˜ ์‹œ๊ฐ์  ์ ‘๊ทผ ๋ฐฉ์‹์„ ๋ชจ๋ฐฉํ•œ๋‹ค.
  • ํ•œ ํ•จ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๋Š” ์„ธ ๋ฒˆ์งธ ํ•จ์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋‘ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์—ฐ์‚ฐ
  • ์ปจ๋ณผ๋ฃจ์…˜์„ ์ ์šฉํ•˜๋ฉด ์ž…๋ ฅ์˜ "๋ชจ์–‘(shape)"์ด ํšจ๊ณผ์ ์œผ๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
  • ์„ธ ๋ฒˆ์งธ ๊ณต๋™ ํ•จ์ˆ˜(Weight Sharing)๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์™€์ด๋ฅผ ์ ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ชจ๋‘ ์ง€์นญํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ
  • Convolution Layer๋Š” Filter ํฌ๊ธฐ, Stride, Padding ์ ์šฉ ์—ฌ๋ถ€, Max Pooling ํฌ๊ธฐ์— ๋”ฐ๋ผ์„œ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ์˜ Shape์ด ๋ณ€๊ฒฝ๋œ๋‹ค.
  • 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์˜ depthdepth

  • ์ปฌ๋Ÿฌ ์‚ฌ์ง„ : ๊ฐ ํ”ฝ์…€์„ RGB 3๊ฐœ์˜ ์‹ค์ˆ˜๋กœ ํ‘œํ˜„ํ•œ 3์ฐจ์› ๋ฐ์ดํ„ฐ๋กœ 3๊ฐœ์˜ ์ฑ„๋„๋กœ ๊ตฌ์„ฑ

    โ—์ฃผ์˜ํ•ด์•ผํ•  ์ 

    • ํ•„ํ„ฐ์˜ ๊ฐœ์ˆ˜์™€ ๊ฐ ํ•„ํ„ฐ๋ณ„ ์ฑ„๋„์˜ ๊ฐœ์ˆ˜๋ฅผ ํ˜ผ๋™ํ•˜์ง€ ์•Š์•„์•ผ ํ•œ๋‹ค!
    • feature map์˜ channel๊ณผ depth๋Š” ํ˜ผ์šฉํ•ด์„œ ์“ฐ๋Š” ์šฉ์–ด์ด๋‹ค. channel์ด ๋งŽ์„์ˆ˜๋ก depth๊ฐ€ ๊นŠ๋‹ค๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋•Œ ๊ฐ channel์€ ๋ฐ˜๋“œ์‹œ ์ƒ‰๊น”๋กœ ๊ตฌ๋ถ„๋˜๋Š” ๊ฒŒ ์•„๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์ž…๋ ฅ๋œ ์ด๋ฏธ์ง€๋ฅผ 5๊ฐœ ์ด์ƒ์˜ ์ฑ„๋„๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” Conv2D ๋ชจ๋ธ์„ ๋งŒ๋“ค์–ด์„œ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฌผ์˜ ๊ฐ channel์„ ์ง์ ‘ ์ถœ๋ ฅํ•˜์—ฌ ํ™•์ธํ•ด ๋ณด์‹œ๋Š” ๊ฒƒ์ด๋‹ค. Conv2D์—์„œ filter๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์“ฐ๋Š” ์ด์œ ๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ channel์„ ๋งŒ๋“œ๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ๋ชฉ์ ์ด ์•„๋‹ˆ๋ผ, ๋‹ค์–‘ํ•œ ํŠน์ง•(ํŒจํ„ด)์„ ์ถ”์ถœํ•ด ๋‚ด๊ธฐ ์œ„ํ•จ์ด๋‹ค.
  • ww x hh x cc (ww=width of image, hh=height of image, cc=number of channels)
    ex. (39, 31, 3)

  • ํ‘๋ฐฑ ์‚ฌ์ง„(grayscale image) : 2์ฐจ์› ๋ฐ์ดํ„ฐ๋กœ 1๊ฐœ ์ฑ„๋„๋กœ ๊ตฌ์„ฑ
    ww x hh
    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)

  • ํ•„ํ„ฐ(filter)๋ฅผ ์ ์šฉํ•˜๋Š” ์œ„์น˜์˜ ๊ฐ„๊ฒฉ
  • Stride๋ฅผ ์ด์šฉํ•œ Convolution์˜ ๊ฒฝ์šฐ๋Š” pooling์ด ์ž๋™์œผ๋กœ ๋˜๋Š” ๋ฐฉ์‹(GAN)
  • Stride๋ฅผ ํ‚ค์šฐ๋ฉด ์ถœ๋ ฅ ํฌ๊ธฐ(feature map size)๋Š” ์ž‘์•„์ง : 2 x StrideStride ๋งŒํผ

    • stridestride=1 : 7x7 -> 5x5
    • stridestride=2 : 7x7 -> 3x3



ํŒจ๋”ฉ(Padding)

Convolution ๋ ˆ์ด์–ด์—์„œ Filter์™€ Stride์˜ ์ž‘์šฉ์œผ๋กœ
Feature Map ํฌ๊ธฐ(output)๋Š” ์ž…๋ ฅ๋ฐ์ดํ„ฐ๋ณด๋‹ค ์ž‘๋‹ค.

  • Convolution ๋ ˆ์ด์–ด์˜ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๊ฐ€ ์ค„์–ด๋“œ๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ
    ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์™ธ๊ฐ์— ์ง€์ •๋œ ํ”ฝ์…€๋งŒํผ ํŠน์ • ๊ฐ’์œผ๋กœ ์ฑ„์›Œ ๋„ฃ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ
    ๋ณดํ†ต ํŒจ๋”ฉ ๊ฐ’์œผ๋กœ 0์„ ์ฑ„์›Œ ๋„ฃ๋Š”๋‹ค.

  • ๋ชฉ์ 

    • ๊ฐ€์žฅ์ž๋ฆฌ ์ •๋ณด(Edge pixel data) ์œ ์‹ค ๊ฐ์†Œ (2 x paddingpadding ๋งŒํผ ์ž‘์•„์ง)
      -> ์ธ๊ณต ์‹ ๊ฒฝ๋ง์ด ์ด๋ฏธ์ง€์˜ ์™ธ๊ฐ์„ ์ธ์‹ํ•˜๋Š” ํ•™์Šต ํšจ๊ณผ
    • ์ถœ๋ ฅ ํฌ๊ธฐ ์กฐ์ • ๋ฐ feature map size ์œ ์ง€
      • input = output
      • ํ•ฉ์„ฑ๊ณฑ ์—ฐ์‚ฐ์„ ๊ฑฐ์น  ๋•Œ๋งˆ๋‹ค ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์ง€๋ฉด ์–ด๋Š ์‹œ์ ์—์„œ๋Š”
        ์ถœ๋ ฅ ํฌ๊ธฐ๊ฐ€ 1์ด ๋˜์–ด๋ฒ„๋ฆฌ๋Š”๋ฐ ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ๋” ์ด์ƒ ํ•ฉ์„ฑ๊ณฑ ์—ฐ์‚ฐ์„ ์ ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • 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

    • filter ํฌ๊ธฐ: (3,3)
    • filter ๊ฐœ์ˆ˜ : 32
    • ํ•œ filter์˜ ์ฑ„๋„ ๊ฐœ์ˆ˜ : 3
    • ๊ฐ€์ค‘์น˜์˜ ๊ฐœ์ˆ˜ : 32 x 3 x (3 x 3) -> ํ•„ํ„ฐ๊ฐ€ ๊ฐ€์ค‘์น˜์˜ ์ง‘ํ•ฉ์ด๋ฏ€๋กœ
      • ๊ฐ€์ค‘์น˜์˜ ๊ฐœ์ˆ˜ = ํ•„ํ„ฐ ๊ฐœ์ˆ˜ x ํ•œ ํ•„ํ„ฐ์˜ ์ฑ„๋„ ๊ฐœ์ˆ˜ x ํ•„ํ„ฐ ํฌ๊ธฐ
      • 96 x 9 -> ๋ชจ๋‘ ๋…๋ฆฝ์ ์ธ ๊ฐ€์ค‘์น˜



ํ’€๋ง (pooling) ๋ ˆ์ด์–ด

  • ์ปจ๋ณผ๋ฃจ์…˜ ๋ ˆ์ด์–ด์˜ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ(Activation Map)๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„์„œ
    ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ฑฐ๋‚˜ ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ•์กฐํ•˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ๋œ๋‹ค.
  • ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• : Max Pooling, Average Pooning, Min Pooling
  • ์ผ๋ฐ˜์ ์œผ๋กœ Pooing ํฌ๊ธฐ์™€ Stride๋ฅผ ๊ฐ™์€ ํฌ๊ธฐ๋กœ ์„ค์ •ํ•˜์—ฌ ๋ชจ๋“  ์›์†Œ๊ฐ€ ํ•œ ๋ฒˆ์”ฉ ์ฒ˜๋ฆฌ ๋˜๋„๋ก ์„ค์ •ํ•œ๋‹ค.
  • Pooling ๋ ˆ์ด์–ด๋Š” Convolution ๋ ˆ์ด์–ด์™€ ๋น„๊ตํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํŠน์ง•์ด ์žˆ๋‹ค.
    • ์—…๋ฐ์ดํŠธ๋ฅผ ํ•ด์•ผ ํ•  ๊ฐ€์ค‘์น˜๊ฐ€ ํ•„์š” ์—†์Œ(ํ•™์Šตํ•ด์•ผ ํ•  ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋‹ค)
    • ์—ฐ์‚ฐ ์†๋„๊ฐ€ ์กฐ๊ธˆ ๋” ๋น ๋ฆ„
    • Pooling ๋ ˆ์ด์–ด๋ฅผ ํ†ต๊ณผํ•˜๋ฉด ์ฑ„๋„ ์ˆ˜๋Š” ๋ณ€ํ•˜์ง€ ์•Š๊ณ  ํ–‰๋ ฌ ํฌ๊ธฐ(์ด๋ฏธ์ง€์˜ ์‚ฌ์ด์ฆˆ)๋งŒ ๊ฐ์†Œํ•œ๋‹ค.
      (์ฑ„๋„๋งˆ๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ๊ณ„์‚ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ์ฑ„๋„ ์ˆ˜ ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ๋กœ ๋‚ด๋ณด๋ƒ„)
    • ์ž…๋ ฅ์˜ ๋ณ€ํ™”์— ์˜ํ–ฅ์„ ์ ๊ฒŒ ๋ฐ›๋Š”๋‹ค(๊ฐ•๊ฑดํ•˜๋‹ค)






3. Classification (ํด๋ž˜์Šค ๋ถ„๋ฅ˜ ์˜์—ญ)

CNN์˜ ์ผ๋ฐ˜์ ์ธ ์ถœ๋ ฅ ๊ณ„์ธต์€ ๋ถ„๋ฅ˜ ๋˜๋Š” ๊ฐ์ง€ ๋ฌธ์ œ๋ฅผ ์ง€ํ–ฅ
-> "์ด ์‚ฌ์ง„์— ๊ณ ์–‘์ด, ๊ฐœ ๋˜๋Š” ๋‹ค๋ฅธ ๋™๋ฌผ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?"

  • depth : ์ฑ„๋„ ์ˆ˜






4. ๋ ˆ์ด์–ด๋ณ„ ์ถœ๋ ฅ ๋ฐ์ดํ„ฐ ๊ณ„์‚ฐ






5. ์ „์ดํ•™์Šต (Transfer Learning)

  • ๊ธฐ์กด(๋‚ด ๋ชฉ์ ๊ณผ๋Š” ๋‹ค๋ฅธ) ๋ฐ์ดํ„ฐ๋กœ ํ•™์Šต๋œ ๋„คํŠธ์›Œํฌ(๊ธฐ์„ฑํ’ˆ)๋ฅผ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋„๋กํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • ์ „์ดํ•™์Šต์„ ํ†ตํ•ด ์ˆ˜์ฒœ ์‹œ๊ฐ„์˜ GPU๋กœ ํ•™์Šต๋œ ๋ชจ๋ธ์„ ๋‹ค์šด๋ฐ›์•„ ๋‚ด ์ž‘์—…์— ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ€์ค‘์น˜(Weights)์™€ ํŽธํ–ฅ(bias)์ด ํฌํ•จ๋œ ํ•™์Šต๋œ ๋ชจ๋ธ์˜ ์ผ๋ถ€๋ฅผ ์žฌ์‚ฌ์šฉ(์ „์ฒด๋ฅผ ๋‹ค ์žฌํ•™์Šตํ•  ์ˆ˜๋„ ์žˆ๋‹ค.)
  • ๊ต์œก ๋ฐ์ดํ„ฐ๋ฅผ ์ ๊ฒŒ ์‚ฌ์šฉํ•˜๊ณ , ๊ต์œก ์†๋„๊ฐ€ ๋น ๋ฅด๋ฉฐ, ๋” ์ž˜ ์ผ๋ฐ˜ํ™”ํ•˜๋Š” ๋ชจ๋ธ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ ๋ฐฉ๋ฒ•
    1. ์ด์ „์— ํ•™์Šตํ•œ ๋ชจ๋ธ์—์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํฌํ•จํ•œ ๋ ˆ์ด์–ด๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
    2. ํ–ฅํ›„ ๊ต์œก ๊ณผ์ • ์ค‘์— ํฌํ•จ๋œ ์ •๋ณด๊ฐ€ ์†์ƒ๋˜์ง€ ์•Š๋„๋ก ํ•ด๋‹น ์ •๋ณด๋ฅผ ๋™๊ฒฐ(freeze, ๊ฐ€์ค‘์น˜๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜์ง€ ์•Š์Œ)ํ•ฉ๋‹ˆ๋‹ค.
    3. ๋™๊ฒฐ๋œ ์ธต ์œ„์— ์ƒˆ๋กœ์šด ์ธต (ํ•™์Šต ๊ฐ€๋Šฅํ•œ ์ธต)์„ ๋”ํ•ฉ๋‹ˆ๋‹ค.
      -> ์ถœ๋ ฅ์ธต(output)์˜ ์ˆ˜๋ฅผ ์กฐ์ ˆํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ์…‹์—์„œ ์›ํ•˜๋Š” ์˜ˆ์ธก๋ฐฉ๋ฒ•(๋ถ„๋ฅ˜, ํšŒ๊ท€ ๋“ฑ)์œผ๋กœ ์ „ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šธ ์ˆ˜ ์žˆ๊ฒŒ๋ฉ๋‹ˆ๋‹ค.
    4. ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ์…‹์—์„œ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•œ ๊ณ„์ธต๋งŒ์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.
      -> ๋งŒ์•ฝ ๊ธฐ์กด ๋ ˆ์ด์–ด๋ฅผ ๋™๊ฒฐํ•˜์ง€ ์•Š์œผ๋ฉด, ํ•™์Šต๋œ ๋ ˆ์ด์–ด์—์„œ ๊ฐ€์ ธ์˜จ weight๊นŒ์ง€ ํ•™์Šต
      -> ์œ„ ๊ฒฝ์šฐ ํ•™์Šตํ•  ๊ฒƒ์ด ๋งŽ์•„์ง€๋ฏ€๋กœ ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฝ๋‹ˆ๋‹ค.

๋ฒค์น˜๋งˆํฌ ๋ชจ๋ธ : ResNet50
ResNet์€ CNN์˜ ์ผ์ข…์ธ๋ฐ, ๊ธฐ์กด์˜ Squential ๋ชจ๋ธ๊ณผ ๋‹ฌ๋ฆฌ skipped connection์ด ์žˆ๋Š” ๋ชจ๋ธ์ด๋‹ค. ์ด ์—ฐ๊ฒฐ์„ ํ†ตํ•ด์„œ ๋” ๊นŠ์€ ์ธต์„ ๋งŒ๋“ค๋”๋ผ๋„ ํ•™์Šต์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€