[AI부트캠프]Convolutional Neural Network

🏆 학습 목표

  • Part 1: Convolution & pooling 개념을 설명할 수 있다.
  • Part 2: CNN을 이용하여 분류(Classification)문제에 적용할 수 있다.
  • Part 3: 전이학습(transfer learning)을 이용하여 image classification을 할 수 있다.
  • 사물인식 - Object Detection (YOLO) + RCNN(Fast, Faster, MASK RCNN)
  • 포즈예측 - Pose Estimation (PoseNet)
  • 윤곽분류 - Instance Segmentation (Detectron)


Convolution

filter

가중치의 집합, 특징을 잡아내는 가장 작은 창(노란 네모)
=kenel
Q. filter의 크기가 클수록 output의 크기는?(패딩x)
A. 이동할 수 있는 거리가 줄어들어 계산 횟수가 적어지니까 사진도 작아짐

stride

stride=1

stride=2

a. 필터를 몇 칸 이동할지.
Q. stride의 크기가 클 수록 output 작아진다.

padding

행렬 외곽에 숫자를 둘러줌
convolution 후 사이즈가 줄어들지 않게 함
가장자리의 숫자들은 padding을 해주지 않으면 한 번만 계산 되기 때문에 놓치고 싶지않다면 해줌
0, 가장자리와 같은 숫자 등등 방법은 여러가지.

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

Pooling layer

  • 필터와 달리 가중치가 없음.
  • 도장을 찍은 영역에서 가장 큰 값을 고르거나 평균값을 계산함
  • 목적 : 차원 축소!
    (+) 합성곱에서 스트라이드를 크게 하여 특성맵을 줄이는 것 보다 풀링 층에서 크기를 줄이는 것이 경험적으로 더 나은 성능 냄
    2x2로 많이 하는데 8x6 행렬을 pooling 하면 4x3이 됨. 각 행과 렬이 절반이 줄어드니 이미지 크기는 4분의 1로 줄어듦.

max pooling

convolution 해서 가중치를 곱한 값 중 가장 큰 값만 남기는 것
경계가 확실한 이미지를 쓸 때 추출이 잘 된다.

average pooling

범위 내 평균을 사용합니다. 커널 사이즈 내의 값을 평균하여 통과
-> 이미지가 부드러워 지고, 색감이 희미해짐
= 선명한 특징 추출 불가, 특성 맵에 있는 중요한 정보를 평균하여 희석시킬 수 있음

풀링할 때는 행렬 크기만큼 stride잡아 줌

2x2 풀링 커널을 해주면 스트라이드는 2로 잡아주는게 보통
그럼 딱 반으로 줄어들음
3x3은 스트라이드를 3으로 잡아주면 됨(겹치지 않게 특징 추출)

  1. 풀링레이어로 피쳐맵의 차원을 줄임
  2. 줄어든 피쳐들을 ANN형태의 신경망에 넣음
  3. classification or regression

장점(conv 할 때 비해)
i. 학습할 파라미터가 없다. (속도가 빠를 수도 있다)
ii. 채널 수가 변하지 않는다.

keras.layers.MaxPooling2D(2, stides=2, padding='valid')
keras.layers.AveragePooling2D(2, stides=2, padding='valid')

CNN

이미지 처리에 탁월한 성능을 보이는 신경망
CNN의 핵심 모듈 : 합성곱(Convolution)층, 풀링(Pooling)층
Fully Connected Layer에서 적용하지 않았던 방식이 새롭게 도입
Weight Sharing 적용
채널을 여러 개로 구성 가능 -> RGB 정보가 결합된 이미지에서도 3개 채널을 구성하여 각각의 특징을 추출할 수 있다.

a. 장점
i. 전처리 노력 감소
ii. 가중치 감소 => 가중치 공유(이미지의 위치가 달라져도 인식함)

ex)
(32, 32, 3) => 필터 (3, 3) => (30, 30, 32)
필터 한 장 3x3
총 필터의 개수 3x32개
전체 가중치 : (3x3)x3x32


4x4를 32개 만들려면 3개 채널의 필터를 32개 곱해줘야 됨


전이학습

  • 기존(내 목적과는 다른) 데이터로 학습된 신경망 네트워크를 재사용 가능하도록하는 라이브러리
layer.trainable = True
- True 인 경우 네트워크에 있는 모든 파라미터가 학습 대상이 됨 -> 느려짐
- False 인 경우가 True 인 경우보다 학습할 파라미터의 개수가 적음
- False 인 경우와 True 인 경우 모델에 내 총 가중치 파라미터의 개수는 동일

ResNet

Residual(skiped) Connection
기존 CNN에 적용하여 층을 깊게 쌓더라도 역전파 시 정보가 소실되지 않음



QnA

퍼셉트론: 스챌 다시 쓰기

filter : 가중치의 집합, 가장 작은 특징을 잡아내는 창
stride: 필터를 몇 칸 움직일건지
padding : 겉에 둘러주는 것

필터 : 어떤 특징을 추출해서 결과값이 차이가 생기는 것

  1. kenel이 필터인가요?
    가로특징을 추출하기 위한 필터
    filter : 가중치의 집합 > 모델학습할 땐 가중치가 학습됨
    이미지가 학습되면서 어떤 특징을 추출해야 잘 분류하겠구나 하면서 가중치를 학습함

  2. 필터가 엣지를 찾는다는데 엣지가 이미지의 특징을 의미하나요?
    a. 네

  3. 필터의 행렬의 각 값들은 원래 정형화 되어있는건가요?
    a. 가중치임. 가중치는 초기화해서 랜덤 부여함 학습하고 역전파하면서 업데이트됨

  4. 우리가 전이학습하는 부분은 저 필터와 풀링된 부분을 가져다가 쓰는 것인가요?
    a.

  5. 풀링을 사용하면 피처맵의 차원을 줄여서 피처 셀렉ㄱ션 같은 역할함 > 과적합 줄일 수 잇음

  6. 패딩하는 이유 : output의 크기를 맞춰주려고
    끝에 있는 애는 한 번만 연산에 참여함. 끝에 있는 값도 잘 쓰려고 패딩을 하기도 함. > 데이터를 다 활용을 하려고
    필터에 패딩을 하는게 아니라 인풋값에 둘러줌

  7. 스트라이드를 2로 하게 되면 패딩을 못한다고 했는데, 스트라이드를 바꿔주면 데이터 크기가 작아지는 것은 어떻게 해결할 수 있나요?
    사진 크기를 맞출 때, 패딩을 1개 둘러놓고 스트라이드를 2로 잡으면 사진 크기를 맞출 수가 없어짐. 그래서 스트라이드를 2개를 잡으면 패딩도 더 크게 둘러줌. 본래의 목적에 맞지 않아서 그럼.

  8. 행렬은 픽셀이 기준임

  9. cnn을 쓰게 되면 장점이 있음. fully connected layer를 쓰는 것 보다 장점이 있음
    :이미지 전처리를 덜 하게 되고, 이미지 정보 손실이 없고, 파라미터가 줄어든다.
    왜 파라미터가 줄어들까? 가중치 공유 때문에
    가중치를

로스펑션 맞춰야함!

  1. 다중분류를 하면 레이블 형태는 어떻게 정해지는 건가요? 원핫인 경우 혹은 정수인 경우가 어떻게 발생하는지 궁금합니다.
    a. 파일 이름에서 잘라와서 기록을 해준 다음 레이블 인코딩 할건지 원핫인코딩 할 건지 정할 수 있다

과제 설명

좋은 웹페이지 즐겨찾기