• 카테고리

    질문 & 답변
  • 세부 분야

    컴퓨터 비전

  • 해결 여부

    미해결

Mask R-CNN 추론결과 질문

22.07.19 16:26 작성 조회수 178

0

안녕하세요 강사님, 항상 좋은 강의 잘 듣고있습니다. 

 

mmdetection을 통해 Mask R-CNN을 구현하던 도중 문제점이 생겨 질문드립니다. 

 

Mask R-CNN 모델로 이미지를 추론한 결과 result를 binary 이미지로 저장하는 코드를 작성하였습니다. 

 

추론결과 아래와 같이 하나로 이루어진 Mask 정보를 반환받길 원합니다.

 

그러나 100번에 1번꼴로 아래 사진과 같은 masking result를 반환 받아서 데이터에 이상치가 발생합니다. 

segmentation 반환결과, 위와 같이 떨어진 픽셀영역을 마스킹하는 문제를 해결하는 방법이 있을까요? 

(해당 영역을 지워버리고 싶습니다) 

 

감사합니다

 

답변 1

답변을 작성해보세요.

0

안녕하십니까, 

mask결과를 opencv의 findcontours()를 이용하여 외곽선을 가지는 배열을 반환 받은 뒤 너무 작은 배열은 아예 마스킹에서 빼면 될 것 같습니다만,,, 

findcontours() 사용방법은 인터넷에서 검색하실 수 있습니다. 

감사합니다. 

윤도현님의 프로필

윤도현

질문자

2022.07.20

안녕하세요 강사님 바쁘신 와중에 친절한 답변 감사드립니다 :) 

 

말씀주신 findcontours() 함수의 반환값은 경계선을 이루는 point들의 배열로 알고있습니다.

강사님 말씀은 point들의 개수가 너무 적은 instance는 배제하라는 말씀이신가요?

만약 제가 이해한게 맞다면,

 

문제의 저 사진은 하나의 instance라서 힘들 것 같습니다.

저는 mmdetection Mask R-CNN 코드의 반환결과를 results라는 변수로 받아서 

각 Instance 마다 나오는 boolean 배열(True,False로 이루어진 이미지 크기의 배열)을 binary image로 저장했습니다. 

결과적으로 n번째 instance의 boolean 배열을 binary image로 저장한 결과가

위와 같이 하나의 instance임에도 불구하고 2개의 덩어리로 나타났습니다. 

제가 권장드린 방법은 개별 instance들을 다시 findcontours()로 수행을 해보시라는 애기 입니다. 

그럼 findcontours() 에서 외곽선이 떨어져 있는 형태를 각각 배열 형태로 반환할 것입니다. 그중에 특정 기준 이하로 작은 사이즈를 가진 배열을 없애버리면 어떨까 하는 의견 입니다.