1. AlexNet (ReLU, 데이터증강, 드롭아웃)
ILSVRC(ImageNet LargeScale VisualRecognition Challenge, 2010 ~ 2017)
2012 Winner
- 2010,2011년 (전통적 비전, 정확도 70~75%), 2012~2015년 (딥러닝, 정확도 85~95%)
- AlexNet을 토대로 Deep Learning시작 (16.4%에러율, 압도적인 성능으로 1위)
- 256 x 256의 이미지, 1000개의 레이블 - 데이터 증강으로 120만 학습, 5만 검증, 15만개 테스트
1) AlexNet의 구조
(1) 기본 구성
- 5개의 합성곱과 3개의 완전연결층, 풀링층 3개
- 2개의 GPU로 연산을 처리할수 있는 병렬적인 구조로 설계
- ReLU, LRN, Overlapping Pooling, Data Augmentation, Dropout적용
- 출력층 Softmax함수 (1,000개의 클래스 분류)
(2) 기본 구성
C1 : 합성곱 11 x 11 x 3 크기의 필터 96개, 227x227 ▶ 55x55 , 96개 , ReLU함수
풀링 3 x 3 의 오버래핑, stride 2, 55x55 ▶ 27x27 , 96개의 특징맵
C2 : 합성곱 5 x 5 x 48 크기의 필터 48개, stride 1, 패딩 2, 병렬처리, ReLU함수
27x27, 96개 ▶ 27x27 , 256개 특징맵 (병렬 128개씩)
풀링 3 x 3 의 오버래핑, stride 2, 55x55 ▶ 13x13 , 256개의 특징맵
C3 : 합성곱 3 x 3 x 256 크기의 필터 384개, stride 1, 패딩 1, 병렬처리, ReLU함수
13 x 13 , 256개 ▶ 13 x 13, 384개 특징맵 (병렬 192개씩)
C4 : 합성곱 3 x 3 x 192 크기의 필터 192개, stride 1, 패딩 2, 병렬처리, ReLU함수
13 x 13, 384개 ▶ 13 x 13, 384개 특징맵 (병렬 192개씩)
C5 : 합성곱 3 x 3 x 192 크기의 필터 128개, stride 1, 패딩 2, 병렬처리, ReLU함수
13 x 13, 384개 ▶ 13 x 13, 256개 특징맵 (병렬 128개씩)
풀링 3 x 3 의 오버래핑, stride 2, 13 x 13 ▶ 6x6 , 256개의 특징맵
F6 : 6 x 6 x 128 x 2 (병렬 구성) 특징맵을 1차원 벡터로 변형 (256x256 pixel의 컬러)
9,216개의 ( 6 x 6 x 256 )의 1차원 벡터를 4,096(병렬 2,048)개의 뉴런과 완전연결, ReLU
예) Dense(4096, ReLU)
F7 : F6와 같이 4,096개의 뉴런이 완전연결로 구성, ReLU
F8 : 1000개의 출력누런으로 연결, Softmax적용, 1,000개의 카테고리에 포함될 확률로 출력
2) AlexNet의 특징
(1) ReLU Nonlinearity (이전에는 Tanh, Sigmoid 사용)
- 학습속도가 빠르고 에러율 감소 : 에러율 25%이하, 학습시간 6배 단축
- ReLU로 값이 커져 주변 뉴런에 영향을 미치는 것을 방지 -> 정규화 의미로 LRN(인접픽셀 영향최소화)
(2) Training on Multiple GPUs
- GTX 580 3GB GPU (CPU학습시 오랜 50~60일의 작업을 5~6일로 단축)
- 2개의 병렬처리 기법으로 학습시간을 획기적 단축 (순차기법 아님)
(3) LRN(Local Response Normalization)
- 특정 위치의 픽셀값이 높으면 다른 특징맵의 동일 위치에 있는 값을 통해 정규화
( 인접 픽셀에 영향을 주는 것을 방지 , 현재 배치 정규화로 대체되어 잘 사용되지 않음 )
(4) Overlapping Max Pooling
- 이전 풀링 영역과 겹치는 부분을 포함하여 풀링, 3x3 오버래핑 최대풀링을 stride 2로 수행
(최근에는 잘 사용하지 않는 방법)
3) Overfitting Reducing (과적합 해소)
(1) Data Augmentation (미러링, 크롭, PCA로 데이터 증강)
① Mirroring
- 이미지의 좌우 반전을 적용하여 이미지 양을 2배로 증가
- 256 x 256 컬러 이미지로 1,000여개의 다양한 카테고리로 구성
② Random Crops
- 데이터를 임의로 잘라 이미지를 추가적으로 생성
- 데이터 2,048배 증가 ( 256 x 256 이미지 일부를 227 x 227로 자르는 Crop(크롭)적용)
③ PCA Color Augmentation
- PCA(주성분 분석)을 통해 이미지 특성을 유지하고 RGB컬러값을 이동/변경하는것
- 이미지의 채널별 분산활용
(2) Dropout
- 학습중 은닉층 노드 일부의 연결을 생략 (50%적용), 2012년 힌튼에 의해 소개된 기술
- overfit 방지 (co-adoption(노드간 상호적응, 의존성) 배제)
3) 실습예제 구성
- keras모듈사용, cifar10에서 데이터셋 로드, 데이터처리함수 up_utils import
- BatchNormalization(정규화), Dropout적용시 일반적으로 합성곱 - 정규화 - 드롭아웃으로 구성
- CPU사용 (GPU X), 출력은 10개 (1000개에서 줄임)
- 레이블 One-Hot Encoding, 오차함수 : categorical entropy
- CIFAR-10 dataset 사용
① 모듈, 데이터 준비 및 전처리
2. VGGNet ( 크기가 적은 필터로 다층, 연산량 감소)
- 옥스퍼드 대학의 Visual Geometry Group(VGG)연구소에서 개발된 모델
- 심플한 모델로 층을 깊게 구성 ( ILSVRC 2014년 준우승 ) , 이해하기 쉬운 구조와 우수한 성능
- 다양한 층으로 구성 (가중치와 층수를 모델명에 붙여 명명) 예)VGGNet 16(D), VGGNet 19(E)
- 합성곱 층인 conv(X)-(Y)는 필터의 크기 X,Y를 의미, Conv3-512 : 3x3필터 512개
- AlexNet의 LRN성능향상에 큰 효과가 없어 미적용
- 층이 깊어질수록 에러율 감소확인(11→13→16→19)
1) VGGNet 16(D)
(1) 기본 구성
- 입력데이터 크기 : 224 x 224 , 3채널
- 합성곱 : 패딩(same), 스트라이드 1설정 (VGG는 기본적으로 CNN의 블록으로 구성)
- Pooling : 최대 풀링 2 x 2, 스트라이드 2, 이미지 크기 1/4로 줄어듬
2) VGGNet 16 특징
(1) 3 x 3크기의 필터(Conv3)만 사용, 필터 연산을 여러번 적용하여 특징맵을 줄이고 가중치 낮춤
- 10 x 10 데이터에 3 x 3 필터적용하여 3번의 convolution연산: 4x4의 feature map (27개의 가중치)
( 10 x 10 데이터에 7 x 7 필터적용하면 4x4의 feature map, 49개의 가중치 )
- 가중치는 학습에 의해 최적화 : 가중치가 적으면 연산량이 감소, 학습속도는 향상, 메모리 사용량 감소
- 신경망 층수가 깊어짐 : (활성함수를 통한) 비선형성이 증가, 학습이 잘되도록 영향을 미칠수 있음
3) 실습예제 구성
- VGGNet의 입력은 224 x 224 x 3, 합성곱층 패딩 SAME(1), stride 1
- 최대풀링 2x2, 스트라이드 2로 이미지 크기가 1/4로 축소
- keras의 model, layers에서 필요한 클래스, cifar10에서 데이터셋 로드, 수치계산용 numpy
- keras의 input은 모델의 입력을 정의하기 위한 기능제공
- cv2는 OpenCV라이브버리를 사용하여 이미지 데이터처리 (데이터 리사이즈)
① 모듈, 데이터 준비 및 전처리
- 32 x 32의 데이터를 VGG16 모듈의 원 특징에 맞게 224 x 224로 resize
② 모델 정의하기
- 객체를 생성하고 chaining하여 모델 구성 ( Sequential, add방법을 이용할수도 있음)
- 64, 128, 256, 512필터를 가지는 Conv2D(), MaxPool2D(), Flatten(), Dense()
- layers.Conv2D(x, (3,3), activation="relu", padding='same')
MaxPooling2D((2,2), strides=(2,2))
③ 학습 및 정확도 확인
- sparse_categorical_crossentropy 손실함수 (데이터 레이블이 정수형 ??)
Adam 옵티마이저, 10epochs
- x_test와 y_test를 사용하여 모델을 평가, 정확도 출력
- 테스트 정확도가 매우 낮음 ( 여러번 진행해도 유사하게 1% 이하의 정확도 )
④ 추가학습 : 32 x 32로 이미지 크기를 원상태대로 설정하여 학습
- 32 x 32의 원 이미지로 1~4회 학습
- 추가 학습 후 경향성 출력
(Training Set의 정확도는 점차 증가, Validation은 증가하지 않음)
④ 추가학습 : 32 x 32로 이미지 크기를 원상태대로 설정하고 데이터 추가
- 32 x 32의 원 이미지로 데이터를 10배, 20배로 늘려 학습
3. GoogLeNet ( 인셉션 모듈
- 2014년 구글 연구팀에서 개발된 모델, ILSVRC 2014 Winner (에러율 6.7%)
- 인셉션 모듈로 층을 깊게 하여(22층) 성능향상
1) GoogLeNet의 구조
(1) 기본 구성
① 일반 인셉션 모듈 (전체적으로 유사한 구성을 가짐)
- 다양한 크기의 필터의 연산을 병렬적으로 수행하여 여러 종류의 특징맵 형성
( 합성곱 1x1+3x3+5x5 +최대풀링 3x3 : 다양한 필터, 계산량 증가 )
- 1x1 의 필터는 특징맵의 수 줄여 차원축소 (계산량 감소)
② 보조 분류기 사용 ( 완전 연결층 _ 평균풀링+합성곱+완전연결층+완전연결층+출력층)
(2) 구글넷의 부분별 구조
①시작 부분 ( 7x7 CNV + 3x3 P + 1x1 CNV + 3x3 CNV + 3x3 P), 정규화 LRN
- 메모리의 효율적 사용을 위해 기본적인 합성곱 모델 적용
- 시작 부분에 인셉션 모듈배치시 성능개선 효과가 없음
② 중간 부분
- 새로운 구조인 보조 분류기를 중간 부분 두곳에 배치, 층이 깊어지면서 발생되는 경사소멸문제 해결
- 보조분류기 : 역전파 결과를 확인하여 기울기 조정 및 정규화 효과가 나타나도록 함
( 파라미터와 웨이트를 세밀하게 조정 )
인셉션(3a)-인셉션(3b)-풀링-인셉션(4a)-인셉션(4b)-인셉션(4c)-인셉션(4d)-풀링-인셉션(5a)-인셉션(5b)
③ 끝 부분
- 이전층 결과를 하나의 연속된 값으로서 풀링, 완전연결층 구성
- 최대풀링대신 전역평균풀링(Global Average Pooling, 특징맵 각채널을 평균하여 스칼라로 압축)
이전 층에서 추출된 특징맵의 각각의 평균을 연속적인 1차원 벡터로 함 (완전연결 Dense층 대체)
예) 1000개의 특징맵에 대해 1000개의 값이 나오도록 조정하면 Flatten없이 사용가능
- 최종적으로 이미지 분류를 위한 소프트맥스 적용하여 결과출력
2) 구글넷의 특징
(1) 일반 인셉션 모듈
- 3개의 합성곱층 (1x1, 3x3, 5x5 )과 3x3의 최대풀링층으로 구성
- 합성곱층의 결과와 최대풀링층의 결과를 연속된 하나의 값으로 연결해, 다음단계의 입력으로 활용
(2) 차원축소가 적용된 인셉션 모듈
- 일반 인셉션 모듈에서 1x1 크기의 합성곱층을 추가로 배치한 구조
- 합성곱 층의 결과를 연속된 하나의 값으로 연결
- 인셉션 모듈 적용을 통해 성능이 2~3배 향상
① 1x1 합성곱층의 효과
- 고차원 데이터에서 저차원으로 변환, 특징맵 수를 줄이는 목적으로 사용
- 특징맵의 수가 감소할수록 연산량 감소
- 차원축소를 통해 적당한 수(특징이 강한?)의 특징맵을 사용시 성능에 영향을 미치지 않았다고 함
3) 실습예제 구성
- 모델을 구성하기 위해 Conv2D, MaxPool2D, Dense, concatenate, GlobaAveragePooling2D,
AveragePooling2D, Flatten(보조분류기에 사용), LearningRateScheduler(epoch기반으로
learning rate조정), 최적화 알고리즘은 SGD
- ( 224x224로 입력하면 32 x 32원본 데이터에 대한) 학습 정확도 매우 낮게 나타남
① 모듈, 데이터 준비 및 전처리
- to_categorical 함수로 One-Hot Encoding, 손실함수 categorical_crossentropy
- callbacks ( learning_rate조절함수 decay생성 )
kernel_init (커널 가중치 초기화 : glorotform : input/out수에 맞게 연결가중치 초기화)
② inception모듈, decay함수 구현 및 가중치 및 바이어스 초기화하기
③ 모델 정의하기
- 시작부분의 입력에 Conv2D()적용, MaxPool2D()로 특징추출
④ 학습 및 정확도 확인
- 모델은 SGD 옵티마이저와 3개의 categorical_crossentropy손실함수 사용
- LearningRateScheduler로 epoch에 따라 학습률 조정 (decay함수로 세부조정)
4. ResNet
- 2015년 MS북경 연구소에서 개발된 모델, ILSVRC 2015 우승 (에러율 3.57%)
- 152개층 구조, 잔차학습방식 도입
- 동일한 형태의 구성을 반복하여 단순한 구성으로 적층
1) ResNet
- 잔차 학습 ( 합성곱층과 숏컷 층을 연결)
- 초반의 7x7 합성곱층 외에 3x3합성곱 층을 연결, 특징맵의 크기가 절반 감소시 필터의 수 2배
(1) ResNet의 기본 구성
- 깊은 층인 경우에도 모델의 성능이 우수하지는 않음 ( 20층과 56층 모델의 성능을 실험 )
① 잔차 학습 ( Residual Learning )
- 기존 신경망 학습의 목적은 목적함수를 모델링하는 것 (기존 학습층은 하나의 입력이 두개의 층을 거침)
학습한 정보를 보존하지 않고 변형시키게 되며, 출력 y=H(x)를 산출
- 기존 신경망 학습에서 출력과 입력의 차(H(x)-x)를 얻을수 있도록 목표를 수정
입력에서 바로 출력으로 연결되는 숏컷 연결(스킵 연결)추가해 각 블록들이 작은 정보만을 추가적으로
학습하도록 구성
2) 실습예제 구성
- 잔차를 이용한 연결과 일반 연결을 구성하여 적층
① 모듈, 데이터 준비 및 전처리
② 잔차 클래스, 모델정의
- ResidualUnit()은 반복적 수행을 통해 다양한 크기의 필터를 가지는 계층구성
( keras.Layer를 상속한 클래스로서 함수 호출시 오버라이드된 call함수 작동 )
③ 모델 학습 및 결과
④ 개선
- 32x32, 데이터 2000개
- 32x32, 데이터 10000개 (테스용셋 2000개)
'스터디 > Deep Learn' 카테고리의 다른 글
6. AutoEncoder & GAN , RNN (0) | 2024.09.29 |
---|---|
4. CNN Basic & LeNet5 (0) | 2024.09.27 |
3. 프레임 워크와 학습 기술 (0) | 2024.09.25 |
2. MLP (0) | 2024.09.23 |
1. 인공신경망과 퍼셉트론 (0) | 2024.08.31 |