본문 바로가기
TIL/Boostcamp AI tech

[Boostcamp] Week2-Day8. CNN(Convolutional Neural Network) :: seoftware

by seowit 2021. 8. 11.
목차
1. 강의정리
    1-1. DL Basic - chap4. Convolution은 무엇인가?
    1-2. DL Basic - chap5. Modern CNN
    1-3. DL Basic - chap6. Computer Vision Applications
2. 특강
    2-1. 생활코딩 이고잉님의 git/github
3. 피어세션 정리
4. 데일리 회고 

 


📜 강의 정리 

* 부스트캠프 DL_Basic 강의를 맡아주신 최성준 교수님의 강의를 정리한 것 입니다.


[DL Basic] Chapter4. Convolution은 무엇인가?

 

  • Convolution
    • Continuous convolution
      • $$
        (f * g)(t)=\int f(\tau) g(t-\tau) d \tau=\int f(t-\tau) g(t) d \tau
        $$
    • Discrete convolution
      • $$
        (f * g)(t)=\sum_{i=-\infty}^{\infty} f(i) g(t-i)=\sum_{i=-\infty}^{\infty} f(t-i) g(i)
        $$
    • 2D image convolution
      • $$
        (I * K)(i, j)=\sum_{m} \sum_{n} I(m, n) K(i-m, j-n)=\sum_{m} \sum_{n} I(i-m, i-n) K(m, n)
        $$
      • convolution 연산 과정
      • 적용하려는 convolution filter에 대해 특징적인 결과값을 추출할 수 있다
        • convolution 연산 결과
  • RGB Image Convolution
    • (32, 32, 3) shape의 image에 (5, 5, 3) shape의 필터를 convolution 하면 (28, 28, 1) shape의 output
  • Stack of Convolutions
    • 연산 적용에 필요한 파라미터 숫자를 계산할 줄 알아야 한다.
파라미터 개수 계산

위의 그림과 같은 예시 : (32, 32, 3) * 4 (5, 5, 3) = (28, 28, 4)

✔ output의 행(열)의 크기 = input의 행(열)의 크기 - filter의 행(열)의 크기 + 1
✔ output의 채널 개수 = filter의 채널 개수

 

  • Convolutional Neural Networks
    • CNN consists of convolution layer, pooling layer, and fully connected layer
      • Convolution and pooling layer의 역할 : feature extraction
      • Fully connected layer의 역할 : decision making(e.g., classification)
      • e.g. : exempli gratia의 약자, for example, 예를 들어서
        i.e. : id est의 약자, in other words, 다시 말해서
    • CNN 기본 구성
      맨 끝에 붙는 fully connected layer는 생략하는 추세. 파라미터가 많아질수록 학습이 어렵고, generalization performance가 떨어진다. 네트워크를 볼 때마다 전체적인 파라미터 개수에 대한 감을 갖는 것이 중요하다
  • 어떤 NN에 대해서 파라미터 개수를 손으로 계산해보는 연습(아래 표와 비교)
    • Stride : 필터가 input에서 움직이는 칸 수
      • (input 크기 - kernel 크기)/Stride + 1 = (output 크기)
    • padding : 가장자리도 convolution 연산을 하기 위해 가장 자리에 값을 덧대어 준다. 
      • 필터 사이즈가 (3, 3)이면 패딩이 1, (5, 5)이면 패딩이 2, (7, 7)이면 패딩이 3이어야 input과 output의 spacial demension이 같게 된다. 
    • 파라미터 숫자 계산 예시 (Convolution Arithmetic)
      • 간단한 예시
      • AlexNet
        빨간 영역은 Convolution 연산, 파란색 부분은 Fullyconnected(Dense) 연산 부분인데, Dense layer의 경우 모든 인풋 파라미터와 아웃풋 파라미터의 1:1 연산이 진행되기 때문에 1000배 정도 더 많은 연산이 필요하다
        • Convolution layer 35k 부분 계산 : (11×11×3×48) * 2 ⩳ 35K
        • Dense layer 177M 부분 계산 : (13*13*128*2) × (2048*2) ⩳ 177M
        • 파라미터마다 2를 곱해주는 이유 : AlexNet은 GPU 메모리의 한계로 두 개의 GPU가 네트워크를 반씩 계산한다. 
  • 1×1 Convolution
    • 1×1은 영역을 보지 않기 때문에 feature extraction을 못하는데 왜 사용할까?
      • Dimension reduction : 채널을 줄일 수 있다
      • depth를 쌓으면서 파라미터 숫자를 줄일 수 있다
      • e.g., bottleneck architecture

 


[DL Basic] Chapter5. Modern CNN - 1×1 convolution의 중요성

 



 


[DL Basic] Chapter6. Computer Vision Applications

 

 


🙋‍♀️피어세션

 

오늘 피어세션 시간은 이고잉님의 git/github 특강 소감을 말하는 것으로 시작했습니다.

정말 유용한 특강이었고, 이 특강을 시작으로 앞으로는 자신있게 깃을 쓸 수 있다고 대답할 수 있어서 좋을 것 같았습니다. 특히 혼자 프로젝트를 할 때 깃헙을 사용해봤지만, 다른 사람들과 협업을 하며 사용해본 적은 없었는데, 다른 사람들과 협업했을 때 사용하는 기능과 유의점에 대해 실습해 볼 수 있어서 좋았습니다.

다른 캠퍼님들 소감을 들어보니, 어려웠다는 말을 해주신 캠퍼님도 있었고 이번 강의로 개념이 확실하게 잡혔다는 캠퍼님도 있었습니다. 다들 강의에 만족하시는 것 같았습니다.

오늘 강의는 CNN 관련 강의였는데, 강의가 많기도 했고, 개인학습 시간에는 특강이 있어서 다들 강의를 모두 숙지하지 못했습니다. 강의는 한 번 듣고 바로 이해하기는 어렵고 두 번 정도 듣거나, 한 번 들을 때 엄청 천천히 이해하며 듣는 편이어서 20분 짜리 강의도 1시간 반 동안 듣곤 해서 제 시간에 끝내지 못하는 것 같습니다. 이번주부터는 코어타임 내에 강의를 들어야해서 우선 한 번 본 다음에 이해를 위해 다시 들어야겠습니다.

강의 관련 질문은 없었고, 질문게시판의 게시글 답변에 대해 같이 생각해보았습니다. 크기가 3인 커널을 2번 하는 것이 왜 크기 5인 커널 한 번과 같을까에 대한 질문이었는데 수식으로 이해하니 쉽게 이해할 수 있었습니다.

시간이 조금 남아서 오늘도 코딩테스트 연습을 했는데, 두 문제 모두 옛날에 풀어본 적 있는 문제라 금방 해결할 수 있었습니다. 정렬을 사용하여 푸는 쉬운 문제 하나와 배열의 인덱스를 활용하여 회전시키는 어려운 문제를 다뤄보았습니다.


💌 데일리 회고

 

CNN에 대한 강의를 들었다. 다행히도 CNN은 학교 강의에서 열심히 들어서 쉽게 이해할 수 있었다. 그래도 다시 들으면서 강의정리를 해야 할 것 같다. 내일 RNN이 조금 걱정이 된다. 

개인학습 시간에 이고잉님의 git/github 특강이 있었다. github 페이지에서 직접 repository를 만들고 파일을 업로드, 업데이트하는 것을 먼저 배우고, 그 다음부터는 visual studio code에서 pull, push, commit 하는 방법에 대해 배웠다. 30년을 사용할 git을 오늘 배웠다는 것과 개발자는 마우스에 손이 가는 것이 부끄럽다는 것과 개발자는 귀찮아서 부지런한 존재라는 세가지 말이 기억에 남는다. github을 사용하고 있기는 하지만 아직도 흐름은 이해하지 못한채로 구글링하면서 사용했는데, 이번 기회에 정확하게 개념을 잡고 실습을 해 볼 수 있어서 좋았다. 아 한가지로 더 기억에 남는 것은 push를 빠르게 하지 않으면 야근을 하게 될 수도 있다는 말이었다. push를 습관처럼 해야겠다!

댓글