본문 바로가기

데이터사이언스/인공지능

CNN으로 사진 분류하기

 - 합성곱(convolution): 작은 필터를 이용해 이미지로부터 특징을 뽑아내는 알고리즘

 - CNN: 합성곱층을 반복적으로 쌓아서 만든 인공신경망

 - 특징맵: 합성곱층의 결과, 합성곱층이 특징을 추출한 뒤의 이미지

 - 이미지 정규화: 이미지의 픽셀 간 편향을 제거하는데 사용됨 각 채널의 분포가 동일해지므로 학습이 원활하게 이루어짐

 - 커널: 이미지로부터 특징을 추출하기 위한 가중치를 행렬로 나타내고 커널의 집합을 필터라고 함

 - 스트라이드: 커널의 이동거리

 - 데이터증강: 이미지에 여러 변형을 주어 이미지 개수를 늘리는 기법(회전, 크기변경, 밀림, 반사, 이동 등)

 

 

합성곱은 작은 필터를 이용해 이미지로부터 특징을 추출해내는 방법으로 예를들어 영어는 검은글씨, 한글뜻은 빨간글씨로 적혀있는 영어단어책이있을때 빨간 셀로판지를 책에 가져다대면 검은글씨만 보이고 빨간글씨는 셀로판지에 가려져서 보이지 않는데 CNN도 이처럼 판단에 도움이 되는 특징만을 남기는 모델이고 여기서 빨간셀로판지는 커널이라고 부른다.

합성곱 커널과 필터

합성곱은 커널을 이미지 안에서 이리저리 움직이며 특징을 추출한다. 따라서 볼 수 있는 시야는 좁아지는 대신 위치와 무관하게 특징을 잡아 낼 수 있다.커널을 사용하면 이미지 크기와 무관하게 학습해야하는 가중치 개수가 같다

 

CNN은 인공신경망을 이용해 합성곱 필터를 학습하는 신경망이며 합성곱커널에서 원본이미지의 왼쪽위부터 글을 읽듯이 오른쪽으로 한칸씩 커널을 옮기면서 원본이미지와 커널의 각각 위치(○, △)를 곱해주고 곱한결과인 9개의 숫자를 다 더해값(☆)을 출력한다.

 

데이터 증강

데이터 증강은 데이터가 부족하거나 오버피팅을 피하는 기법으로 데이터를 의도적으로 수정해 더 많은 데이터를 확보한다.이미지의 크기에 변화가 없도록 패딩기법을 사용해 잘라낸부분을 0으로 채워준다. 

 

데이터 정규화

컬러이미지를 RGB로 표현하면 물체에 따라 RGB의 분포가 편향되는데 데이터의 분포가 너무 치우쳐져있으면 학습에 안좋은 영향을 끼친다. 따라서 학습하기전에 이러한 편향을 계산해 최대한 정규분포를 따르도록 하는 게 좋다. 위그림과 같이 사람이 볼때는 색이 이상해보이지만 인공지능 입장에서는 색이 갖는 분포가 일정해야 학습이 제대로 이루어진다.

CNN모델 기본 블록

합성곱 3X3은 커널 크기가 3X3(3행3열)인 합성곱 연산을 의미하며 ReLU는 0보다 큰 값만을 다음 뉴런으로 넘기는 활성화함수이다. 최대풀링은 이미지 크기를 절반으로 줄이는 연산으로 합성곱을 통해 얻은 특징의 위치정보를 의도적으로 없애 오버피팅을 피하는 기법(커널을 이동하면서 커널 안의 최댓값만을 남기는것으로 중요한 특징을 알수있음)

CNN모델의 블록도

이제기본블록정의가 끝나고 CNN모델을 정의해야하는데 MLP층은 벡터만을 입력으로 받을 수 있기때문에 평탄화 층을 거쳐 입력으로 사용된다. 일렬로 펴진 특징맵은 분류기의 입력으로 들어가 확률분포를 출력한다. 기본블록을 한번 거칠때마다 이미지의 크기는 절반으로 줄어든다.

CNN모델의 학습 루프

모델 정의 후 모델을 학습해야하는데 학습률과 전처리도 최종결과에 영향을 미치기때문에 딥러닝을 사용할 때는 항상 적은 수의 데이터부터 학습하기 시작해서 점차 사용 데이터를 늘려가야 한다.

 

이미지 데이터 셋은 학습에 오랜시간이 걸리며 이미지가 많을 수록 학습하는 시간은 더욱 오래걸린다. 데이터가 달라지면 다시 처음부터 학습하지 않고 소규모 데이터로 파라미터 조정만 하는 '전이 학습'을 이용하여 학습시간을 줄일 수 있다.

 

 

 

 

참고: Must Have 텐초의 파이토치 딥러닝 특강