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
세번째 이미지 잘 안 된 것 처럼 보이지만, 그럴만한 이미지이다.
왜냐면 이렇게 생겼기 때문이다.
이게.. 뭘까?
'AIML 분야 > Segmentation' 카테고리의 다른 글
Segmentation Evaluation Metrics (0) | 2021.02.16 |
---|---|
[Semantic Segmentation 조사 1] FastFCN 리뷰 (0) | 2021.02.16 |
[연구노트] Semantic Segmentation 살펴보기 (0) | 2021.02.15 |
panoptic-deeplab 코드 리뷰 (0) | 2021.02.04 |
Panoptic Segmentation COCO dataset 살펴보기 (0) | 2021.02.03 |
댓글