본문 바로가기
AIML 분야/Segmentation

[2021.02.24 연구일지] COCO Stuff에서 HRNet V2 + OCR 돌리기

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

방금 LIP dataset으로 HRNet V2 + OCR을 돌리고 오는 길이다.

 

coco panoptic은 저번에 panoptic-deeplab 돌려야해서 써봤는데 stuff는 써본 적이 없다.

아래 링크를 그냥 읽고 따라하기만 해도 될 것 같아서 한번 둘러보면서 쓰는 글.

 

github.com/nightrome/cocostuff

 

nightrome/cocostuff

The official homepage of the COCO-Stuff dataset. Contribute to nightrome/cocostuff development by creating an account on GitHub.

github.com

 

 

용량은 18GB 정도로 크게 부담은 없다.

 

 

0-182, 중간에 빠지는 번호가 있어 총 172개의 클래스가 있다.

각 클래스의 이름과 예시 이미지는 github.com/nightrome/cocostuff/blob/master/labels.md 에서 확인할 수 있다.

 

annotation 파일도 다운받아봤는데, 아래처럼 grayscale 이미지로 되어있다.

0~182 쓰여있는 그대로 grayscale 이미지가 되어있는 것이며, 학습할때는 편하도록 비는 값이 없도록 번호를 당겨서 label 이미지를 만든다.

완전히 흰색 부분은 ignore_label 처리가 된 부분이다. label 이미지 불러올 때 255값 그대로 둔다.

 

생각보다 매우 간단하다!

 


 

 

그런데 json에서 jpg 이미지로 변환하는 부분도 같이 봐야할 것 같다.

COCO에서는 detection, instance segmentation에 사용하는 json 포맷도 있다.

segment[] 안에 각 픽셀 정보를 다 넣는데, 이게 너무 길어서 RLE 압축을 하는 포맷도 있다고 한다.

 

그냥 깃허브에서 다운받으면 상관 없긴 한데, 지금 이래저래 포맷 문제가 있어서.

 

github.com/nightrome/cocostuffapi/tree/master/PythonAPI/cocostuff      

여기서 확인하면 된다.

 

 

python API 사용.

일단 git clone하고 setup하고, 아래 코드 돌렸다. annotations/stuffexamples.json 사용해서.

github.com/nightrome/cocostuffapi/blob/master/PythonAPI/cocostuff/cocoSegmentationToPngDemo.py  

그런데 데모용이라 그런지 RGB값으로 나온다. 컬러링하는 규칙이 따로 있는건가?

원래 coco stuff에서는 grayscale로 나왔는데. 음...

 

 

 

아무튼 HRNetV2+OCR를 LIP 말고 COCO Stuff에서 돌려보려고 오늘 시도했는데, 퇴근 전에 성공해서 다행이다.

굉장히 괴로운 버그를 많이 마주했다.

 

어이없는 결과였는데, reduce_zero_label 때문에 label 처리가 잘 안되어서 발생하는 버그였다.

255가 ignore label인데, 저 함수에서 모든 label을 255-1해서 뜬금없이 254가 나와버리니 class개수가 맞지 않아 발생하는 문제였던 것이다.

일단은 이걸 주석 처리를 했다. 이게 맞는 것 같다. 다른 데이터셋 코드에서도 이 함수를 사용하지 않았으며 오직 COCO stuff에서만 썼다.

내가 다운받은 데이터셋이 COCO Stuff 가장 최신버전이지만, 논문에서는 COCO Stuff 10k (이전버전) 기준이기 때문이다.

GT 이미지에 0값이 없어서 그런가? 구버전 어노테이션은 안봐서 모르겠다.

 

여담이지만 이걸 돌리려면 list 파일 새로 정의해야한다.

 

 

  • 어제 발생한 전력 문제가 OCR 코드 문제인지 장비문제인지 고민했었는데, 결론은 코드 문제가 맞았다.
    다른 컴퓨터에서도 실험해봤는데 동일한 문제가 발생했다.
    1초단위 모니터링 결과, 10% 미만의 확률로 주기적으로 원래 사용하던 평균 전력의 2배만큼 잠깐씩 늘어났다.
  • ohem loss 쓰는 순간 메모리에 무서운 일이 발생한다. 전력이 초과될수 있으니 주의.

 

전력 초과가 무서워 일단 실험을 종료한다.

 

이로써 일단 실험 셋팅은 대략 이정도 완료되었다고 보면 된다.

 

Semantic Segmentation 해본 것

  • Model: HRNetV2, HRNet V2+OCR
  • Dataset: LIP, COCO Stuff
  • json -> (segmentation map) image file converter 돌려보기
    단, 링크로 걸려있는걸 돌려보니 grayscale의 Index image가 아니라 PNG Demo (컬러) 이미지로 나온다.
    여기서 뭘 좀 바꾸면 가능하지 않을까?

active learning도 해야하는데 생각보다 semantic segmentation에서 많은 시간을 썼다. ㅠㅠ 얼른 실험 보러가야지...

파일 압축하는데 시간이 너무 오래 걸려서 기다리기 포기. 그냥 얜 차라리 다시 다운받아 셋팅하기로 하자.

반응형

댓글