YOLOv8 segmentation 안드로이드 -1

알로에·2023년 10월 11일
1

YOLOv8-Segmentation

목록 보기
1/6
post-thumbnail

YOLOv8 segmentation

YOLOv8 segmentation을 안드로이드에 적용해보자.

segmentation이 뭘까?

위 사진은 YOLOv8 공식 사이트에서 가져온 사진이다. 기존의 검출 방식과 다르게 바운딩 박스가 아니라, 객체의 윤곽 및 객체가 정확히 어디있는지 표현하는 방식이다.

segmentation은 크게 Semantic segmentation과 Instance segmentation로 구분 지을 수 있다.
차이점은 아래 사진을 통해 쉽게 알 수 있다.

https://nirmalamurali.medium.com/image-classification-vs-semantic-segmentation-vs-instance-segmentation-625c33a08d50
이곳에서 가져온 사진으로, 간단히 말해서 같은 클래스끼리도 구별할 수 있으면 Instance segmentation이라 한다.
YOLOv8에서는 Instance segmentation을 지원하므로 안드로이드에 적용할 모델은 전부 Instance segmentation이며 앞으로 segmentation이라 간단히 적을 예정이다.

이전에 안드로이드에 적용할 때 카메라로 부터 받아오는 데이터를 위해 cameraX 라이브러리를 이용해왔다. 그러나 위 태그를 보면 알 수 있듯이, 이번에는 OpenCV 라이브러리를 이용해서 카메라로 부터 데이터를 가져올 예정이다.

이유는 output에 대해서 resize나 blur 처리를 위해서 OpenCV 라이브러리를 이용해야 하기 때문이다. output으로 2~3차원 float array가 나오게 되는데, 이에 대해 보간법 처리나 blur 처리를 간단히 하기 위해서 사용했다.
OpenCV 라이브러리를 이용하다 보니 따라오게 되는 추가적인 장점이 있는데, 바로 NMS를 지원한다는 점이다. segmentation 또한 object detection 방식과 같이 후처리 과정을 해야 하는데, OpenCV에서 이 부분을 지원하니 추가로 코드를 적을 필요가 없게 된다.
기존의 OnnxRuntime 라이브러리를 이용해서 추론했을 때와 OpenCV의 Dnn 라이브러리를 이용했을 때 추론 속도 또한 큰 차이가 없어서 유용할 듯 하다.
물론 단점도 존재한다. OpenCV로 주로 사용하게 되는 Mat 객체는 직접 리소스를 해제해야 한다. 그렇지 않으면 많은 Mat 객체를 사용하다 보니 메모리를 많이 사용해서 강제적으로 앱이 종료된다.


이후 글 부터 구현 과정을 적을 예정이다.

0개의 댓글

관련 채용 정보