hwijin97 2021. 12. 9. 15:54

1. 이미지 분류에서 완전연결 DNN보다 CNN이 나은점?

  • DNN보다 훨씬 적은 파라미터수를 가져 훈련속도가 빠르고 과대적합의 위험을 줄여주고, 적은 훈련 데이터를 필요로함
  • CNN이 특성을 감지하도록 학습되면, 그 필터는 어느 위치에 있는 특성도 감지할 수 있다. 이미지는 보통 반복적이고 비슷한 특성을 가지기 때문에, 더 나은 일반화 성능을 낼 수 있다.
  • DNN은 픽셀을 1차원으로 늘이기 때문에 이미지의 구조 정보를 알지 못한다. CNN은 저수준 특성을 찾고 저수준 특성으로 고수준 특성으로 연결할 수 있다.

 

2. 3x3 커널, 스트라이드 2, "same" 패딩 합성곱 3층의 CNN에 filters = 100, 200, 400 이고, 입력 이미지는 200x300x3 일때 CNN의 전체 파라미터수와 32비트 부동소수 정밀도에서 하나의 샘플을 예측하는데 사용하는 RAM, 50개의 이미지 배치를 훈련하는데 사용하는RAM 의 크기.

 

파라미터 수 : 

- 첫번째 : ( 3x3x3 + 1 ) x 100 = 2800

- 두번째 : (100 x 3 x 3 + 1) x 200 = 180,200

- 세번째 : ( 200 x 3 x 3 + 1 ) x 400 = 720,400

 

하나의 샘플 RAM :

첫번째 특성맵 크기 : 100x150, 100 => 4x100x150x100 = 6MB 

두번째 특성맵 크기 : 50x75, 200 => 4x50x75x200 = 3MB

세번째 특성맵 크기 : 25x38, 400 => 4x25x38x400 = 1.5MB

이전 층의 메모리를 해제한다면, 최대 (6 + 3)MB + (2800 + 180,200 + 720,400) x 4 = 9 + 3.6 = 12.6 MB

 

50개 배치 훈련 RAM :

50개 첫번째 특성맵 = 300MB

50개 두번째 특성맵 = 150MB

50개 세번째 특성맵 = 75MB

50개 샘플의 특성맵 = 525MB

입력이미지 = 50x200x300x3 = 36MB

모델 파라미터 = 3.6MB

훈련시에는 역전파를 위해서 특성맵들의 메모리를 해제하면 안된다. 따라서 총 300 + 150 + 75 + 36 + 3.6 = 564.6MB

 

 

3. CNN을 훈련할때 GPU 메모리가 부족할때 시도해 볼 수 있는 다섯가지 해결법

GPU 메모리 문제 해결 :

  • 미니 배치 크기를 줄임
  • 스트라이드를 크게해서 차원을 감소시킴
  • 하나 이상의 층을 제거함
  • 32비트 부동소수 대신 16비트 부동소수 정밀도를 사용함
  • 여러 장치에 CNN을 분산시킴

 

4. 같은 크기의 스트라이드 합성곱 층 대신 최대 풀링층을 사용하는 이유

풀링층은 파라미터를 가지지않는다. 합성곱층은 많은 파라미터를 가진다.

 

5. LRN 층을 추가해야 할 때는 언제인가?

LRN 층은 가장 강하게 활성회된 뉴런 이 이웃한 특성맵의 가은 위치의 뉴런을 억제한다. 즉 특성맵마다 특별하고 구분되게 만들어 넓은 범위의 특성을 탐색하도록 강제한다. 상위층에서 사용될 저수준 특성들을 다양하게 찾기위해서 사용한다.

 

6. LeNet-5 와 비교해서 AlexNet의 혁신점?, GoogLeNet, ResNet, SENet, Xception 의 혁신점?

AlexNet : 더 크고 깊고, 합성곱 위에 풀링층 대신 합성곱만 사용했다.

GoogLeNet : 더 깊은 신경망을 구축하도록 인셉션 모듈을 고안해, 1x1, 3x3, 5x5 의 다양한 특성을 찾도록한다.

ResNet : 100층 이상의 신경망을 구성할 수 있도록 스킵연결을 고안했다.

SENet : 특정 모듈 다음에 SE 블록 (밀집 층 2개로 이루어진 네트워크) 을 사용해서 특성맵의 상대적 중요도를 보정한다.

Xception : 공간 패턴과 깊이별 패턴을 나누어 보는 깊이별 분리 합성곱 을 사용한다.

 

 

7. 완전 합성곱 신경망이 무엇인가? 밀집층을 어떻게 합성곱 층으로 바꾸는지?

완전합성곱 신경망은 합성곱과 풀링층으로만 이루어진 구성망이고, FCN은 어떤 크기든 효율적으로 처리할수 있다. 밀집층을 합성곱층을 바꾸려면, 밀집층의 입력크기와 합성곱층의 커널크기와 같고, 필터 개수는 밀집층의 뉴런개수와 같고, valid 패딩을 사용한다. 스트라이드는 1 이 일반적이다. 이후의 밀집층은 1x1의 커널크기로 수행한다.

 

8. 시멘틱 분할에서 주요한 기술적 어려움은 무엇인가요?

CNN을 거쳐 공간상의 정보가 많이사라진다. 특히 풀링층과 1보다큰 스트라이드 합성곱 층에서.

 

 

9. 자신만의 CNN을 만들고 MNIST 데이터셋에서 가능한 최대 정확도 달성.

10. 전이 학습을 사용해 이미지 분류 수행

- a : 클래스마다 100개의 이미지가 들어있는 훈련세트 만들기

- b : 훈련 검증 테스트로 분할

- c : 적절한 전처리 연산과 선택적으로 데이터 증식 파이프라인 만들기

- d : 데이터셋에서 사전훈련된 모델을 세부 튜닝

 

11. 텐서플로의 스타일 전이 튜토리얼 살펴보기.

 

https://github.com/kimhwijin/HandsOnMachineLearing/blob/main/HOML_Exercise_14.ipynb