Programming/영상처리

[e4ds] Quest2 - YOLOv8를 이용한 아몬드(Almond)인식 및 카운팅

변화의 물결1 2023. 10. 23. 00:50

 

 

안녕하세요.

 

 e4ds에서 진행한 YOLOv8 프로젝트 두 번째 Quest를 진행해 보았습니다.

조금 열심히 해서 여러 기능을 넣어 보려고 했는데, 그렇게 까지는 못하고 전반적으로 접해보고, 기능을 추가하는 것으로 마무리하였습니다.

  AI 기능이 발전하는 것은 좋은데 새로운 것이 나오면 개발환경이 바뀌다 보니 기존에 개발하던 소스들이 작동하지 않는 경우가 많아서 조금 아쉬운 부분이 있었습니다. 


1. 프로그램 설명

 - Custom Data Set을 만들어 컨베이어 벨트처럼 지나가는 물체를 카운트하는 프로그램

 - 현재는 아몬드(Almond)를 YOLOv8의 학습데이터로 삼아 Object Detection을 수행

 - 프로그램 소스를 간단하게 하기 위해서 Supervision 라이브러리를 사용과 Tracker 성능 향상을 위해  ByteTracker 옵션 선택

 

 

2. 데이터셋 만들기

1) 디텍션 하고자 하는 이미지 촬영

- 학습용 데이터를 만들기 위해서 아몬드를 흰 종이에 놓고 사진 찍기 시작

 - 데이터가 많이 있으면 좋다는 것을 알지만, 많으면 많을수록 Annotation 수작업에서 시간이 오래 걸리기 때문에  39개 정도 사진 촬영

 

  - 아몬드를 수량과 배치를 무작위로 해서 촬영

  

 2) Anotation 작업 진행

 - Annotation 해주는 프로그램 중에서 웹에서 제공해 주는 roboflow 사이트를 사용해서 작업 진행

 - Data Detect로 새로운 프로젝트를 만들고 촬영한 사진을 올린 후 사진마다 Naming 작업 진행

 

- Annotation 된 이미지를 확인

 

 - Train, Valid, Test로 비율로 데이터 분류 진행

 

 - 이미지는 임의적으로 Train, Valid, Test로 분류됨

 

3. 데이터셋 학습시키기

 - roboflow에서 작업이 완료 후 Dataset 형태로 내려받아 Google Colaboratory에서 데이터 학습 진행

 

 - 데이터가 많지 않아서 epoch 횟수를 80으로 해주었습니다. roboflow에서 먼저 테스트했을 때 횟수가 70~80번일 때 mAP 값이 거의 1 되어서 선택

 - Test 폴더의 있는 이미지로 확인해 보면 Detection을 잘하고 있다고 확인

 

4. 작업환경

 1) 하드웨어

 - 소형 IP Camera (RTSP 통신)

 - Desktop PC (i5 시리즈)

 

2) 소프트웨어

  - PyCharm

  - Google Colab

  - YOLOv8, Supervision

 

3) 촬영방법

- 컨베이어 벨트처럼 하기 위해서 A4 용지를 연결해서 움직임 연출

 - 소형 IP Camera를 상단에 두고 아래로 촬영(Vision 카메라처럼 설치)

 

6. 동작 영상

 - 아몬드가 Detection 되고, 아몬드가 왼쪽에서 오른쪽으로 이동하면서 기준선에 넘어가면 in 숫자가 증가하고 오른쪽에서 왼쪽으로 이동하면 out 숫자가 증가

 

7. 참여 후기

  - 웹 세미나와 YOLOv8 소스 제공해 주셔서 YOLO에 대해서 전반적으로 알 수 있는 좋은 기회라고 생각되었습니다.

 

 - YOLOv8을 사용하기 위해서 공개된 자료를 참고해서 직접 학습데이터부터 디텍션까지 해보자는 생각으로 진행해 보았습니다. 다음에도 원하는 물체가 있다면 조금 더 변경해서 다른 물체 디텍션과 다르게 적용할 수 있다고 생각되었습니다.

 

 - YOLO가 CPU 자원으로 실행되다 보니 영상이 끊기는 현상이 발생하는데, GPU 버전으로 작동하는 것과 겹쳐서 인식되는 부분 등 발생하는 문제에서는 학습데이터 부족과 여러 크기로 학습 테스트를 진행하지 못한 것이 아쉬움으로 남습니다.

 

 - 유튜브에서 알려주는 YOLOv8, Supervision, OpenCV 등 각종 라이브러리들을 설치해 사용할 경우 버전이 업데이트되면서 호환이 되지 않거나 함수명 혹은 인자가 변화로 프로그램 작성에 약간에 어려움이 있었습니다. 그렇기 때문에 개발 시에는 가상환경을 생성 혹은 Docker를 사용해서 최적을 버전으로 세팅하고 작업해야 다음 작업에서도 동일한 작동을 한다는 것을 경험하였습니다.

 

감사합니다.

 

<참고 사이트>

1. YOLOv8 NATIVE TRACKING

https://github.com/SkalskiP/yolov8-native-tracking

2. Explore the Roboflow Universe

https://universe.roboflow.com/

 

 

반응형