관리 메뉴

클라이언트/ 서버/ 엔지니어 "게임 개발자"를 향한 매일의 공부일지

CNN 11 - Image Segmentation 2 : YOLOv8을 이용한 이미지 분할 실습해보기 본문

인공지능/딥러닝

CNN 11 - Image Segmentation 2 : YOLOv8을 이용한 이미지 분할 실습해보기

huenuri 2024. 11. 1. 05:54

개념 학습을 어느 정도 했으니 이제 실습을 진행해보려고 한다.


 

 

 

YOLOv8을 이용한 Image Instance Segmentation 실습해 보기

 

1. 라이브러리 설치 및 알아두어야 할 사항들

 

YOLO뿐만 아니라 다양한 라이브러리를 사용할 수 있다.

 

 

 

 

모델 종류 확인 사이트

 

Segment

Master instance segmentation using YOLO11. Learn how to detect, segment and outline objects in images with detailed guides and examples.

docs.ultralytics.com

 

 

 

 

다음은 모델의 종류를 구분해 놓았다. 

 

 

 

이 표를 보면 모델의 크기가 작은 것부터 큰 것까지 밑으로 나열되어 있다.

아래쪽으로 갈수록 파라미터의 종류가 늘어나는 것을 확인할 수 있다. 모델의 크기가 커지면 속도도 떨어진다. 대신 정확성을 의미하는 mAP는 파라미터가 작은 것보다는 클수록 정확해진다. 우리는 모델의 크기가 가장 작은 모델인 YOLOv8n-seg를 사용해 볼 것이다. 나중에 컴퓨터 성능이 좋으면 큰 모델을 사용해도 괜찮다.

 

 

 

데이터셋 가이드 정보

 

Instance Segmentation Datasets Overview

Explore the supported dataset formats for Ultralytics YOLO and learn how to prepare and use datasets for training object segmentation models.

docs.ultralytics.com

 

 

 

 

YOLO 세그멘테이션의 경우 한 줄에 표시하도록 객체를 표현하면 된다. 앞의 숫자는 클래스에 대한 정보이고 뒤에는 좌표 정보이다.

 

 

 

 

세그멘테이션은 포토샵에서 누끼를 따는 것처럼 하나의 좌표 정보를 불러오는 것이다.


 

 

 

 

2. 모델 불러오고 예측 수행하기

 

 

예측의 경우 세 개의 매개변수를 적는데, source에는 URL 링크를 넣으면 된다. 이미지 저장을 하지 않으면 좌표 정보만 들어있다.

 

0.15는 15% 확률인데 만약 예측이 15%의 확률만 보여도 예측을 해주는 것이다. 이렇게 할 때 잘못된 예측을 보이는 경우도 많다. 만약 95%로 높이면 예측값이 낮아진다.

 

하지만 선생님 코드와 달리 예측 결과가 하나도 저장이 되지 않았다. 분명 같은 코드인데 말이다. 혹시 cv2 버전이 설치되어서 그런가 해서 여러 가지 코드를 실행했지만 여전히 해결되지 않는다.


 

 

안 되는 부분 해결하기

 

 

혹시 어제 컴퓨터 비전 시험을 볼 때 실습을 진행하며 cv2를 설치했는데 그것 때문인가 싶어서 라이브러리 버전을 확인하고 삭제해 주었다. 하지만 여전히 예측 이미지를 볼 수 없었다. 다시 코드를 이처럼 수정해 보았다.

 

 

 

 

 

이게 버스 원본 이미지이다. 다음과 같은 경로에 들어가면 이제 폴더가 생성된 것을 볼 수 있다. 조금 전까지만 해도 없었던 파일이다.

 

 

 

 

이 버스 이미지를 클릭하면 이제 예측이 제대로 되고 있는 모습을 볼 수 있다. 객체 위치와 영역별로 표시되어 있다. 그리고 어떤 객체인지 알려주고 예측 결과치도 출력된다. 만약 예측값을 40으로 올리면 어떻게 될까?

 

 

 

 

 

조금 전에는 스케이트 보드라고 예측했던 부분이 없어지는 것을 알 수 있다. 그리고 출력 결과를 바로 코랩 창에서 확인하려면 메플롯립으로 설정하면 된다.

 

 

 

 

 

 

openCV 색상 체제가 RGB가 반대로 되어 있기에 바꾸는 코드가 cvtColor이다. 어제 시험 문제에도 나왔던 문제이다.

 

 

 

 

 

 

 

 

 

 

색깔을 칠해준 부분의 정보도 이렇게 확인 가능하다.

 


 

 

 

학습을 마치고

이번 시간 실습은 잘 안 되는 부분이 많아서 많이 힘들었지만 그래도 끝까지 포기하지 않고 코드를 수정해 나갔더니 30분 넘게 걸려 마침내 해결되었다. 안 그랬더라면 5시 반 안에 학습을 끝냈을 것 같지만 어쨌든 이런 시간을 통해 많은 것들을 배웠다.

이제 6시가 다 되어서 일정을 정리하고 수학 공부를 할지 아니면 수업 한 시간을 듣고 어제처럼 버스 안에서 수학 공부를 할지 고민이 된다. 그래도 남은 수업을 더 들으며 이미지 분할 실습을 마무리하는 게 더 나을 것 같다.