inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[개정판] 딥러닝 컴퓨터 비전 완벽 가이드

Kaggle Nucleus Segmentation Challenge 실습 - COCO 포맷으로 Annotation 변환하기

multi-class segmentation mask일 때 COCO format으로 변환하는 방법

912

blackjack_96

작성한 질문수 24

0

구글링을 해도 도저히 답을 못 찾겠어서 질문 드립니다.

지금 맡고 있는 프로젝트에서는, 총 4개의 class가 masking되어있는 이미지 형태로 annotation이 준비되어 있고 이걸 json annotation으로 만들어야 하는데 이럴 경우에는 어떻게 해야 하죠?

python 머신러닝 딥러닝 keras tensorflow 컴퓨터-비전

답변 1

1

권 철민

안녕하십니까,

지금 kaggle nucleus segmentation과 같이 mask가 png 파일로 되어 있고, kaggle nucleus 강의를 들으셔도 본인이 가지고 계시는 mask image를 어떻게 변환해야 할지 모르신다는 건지요?

여러개의 multi class mask 라도 이걸 json 포맷으로 만드는 것은 큰 차이가 없습니다. 강의 코드를 참조하셔서 변환을 하고 계시다면, 어떤 부분을 어떻게 변경하는데 잘 안된다거나등의 보다 상세한 내용을 적어 주셨으면 합니다.

감사합니다.

0

blackjack_96

넵 일단 제가 사용하고자 하는 이미지와 마스크 파일은 디렉토리 구조는 다음과 같이 되어 있습니다.

images

|-0001.jpg

|-0002.jpg

...

ann

|- 0001m.png

|-0002m.png

..

그리고 각 마스크 파일은 다음과 같이 되어 있습니다. 총 4개의 클래스로,

image위와 같이 마스크 파일이 되어 있는데,

공교롭게도 nucleus dataset은 클래스가 한 개 뿐이라 다음과 같이 모두 category_id를 0으로 지정하고 있습니다.

imageimage

위 데이터셋에서는 이 category_id를 처리하기 위해 어떻게 해야 하는지 궁금합니다.

1

권 철민

음, 이건 하나의 mask에 여러개의 object가 함께 들어가 있군요.

kaggle nucleus는 하나의 mask에 단 하나의 object만 들어가 있습니다. 그러니까

def get_annotation_info(mask_dir, mask_filename)

는 mask_filename 한개에 하나의 object만 segmentation을 뽑아내게 되어 있습니다. object가 100개면 mask file이 100개가 있습니다.

제 생각엔 사용하시는 데이터 세트는 pascal voc 데이터 세트와 비슷한 segmentation 같습니다.

아래와 같은 방법을 적용해 볼 수 있습니다.

  1. pascal voc와 같은 형태로 데이터 세트를 만드셔서 MMDetection의 이해와 Faster RCNN 적용 실습 - 02 섹션의 COCO 형태 BCCD 데이터 학습 - VOC 형태의 BCCD 데이터를 COCO 형태로 변환하기 영상을 참조하셔서 Coco dataset으로 변경하시거나

     

  2. 개별 mask 파일을 클래스 id값 별로 (즉 0값, 1값, 2값, 3값 별로) 다시 여러개의 mask 파일로 만듭니다. 즉 cv2.imread()로 로드한 array값이 0인것, 1인것, 2인것, 3인것 을 별도 4개의 mask 파일로 만든 후에 이들 파일에 get_annotation_info()를 적용합니다. 이때 개별 클래스값(즉 0, 1, 2, 3값)은 개별 mask별로 별도의 dataframe 등에 저장하셔서 해당 mask를 읽어 들일 때마다 category_id 값을 지정할 수 있도록 해줍니다.

    annotation = dict(segmentation=segmentation,

    area=bbox[2]*bbox[3] , iscrowd=0, bbox=bbox,
    category_id= 별도의 dataframe등에서 mask 파일별로 category_id 추출, image_id=image_id, id = obj_index)

0

blackjack_96

감사합니다. 일단 별도의 annotation없이 마스크 이미지만 존재하는 경우여서 두 번째 방법으로 한번 시도 해보겠습니다!

강의 환경설정 질문

0

43

2

Custom Dataset에서의 polygon 정보 관련

0

86

3

cvat.ai 보안 수준이 궁금합니다

0

81

2

캐클 nucleus 챌린지 runpod 실습 코드 에러 질문드립니다.

0

98

3

추론 결과의 Precision(또는 mAP) 평가 방법

0

86

2

mmdetection mask rcnn inferenct 실습 시 runpod 템플릿 관해서 질문드립니다.

0

61

2

runpod에서 google drive 연결 시 오류 발생

0

110

2

로드맵 선택

0

68

1

mmcv

0

60

2

Anchor box의 Positive 처리 위치

0

63

2

해당 강의 runpod 적용 후 에러 제보드립니다

0

87

2

run pod credit 관련 제보

0

101

2

mmdetection 2.x과 3.x 호환 관련 표기

0

79

2

mm_faster_rcnn_train_kitti.ipynb 실행 오류

0

101

3

질문 드립니다.

0

83

3

mm_faster_rcnn_train_coco_bccd 실행 오류 질문드립니다.

0

81

1

강사님께 수정을 제안드리고 싶은 것이 있습니다.

0

96

1

google automl efficientdet 다운로드 및 설치 오류

0

76

1

이상 탐지에 사용할 비전 기술 조언 부탁드립니다.

0

104

2

OpenCV 관련 질문드립니다.

0

74

2

mmcv 설치관련해서 문의드려요

0

335

3

강의 구성 관련해서 질문이 있습니다

1

139

2

모델 변환 성능 질문드립니다.

0

123

1

NMS 로직 문의 드려요

0

116

2