본문 바로가기
딥러닝 어쩌구/연구일지&디버깅

[연구노트] mmsegmentation 업데이트중 해결한 에러들, Action 연구 근황

by 포숑은 맛있어 2021. 7. 26.
반응형

최근에 해결한 문제에 대해 기록하는 글

  • mmsegmentation 구버전에서 코딩하다가 최근걸로 업데이트 하다가 생긴 문제
  • ACAR-Net 베이스라인으로 내 모델 구현했는데 성능이 안나오는 문제

 

 

 

미래의 나를 위해 mmsegmentation 관련 에러 요약

  • build_segmentor 없다는 에러는 그냥 __init__.py 제대로 안써서 생긴 문제였음.
    원래 내가 코딩했던거랑 merge하는 중에 충돌나서 그런지 파일이 없어져있음 (...) 다시 작성해줬더니 잘됨.
  • 최근버전 mmseg 사용하려면 mmcv는 1.3.9로 업데이트 해야함. 난 1.3.0을 쓰고있어서 업데이트 필요했음.
  • 간혹 mmcv-full 설치시에 CUDA 문제로 안깔릴수도 있음.
    CUDA_HOME이 없다는 에러 -> cuda toolkit 설치하면 깔림
  • 처음에 cuda 9.1가 셋업된 도커를 사용했는데, mmcv-full이 cuda 9.2부터 되는 바람에 libcudart.so.9.2 에러 발생.
    그냥 다른 도커 이미지에 cuda 10버전이 있어서, 이걸로 mmcv-full 설치하려고함.
    그전에 opencv를 깔아야하기땜에, 막간을 이용해 이 글 쓰고있음
    pip install mmcv-full==1.3.9 -f https://download.openmmlab.com/mmcv/dist/cu101/torch1.7.0/index.html 하면됨
  • mmcv 깔고, mmsegmentation 설치.
    뭔가 업뎃 했으면 registry에 없다는 에러 뜨기도 함. 이땐 pip install -e . 다시 해야함. 
  • mmsegmentation은 기본적으로 mask이미지가 클래스번호 값이어야한다. 0부터 시작해야함.
    그리고 굉장히 멍청한 일이 있었는데, img[h,w] = '클래스번호' 이렇게 넣어줘야지, 3D로 넣으면 안된다.
    [0,0,0] [32,32,32] 뭐 이런식으로 멍청하게 넣었다가 안돌아갔었다.
    변명을 하자면 cv2.imread()해서 읽어보면 값 3개로 찍힌단말이야...
    아무튼 마스크 이미지 이상하게 만들어서 안 돌아갔던거 버그 해결하고 학습 잘 하는중.

역시 swin transformer가 좋긴 한가보다. 성능이 더 잘나와.

 

 

[mmsegmentation 업뎃 디버깅 상황]

  1. mmsegmentation에 Swin Transformer가 업데이트 되는 바람에, 새 버전을 쓰고싶음

  2. (원래 쓰던 코드 적당히 merge 해주고) git pull하고 원래 돌리던 코드 실행하면, 뭔가가 모듈이 없다는 에러 발생
    사유: mmcv 버전 에러. 1.3.0을 쓰고있는데, 높은 버전으로 업데이트 해야함

  3. 'pip install mmcv-full==1.3.9 -f 블라블라' 실행해서 설치함.
    mmcv랑 mmsegmentation도 지웠다가 다시 깔아줬음.
    => 주로 쓰는 서버에서는 잘 실행됨. 그런데 지금 다른 실험중이라 GPU가 없음. -> 다른 서버에 셋업해야겠음
    => CUDA_HOME이 없다며 mmcv-full이 설치가 안됨!

  4. 역시나 nvcc --version 치면 없다고 뜸.
    도커 찾아보니까 cuda 패스가 안보임
    => apt-get update --fix-missing 실행     // 원래 다음줄에 써놓은대로 툴킷만 설치하면 되는데, 에러가 떠서 이거 실행해야했음
    => apt install nvidia-cuda-toolkit 실행

  5. 다시 pip install mmcv-full==1.3.9 실행하려고 했는데, NVML: Driver/library version mismatch 에러 발생
    export CUDA_HOME=/usr/lib/cuda 이런거 해도 해결 안됨
    -> 알고보니 cuda 버전이 11.2가 아니라 9.2였다 뭐지.. nvidia-smi에서는 11.2라던데

    암튼 그거에 맞춰서  pip install mmcv-full=={mmcv_version} -f https://download.openmmlab.com/mmcv/dist/cu92/torch1.7.0/index.html 실행했더니 제대로 깔림.

  6. 하지만 발생한 에러: ImportError: libcudart.so.9.2: cannot open shared object file: No such file or directory
    -> 누가 torch, torchvision 다시 깔래서 시도중. 1.9.0으로 설치하니까 또 말썽이라 원래 쓰던 1.7.0으로 다시 깔고있다.

    드라이버나 쿠다 구버전이 torch 1.9.0이랑 호환이 안되나?
    pip install mmcv-full==1.3.9 -f https://download.openmmlab.com/mmcv/dist/cu92/torch1.7.0/index.html 
    빈정상하지만 다시 apt install nvidia-cuda-toolkit 해준다. 네트워크 캐파가 안좋아서 오래 걸릴 듯.
  7. 지금 쓰는 도커에 cuda가 9.1인데, mmcv는 9.2부터 지원함.
    그럼 cuda를 다시 깔아야하니까, 이건 기분이 안좋기 때문에 다른 도커 이미지를 찾았음. 10.1을 사용하는 것으로 바꿈.
    여기에 torch 1.7, torchvision 0.8을 다시 깔고, mmcv-full, mmsegmentation 다시 설치하려고 함.

 

암튼 이거 빨리 해결해서 실험 한다음에, output 파일들을 모아서 MongoDB로 정리할 수 있도록 코딩을 해보고 싶다.

아니 일단 돌아가야 실험이고 뭐고 할텐데 이런

 

 

[여담]

아래 문제도 잘 해결 되었다.

문제점: 데이터셋 셋팅실수

 

삽질 과정

  1. 학습 했는데 성능이 고작 mAP 5~6%대. 에폭을 많이 돌렸음에도 성능이 증가하지 않음.
  2. 내꺼 학습 완료된 pth파일 가지고 evaluation 다시 돌려봤는데도 이상함. 0.008% 뭐 이런 수준임. 
    (+문제해결과는 관련 없었지만 state_dict 읽는 부분 자잘한 수정 필요한거 찾음. pretrained 모델 안가져오는 문제 있었음)
  3. 그럼 학습을 못하는건가?
    에폭별로 결과 다 뜯어봤는데 validation output 추론한 값은 다 달랐음
    -> 뭔가 학습은 한다는거임
  4. 논문 셋팅 확인함.
    opoch, lr, optimizer, scheduler 등등. 유사하게 돌렸는데?
  5. 혹시나해서 깃허브 이슈 뒤져봄.
    그 코드로 이미 성능 reproducing 한 사람이 올린 질문글이 있었음. (mAP 27정도 달성)
    -> 코드 문제 없다는 소리임
  6. 이쯤되면 데이터 말고는 틀릴 수 있는게 존재하지 않음.
    mmaction (구버전) 실험환경 셋업만 할때 AVA를 다운받은게 있었는데, 그거 그대로 쓰고 있었음.
    영상 다운받는건 틀렸을리 없으니까 프레임만 ACAR에 있는걸로 다시 뽑았음.
    -> 앗. 다르네. 같은 프레임번호인데 뭔가 달랐음. 내가 mmaction에서 코드를 잘못 돌렸거나 뭐가 꼬였거나 그런듯.
    -> 바꾼걸로 1에폭 돌렸더니 mAP 21나옴... 해결됨.

 

내 모델 돌리고 있다

잘 나왔음 좋겠어

 

아직 ACAR조차 안돌렸지만 대충 논문에 있으니까 내꺼 먼저 돌려야지

 

 

오늘따라 일이 잘 안 풀린다. 음...

대충 Action Localization에서도 아이디어가 생겨서,
"CHoosE Actor-context-Time relations: Embedding Relations for Action Detection” (CHEAT) 라는 이름을 적당히 지어주고 실험을 하는 중이다. 이름 지은 게 굉장히 뇌절이지만 부르기 편하면 장땡이니 그러려니 하는중

그런데 왜 mAP가 떨어지는지 모르겠다. 6%대에서 5%대로 조금씩 감소하는데 대체 뭐가 문젠지... 로스는 잘 떨어지고 있다.

 

내 코딩 실수인가 싶어서 내꺼 말고 ACAR-Net도 돌려보고있다. 그런데 1에폭에서 mAP 6.12%밖에 안나오는거임; 뭐지

ACAR-Net 코드를 보면 배치사이즈 디폴트가 GPU당 1로 되어있는데, 5로 늘려서 안되는건 아니겠지 설마

 

ACAR-Net만 잘 나오고 내꺼 이상하면 열받긴 하겠지만, 그렇다고 ACAR-Net reproduce가 안되면 멘붕일테니 제발 나왔음 좋겠다.
로스는 미묘하게 내 모델이 더 잘 떨어진 상황이다.

 

 

 

반응형

댓글