본문 바로가기

MLOps 개발자 양성과정/ml&dl

[Day-56] chap08. 이미지를 위한 인공신경망

일차원 배열을 계산할 때

가중치

8-1. 합성곱 신경망의 구성 요소

 

<키워드 정리>

 

합성곱

: 밀집층과 비슷하게 입력과 가중치를 곱하고 절편을 더하는 선형 계산

   하지만. 각 합성곱은 입력 전체가 아니라 일부만 사용하여 선형 계산을 수행

- 가중치의 갯수와 크기는 하이퍼파라미터 (경험에 의해 정해줘...)

- 2차원 입력에도 적용할 수 있음

 

필터 혹은 커널

: 합성곱 신경망(CNN)에서 뉴런을 필터라고 부름

- 뉴런의 갯수를 이야기할 때는 필터 / 입력에 곱해지는 가중치를 의미할 때는 커널이라고 부르자

- 이미지 쪽에서는 필터 / 텍스트 쪽에서는 커널이라는 용어 많이 사용함

- 입력의 차원에 따라 필터의 차원 결정(같아야 함) 

 

특성맵

: 합성곱 층이나 풀링 층의 출력 배열을 의미.

필터 하나가 하나의 특성 맵을 만듦. 합성곱 층에서 5개의 필터를 적용하면 5개의 특성맵이 만들어짐

 

패딩

: 합성곱 층의 입력 주위에 추가한 0으로 채워진 픽셀(가상의 원소(0)을 추가)

 keras.layers.Conv2D(10, kernel_size=(3,3), activation='relu', padding='same', strides=1)

ㆍ 밸리드 패딩 : 패딩을 사용하지 않는 것 

  - 원본 배열의 원소가 합성곱 연산에 참여하는 정도가 서로 다르다

ㆍ 풀 패딩 : 원본 배열 원소의 연산 참여도가 동일 

ㆍ 세임 패딩 : 출력 배열의 길이를 원본 배열의 길이와 동일하게 만든다

 

스트라이드

: 합성곱 층에서 필터가 입력 위를 이동하는 크기(기본값 1)

 

풀링

: 가중치가 없고 특성 맵의 가로, 세로 크기를 줄이는 역할 수행 (차원을 줄이는 것은 아님!!)

 - 풀링연산을 통해 합성곱과 활성화 함수가 적용되어 특성 맵이 만들어지고 특성 맵이 풀링층을 통과하여 또 다른 특성 맵이 생성

- 풀링의 크기 지정해(반드시 정사각형x) 

- 폴링은 절대 중복 연산이 안됨. 풀링의 크기에 따라 스트라이드 값 자동으로 만들어져

ㆍ max 풀링

: 최댓값 사용

 - 원본 배열의 원소가 합성곱 연산에 참여하는 정도가 서로 다르다

 - keras.layers.MaxPooling2D(2)

 - 숫자 하나 넣으면 자동으로 (2,2)로 만들어져

 - 가로, 세로 다르게 하려면 (2,3)과 같은 방법으로

ㆍ average 풀링

: 평균값 사용

 - 이미지쪽에서는 일반적으로 맥스 풀링 이용(average 풀링 뭉게질 수 있어)

 

 

풀링 특성맵의 크기를 줄여준다
(특성맵 여러개 쌓여있으면 3차원 형태로/
줄여도 차원을 줄이는 게 아니라 가로와 세로를 줄여)
풀링에는 가중치가 없다
풀링의 크기는 지정하는 것(풀링은 반드시 정사각형X)
합성곱에서는 스트라이드가 1이어서 중복연산이 되었어
풀링은 절대 중복연산 안됨
만약 풀링을 2*2로 잡으면 스트라이드 2칸 씩 이동
풀링의 크기에 따라 스트라이드 값 자동으로 만들어져
 
💡합성곱 신경망 구조

ㆍ합성곱 층
:  1. 이미지, 2.커널(필터) => 3. 특성맵=> 활성화 함수(Relu)
이미지 데이터를 활성함수로
from tensorflow import keras
keras.Layers.Conv2D(10, kernel_size=(3, 3), activation='relu')​


ㆍ풀링 층
: 풀링 => 특성맵 => 1차원
1차원으로 펼쳐서 dense에 넘겨주는
특성맵의 사이즈를 줄여줘
가중치 계산안해 활성화 함수 필요없어

ㆍ완전 연결 층(밀집층)
: 출력층 =:> 활성화 함수(softmax)
실제로 분류 출력값


딥러닝에서 층이 많으면 많을 수록 정확한 값
다만, 과도하게 많을 필요는 없음

 

# 합성곱
전체 가중치를 적용하는 게 아니라 일부   가중치를 곱해
가중치 몇 개 쓸지는
필터=커널   (합성곱에서는 뉴런이라고는 잘 안불러)
이미지 쪽에서 필터라는 용어   
텍스트 쪽에서는 커널이라는 용어 많이 써


일차원 배열의 경우 한 칸씩 내려가면서

이차원 배녕릐 경우

원본 데이터가 커널을 통해서
축소해서 빨리 처리할 수 도 있어
합성곱 계산을 통해 얻은 출력을 특성맵이라고 부름

커널 여러개를 사용할 수도 있어
특성맵 쌓여서 나옴
 
 
컨벌루션 레이어
from tensorflow import keras
keras.Layers.Conv2D(10, kernel_size=(3, 3), activation='relu')
커널의 갯수, 커널 사이즈(반드시 튜플 형태로) 필수
활성화 함수는 생략 가능하지만 일반적으로 렐루 넣어놔
 
패딩과 스트라이드
 keras.layers.Conv2D(10, kernel_size=(3,3), activation='relu', padding='same', strides=1)
 
스트라이드
: 원본 배열에서 이동하는 간격(값)
기본값 1
일반적으로 1로 많이 사용(값 크면 원본 손실이 많아질 수 있어)\
 
패딩 종류 세 가지
 
1. 밸리드 패딩(valid): 원본 배열의 원소가 합성곱 연산에 참여하는 정도가 서로 다르다
패딩없이 순수한 입력 배열에서만 합성곱을 하여 특성맵을 만드는 경우
어떤 값은 1번 참여, 2번 참여,,, 참여 빈도가 달라
 
2. 풀 패딩(full): 원본 배열 원소의 연산 참여도가 동일
3. 세임 패딩(same): 출력 배열의 길이를 원본 배열의 길이와 동일하게 만든다
=> 풀패딩과 세임 패딩은 1차원 배열일 경우 왼쪽과 오른쪽에 가장의 원소(0)를 추가
 
풀링(pooling)연산
합성곱과 활성화 함수가 적용되어 특성 맵이 만들어지고,
특성 맵이 플링층을 통과하여 또 다른 특성맵이 생성
 
max 풀링: 최댓값 사용
keras.layers.MaxPooling2D(2)
숫자 하나 넣으면 2*2로 만들어짐 
가로 세로 다르게 하려면(2,3)이런 식으로 넣어야 해
 
Average 풀링: 평균값 사용
* 이미지쪽 일반적으로 평균 사용하지 않아(뭉게질 수 있음) 맥스 풀링 주로 이용
 
 
풀링 특성맵의 크기를 줄여준다
(특성맵 여러개 쌓여있으면 3차원 형태로/
줄여도 차원을 줄이는 게 아니라 가로와 세로를 줄여)
풀링에는 가중치가 없다
풀링의 크기는 지정하는 것(풀링은 반드시 정사각형X)
합성곱에서는 스트라이드가 1이어서 중복연산이 되었어
풀링은 절대 중복연산 안됨
만약 풀링을 2*2로 잡으면 스트라이드 2칸 씩 이동
풀링의 크기에 따라 스트라이드 값 자동으로 만들어져
 
 일반적으로 데이터 짝수
 
 
 
합성곱 신경망 구조(*** 완벽하게 외우기)
- 합성곱 층
1. 이미지, 2.커널(필터) => 3. 특성맵=> 활성화 함수(Relu)
이미지 데이터를 활성함수로
 
- 풀링 층
풀링 => 특성맵 => 1차원
1차원으로 펼쳐서 dense에 넘겨주는
특성맵의 사이즈를 줄여줘
가중치 계산안해 활성화 함수 필요없어
 
- 완전 연결 층(밀집층)
: 출력층 =:> 활성화 함수(softmax)
실제로 분류 출력값
 
 
딥러닝에서 층이 많으면 많을 수록 정확한 값
다만, 과도하게 많을 필요는 없음
 
##################################################################
 이미지 데이터 4*4
텐서플로우는 자동으로 패딩을 만들어줘 0으로 채워
흑백이 아니고 칼라일 경우 세 개 채널 필요 => 필터 3개 필요 => 특성맵 각각 만들어줘야 해 3개 나옴 => 활성화 함수 RELU
특성맵 하나씩 만들어지지만 결과적으로 차곡차곡 쌓여 => 3차원으로 됨(4,4,3)
 
=> 풀링층에 전달
풀링 사이즈 이용해서 맥스풀링을 사용해서 축소(가로 세로 값이 줄어들어)(특성맵의 갯수 즉 차원은 변하지 않아)
(가중치X 활성화 함수X)
 
=> 1차원으로 펼쳐서 최종적으로 DENSE 층으로 전달 => softmax
 
###############################################################
 
칼라 이미지일 경우
하나의 이미지가 R G B  3개의 채널을 갖고있기 때문에
=> 커널의 크기도 동일한 구조인 3차원으로 되어있어야 해
 
원본 데이터 깊이가 5라면 커널도 깊이가 5여야 해
 
반드시 칼라 이미지라고 커널이 늘어나는 것은 아니고 합성곱에서 
 
합성곱과 플링층 거의 한 쌍을 이뤄
 

 

8-2.

 

8-3

가중치에 따라 특성이 어떻게 뽑히는지

가중치, 특성맵 등 시각화로 다 보여줘

 

가중치를 높이고 낮춰서 이미지의 특성을 뽑아내는 것

가중치 높으면 밝아지고

가중치 낮

 


정리

 

합성곱 신경망 하려면

1. 합성곱 층이 필요해

2. 풀링 층이 필요해

3. 밀집 층이 필요해

기본

 

세밀하게하려면

합성곱

풀링

합성곱

풀링

밀집

 

세부 옵션 면

합성곱

풀링

합성곱

풀링

은닉

드롭아웃

밀집

 

경사하강법 optimizer

내가 직접 에폭값 조정? 알아서? => checkpoint만들어줘야 해 / 최적합 했을 때 중지하려면 earlystopping

두가지 객체를 콜백이라는 매개변수한테 리스트 형태로 전달