AlexNet (8-layer)

Top-5 error: 15.4%

이후 Layer를 쌓는 시도가 증가

VGG (19-layer)

7.3%

GoogleNet (22-layer)

6.67%


새로운 의문점...

Q. 과연 Layer를 많이 쌓는 것이 좋은 결과를 가져오는가?

A. ㄴㄴ. ResNet Depth-152짜리가 ResNet Depth-20짜리보다 CIFAR-10에 대해 에러율이 더 안좋게 나옴

    더 높은 training error를 발생시킨 꼴

    이유: backpropagation되는 gradient가 점점 약해져서 소멸되는 문제 (Gradient vanishing)


단순히 깊게 쌓는 것이 좋은게 아님. 어떻게 이러한 문제를 해결해야 되는가..?


1. 넓게 쌓는다. (추후 설명)

2. Residual Unit(일종의 지름길)을 사용한다.


ResNet (152-layer)

3.6%

Residual unit을 사용해 Layer를 쌓아서 Backpropagation 문제를 해결


Residual Unit


Residual unit의 개념을 알아차린 사람들은 이런 과감한 시도를 함.




R-CNN (Region-based CNN)


 이미지에서 region을 추출하고 CNN함


Q. Region 추출은 어떻게 하는가? bruteforce는 cost가 너무 크지 않나?

A. CNN 이전에 개발된 Segmentation을 사용해서 쪼개보자.


그래서 나온 것이 Fast R-CNN


Fast R-CNN


  RoI (Region of Interest)를 projection시켜서 convolution network에 집어넣어 버림



파레이돌리아 (Pareidolia)


  사람이 보기에도 얼핏 대상이 아니지만 비슷하게 생겼다고 느끼는 현상

이게 NN에서도 동일하게 나타남, Alt-text generator (캡션 만들어 주는 도구)가 잘못된 Caption 생성하는 경우가 있음



Becoming fully convolutional

  하나만 Convolution하는 것은 1x1의 배열을 주욱 늘어놓은 모양새




  이를 H x W의 사이즈 인풋으로 1x1이 아닌 H/32 x W/32의 크기로 Multiple output을 낼 수 있도록 모양을 변경


-> YOLOv3의 Object detection과 같은 쾌거를 낳음



Upsampling with transposed convolution

    stride 값을 더 크게 줘서 더 넓은 output을 만들 수 있음


Output feature map


  좌측 상단부터 합쳐진 값에 따라 output feature map 작성 (stride와 kernel size에 유의)

stride값은 original size를 벌려놓는 값 (1이 가장 붙어있고, 2가 한칸 떨어짐)

kernel은 읽어오는 단위


Q. 이렇게 만든 이미지의 품질은 어떤가?

A. Grid effect가 발생함 (전에 배운 Fourier transform에서 edge가 강화되는 문제)


    이는 Low frequency영역을 날려버리면 그러한 아티팩트가 제거됨