티스토리 뷰
객체 인식 분야에서 많이 사용되는 딥러닝 CNN 모델을 설계하는 방법에 대해 알아보겠습니다.
CNN 정의
Neural Network는 시각 피질이 이미지를 처리하고 인식하는 원리를 수학적 모델로 정의한 것입니다.
하나의 신경세포 동작은 입력 신호, 가중치, 활성 함수, 출력 함수를 이용하여 퍼셉트론으로 모델링 되어 뉴럴 네트워크를 구성합니다.
CNN은 Convolutional Neural Network의 줄임말이며, 뉴럴 네트워크에서 컨볼루션 연산을 추가한 신경망입니다. CNN은 이미지 분류 작업에 뛰어난 성능을 보여, 머신러닝, 딥러닝 분야에서 각광받는 알고리즘입니다.
Forward 연산은 Input Layer로부터 Hidden Layer를 거쳐 Output Layer까지 값의 전달이 이루어지는 과정입니다. Backward 연산은 Output Layer로부터 Hidden Layer, InputLayer까지 역으로 값을 전달하는 과정입니다. Forward, Backward 연산을 통하여 뉴럴 네트워크의 가중치 값을 조정하여, 뉴럴 네트워크의 추론 정확도가 점점 높아집니다.
신경망의 입력 데이터는 1차원 형태로 한정되지만, 이미지는 3차원 데이터이므로 차원을 축소하는 과정이 필요합니다. 차원이 축소되면, 공간 정보가 손실이 되는 문제점이 발생합니다. 하지만, Convolution 필터를 이용하면 공간정보를 유지 가능하고, 인접된 이미지 데이터의 특징을 효과적으로 추출할 수 있습니다.
CNN 설계
CNN의 구조는 Convolutional Layer, Pooling Layer, Fully Connected Layer로 구성되어 있습니다. 컨볼루셔널 레이어와 풀링 레이어는 특징을 추출하는 단계이고, Fully Connected Layer는 추출된 특징정보를 바탕으로 결과를 추론하는 Output 계층에 해당합니다. CNN의 계층 구조, 계층에서 사용하는 연산 파라미터를 변경하여 CNN을 설계할 수 있습니다.
- Convolutional Layer
- 이미지를 입력받아 필터들을 통해 컨볼루션을 수행하여 특징 맵을 생성하는 계층
- 한 레이어에 다수개의 필터를 사용하여 다차원의 특징을 생성해 냄.
- Filter(Kernel) : 특징을 찾아내기 위한 공용 파라미터로, 내부 값은 학습됨.
- Stride : 필터를 이동시키는 간격.
- Padding : 특징 맵의 사방에 특정 값으로 채워, 출력 크기를 조정함. 보통 0으로 채워 넣음.
- Pooling Layer
- 특징 맵을 입력받아 맵의 크기를 줄이거나 특정 데이터를 강조하는 계층
- Max/Average Pooling : 해당 영역의 최댓값 혹은 평균값을 취함. 주로 Max Pooling이 사용됨.
- 보통 Pooling 사이즈와 Stride를 같게 하여 모든 원소가 한 번씩 처리되도록 설정함.
- 하이퍼 파라미터 설정하기
- 필터 : 크기, 개수, Stride 크기, Padding 크기
- 풀링 : 크기, Stride 크기
- Convolutional Layer 출력 데이터 크기 산정
- 입력 데이터 크기 : H, W
- 필터 크기 : FH, FW
- 출력 크기 : OH, OW
- 패딩 크기 : P
- Stride 크기 : S
- 출력 데이터 크기가 자연수가 되도록 파라미터들을 설정해야 함.
- 다음 레이어에 Pooling Layer가 온다면 출력 데이터의 크기는 Pooling 크기의 배수이어야 함.
- Ex) pooling size 가 (3,3)이라면, 위 식의 결과가 자연수이면서 3의 배수여야 함.
- Pooling Layer 출력 데이터 크기 산정
- 일반적인 풀링 사이즈는 정사각형이며, 사이즈와 Stride 를 같은 크기로 만듬.
- 활성 함수 선택
- Sigmoid, Tanh : Vanishing Gradient 문제.
- ReLU : 가장 많이 사용됨. 입력이 음수인 경우 0이 되는 약점이 있음.
- PReLU : 음수 입력 약점을 보완함. (하지만 ReLU가 더 인기)
- ELU : ReLU의 모든 장점을 포함하지만, exp()를 계산해야 해서 느림.
- Maxout : 활성 함수에 가중치 추가. 결국 전체 네트워크의 파라미터가 2배 증가하여 사용하지 않음.
- Dropout
- Overfitting 방지
- Hidden Layer 구성 방법
- 컨볼루션 레이어, 풀링 레이어, 풀리커넥티드 레이어 구성
- 하이퍼 파라미터 설정
- 각 레이어 별로 활성 함수 선택
이미지 인식에서 사용되는 유명한 CNN 모델
- LeNet
- 최초의 성공적인 ConvNet. 2쌍의 Conv+Pooling 이후 FC로 구성.(1990년대)
- AlexNet
- ILSVRC 2012 1위. 5개의 Conv, 3개의 Pooling, 드롭아웃 적용.
- ZFNet
- ILSVRC 2013 1위. Visualizing을 통해 AlexNet의 하이퍼 파라미터를 조정하여 만듦.
- GoogLeNet
- ILSVRC 2014 1위. 하나의 layer에서 다양한 필터/풀링을 도입한 Inception module 제안하여 파라미터의 개수를 줄임.
- VGGNet
- ILSVRC 2014 2위. Conv를 16 계층으로 쌓았으며, 모든 컨볼루션은 3x3, 모든 풀링은 2x2로 구현.
- ResNet
- ILSVRC 2015 1위. 깊이의 한계에 직면하여 새로운 학습 모델 구조를 제안함.
'IT 기술' 카테고리의 다른 글
단위 테스트 코드 작성의 필요성 (0) | 2022.09.13 |
---|---|
CNN, R-CNN, Faster R-CNN의 특징 (0) | 2022.09.07 |
Tensorflow Object Detection API 사용하기(Ubuntu 16.04) (0) | 2022.09.07 |
AWS Log Insights 쿼리 작성법(람다 로그 빠르게 조회하기) (0) | 2022.09.07 |
Springboot 캐시(@Cacheable) 사용하는 방법 (0) | 2022.09.07 |
- Total
- Today
- Yesterday
- oracle 메모리
- OSI 7계층
- codesmell 유형
- selenium
- notion 업무일정관리
- MPA
- 멀티코어 멀티프로세서
- C++
- springboot 실행
- 스프링부트 restapi
- 디자인패턴
- springboot rest api 서버
- token
- SPA
- 스프링부트빌드
- 디자인패턴 구조패턴
- 테스팅 자동화
- 스프링부트실행
- API Gateway 캐싱
- TCP/UDP
- 클린코드작성법
- iframe 태그 찾기
- python
- AWS
- notion
- springboot build
- 클린코드작성원칙
- springboot restapi
- 코드스멜 유형
- oracle pga sga
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |