부스트캠프 14주차 공부정리

TAEJUN YOUN·2022년 12월 25일
0

1강

강의 목표

  1. semantic segmentation에 대한 기초
  2. 논문에 대한 정확한 이해보다 논문이 나온 배경과 방법론에 대한 이해
  3. 모델의 구조를 살펴보면서 어떤 식으로 코드를 작성할지에 대한 실력 향상
  4. 대회에서 사용되는 기법에 대해 살펴보며 많은 스킬들 습득

2강

데이터셋 및 baseline 코드 설명

3강 - Semantic Segmentation의 기초

  • Fully Convolutional Networks
    • concept
      1. vggnet 백본 사용
      2. vggnet의 nn.linear를 convolution으로 대체
      3. transposed convolution을 이용해 pixel wise prediction을 수행
    • Fully connected layer vs Convolution layer:
      • Fully connected layer는 각 픽셀의 위치정보를 해침(nn.Linear: flatten, fc layer)
      • convolution layer는 각 픽셀정보를 해치지 않음 + 다른 입력사이즈가 들어와도 학습가능하다.
    • transposed convolution
      • 이전 convolution값과 동일한 것이 아닌 convolution처럼 학습 가능한 파라미터이기 때문에 backpropagation에서 update되는 것임
    • FCN에서 성능을 향상시키기 위한 방법(skip connection)
      1. MaxPooling에 의해 잃어버린 정보를 복원
      2. Upsampled size를 줄여주기에 좀 더 효율적인 이미지 복원이 가능

4강 - FCN모델의 한계를 극복한 모델들1

FCN의 한계점

  1. 객체의 크기가 크거나 작은 경우 예측을 못함
    1. receptive field 문제
    2. maxpooling때문에 정보 손실
  2. 객체의 디테일한 모습이 사라짐
    1. upsampling과정이 간단해 경계를 학습하기 어려움

Decoder 개선

  • DeconvNet(정확도)
    • Decoder를 Encoder와 대칭으로 만듬
    • Unpooling
      • pooling은 노이즈 제거하나 정보를 손실
      • unpooling시에 pooling시에 지워진 경계에 정보를 기록했다가 복원
      • 하지만 sparse한 activation map을 가지기 때문에 이를 채워야함 → transposed convolution(unpooling, transposed conv가 상호보완적)
        • unpooling은 자세한 구조 잡아냄
        • transposed conv의 경우 위의 구조에 빈 부분을 채워넣음
  • SegNet(빠른 속도)
    • 가운데 부분을 없애서 파라미터가 줄어 속도가 빨라짐
    • unpooling을 통해 학습이 필요하지않음
  • DeconvNet vs SegNet

Skip connection 적용

  • FC DenseNet
    • 바로 앞 레이어 뿐만 아니라 그 전의 레이어로부터 skip connection
  • Unet
    • 인코더의 정보를 skip connection으로 디코더로 넘겨줌

Receptive Field를 확장

receptive field?: 뉴런이 얼마만큼의 영역을 바라보고 있는지에 대한 정보

receptive field가 작으면 부분적인 정보를 가지고 있어서 segmentation의 정확도가 낮다.

  • DeepLabv1
    • conv → maxpooling→conv를 반복하면 효율적으로 receptive field를 넓힐 수 있음
      • 하지만 resolution측면에서 low feature resolution을 가짐

        → Dilated convolution

    • Dilated convolution: receptive field높히고 파라미터 줄이고 high resolution
    • CRF(conditional random field)
  • DilatedNet

5강 - Receptive Field를 확장시킨 models

  • 복습

    • DilatedNet, DeepLab-LargeFOV둘다 dilated rate를 줘서 더 큰, 효율적인 receptive field를 가질 수 있다.
  • DeepLabv2

    • FC6부터 FC8까지 여러 branch 형태로 바꿈(ASPP:Atrous Spatial Pyramid Pooling)
      • ASPP(rate가 작으면 작은 물체에 집중, rate가 크면 큰 물체에 집중, 여러 결과를 앙상블처럼 합침)
    • backbone을 ResNet으로 바꿈
  • PSPNet

    • 기존 문제점
      1. 객체들간의 관계를 catch하지 못함
      2. 비슷한 카테고리를 혼동
      3. 무늬가 비슷한 객체를 잘 구분하지 못함

      → global한 context를 catch해야한다!

      global average pooling을 적용해 sub-region을 생성

    • global average pooling

      • 전체 피쳐맵을 1x1의 형태로 바꿔 각기다른채널에 대해 하나의 피처맵으로 바꿈, average pooling과 비슷하지만 각 채널에 대해 1x1형태로 바꾼점이 다름
      • 주변 정보(문맥)을 파악해서 객체를 예측하는데 사용
  • DeepLabv3

    • ASPP에 global average pooling이 추가됨→ global한 Context
  • DeepLabv3+

    • Encoder-Decoder구조
      • encoder에서 손실된 정보를 decoder에서 점진적으로 복원
      1. SPP(Spatial Pyramid Pooling)

      2. Encoder-Decoder(Skip connection)를 합쳐서

        → Encoder-Decoder with Atrous Conv

    • Backbone(modeified Xception)
      • Depthwise Convolution: 각 채널마다 다른 filter를 사용하여 convolution연산 후 결합

      • pointwise convolution(1x1kernel)

        → Depthwise Separable Convolution(더 효율적인 계산, 성능줄고 속도빨라짐)

4~5강 정리

FCN의 한계를 극복

  1. Encoder와 Decoder를 대칭으로 만든 형태

    1. upsampling으로 unpooling사용하는데 unpooling은 max indices를 이용해 maxpooling에 의해 잃어버린 index정보를 복원하는 과정, unpooling은 자세한 구조를 잡아냄
    2. Transposed Conv: class specific한 구조를 잡아냄(unpooing의 구조에 빈 부분을 채워넣는다.)
  2. SegNet(속도)

    1. 내부 fclayer를 제거
  3. Skip connection: Neural network에서 이전 layer의 output을 일부 layer를 건너 뛴 후의 layer에게 입력으로 제공하는 것

    1. DenseNet, FCDenseNet, UNet
  4. Receptive Field

    1. 원래는 conv, maxpooling을 통해 receptive field를 넓혔으나 , resolution측면에서 안좋음

    → dilated convolution으로 down sampling과 upsampling을 없애줌

    • Dilated Conv
      1. DeepLab v1

        1. dense CRF후처리
      2. DeepLab v2

        1. ASPP를 통해 다른 dilated rate
        2. vgg가 아니라 resnet
      3. PSPNet

        1. 객체간 관계, 비슷한 클래스 혼동, 무늬 비슷한거 잘 못나눔→global context

        → Global average pooling

        →많은 영역을 catch하는 average pooling

      4. DeepLabv3

        1. global average pooling을 aspp에 적용
        2. xception
        3. encoder decoder

6강-UNet

  • U-Net구조
    • Contracting path와 Expanding Path가 대칭인 U자형을 이룸
      • contracting path: 입력 이미지의 전반적인 특징 추출
      • Expanding path: localization을 가능하게 함
    • skip connection
      • concat하는데 resolution이 다른 문제(64에서 56) → crop
    • Augmentation
      • Random Elastic deformations
    • pixel wise loss weight를 계산하기 위해 weight map생성
      • 인접한 셀의 경우 weight 크게 멀리있으면 weight 작게해 loss에 반영
    • 한계점
      • 깊이가 4로 고정
        • 데이터셋마다 다른 성능 → 최적 깊이 탐색 비용이 커짐
      • 단순한 skip connection
  • U-Net++
    • 구조적 이점
      • Encoder를 공유하는 다양한 깊이의 U-Net생성
      • Skip connection을 동일한 깊이에서의 feature maps이 모두 결합되도록 유연한 feature map 생성
        • Dense Sip connection, Ensemble, Deep Supervision
    • 한계점
      • 파라미터와 메모리가 많아짐
      • encoder와 decoder사이에서의 connection이 동일한 크기를 갖는 featuremap에서만 진행됨
  • U-Net3+
    • Full scale skip connection
      • encoder layer로 부터 same scale의 feature maps받음
      • encoder layer로부터 smaller scale의 lower level feature maps를 받음
      • decoder layer로 부터 larger scale의 high level feature maps를 받음
    • Classification guided Module(CGM)
      • lower level layer에 남아있는 background의 noise발생하여 많은 False positive 문제 발생(배경이 있는데 물체가 있다고함)
        • 정확도를 높히고자 extra classification task진행

        • high level feature maps 활용(물건 있으면 1 없으면 0)

          → 성능 향상

    • Full scale Deep Supervision(loss function)
      • focal loss
      • ms ssim loss: boundary인식 강화
      • iou loss: 픽셀의 분류 정확도 상승
  • encoder backbone만 다르게
    • Residual UNet
    • Mobile-UNet(빠르게해줌)
    • Eff-UNet

정리

  1. UNet architecture
    • contracting path, expanding path
    • skip connection
    • data augmentation
    • weight map
    • 한계: depth 고정, Simple skip connection
  2. UNet++
    • depth 1, 2, 3, 4 Ensemble
    • Dense skip connection
    • deep supervision(loss)
    • 한계: simple skip connection(결국 같은 scale), 파라미터와 메모리, Full scale에서 정보탐색못함
  3. UNet 3+
    • Full scale skip connections
    • loss function 세가지 결합
    • CGM(후처리)

7강-Semantic Segmentation대회에서 사용하는 방법들1

  • model 불러오기
    • segmentation models
      • 라이브러리 설치
      • architectures
      • encoders
  • 주의할사항
    • 디버깅모드
    • 시드고정
    • 실험기록
    • 실험은 한 번에 하나씩
    • 역할분배
  • validataion
    • hold out(8:2)
    • k-fold
    • stratified k-fold
    • group k-fold
  • augmentataion - 도메인에 맞는 augmentation 기법이 필요
    • 목적
      • 데이터수 증가, 일반화 성능 class imbalance 해결
    • 방법
      • torchvision.transforms
      • albumentation
    • 최신 방법
      • Cutout(A.CoarseDropout)
      • gridmask(A.GridDropout)
      • mixup
      • cutmix
      • snapmix(cam을 이용해 이미지 및 라벨 mixing)
      • cropnonemptymaskifexists(A.augmentations.crops.transforms.CropNonEmptyMskIfExists
  • SOTA Model
    • HRNet
  • Scheduler
    • lr이 너무 작으면 학습이 오래걸리고 local minima에 빠질 위험이 있음
    • 너무 크면 발산
    • CosineAnnealingLR
    • ReduceLROnPlateau(성능이 향상되지 않을 때 learning rate를 조절) - 파라미터가 많음
    • Gradual Warmup
      • 이 방식을 사용하면 weight가 불안정한 초반에도 비교적 안정적으로 학습을 수행할 수 있음
      • backbone 네트워크 사용시에 weight가 망가지는 것을 방지
  • Batch size
    • 크면 빨라지고 일반화가 좋음
    • gradient Accumulation - gradient를 누적했다가 이후에 update
  • optimizer
    • adam, adamw, adamp..
    • Lookahead optimizer
      • adam이나 sgd로 빠져나오기 힘든 local minima를 빠져나올 수 있음
  • loss
    • CE
    • iou..여러개 사용가능

8강

baseline이후에 시도해볼만한 것들

  • Ensemble
    • 5-fold ensemble
    • epoch ensemble
    • swa-각 step마다 weight를 업데이트 시키는 sgd와 다르게 일정 주기마다 weight를 평균 → 일반화에 좋음
    • seed ensemble
    • resize ensemble
    • TTA(Test time augmentataion)
      • 테스트할 때 augmentation을 수행하고 ensemble
      • resize기법 multi scale - 성능좋아짐
      • rotate
      • TTA library-ttach
        • horizontalflip
        • verticalflip
        • rotate90
        • scale
  • pseudo labeling
  • 외부데이터셋 활용

대회에서 사용하는 기법들

  • 문제1 - 한번 학습하는데 너무 오랜시간 걸림
    • FP16(부동소수점)
    • 실험간소화
    • 가벼운 모델로 실험하고 최종 성능이 잘 나오는 모델로 확인
  • 문제2 - 이미지가 매우 큼
    • resize를 시킨 후 test set에 대해 예측된 Mask를 원본 size로 복원
    • sliding window
  • 문제3 - label noise
    • label smoothing
    • pseudo labeling을 활용한 label preprocessing(threshold보다 높은 값에 대해서 처리하기)

Monitoring tool

  • wandb

9강-Semantic segmentation연구동향

  • 모델의 발전
    • LeNet

      • cnn발전의 시작
    • AlexNet

      • conv, pooling
    • VGGNet

      • 3x3
    • ResNet

      • skip connection
    • EfficientNet

      → 고해상도 입력을 점차 저해상도로 줄여나가는 설계방식

      저해상도 high level feature를 이용해 upsampling, decoder등으로 segmentation결과 생성

      image classification 모델이 해상도를 점점 줄여나가는 이유?

    • 물체를 분류하는데 이미지 내 모든 특징이 필요하지 않음

    • 해상도가 줄어들어 효율적인 연산이 가능하며 큰 receptive field를 가짐

    • 중요한 특징만을 추출해 과적합을 방지

  • segmentation vs image classification
    • 분류모델은 공간적 정보를 고려하지 않지만 segmentation은 중요

    • 특징을 추출하기 위한 pooling등의 연산은 모든 픽셀에 대해 정확히 분류하기에 자세한 정보를 유지하지 못함

      → semantic segmentation은 높은 해상도를 유지할 필요가 있음!

      기존까지는 저해상도 특징을 생성하고 다시 고해상도로 복원하는 방식의 기존 연구

  • HRNet
    • 저해상도(encoder-decoder)/중해상도(dilited rate)복원이 아니라 고해상도 정보를 계속 유지한다면?
    1. 전체 과정에서 고해상도 특징을 계속 유지

      1. 전체 구조에서 1/4해상도를 그대로 유지
    2. 고해상도부터 저해상도까지 다양한 해상도를 갖는 특징을 병렬적으로 연산

      1. 고해상도 convolution stream을 시작으로 점차 해상도를 줄여 저해상도 stream
      2. 해상도를 줄여 넓은 receptive field를 갖는 특징(semantic한 정보)을 고해상도 특징과 함께 학습함
    3. 다중 고해상도 정보를 반복적으로 융합(Repeated multi resolution fusions)

      1. 고해상도 특징: 공간상의 높은 위치 정보 민감도를 가짐
      2. 저해상도 특징: 넓은 receptive field를 바탕으로 상대적으로 풍부한 의미정보를 가짐

      → 채널이 다름

      고해상도 정보를 저해상도로 전달: strided conv 연산

      저해상도 정보를 고해상도로 전달: bilinear upsampling, 1x1 conv

    • 다양한 종류의 출력 생성
      • 해결하고자 하는 문제에 따라 세가지의 서로 다른 출력 형성(pose estimation, segmentation, obdet)
    • 정리
      1. 입력 이미지의 해상도 1/4로 축소
      2. 1/4해상도는 그대로 유지하면서 새로운 저해상도 stream을 생성하여 서로의 정보들을 융합
      3. 모든 해상도 정보를 합한 후 원래 이미지 크기로 bilinear upsampling하여 최종 결과 출력
profile
Study and Share

0개의 댓글