Skip to content

[Seg] Day4_0429

nureesong edited this page Apr 29, 2021 · 1 revision

피어세션 요약

  • valid mIOU 최신으로 통일하기!!! (토론탭 참고)
    주영님.수달님은 valid, LB mIOU가 비슷하게 나옴.

  • 외부 데이터 사용금지. 테스트는 활용가능
    → DeeplabV3Plus로 pseudo-labeling해서 티쳐모델로 사용???

  • UNK, battery class imbalance 해결이 관건이다.
    CE에 weight 주는 건 trade-off가 있는 것 같다.
    train에서는 unk를 어느 정도 학습할 수 있는데 valid에서 한 픽셀도 못 맞추는 것 같다.
    완전히 보지 못한 unk가 있는 것 같다.

[민정님 아이디어]
unk 빼고 학습 한 다음, softmax 취했을 때 확률값이 어떤 기준을 넘지 못하면 unk로 분류.
→ threshold를 결정하는 게 어려울 듯한데, 학습이 제일 빠른 UNet으로 실험해보면 어떨까.

  • Loss function : CE, Dice Loss, CE+Dice
    Cross entropy는 픽셀당 로스가 계산된다.
    Dice loss는 이미지 전체 로스가 계산되므로 모든 픽셀에 같은 로스가 부여된다.
    → 섞어쓸 때 단순 덧셈말고 log 씌워서 customize하면 잘 나옴.

  • DeepLabV3Plus - backbone 실험했던 것들
    ResNet101, SE_ResNet101, SE_ResNext101
    timm-EfficientNet_b4(noisy-sutdent) - 주영님. 형민님 (aug 다름)
    배치사이즈 영향도 살짝 있을 것.

  • Augmentation
    현재 : 밝기.회전.blur.flip.grid_distortion 위주로 넣음 (우리 데이터에 맞는 거)
    색조, channelshuffle 등은 조심해서 사용해야 한다.
    elastic transform이 좋기는 한데 3배 오래 걸림.
    TTA : flip같이 가벼운 aug만 적용해야함. (다시 원본으로 복원해야 하므로)


[실험 내용 및 결과 공유]

준철님 (EMANet - 트랜스포머 계열)

  • mIOU=0.0582에 멈춰있는 상태. (valid loss는 줄어드는데)
    리더보드 잘 나왔을 때도 train loss=0.1, valid loss=2 정도였음.
    CE loss, aug=normalize만 사용
    util.py에서 mIOU 부분만 바꿈 (이유 모르겠음ㅜㅜ)

  • mIOU가 한번 크게 올랐다가 3,4에폭 내려갔다가 오르락내리락 함.
    mIOU 오를때 loss도 같이 오름.

  • CosineAnnealing T_multi=2 대체로 좋은 성능.

  • k-fold 고민 → 데이터 수 적은 5개 클래스를 먼저 n빵하고 데이터 많은 클래스는 랜덤.
    멘토님이 object 개수별로 stratified 하라고 했는데 json 파일 기준으로 하면 안 되고
    mask 결과에서 unique해서 해야함.

  • 가벼운 모델에서 augmentation을 다양하게 시도해서 성능 올리는 요소를 빠르게 탐색.
    albumentation에 있는 거 다 해보기. (특히, 색깔)


형민님

  • 어제 실험 결과
    DeepLabV3Plus (Efficientnet_b4, batch=8, drop_last=True, cross entropy)
    40에폭 돌렸는데 19에폭째. mIOU = 0.47에서 횡보 중.
    Validation #21 Average Loss: 0.2641, mIoU: 0.4859

기민님 - CustomLoss에 집중

  • Validation Class Pred mIoU Score
    [BG] mIoU : [0.9526]
    [UNK] mIoU : [0.0000] ⇒ 어떻게 해결할까??
    [General Trash] mIoU : [0.4363]
    [Paper] mIoU : [0.7436]
    [Paper pack] mIoU : [0.4703]
    [Metal] mIoU : [0.5486]
    [Glass] mIoU : [0.4758]
    [Plastic] mIoU : [0.4054]
    [Styrofoam] mIoU : [0.7099]
    [Plastic Bag] mIoU : [0.8242]
    [Battery] mIoU : [0.0645]
    [Clothing] mIoU : [0.4124] \

⇒ CE에 weight 준 결과.
clothing도 데이터가 별로 없는데 그건 또 잘 맞춤.
unknown은 패턴이 없어서 못 맞추는 것 같다.

  • 라벨 숫자 낮을수록 우선순위가 높다.
    annotation은 배터리로 되어 있어도 getitem에서 덮어쓰기 처리됨.
    비닐 안에 옷이 있어도 비닐을 예측해야 함!!!! (비닐이 강력한 이유)
    cutmix 사용 조심해야 한다.

  • 각 클래스별로 최종 포함된 이미지 개수
    [2617, 83, 1072, 1377, 305, 236, 159, 876, 426, 1489, 17, 95]

  • {unk, battery} 묶음 클래스의 포함 여부를 0,1로 라벨링해서
    배치당 균일하게 포함되게 실험해보기

  • DLV3+ se_resnext101, 60에폭 train, valid loss 차이 0.3씩.
    학습 초반 20에폭 Adam, CosineAnnealing. 그 이후에 sgd로 바꾼다.
    모델로만 낼 수 있는 최고 성능이 0.65 정도 아닐까?? 그 이후로는 아이덴티티 싸움.

  • 인코더 다음 레이어에 classifier를 붙여서 쓰레기 분류를 하고 디코더 쪽에서 segmentation.
    → 인코더 쪽에 gradient vanishing 문제를 해결한다. → UNet+++ (오늘 수업 참고)
    인코더가 unk, battery를 잘 학습하지 못하는 것일 수도.
    인코더 먼저 학습(어떤 객체 있는지), 그 다음에 디코더(세그멘테이션)
    또는 동시에 학습

  • 인코더 freeze하고 디코더만 학습하면 3에폭에 mIOU=0.35

  • focal loss는 배경이 다 비슷해야 잘 되는 듯. 우리꺼는 아니라서 안 되는 듯.


주영님

  • aug.normalize 쓰는 게 좋나요??
    → 기민님: 학습은 안정적. 성능은 모르겠다.

  • UNet++ : valid 0.54 → LB 0.56 비슷하게 나옴

  • DeeplabV3Plus(efficient_b4)
    batch 8, accumulation step=2, drop_last=True
    → efficient_b7 로 하신 다른 팀 분 현재 10등. batch=16

  • aux param → encoder 학습을 강화시키는 것
    라벨을 젤 높은 걸로 주면 될듯.

  • paperwithcode → resnest200 + deeplabv3 이 상위권
    smp에서는 지원 안 해줘서 학습 1시간 반 걸림.
    그래서 지금은 resnest101 + 우퍼넷 으로 실험 중.

  • k-fold cross validation 두번 해볼까 생각중. stratified 어떻게 쓸지 모르겠다.

  • Microsoft에서 나온 최신 논문
    Swin transformer: Hierarchical vision transformer using shifted windows


민정님

  • V100 서버(내꺼): 아무것도 안 돌리는데 왜 자꾸 GPU 용량 잡혀있는지....
    일시정지 해봤고, ps aux|grep python으로도 kill 했고, gc collect도 해봤다.
    ⇒ 운영진에게 문의 남겼음.

  • HRNet 실험 중.
    P40에서 경량화시킨 모델로 돌리는데 에폭 당 한 시간 소요.
    cross entropy. sgd. batch=1
    pretrained model이 없어서 성능을 장담할 수 없음.
    10에폭 정도 해보고 제출할 예정.
    트랜스포머 계열은 aug를 약하게 줘야 하는 것 같다.

  • unk threshold test 해보기


누리님

  • 서버 고쳐지면 DeepLabV3plus(백본 다른 분들꺼 참고)
    Randomcrop(256,256) 으로 학습해보기
    inference할 때 sliding window로!!!

  • 형민님 hard augmentation 모델에서 하나씩 빼보면서 실험하기
    우선, cutout(중간중간 구멍뚫어서 배경으로 처리)부터 확인해보기
    SOTA 논문에서는 flip, randomcrop은 전부 넣음.
    256으로 crop하고 제로패딩? 256으로 crop하고 resize??
    흑백으로 aug 하는 건 스티로폼 클래스에는 조금 불리하다.

  • 배터리 외부데이터 만드려고 했으나 사용불가....ㅠㅠ