본문 바로가기
AIML 분야/Segmentation

[2021.02.16. 연구노트] 깨알같은 디버깅 - panoptic deeplab

by 포숑은 맛있어 2021. 2. 16.
반응형

official 코드는 아닌데, 페북같은데서 짠건지 엄청 잘 정리된 코드를 베이스로 돌리고 있다.

 

  • MultiGPU면 Distributed 처리를 하도록 코드가 짜여있는데, single machine multiGPU로 고쳤다.
    • 저번에 이것때문에 DataParallel()이랑 distributed의 차이를 찾아봤었던 것.
  • 학습초반 조금 살펴보기

 

별거 없었던 디버깅 과정

 

1. 일단은 distributed 처리는 안되게 바꾼다.

single machine에서도 distributed 처리는 할 수 있지 않을까?

그런데 나는 그냥 그렇게 안했다. 왜냐면 포트 번호, addr 이런데에 뭘 적어줘야하는지 모르기 때문. localhost로 적고 포트는 아무거나 때려넣었더니 계속 기다리기만 하는 상황이 벌어졌다.

 

2. nn.DataParallel(model) 추가

원래 이걸로 데이터 패러랠처리 하니까.

하지만 에러가 떴다.

'RuntimeError: grad can be implicitly created only for scalar outputs'

 

3. loss.sum().backward() 으로 바꾸기

저 에러 뜨면 mean, sum 이런거 추가하라고 한다.

 

4. 모델의 변수에 접근할때도 module.model.XX 이렇게.

pretrained model 불러올때도 .module < 이게 필요했다는걸 깜빡했다.

각각의 로스를 log 남기려는데, 로스 이름을 가져오기 위해서는 모델 안에 정의된 딕셔너리를 가져와야했다.

거기서 발생한 에러.

 


 

 

학습 결과

 

예상 시간은 24시간 이상 ~ 30시간 이내이다.

정확히 재보지는 않았으나 28시간?정도 걸릴 것 같다.

 

Dataset은 validation용이 아니라 학습할때 사용했던 것이다.

이번 iteration의 학습시에 사용했던 Input, prediction 결과를 visualization 하였다.

 

 

 

특이사항?

segmentation 처음 돌려서 신기한게, 쭉 지켜보니까 이런식으로 class에 대한 추론을 하기 전에 대략 생겨먹은 shape부터 배우는 것 같다.

클래스를 아직 잘 못배워서 얼룩덜룩 중구난방일거라 생각했는데 의외다.

모델은 이 예제 아닌 것들도 전부 저 클래스 두세가지로 추론했다.

 

object의 center point에 대한 score도 딱히 높은 값이 없다. 그러니 offset 또한 마찬가지.

 

16배치, 600 iteration

 

이제 이 모델이 다 돌때까지 어제 찾은 semantic segmentation 논문들을 읽어보고 코드를 찾아봐야겠다.

 

 

 

- 38700 iteration

슬슬 오브젝트를 배우고 있다.

 

 

- 46000 iter

 

190900 iter

 

세번째 이미지 잘 안 된 것 처럼 보이지만, 그럴만한 이미지이다.

 

왜냐면 이렇게 생겼기 때문이다.

이게.. 뭘까?

반응형

댓글