EP000 / Image_segmentation

Semantic Image Segmentation
1 stars 0 forks source link

DeepLab V3 진행상황 #6

Open EP000 opened 3 years ago

EP000 commented 3 years ago

저도 이슈로 정리하겠습니다!

참고 사이트

https://github.com/hoya012/semantic-segmentation-tutorial-pytorch

위 사이트를 그대로 가져와서 저희가 쓰는 데이터에 맞게 수정하는게 목표입니다!

EP000 commented 3 years ago

~ 0415 진행상황

To do list

yooso0731 commented 3 years ago

IndexError 그대로 읽어보면 x축 크기가 28?인데 코드 어떤 부분에서 255를 불러서 오류가 난 거라는 이야기일까요,,?

앗 그런데 혹시 #4 해결한 결과물 (픽셀값 class로 변경한 코드) 공유 가능할까요?!! 오늘 중으로 저도 해당 데이터 만드려고 했는데, 동일한 class num으로 통일하는 게 좋을 것 같아서요!

EP000 commented 3 years ago

이제 확인했네요,,ㅠ

class num으로 만드는 코드는 DL3_v1 branch semantic-segmentation-tutorial-pytorch-ag/minicity/data_refactoring.ipynb 입니다!

void를 255로 지정했는데, 이거 때문인지,, 아직 해결중입니다!

EP000 commented 3 years ago

255 찾았습니다...!

void 값을 255로 지정해서 발생한 문제가 맞았어요,,,!

epoch 2 일때 validation 성능 결과입니다!

Mean Iou 47.5 확인했습니다 :)

image

코드 올려둘게요!

EP000 commented 3 years ago

python baseline.py --save_path baseline_run_deeplabv3_resnet50 --crop_size 576 1152 --batch_size 2 --epochs 50 위 코드 실행결과입니다.

image

EP000 commented 3 years ago

cpu, gpu batch size

cpu 사용 시 최대로 키울 수 있는 batch size : 10 gpu 사용시 최대로 키울 수 있는 batch size : 2

cpu는 10까지 올릴 수 있는데 느리고, gpu는 2 밖에 안되지만 속도는 봐줄만한,,,

ㅠㅠㅠㅠㅠㅠ

제가 사용하는 서버 cpu 메모리는 90기가 gpu 메모리는 11기가정도 됩니다...

EP000 commented 3 years ago

deeplabv3_resnet50(pretrain=False)

file : RUN.ipynb GPU 사용 epoch 1 batch 2 train miou : 48.43 / accuracy : 84.34 test miou : 51.64 / accuracy : 85.51 소요시간 : train 약 5분 test 약 15초

classes           IoU
---------------------
Pole          : 0.002
SignSymbol    : 0.233
Bicyclist     : 0.251
Pedestrian    : 0.188
Building      : 0.784
Fence         : 0.382
Pavement      : 0.676
Road          : 0.909
Car           : 0.684
Sky           : 0.860
Tree          : 0.711
---------------------
Mean IoU      : 0.516
---------------------
loss : 0.4775 acc : 0.8551 miou : 0.5164

deeplabv3_resnet101(pretrain=False)

file : RUN_01_resnet101.ipynb GPU 메모리 부족으로 사용 불가. 어쩔 수 없이 CPU 사용 (epoch1, batch1에서 메모리 부족했음) epoch 1 batch 10 train miou : 35.00 / 코드 에러나서 기록 못함... 한시간 반 다시 기다릴 자신 없어서 넘어감 test miou : 23.98 / accuracy : 45.53 소요시간 : train 1시간 30분 test 11분

classes           IoU
---------------------
Pole          : 0.000
SignSymbol    : 0.043
Bicyclist     : 0.003
Pedestrian    : 0.131
Building      : 0.696
Fence         : 0.000
Pavement      : 0.127
Road          : 0.000
Car           : 0.055
Sky           : 0.872
Tree          : 0.710
---------------------
Mean IoU      : 0.240
---------------------
loss : 2.9336 acc : 0.4553 miou : 0.2398

오늘의 결론.

  1. 모델이 깊다고 성능이 좋아지는 것이 아니다. (데이터 양이 적어서 그런 것 같다)
  2. CPU 힘들다... 메모리 짱짱한 GPU 쓰고싶다.
  3. resnet50 test 성능이 더 높음. validation 추가할 필요성 느낌.

내일 계획.

  1. validataion 추가해서 성능 비교하기
  2. 각 클래스 별 iou값 확인 후 loss function에 반영하기
  3. resnet50 epoch 가능한만큼 최대로 늘리기
  4. resnet101 pretrain 모델 돌려보기

참고사항) deeplabv3_resnet50 : 사전학습 모델 지원 안함. #8 참고해서 라벨 값 수정 후 학습한 결과임

EP000 commented 3 years ago

deeplabv3_resnet50(pretrain=False)

file : RUN_02_resnet50.ipynb GPU 사용. class 비율에 따라 loss 함수에 가중치 추가 epoch 5 batch 2 train miou : 75.13 / accuracy : 91.10 test miou : 72.78 / accuracy : 90.42

classes           IoU
---------------------
Pole          : 0.374
SignSymbol    : 0.492
Bicyclist     : 0.688
Pedestrian    : 0.575
Building      : 0.839
Fence         : 0.702
Pavement      : 0.819
Road          : 0.949
Car           : 0.854
Sky           : 0.905
Tree          : 0.810
---------------------
Mean IoU      : 0.728
---------------------
loss : 0.3141 acc : 0.9042 miou : 0.7278

epoch 10 batch 2 train miou : 79.82 / accuracy : 93.25 test miou : 78.76 / accuracy : 92.92

classes           IoU
---------------------
Pole          : 0.444
SignSymbol    : 0.655
Bicyclist     : 0.749
Pedestrian    : 0.642
Building      : 0.887
Fence         : 0.800
Pavement      : 0.866
Road          : 0.965
Car           : 0.896
Sky           : 0.914
Tree          : 0.846
---------------------
Mean IoU      : 0.788
---------------------
loss : 0.2247 acc : 0.9292 miou : 0.7876

오늘의 결론

  1. 클래스 불균형이 심해서 클래스 비율에 반비례하도록 가중치 조절하니까 성능 대폭 향상 (데이터가 적은 클래스의 가중치가 더 큼)
  2. validation 하기에는 메모리 부족.
  3. RUN_02_resnet50.ipynb 뒷부분에 val 코드는 있음.
  4. resnet101 사전학습된 모델 CPU로 돌려보고싶음. (나중에,,,)

내일 계획

  1. cutmix 코드작성
  2. 성능 향상 없을 때 까지 epoch 키워보겠음!
EP000 commented 3 years ago

deeplabv3_resnet50(pretrain=False)

file : RUN_03_resnet50.ipynb GPU 사용. epoch 20 batch 2 train miou : 84.93 / accuracy : 95.17 test miou : 83.84 / accuracy : 94.77

classes           IoU
---------------------
Pole          : 0.527
SignSymbol    : 0.758
Bicyclist     : 0.815
Pedestrian    : 0.729
Building      : 0.922
Fence         : 0.869
Pavement      : 0.901
Road          : 0.974
Car           : 0.921
Sky           : 0.925
Tree          : 0.882
---------------------
Mean IoU      : 0.838
---------------------
loss : 0.1774 acc : 0.9477 miou : 0.8384

image

deeplabv3_resnet101(pretrain=True)

file : RUN_04_resnet101.ipynb (현재 돌아가고있어서 업로드 안함) CPU 사용 1 epoch 에 약 1시간 30분 소요. 오늘 저녁부터 돌리기 시작함 epoch 15까지 돌릴거임. 내일 오후 4시쯤 끝날 예정. 현재 epoch 4 돌아가는 중 아래는 epoch 3 train

classes           IoU
---------------------
Pole          : 0.264
SignSymbol    : 0.506
Bicyclist     : 0.669
Pedestrian    : 0.588
Building      : 0.791
Fence         : 0.635
Pavement      : 0.759
Road          : 0.933
Car           : 0.868
Sky           : 0.887
Tree          : 0.784
---------------------
Mean IoU      : 0.698
---------------------
train epoch  3
loss : 0.3599   acc : 0.8831   miou : 0.6985

오늘의 결론

  1. test miou 80 넘었다! epoch 20 이상으로 돌리는 건 의미 없을 것 같다.
  2. cpu 열일 중
  3. cutmix 못함ㅠ

내일 계획

  1. cutmix 코드작성
  2. cpu 결과 확인!
EP000 commented 3 years ago

deeplabv3_resnet101(pretrain=True)

file : RUN_04_resnet101.ipynb CPU 사용. class weight 추가 epoch 15 batch 10 train miou : 82.17 / accuracy : 94.06 test miou : 76.71 / accuracy : 92.22 소요시간 : 22시간 30분

classes           IoU
---------------------
Pole          : 0.374
SignSymbol    : 0.552
Bicyclist     : 0.777
Pedestrian    : 0.673
Building      : 0.891
Fence         : 0.739
Pavement      : 0.826
Road          : 0.959
Car           : 0.892
Sky           : 0.927
Tree          : 0.830
---------------------
Mean IoU      : 0.767
---------------------
loss : 0.3698 acc : 0.9222 miou : 0.7671

image

deeplabv3_resnet50(pretrain=False)

file : RUN_05_resnet50.ipynb GPU 사용. class weight 추가. *cut mix 추가 (랜덤하게 100장 선택해서 200200 사이즈의 이미지 cut mix 진행. 학습 데이터가 추가된 형태)** epoch 40 batch 2 train miou 88.14 / accuracy 96.33 test miou 80.43 / accuracy 93.65 소요시간 : 3시간 20분

classes           IoU
---------------------
Pole          : 0.492
SignSymbol    : 0.657
Bicyclist     : 0.799
Pedestrian    : 0.696
Building      : 0.918
Fence         : 0.772
Pavement      : 0.865
Road          : 0.971
Car           : 0.902
Sky           : 0.929
Tree          : 0.848
---------------------
Mean IoU      : 0.804
---------------------
loss : 0.4920 acc : 0.9365 miou : 0.8043

image

오늘의 결론

  1. resnet101(pretrain=True) epoch 15보다 resnet50(pretrain=False) epoch 10번 돌린 성능이 더 좋다.
  2. 모델이 무겁고 깊어질수록 잘 못 맞춘다. 가벼운 모델로 epoch 늘리는게 더 나은 듯
  3. epoch 40 돌린 결과, 과적합 일어난 듯. validation 안 돌려서 과적합 발생 시점 모르겠음... ㅠ

내일 계획

  1. epoch 마다 test 확인 해보면서 최적 시점 찾기
  2. cut mix를 랜덤하게 적용해서 그런지,,, 90이상의 성능은 나오지 않았음. class 적은 데이터 위주로 cut mix 추가하는 코드 작성해보겠음...
  3. class 별로 iou값과 클래스 비율 비교해보기!
EP000 commented 3 years ago

deeplabv3_resnet50(pretrain=False)

file : RUN_06_resnet50.ipynb CPU 사용. class weight, cut mix train 70% val 10% test 20% epoch 100 batch 2 train miou : 90.99 / accuracy : 97.18 val miou : 90.79 / accuracy : 97.13 test miou : 81.02 / accuracy : 93.82 소요시간 : 약 8시간 30분 (epoch 1 : 5min) train miou는 90까지 올랐지만, test miou는 81.02 아래 validation 봐도 과적합은 보이지 않음.

validataion result image

train/val 비교 -> 과적합 X image

classes           IoU
---------------------
Pole          : 0.501
SignSymbol    : 0.664
Bicyclist     : 0.811
Pedestrian    : 0.709
Building      : 0.922
Fence         : 0.774
Pavement      : 0.874
Road          : 0.973
Car           : 0.904
Sky           : 0.931
Tree          : 0.848
---------------------
Mean IoU      : 0.810
---------------------
loss : 0.6782 acc : 0.9382 miou : 0.8102

deeplabv3_resnet50(pretrain=False)

file : RUN_07_resnet50.ipynb CPU 사용. class weight, cut mix 안함 train 70% val 10% test 20% epoch 100 batch 2 train miou : 90.45 / accuracy : 97.03 val miou : 90.34 / accuracy : 97.03 test miou : 80.99 / accuracy : 93.73 소요시간 : 약 8시간 30분 (epoch 1 : 5min) cut mix 안해도 성능차이 별로 없음.

validation result image

train/val 비교 -> 과적합 X image

classes           IoU
---------------------
Pole          : 0.500
SignSymbol    : 0.647
Bicyclist     : 0.827
Pedestrian    : 0.711
Building      : 0.921
Fence         : 0.789
Pavement      : 0.859
Road          : 0.970
Car           : 0.907
Sky           : 0.931
Tree          : 0.847
---------------------
Mean IoU      : 0.810
---------------------
loss : 0.6262 acc : 0.9373 miou : 0.8099

deeplabv3_resnet50(pretrain=False)

file : RUN_08_resnet50.ipynb CPU 사용. class weight, cut mix 안함 val 제거 train 80% test 20% epoch 80 batch 2 train miou : 89.94 / accuracy : 96.89 test miou : 88.29 / accuracy : 96.29 소요시간 : 약 7시간 30분 (epoch 1 : 5min) _RUN_03resnet50.ipynb 파일에서 test 83.8 이였는데, cut mix랑 val 추가하면 80 이상 오르지 않아서 class weight만 추가하고 epoch 많이 올렸는데 88.29 나왔음. cut mix를 잘못한건지,,, val 따로 빼서 train 데이터가 부족한건지,,, 부족했다면 cut mix가 제 역할을 다 하지 못한건지,,, 의문,,,!

classes           IoU
---------------------
Pole          : 0.622
SignSymbol    : 0.840
Bicyclist     : 0.871
Pedestrian    : 0.797
Building      : 0.950
Fence         : 0.917
Pavement      : 0.934
Road          : 0.983
Car           : 0.947
Sky           : 0.937
Tree          : 0.916
---------------------
Mean IoU      : 0.883
---------------------
loss : 0.1769 acc : 0.9629 miou : 0.8829

결론

  1. test miou 88 !!
  2. cutmix val 필요없었다....

계획

  1. epoch 더 돌려보겠음.