- 원승재
- 원래 cutmix에 대해서 실험하려고 했으나 당장 코드보고 적용이 어려워서 일단 베이스라인 코드 익히고 실험 돌려봄
- Resize(256), HorizontalFlip, RandomRotate90, VerticalFlip 총 4가지 적용해서 베이스라인 모델로 실험 진행
- Normalize 적용해보려고 했으나, cv2로 출력했을 떄 이미지가 제대로 보이지 않아서 내일 같이 얘기해 볼 예정. 아마 학습할 땐 지장이 없고 cv2 출력 문제일 거라 생각됨
- 윤석진
- 다른 annotation인데 image_id와 category_id가 같은 경우 : 한 사진에 똑같은 종류의 여러 객체가 존재하는 경우
- 한 annotation의 segmentation 리스트 안의 리스트가 여럿인 경우 : 하나의 객체가 앞의 또다른 객체에 의해 가려져 segmentation상 둘 이상으로 보이는 경우
- 자세한 설명과 사진 자료는 SeokJin 폴더에 올림, 그 외에 베이스라인 코드를 이해함, visual code의 플롯을 파일로 저장할 때 pdf로 저장하면 왜 안 열리는지, 바로 로컬에 저장하면 왜 파일이 안 생기는지 모르겠다.
- 이민우
- Efficientunet-b7 으로 실험. CLAHE, Input shape resize를 진행해보았으나 성능은 내려감.
- 그런데 시각적으로는 CLAHE를 사용했을 때 객체를 보다 잘 검출해내고 Loss도 보다 많이 떨어짐. epoch 조절이 필요할 것으로 예상.
- 자세한 사항은 MWLee/실험.txt에 작성
- 조범경
- deeplab v1으로 daily 미션 부분 작성, 실행해봄. 매끄럽지 못한 부분 있었지만 mIoU 점수 0.3452 인걸 보니 잘 돌아가기는 한듯...?
- 학습시간이 FCN보다 훨씬 길었던 것을 감안하면 비용대비 결과는 후진걸로....
- 최길희
- 속도가 너무 느려서 수렴이 빠른 AdamP를 쓰고 epoch를 줄이려고 실험해봄 -> 성능 낮음=실패
- 속도 느린걸 해결하려고 256*256 으로 이미지 resize -> 성능은 떨어지나 시간은 1/3로 떨어짐
- 256*2556 성능 올려보려고 lr_scheduler 써봄 -> 더 떨어짐 = 실패
- 256*256의 이미지에서 전처리 실험
- HorizontalFlip, VerticalFlip, RandomRotate90 : 성능 오름
- MotionBlur, OpticalDisortion, GaussNoise : 성능이 크게 오름
- 날씨 Effect들(RandomRain, RandomSnow, RandomSunFlare, RandomFog) : 애매함
- Color 관련 (RGBShift, HueSaturationValue, ChannelShuffle) : LB에서 확인은 못했지만 Validation 성능 오름
- 황훈
- 시도
- 26일 daily_mission 에서 fcn16s를 pretrain된 VGG16을 이용하여 구현하였고 학습을 돌렸다. 너무느려서 epoch은 6만 돌려주었다. 결과 : 0.3218
- 27일 daily_mission 에서 sgenet을 완성하여 학습을 돌려보았다. epoch : 14 결과 : 0.3075
- torchvision에서 제공해주는 segmantic segmetaion 모델 DeepLabV3_resnet50 과 resnet101을 시도해보았다. CUDA 메모리 부족 현상이 발생... 좀 더 고민해 봐야 할 것 같다.
- pretrain된 모델을 사용하는 것이 성능이 더 좋은 것 같다.
- segNet 도 생각보다 너무 느리다...
- 시도
- 최길희
- 256*256의 이미지에서 전처리 실험(이어서)
- 밝기 관련 transform (RandomContrast, RandomGamma, RandomBrightness) : 애매
- CLAHE : 애매 + 사용하려면 baseline code 수정 필요
- CUDA out of memory 오류
- transform과 관련이 없었다. 서버가 memory를 해제하지 않아 생긴 문제로 서버를 새로 생성했다.
- 지속적으로 GPU의 memory를 모니터링하고 cache를 해제해주자!
- batch_size 16으로 줘도 전혀 문제 없다!
- torchvision의 fcn_resnet50 사용
- LB : 0.4956 -> 성능이 뛰어나다
- 토론 게시판을 참고하면 아무 transform도 하지 않았을 때 0.45나온다고 했으니 내 점수는 온전히 transform에 의해 오른 점수이다.
- ToFloat 대신 Normalize 사용 & best model 저장 기준 mIoU로 설정
- best model 저장 기준 mIoU로 설정 : 이건 단순히 몇번 EPOCH의 모델을 쓸지 판단하는데만 쓰이는 것이므로 모델의 성능과는 관련이 없다. 단지 이걸 쓰니 더 높은 LB의 epoch를 잘 선택한다는 것을 확인할 수 있었다.
- ToFloat 대신 Normalize 사용 : 이전의 모델과 비교하여 성능이 올랐다.
- 256*256의 이미지에서 전처리 실험(이어서)
- 이민우
- unet 사용 포기 및 deeplabv3_resnet101 사용. 성능 많이 오름.
- 256*256 전처리 및 Normalize 수행 => 성능 크게 오름
- 수평, 수직, 회전으로 데이터 네 배로 증강 후 실행 => 아주 약간 오름
- 황훈
- torchvision DeepLabV3를 학습할 떄 마다 CUDA memory오류가 났지만 해결
- 학습 후에는 Kernel을 종료해야 CUDA memory 사용이 초기화 된다.
- DeepLabV3Plus에 Xception모델을 backbone으로 사용하려 했지만 Xception 코드에서 dilation을 거부하여 실패하였다.
- segmentation_models_pytorch 라는 모듈을 사용하였다.
- 원작자 github에도 질문이 올라와 있지만 해결 방법은 아직까지 없는 것 같다.
- DeepLabV3_ResNet50을 시도했지만 성능이 너무 낮게 나왔다.
- dataset을 전처리하는 부분에서 픽셀 값이 커지면 계산하는데 어려움을 줄 수 있어서 255로 나누어 정규화하는 부분을 제거하고 normalize를 시도했어야 했는데 제거하지 않고 학습을 하여 성능이 낮게 나온 것으로 추정 현재 수정 후 다시 학습 시도 중.
- torchvision DeepLabV3를 학습할 떄 마다 CUDA memory오류가 났지만 해결
-
이민우
- deeplabv3+_resnet101_32x4 사용. 성능 오름.
- 전처리에는 변화를 주지 않음. 그대로 네 배 증강 후 랜덤 blur 작업 수행. (성능은 잘 오르지만 시간이 오래 걸림.)
-
황훈
-
공통 setting :
- lr = 0.0001
- weight_decay = 1e-6
- optimizer = Adam
- loss = cross entropy
- normalize 적용
- seed = 21
- Encoder weight : imagenet
-
model : DeeplabV3
- backbone : resnet101
- Resize(256,256)
- batch=24
- 결과 : 0.5070
-
model : DeeplabV3Plus
- backbone : resnet101
- Augmentation : Resize(256,256)
- batch=24
- 0.5522
-
model : DeeplabV3Plus
- resnet101
- Augmentation : Resize(256,256), Horizon, VerticalFlip, RandomRotate90, MotionBlur, GaussianBlur, OpticalDistortion
- batch=24
- seed=42
- 결과 : 0.5553
-
model : DeeplabV3Plus
- backbone : resnet101
- Augmentation : (Horizon, VerticalFlip, RandomRotate90, MotionBlur, GaussianBlur, OpticalDistortion)
- batch=4
- 결과 : 0.5027
- 학습 Validation mIoU: 0.4954
-
model : DeeplabV3Plus
- backbone : resnet50
- Augmentation : (Horizon, VerticalFlip, RandomRotate90, MotionBlur, GaussianBlur, OpticalDistortion)
- batch=16
- 결과 : 0.5817
-
model : DeeplabV3Plus
- backbone : resnext50
- Augmentation : (Horizon, VerticalFlip, RandomRotate90, MotionBlur, GaussianBlur, OpticalDistortion)
- batch=16
- 결과 : 0.5881
- Validation mIoU: 0.5546
-
model : U-net
- backbone : EfficeintNet b4
- Augmentation : (Horizon, VerticalFlip, RandomRotate90, MotionBlur, GaussianBlur, OpticalDistortion)
- batch=8
- encoder_weight : noisy_study
- 결과 : 0.5022
-
model : U-net
- backbone : EfficientNet b0
- Augmentation : (Horizon, VerticalFlip, RandomRotate90, MotionBlur, GaussianBlur, OpticalDistortion)
- batch=16
- encoder_weight : noisy_study
- epoch=40 / 0.4757
-
자세한 내용은 폴더안에 일지에 담겨져 있습니다.
-
-
최길희
- 1)model : DeeplabV3
- Backbone : Resnet50
- 학습시간 : 6시간
- mIoU : 0.5379
- LB : 0.5781
- 2)model : DeeplabV3Plus
- Backbone : Resnet50
- 학습시간 : 1시간
- mIoU : 0.5250
- LB : 0.5628
- 1번 모델과의 비교 : 성능은 조금 차이나는 것에 비해 학습시간은 DeepLabV3Plus가 월등히 적게 든다
- 3)model : Unet++
- Backbone : Resnet50
- 학습시간 : 3시간 13분
- mIoU : 0.3322
- 결론 : 쓰지마세요 쓰레깁니다
- 4)model : DeeplabV3Plus
- Backbone : Resnet101
- 학습시간 : 1시간 26분
- mIoU : 0.5227
- LB : 0.5911
- 결론 : 성능도 좋고 속도도 빠릅니다!이겁니다!
- 5)model : DeeplabV3Plus
- Backbone : resnext50_32x4d
- 학습시간 : 1시간 30분
- mIoU : 0.5594
- LB : 0.5882
- 결론 : 얘도 성능이 준수합니다. 하지만 4번 모델이 조금 더 좋군여
- 6)model : DeeplabV3Plus
- Backbone : densenet161
- 결론 : densenet161도 그 오류로 사용 못합니다
- 7)model : DeeplabV3Plus
- Backbone : efficientnet-b0
- 학습시간 : 2시간 30분
- mIoU : 0.5272
- 결론 : Efficient-b0인데도 성능이 이러면 더 높은 애들은 더 좋지 않을까 생각합니다. 단 Efficient 계열은 메모리 차지가 아주 큽니다 Batchsize 줄여야함
여기서 부터는 loss를 좀 바꿔봤습니다
- 비교용 모델
- model : DeeplabV3Plus
- Backbone : resnet50
- mIoU : 0.5250
- LB : 0.5628
- Loss : CrossEntropyLoss
- 사용이유 : 일단 학습시간이 빠르면서 성능도 준수해서 이걸 비교용 모델로 사용했습니다.
- 1)FocalLoss(gamma=2)
- model : DeeplabV3Plus
- Backbone : resnet50
- mIoU : 0.2548
- Loss : FocalLoss(gamma=2)
- 결론 : 쓰레깁니다. 단독으로 사용하지 마세요.
- 2)CustomLoss1
- model : DeeplabV3Plus
- Backbone : resnet50
- mIoU : 0.5295
- LB : 0.5779
- Loss : CrossEntropyLoss*0.8 + FocalLoss(gamma=2)*0.2
- 결론 : CrossEntropy만 쓴 것보다 성능이 조금 더 올랐습니다.
- 1)model : DeeplabV3
-
황훈
-
첫번째 - encoder 변경
-
encoder : se_resnext50_32x4d
-
encoder_weights : imagenet
-
Augmentation : Resize(256, 256), HorizonFliip, VerticalFlip, RandomRotate90, MotionBlur, GaussianBlur, OpticalDistortion
-
batch_size : 16
-
결과 : 0.5766
-
-
두번째 - 새로운 Augmentation 적용
- encoder : resnext50
- batch_size : 16
- 새로운 Augmentation 추가 : Transpose, ShiftScaleRotate, ElasticTransform
- 결과 : 재출 횟수 1 날라감...fail.....
-
세번째 - ElasticTransform 만 적용
- encoder : resnext50
- batch_size : 16
- epoch : 30
- Augmentation 추가 : ElasticTransform
- 결과 : 0.6006
-
네번째 - Augmentation 추가
- encoder : resnext50
- batch_size : 16
- epoch : 40
- Augmentation 추가 : ElasticTransform, GridDropout, GridDistortion
- 결과 : 0.5759
-
다섯번째
- encoder : resnext50
- batch_size : 16
- epoch : 40
- Augmentation 추가 : ElasticTransform
- loss : (cross entropy * 0.9) + (focal loss * 0.1)
- 결과 : 0.6150
-
여섯번째
- encoder : resnext50
- batch_size : 16
- epoch : 30
- Augmentation 추가 : Elastic Transform, GlassBlur
- 결과 : 0.5798
-
결과를 통해 알 수 있었던 내용 & 다음에 시도해 볼 것
- 첫번째 se_resnext50모델의 경우에는 성능이 크게 나쁘지는 않았지만 모델을 불러오는 시간도 상당히 오래 걸리고 상대적으로 학습도 조금 느린 감이 없지 않아 있었습니다. 저는 resnext50을 기준으로 다양한 시도를 해볼 생각입니다.
- ElasticTransform은 사진에 왜곡을 주는 것 같습니다. 지금까지 실험 결과 성능을 가장 많이 올려 주었습니다.
- ElasticTransform, GridDropout, GridDistortion 3가지를 OneOf에 추가하여 활용했더니 점수가 하락했다.
- GridDropout의 단독사용은 성능을 떨어뜨렸습니다. 기준으로 잡은 resnext50만 사용한 모델의 성능보다도 낮은 성능을 보여줍니다. 다만 Elastic Transform과 GridDropout 2개를 조합해서 실험 해볼 예정입니다.
- GlassBlur도 성능을 하락 시켰습니다.
-
-
최길희
- 새로운 Backbone 사용
- Efficientnet-b4
- Batch_size : 8
- mIoU : 0.5934
- LB : 0.6053
- 학습시간 : 6시간 반
- 성능이 좋지만 시간이 너무 오래걸려서 다른 모델들로 각 기법들에 대한 실험을 진행한 후 마지막에 최종 모델 만들 때 사용하면 좋을 것 같습니다
- Efficientnet-b7
- Batch_size : 4
- mIoU : 0.5575
- 학습시간 : 21시간 반
- Batch size가 너무 작아서인지 시간은 정말 극악같이 많이 걸렸는데 성능은 b4보다 나쁩니다. 무시하십쇼.
- Efficientnet-b4
- Loss의 조합
- 베이스 모델은 deeplabv3plus_nesnet50을 사용했습니다.
- 1)CrossEntropyLoss
- mIoU : 0.5250
- LB : 0.5628
- 2)FocalLoss(2)
- mIoU : 0.2548
- 3)[CrossEntropy, focalloss(2)]=[0.8, 0.2]
- mIoU : 0.5295
- LB : 0.5779
- 4)[CrossEntropy, focalloss(2)]=[0.9, 0.1]
- mIoU : 0.5382
- LB : 0.5829
- 5)[CrossEntropy, focalloss(2), IoU Loss]=[0.6, 0.1, 0.3]
- mIoU : 0.5385
- LB : 0.5821
- 6)[CrossEntropy, focalloss(2), IoU Loss]=[0.7, 0.1, 0.2]
- mIoU : 0.5277
- LB : 0.5863
- 7)[CrossEntropy, focalloss(2), IoU Loss]=[0.8, 0.1, 0.1]
- mIoU : 0.5255
- LB : 0.5766
- 8)[CrossEntropy, focalloss(2), IoU Loss, Dice Loss]=[0.5, 0.1, 0.1, 0.3]
- mIoU : 0.5069
- 9)[CrossEntropy, focalloss(2), IoU Loss, Dice Loss]=[0.7, 0.1, 0.1, 0.1]
- mIoU : 0.5294
- LB : 0.5764
- 10)[CrossEntropy, focalloss(2), Dice Loss]=[0.7, 0.1, 0.2]
- mIoU : 0.5250
- LB : 0.5921
- 11)[CrossEntropy, focalloss(2), mIoU Loss, Dice Loss, ms-ssim loss]=[0.6, 0.1, 0.1, 0.1, 0.1]
- mIoU : 0.5134
- LB : 0.5873
- 1)CrossEntropyLoss
- 결론
- LB 점수가 없는 케이스는 mIoU만 봐도 성능 안 나오겠구나 싶어서 제출 안한거예요.
- Loss를 하나 단독으로 사용하는 것보단 섞어서 쓰는게 '무조건' 더 좋다.
- 그렇다고 무조건 다 때려박는다고 최고의 성능이 나오는 것이 아니다.
- mIoU Loss 함수와 Dice Loss 함수 분석해보면 둘이 사실상 거의 비슷한것 같습니다. 하지만 6, 10 케이스를 비교해봤을 때 둘 중 쓸거면 Dice Loss가 더 좋은 것 같습니다.
- 아직 가장 좋은 조합을 찾아내지는 못한 상태입니다. 참고하시고 여러분도 한 번 실험해보고 결과를 공유해주시면 정말 감사!합!니!다!
- 사용한 코드는 gilhee 폴더에 Baseline.ipynb로 올려놓겠습니다. 참고해주세요.
- 사용법은 CustomLoss class 내부에 원하시는 Loss 종류를 init으로 때려박고 forward에서 계산되게 하시면 됩니다. weights를 인자로 받아서 계산하게 하고 싶었는데 require_grad 꼬일까봐 못하겠더라구여...
- 이미지 전처리 512*512에서 확인
- 제가 사용하고 있는 Transform은 216*216 기반으로 시도했던 것일 뿐더러 LB 제출 횟수 제한으로 뇌피셜로 좋겠지 하고 쓴 것 들이라 검증을 위해 해봤습니다.
- 비교를 위한 베이스 모델 : deeplabv3plus_resnet101_512
- Average Loss : 0.2578
- mIoU : 0.5227
- LB : 0.5911
- 1)Weather 관련 전처리 제거 : OneOf([RandomRain, RandomSnow, RandomSunFlare, RandomFog], p=0.05)
- Average Loss : 0.2722
- mIoU : 0.5408
- LB : 0.5943
- 큰 차이는 없지만 제거하는 것이 조금 더 좋습니다.
- 2)Color 관련 전처리 제거 : OneOf([RGBShift, ChannelShuffle], p=0.5)
- Average Loss : 0.2672
- mIoU : 0.5162
- 큰 차이는 없지만 그대로 사용하는 것이 조금 더 좋아보입니다.
- 비교를 위한 베이스 모델 : deeplabv3plus_resnet101_512
- 새로운 Backbone 사용
-
황훈
-
실험
-
앞으로의 실험의 기준점을 잡기위해서 학습시키고 검증한 모델입니다.
-
encoder : resnext50
-
epoch : 30
-
Resize(256, 256) 추가
-
LB : 0.5784
-
-
어제 실험 해봤던 cross entropy loss + focal loss를 비교해보기 위해서 다시 실험 했습니다.
-
encoder : resnext50
-
epoch : 40
-
Resize
-
loss=cross entropy 0.9 + focal 0.1
-
0.5899
-
-
encoder : resnext50
-
epoch : 40
-
Loss : Label smoothing 0.1 + cross entropy 0.9
-
Resize 추가
-
LB : 0.5801
-
encdoer : resnext50
-
epoch=40
-
Resize /
-
Loss : Label smoothing 0.2 + cross entropy 0.7 + focal 0.1
-
LB : 0.5902
-
encoder : efficientnetb4
-
batch=8
-
epoch=30
-
Loss : Focal + Cross Entropy
-
LB : 0.6243
-
-
결론 그리고 다음에 시도해 볼 것!
- Focal Loss를 제가 찾아보고 이해한 바로는 잘 찾은 class에 대해서는 loss를 적게 주고 잘 못찾은 class에 대해서는 loss를 크게 주는 것으로 알고 있습니다. 그래서 데이터가 불균형 할 때 자주 쓰인다고 제가 이해를 하고 있습니다. 그래서 cross entropy loss와 섞어서 사용해봤습니다. ( 단독으로 사용시에는 성능이 좋지 않습니다. 실험 해봤습니다 ㅎㅎ)
- 3번의 label smoothing loss는 모델의 과잉 확신을 방지할 수 있어 모델의 일반화 성능이 올려주는 loss로 이해 하였습니다. hard target을 soft target으로 바꿔주는 것입니다. 예를 들면 어떤 4개의 class를 예측한다고 했을 때 hard target이 [0, 1, 0, 0] 이라면 label smoothing을 실시하면 soft target [0.025, 0.925, 0,025, 0,025] 이렇게 변경해주는 loss인 것이죠. 수식을 이해하면 참 좋을텐데 수학이 약해서 그런 부분은 더 공부를 해야겠습니다...아무튼 이러한 점을 이용해서 저의 모델의 일반화 성능을 높여주기 위해서 cross entropy loss와 섞어서 사용했습니다. (물론 이것도 단독으로 사용하면 성능이 좋지 않습니다 ㅎㅎ)
- 4번 실험에서는 3가지의 loss를 섞어서 학습 시켜봤습니다. 저도 길희님 처럼 어떤 비율이 좋다 라고는 말씀을 못드리겠습니다만 확실히 3가지를 섞어서 사용한 모델이 성능이 미미하지만 더 좋게 나왔습니다.
- 5번째 실험은 길희님의 추천으로 efficientNet b4 를 encoder로 사용해 봤는데 성능이 아주 좋게 나왔습니다. 다만 학습속도가 너무 오래 걸려서 이걸로 실험을 하기보다는 좀 더 빠른 모델로 실험을 하고 마지막 제출하기 전에 학습해서 검증할 때 사용하려고 합니다 ㅎㅎ
- 내일은 Dice Loss를 사용해보려고 합니다. 객체의 경계선을 잘 인식할 수 있는? 그런 loss라고 대충 이해했는데 확실히 논문 읽기가 어렵네요..혹시 제가 잘 못 이해 했다면 피어세션때 알려주시면 감사하겠습니다 ㅎㅎ
-
- 이민우
- 늘 네 배로 증강시켰는데, 두 배로 증강시키는 방법이 더 좋은 성능을 냄.
- 원본 + 변형 데이터로 실험한 결과가 좋은 성능이 남.
- 가끔 이미지가 완전히 검은색이 되어 출력되는 현상 발견. 실험 결과 가우시안 블러 때문이었고, 제외 후 재실험 시 성능이 오름.
- 변형 + 변형 데이터로 실험 시 어떤 결과가 나올지 실험 예정.
-
황훈
- 공통 setting :
- lr : 0.0001
- weight_decay : 1e-6
- optimizer : Adam
- seed : 21
- batch_size : 16
- Encoder weight : imagenet
- model : DeepLabV3Plus
- 기본 Augmentation : HorizonFliip, VerticalFlip, RandomRotate90, MotionBlur, GaussianBlur, OpticalDistortion, normalize, ElasticTransform, Resize(256, 256) 을 사용합니다
-
encoder : efficientnetb4
- batch_size : 8
- epoch : 40
- loss : Label smoothing(0.2) + cross entropy(0.7) + focal(0.1)
- LB : 0.6243
-
encoder : resnext50
- epoch : 40
- loss : Label smoothing(0.3) + cross entropy(0.5) + focal(0.2)
- LB : 0.5700
-
encoder : resnext50
- epoch : 40
- loss : cross entropy(0.9 )+ Dice(0.1)
- LB : 0.5737
-
encoder : resnext50
- epoch : 40
- loss : Label smoothing(0.1) + cross entropy(0.8) + focal(0.1)
- LB : 0.5864
-
encoder : resnext50)
- epoch : 40
- loss : Dice(0.2) + cross entropy(0.7) + focal(0.1)
- LB : 0.5769
- 어제 실험했던 내용 중 Label smoothing loss, Cross entropy loss, Focal loss를 2 : 7 : 1 로 섞어서 학습한 모델의 성능이 높게 나와서 efficientNet b4에도 시도해 보았다. 결과가 Focal loss 와 Cross entropy loss를 1 : 9 로 섞어서 학습한 모델과 똑같이 나왔습니다. 사실 어제 실험에서도 두개의 성능 차이가 그렇게 크지 않았습니다.
- 2번 실험은 모델의 일반화 성능을 높여주면 모델의 전체 성능이 높아지지 않을까 싶어서 Label smoothing loss 비율을 높여서 실험했습니다.
- 객체의 boundary를 더 잘 인식할 수 있는 Dice loss는 전반적으로 결과가 이전의 Focal loss나 Label smoothing loss를 섞어 사용한 모델들 보다 성능이 낮게 나왔습니다.
- Label smoothing loss의 비율을 높여 일반화 성능을 올리면 모델의 성능이 좋아지지 않을까 하고 생각을 했었는데 오히려 낮아졌습니다. 그 이유에 대해서 저의 개인적인 생각으로는 Label smoothing loss는 hard target을 soft target으로 바꾸어주는데 Label smoothing loss의 비율이 높아 오히려 분류해야 하는 class의 경계가 모호해져서 잘 분류를 못하는 것이 아닐까? 하고 생각하고 있습니다. 혹시 저와 다른 견해가 있으시 거나 잘 이해하신 분이 있다면 말씀해주시면 감사하겠습니다.
- Loss의 최적의 비율을 계속해서 실험하고 싶으나 시간을 너무 많이 소모할 것 같아서 내일 부터는 다른 실험을 해보려고 합니다. 일단 우선적으로 optimizer를 Adam에서 AdamP로 바꾸어서 학습, lr_scheduler를 이용해서 학습, 새로운 Augmentation인 GridMask를 적용해볼 예정입니다. 3가지 실험을 결과가 전부 기준보다 높게 나온다면 섞어서 사용해볼 예정입니다.
- 공통 setting :
- 이민우
- adamP 사용 시 성능이 미세하지만 더 좋아지는 현상 확인. (SGD는 별로 쓸모 없었음.)
- 256 Resize 미사용시 성능 대폭 증가 확인.
- 훈 님 말씀대로 배치 사이즈가 영향을 미침을 확인. => CUDA OOM이 나지 않는 선에서 2진수로 잘 맞춰줄것.
-윤석진
모델만 바꿔가며 동일한 조건으로 segmentation_model 전체 모델을 실험중입니다.
https://github.com/bcaitech1/p3-ims-obd-line2headingseongsu/blob/master/SeokJin/210501.md 에 자세한 설명이 있습니다.
다양한 모델을 실험하기 위해 8에폭만 짧게짧게 돌린 결과라, 성능은 상대적인 지표로 봐 주시면 감사하겠습니다.
0.4965가 나온 timm-regnetx_064 + DeepLabV3Plus 조합은 20에폭을 돌리고 제출했을 때 0.5737, 40에폭을 돌리고 제출했을 때 0.5785가 나왔습니다.
평소 자주쓰던 resnext50_32x4d + DeepLabV3Plus 모델의 점수 0.4633보다 더 높은 모델이 많은 것을 알 수 있습니다.
상위 n개의 모델에 대하여 앙상블을 하거나, 좋은 디코더를 찾거나 할 수 있을 것 같습니다.
거의 절반정도 테스트 해보았는데 학습이 될 때마다 업데이트 하겠습니다.
-최길희
피어세션에서도 전달드렸던 블로그 링크를 첨부하겠습니다!
https://ttunyong22.tistory.com/64
mixloss에 대한 결과를 담은 표입니다.
- 최길희
- 좋다고 하던 모델들을 다 돌려서 비교하고 표로 만들었습니다
- https://ttunyong22.tistory.com/68
- try2가 제 LB의 최고 성능인데 try10(=DeeplabV3Plus + timm-regnety_032 + imagenet)도 Val이 비슷합니다.
- 하지만 시간은 4배정도 차이가 납니다.(try10이 V100에서 돌아갔다는 가정하에)
- 하지만 나중의 ensemble을 생각해서 baselinee 모델을 effi-b4/ timm-regnety_032 2개라고 잡으면 될 것 같습니다.
- 물론 실험은 시간을 생각해서 timm-regnety_032에서 할겁니다!
- Mixed Precision 사용
- 설치는 https://github.com/NVIDIA/apex 의 Quick start를 참고하세요
- 사용은 https://cvml.tistory.com/8 의 코드를 참고하세요
- 수정하셔야 할 부분은 Train 함수 정의 부분과 model 저장 부분, model load하는 부분입니다.
- 제 코드도 업데이트 해놓았습니다. (초반에 모듈 설치 때문에 좀 더럽습니다...양해좀)
- Gradient Accumulation 코드 추가
- Train 함수 정의 부분과 맨 처음 파라미터 설정 부분만 달라졌습니다.
- 수정된 코드를 업데이트 했습니다.
- Batch_size의 변화에 따른 성능
- https://ttunyong22.tistory.com/69 첫 번째 표를 참고해주세요
- 실험 결과 Batch가 24일때가 Val 성능이 가장 높은 것을 확인할 수 있었습니다.
- 최대한 Mixed Precision의 효과로 batch_size 파라미터를 키우려고 했습니다. -> batch가 클 수록 학습 속도가 초금 빨라 질걸여?
- 단순 batch_size 파라미터로 키울 수 없을 때부터는 Gradient Accumulation 을 이용해 실질적인 batch_size를 키웠습니다.
- LR의 변화에 따른 성능
- https://ttunyong22.tistory.com/69 두 번째 표를 참고해주세요
- 사실 1e-3, 1e-5 성능이 너무 안좋아서 끝까지 성능 안 뽑고 끊었습니다.
- 1e-3 : Epoch 4-5에서부터 벌써 발산하고 있었습니다.^^ 갖다버려...
- 1e-5 : 꾸준히 수렴은 하고 있으나 속도가 매우 느리다. 한 epoch에 0.01밖에 오르지 않으며 epoch 8의 mIoU가 0.21이다. 언제 학습 다해...갖다 버려^^
- 좋다고 하던 모델들을 다 돌려서 비교하고 표로 만들었습니다
- 이민우
- Cosine 스케줄러가 가장 좋음을 확인.
- 여러 Loss 조합을 사용해보았지만, CrossEntropy 0.9 * Focal 0.1 이 가장 제 코드에 맞았습니다.
- 앙상블 시도. Top3 모델 조합시 최고 모델 성능의 0.01 가량 성능 향상