inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

opencv DNN을 이용하여 Mask RCNN Inference 수행 - Inference 수행 후 Mask 결과 시각화

질문드립니다!!

194

hgene0929

작성한 질문수 12

0

안녕하십니까,

이게 opencv에서 한번에 가능한 함수가 있는지 잘 모르겠군요.

제 생각에 이렇게 하시면 될것 같은데 테스트는 해보지 않았습니다.

먼저 segmentation inference 결과인 mask 이미지 array가 있을 때

mask_array = inference_segentation결과 반환 array

해당 mask_array에서 값이 0 이상인 위치 인덱스를 뽑아내서 non_zero_indexes에 저장합니다.

non_zero_indexes = np.where(mask_array > 0 )

다음에 원본 이미지 array를 org_img_array라고 하면 원본 이미지의 해당 non_zero_indexes 위치에 있는 원소값을 모두 0으로 만듭니다.

org_img_array[non_zero_indexes] = 0

이렇게 하면 원본 이미지에서 segmentation mask결과 영역만 검은색으로 표시됩니다.

이제 덮어 씌우려는 새로운 이미지를 해당 영역만 제외하고 나머지 영역은 mask를 적용하듯이 모두 0으로 만듭니다. 이렇게 만든 새로운 이미지를 new_img_array라고 하겠습니다.

그런 다음 opencv의 add() 연산을 이용하여 org_img_array와 new_img_array를 더하면 원하시는 이미지가 만들어 질것 같습니다.

added_new_img_array = cv2.add(org_img, array, new_img_array)

감사합니다.

에 관한 질문입니다!!

안녕하세요 선생님 너무 감사하게도 친절한 답변을 남겨주신 덕분에 실습을 잘 진행하고 있는 학생입니다.

다름이 아니라 알려주신 코드로 실습을 진행하는 와중에 궁금한 점이 생겨 질문드립니다.

위에서 봐주신 코드를 제가 이해하기론

mask_array = inference_segentation결과 반환 array

=> mask_array = s_mask_b (object 를 감지한 결과를 원본 이미지만큼 scale out 한 배열)

non_zero_indexes = np.where(mask_array > 0 )

=> non_zero_indexes = np.where(mask_array > 0 ) (mask 배열값 중 object라고 인지한 인덱스의 배열)

org_img_array[non_zero_indexes] = 0

=> draw_img = img.copy()

draw_img[non_zero_indexes] (원본 이미지를 복사한 배열 중 object라고 인지한 인덱스의 배열을 0으로 만듦)

가 맞나요?

 

머신러닝 배워볼래요? keras 딥러닝 컴퓨터-비전 tensorflow python

답변 1

0

권 철민

네, 지난번에 적어드린 코드가 pseudo code긴 한데, 이해하신 부분이 대부분 맞습니다.

그리고 mask_array = s_mask_b

를 object 를 감지한 결과를 원본 이미지만큼 scale out 한 배열이라고 적어주셨는데 mask_array는 scale out한 배열은 아닙니다.

mask_array는 원본 이미지의 사이즈와 크기가 동일한 array입니다. 다만 원본 이미지는 3차원이지만 mask_array는 2차원 입니다. MMDetection을 이용한 Mask RCNN Inference 실습 - Masking inference 반환 결과 분석 강의 영상을 다시 보시면 mask inferece 결과값이 어떻게 되는지 확인 하실 수 있습니다.

그리고 non_zero_indexes = np.where(mask_array > 0 )를 하게 되면 tuple 값이 반환되는데 detect 된 object의 instance segmentation 행과 열의 좌표값을 가지게 됩니다. 그래서 원본 이미지에 해당 instance segmentation 영역을 검은색(0값)으로 표시하려면

non_zero_indexes = np.where(mask_array > 0 )

draw_img = img.copy()

draw_img[non_zero_indexes[0], non_zero_indexs[1], :] = 0 하시면 됩니다.

 

 

MMDetection 버전 이슈

0

58

2

강의 환경설정 질문

0

65

2

Custom Dataset에서의 polygon 정보 관련

0

114

3

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

0

100

2

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

0

120

3

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

0

97

2

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

0

71

2

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

0

128

2

로드맵 선택

0

74

1

mmcv

0

66

2

Anchor box의 Positive 처리 위치

0

71

2

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

0

97

2

run pod credit 관련 제보

0

128

2

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

0

89

2

mm_faster_rcnn_train_kitti.ipynb 실행 오류

0

115

3

질문 드립니다.

0

89

3

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

0

90

1

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

0

103

1

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

0

87

1

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

0

113

2

OpenCV 관련 질문드립니다.

0

88

2

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

0

360

3

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

1

141

2

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

0

129

1