[Boostcamp AI Tech] [P-stage] 12주차 Day 3 학습 기록

bluegun·2021년 10월 20일
0

AI Tech 2기 활동

목록 보기
53/87

요약

배운 강의 내용

  • FCN
  • DeconvNet
  • SegNet
  • DilatedNet
  • FC DenseNet

대회 진행 내용

  • 다른 크기의 EfficientUnet에 대해 실험 -> 성능의 차이를 발견하지 못함.

학습 내용

FCN은 Fully Convolutional Network의 약자로, VGG나 ResNet등의 기존 CNN model을 backbone으로 사용하고, 대신 끝부분의 FC layer들을 전부 convolution layer로 대체하고 마지막에 Transposed convolution으로 feature를 image 크기만큼 키운 후 pixel by pixel로 class를 예측하는 segmentation model이다.

기존 pretrained된 CNN backbone을 가져와 쓸 수 있고, 모든 layer가 convolution이기 때문에 pixel의 위치 정보를 잘 간직하고 Input image의 size에 영향을 받지 않는다는 단점이 있다.

다만 Transposed convolution을 통과하기 전 feature는 매우 작은 상태로, 이로 인해 feature가 원래 image 크기로 복구되려면 크기를 많이 키워야하므로 세밀한 정보를 다 잃어버릴 수 있다.
이를 해결하기 위해 skip connection을 도입해 backbone의 max-pooling layer를 기준으로 skip connection을 두어 Transposed convolution 과정 시 feature를 서서히 키워 세밀한 정보를 보존하게 한다. 이를 활용하면 실제 모델의 성능도 더 향상된다.

FCN의 한계점으론 객체의 크기가 많이 크거나 많이 작은 경우 예측을 잘 못하는데, 이는 FCN의 receptive field 크기가 일정하기 때문이다.
또 위에서 설명했듯이 skip connection을 활용해도 Object의 detail한 정보를 온전히 보존하기 어렵다. 이는 Transposed convolution 과정이 너무 단순하기 때문이다.

이를 해결하기 위해 여러 모델이 나왔다.
Decoder를 해결한 모델로는 DeconvNet, SegNet이 있고, skip connection을 잘 적용한 모델로 Unet, FC DenseNet이 있으며, Receptive field를 확장시킨 모델로 DeepLab, DilatedNet이 있다.

대회 진행 상황

어제까지 Efficient-unet-b5를 사용한 줄 알았으나, 코드를 고치고 파라미터를 기록하는 과정에서 지금까지 b2 모델을 사용하고 있던 걸 알게 되었다. 일단 현재 성능이 이상하게 나오므로 큰 지장은 없지만 앞으론 조심해야겠다.
어쨌든 b2 모델을 Efficient-unet-b0으로 바꿔서 실험해보았다. b2 모델이었다는 걸 깨닫기 전, b5 모델의 경우 파라미터 수가 너무 많아 train 속도가 느리고 데이터 수가 많지 않은 편이므로 학습이 제대로 되지 않는 게 아닐까 생각했었기 때문에, 파라미터 수가 EfficientNet 중에선 가장 낮은 b0 모델을 사용해보았다.

결과는 b2 모델을 사용했을 때와 차이를 발견할 수가 없었다. 학습 속도에 차이가 나는 것도 아니고, 성능이 딱히 바뀐 게 보이지도 않았다. 결국 Efficient-unet 자체가 대회 과제에 적합하지 않은 것으로 생각해야 할 것 같다.

내일은 제공받은 다른 baseline 코드들을 바탕으로 Unet을 실험해 볼 생각이다. HRNet이 SOTA모델이지만, 다음 주에 강의가 열리면 그걸 참고해서 실험해 봐야겠다.

0개의 댓글