-
Notifications
You must be signed in to change notification settings - Fork 6
[Seg] Day4_0429
-
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만 적용해야함. (다시 원본으로 복원해야 하므로)
-
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
- 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 하는 건 스티로폼 클래스에는 조금 불리하다. -
배터리 외부데이터 만드려고 했으나 사용불가....ㅠㅠ