Week13 Day63

 

오늘은 강의가 없다.

Done

  • EDA
  • Dataset 구현
  • DeconvNet 구현
  • 2021-04-27 강의 정리

모델에 입력하기 위한 Dataset class와 DeconvNet을 구현했다.
사실 Dataset은 주어진 데이터의 형식이 이전에는 경험하지 못한, 복잡한 형태라서 baseline 코드를 거의 사용했다.
DeconvNet은 daily mission이기도 한데, backbone model로 VGG16을 사용했다.
구조는 세 부분으로 나눌 수 있는데, encoder, FCN, decoder 이다.
encoder는 주어진 이미지의 feature map을 추출하며 사이즈를 줄이면서 전반적인 특징을 얻는다.
FCN은 dense layer 대신에 사용한 것으로 입력 이미지의 크기에 상관없이 사용할 수 있다.
decoder는 입력 이미지의 크기에 맞게 사이즈를 늘려가면서 세부적으로 그리고 학습을 하여 제출했더니 LB = 0.1591을 얻었다.
매우 낮은 점수로서 학습이 잘 안됐다.
baseline으로 DeconvNet 코드를 제공해줬고 학습 결과를 제출하니 LB = 0.34를 얻었다.
도대체 어떤 점이 달라서 이런 점수를 받은지 도저히 모르겠다.
(참고로 팀원 중 한명이 주어진 DeconvNet 코드를 사용했더니 LB = 0.33을 얻었다…)
구현 과정에 모델인지, Dataset에 문제가 있는건지, learning rate 문제인지를 못찾았다…

문제점을 찾았다.

optimizer = torch.optim.Adam([
  {"params": model.encoder.parameters(), "lr": config["f-lr"]}
], lr=config["lr"])

weight를 업데이트할 때 learning rate를 따로 적용하고 싶었다.
encoder 부분은 사전 학습된 VGG16을 사용하는데 낮은 learning rate를 적용하여 학습된 모델의 정보를 유지하고 싶었다.
근데 위 코드에서 큰 실수를 했는데 encoder 부분만 learning rate를 적용했고 나머지 parameter에 대해 적용하지 않았다.
그래서 학습이 제대로 이루어지지 않아서 아래와 같이 수정하였다.

optimizer = torch.optim.Adam([
  {"params": model.encoder.parameters(), "lr": config["f-lr"]},
  {"params": model.fcn.parameters(), "lr": config["lr"]},
  {"params": model.decoder.parameters(), "lr": config["lr"]},
])

또 다른 문제는 논문에서는 Batch Normalization을 안하면 학습이 제대로 진행되지 않는다고 설명되어 있다.
나의 구현을 보니 decoder에만 BN을 사용하고 있고 encoder와 FCN에는 사용하지 않고 있다.
사실 사전 학습된 VGG16은 BN을 사용하지 않은 버전이다.
BN을 사용한 VGG16을 가져왔고 FCN에 BN을 추가하였다.

To do

  • EDA
    EDA를 아직 못하고 모델만 먼저 만들어 봤다.
    알아볼 것은 한 픽셀에 여러 label이 있는지 확인할 예정이다.
    만약 그런 경우가 있다면 이를 어떻게 학습시켜야할지 고민이다.
    예를 들어 비닐 봉지 안에 페트병이 있다면 비닐로 전체 분류해야될 지, 아니면 페트병과 함께 분류해야할지 고민이다.
  • DeepLab V1 구현
    성능을 올리기 위해 두가지 방향이 있다.
    하나는 주어진 데이터에 성능이 가장 좋은 모델을 찾고 더이상 올릴 수 없을 때 data augmentation 및 다른 방법으로 성능향상. 다른 하나는 쉬운 모델을 사용해서 data augmentation 및 다른 방법으로 성능을 향상하고 sota model을 적용하는 방향이 있다.
    semantic segmentation 관련 모델을 구현해보고 싶어서 전자의 방향을 선택했다.
    짧은 기간동안에 얼마나 많은 논문을 읽고 구현할 수 있는지 모르겠지만 일단 논문을 읽고 구현해보고 싶다.

peer session

오늘 피어세션은 이 곳에 정리했다.
앞으로 notion에 정리할 것이다.