[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으로 잡아주면 됨(겹치지 않게 특징 추출)
- 풀링레이어로 피쳐맵의 차원을 줄임
- 줄어든 피쳐들을 ANN형태의 신경망에 넣음
- 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 : 겉에 둘러주는 것
필터 : 어떤 특징을 추출해서 결과값이 차이가 생기는 것
-
kenel이 필터인가요?
가로특징을 추출하기 위한 필터
filter : 가중치의 집합 > 모델학습할 땐 가중치가 학습됨
이미지가 학습되면서 어떤 특징을 추출해야 잘 분류하겠구나 하면서 가중치를 학습함 -
필터가 엣지를 찾는다는데 엣지가 이미지의 특징을 의미하나요?
a. 네 -
필터의 행렬의 각 값들은 원래 정형화 되어있는건가요?
a. 가중치임. 가중치는 초기화해서 랜덤 부여함 학습하고 역전파하면서 업데이트됨 -
우리가 전이학습하는 부분은 저 필터와 풀링된 부분을 가져다가 쓰는 것인가요?
a. -
풀링을 사용하면 피처맵의 차원을 줄여서 피처 셀렉ㄱ션 같은 역할함 > 과적합 줄일 수 잇음
-
패딩하는 이유 : output의 크기를 맞춰주려고
끝에 있는 애는 한 번만 연산에 참여함. 끝에 있는 값도 잘 쓰려고 패딩을 하기도 함. > 데이터를 다 활용을 하려고
필터에 패딩을 하는게 아니라 인풋값에 둘러줌 -
스트라이드를 2로 하게 되면 패딩을 못한다고 했는데, 스트라이드를 바꿔주면 데이터 크기가 작아지는 것은 어떻게 해결할 수 있나요?
사진 크기를 맞출 때, 패딩을 1개 둘러놓고 스트라이드를 2로 잡으면 사진 크기를 맞출 수가 없어짐. 그래서 스트라이드를 2개를 잡으면 패딩도 더 크게 둘러줌. 본래의 목적에 맞지 않아서 그럼. -
행렬은 픽셀이 기준임
-
cnn을 쓰게 되면 장점이 있음. fully connected layer를 쓰는 것 보다 장점이 있음
:이미지 전처리를 덜 하게 되고, 이미지 정보 손실이 없고, 파라미터가 줄어든다.
왜 파라미터가 줄어들까? 가중치 공유 때문에
가중치를
로스펑션 맞춰야함!
- 다중분류를 하면 레이블 형태는 어떻게 정해지는 건가요? 원핫인 경우 혹은 정수인 경우가 어떻게 발생하는지 궁금합니다.
a. 파일 이름에서 잘라와서 기록을 해준 다음 레이블 인코딩 할건지 원핫인코딩 할 건지 정할 수 있다
과제 설명
Author And Source
이 문제에 관하여([AI부트캠프]Convolutional Neural Network), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@superahxd/Convolutional-Neural-Network저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)