명장 홈🤖 AI명장유튜브 AI 강좌를 함께 정리하고 함께 배우는 명장 플랫폼명장 게시판 홈요청하기
본문 태그 링크 끄기

YOLO26으로 컨베이어 벨트 오렌지 실시간 감지·추적·카운팅 만들기

AI with Muhammad Moin · 2026-11-05 · 유튜브 시청 106 · 게시판 조회 0 · 외국인

응용컴퓨터비전

유튜브 썸네일

난이도 응용#컴퓨터비전#객체추적#인스턴스분할#YOLO#OpenCV

← 목록

저자: AI with Muhammad Moin (외국인) · 원제: Real-Time Orange Counting on a Conveyor Belt with YOLO26

난이도 판정: Roboflow 라벨링, YOLO 학습, OpenCV와 Ultralytics 추적 코드를 직접 다루는 응용 튜토리얼입니다. 수식 유도는 없지만 mAP, 정밀도, 재현율 같은 지표와 추적 및 카운팅 로직을 이해해야 해서 입문보다 높은 응용 수준으로 판단했습니다.

요약

컨베이어 벨트 위 오렌지를 Roboflow로 라벨링하고 YOLOv8s 인스턴스 분할 모델을 학습한 뒤, ByteTrack으로 추적하며 가상 카운팅 라인을 통과하는 개수를 실시간으로 집계하는 과정을 단계별로 보여 줍니다. 데이터 준비, 학습 평가 지표 해석, 추론과 카운팅 코드 작성까지 다룹니다.

⏱ 00:001. 튜토리얼 개요와 목표

⏱ 00:00이 영상은 컨베이어 벨트 위를 지나가는 오렌지를 자동으로 감지하고 분할하며 추적해 개수를 세는 컴퓨터 비전 애플리케이션을 만드는 튜토리얼입니다. 각 오렌지에 고유 ID를 부여하고, 가상의 카운팅 라인을 통과할 때마다 합계를 실시간으로 갱신해 수동 계산 없이 정확하게 집계하는 것이 목표입니다.

⏱ 00:362. Roboflow 프로젝트 생성과 프레임 추출

⏱ 00:36Roboflow에서 새 프로젝트를 만들고 이름을 orange segmentation으로 정한 뒤, 작업 유형을 인스턴스 분할로 선택합니다. 입력 비디오를 업로드하면 약 171개의 프레임이 추출되며, 프레임 추출이 끝나면 원본 비디오는 더 이상 필요하지 않습니다. 계정 생성과 작업 공간 설정은 이전 영상에서 다룬 내용이라 여기서는 생략됩니다.

클래스 이름은 orange 하나로 지정합니다. 계정을 만들면 매달 10 크레딧이 제공되며, 이 크레딧으로 자동 라벨링이나 모델 학습을 진행할 수 있다고 설명합니다.

⏱ 02:413. SAM 3 자동 라벨링과 데이터셋 구성

⏱ 02:41추출한 이미지에 SAM 3 폴리곤 모델로 자동 라벨링을 실행합니다. 171장 전체 작업의 비용은 0.171 크레딧으로 안내되며, 완료까지 3~4분 정도 걸립니다. 결과 검토에서는 여러 프레임의 오렌지가 빠짐없이 폴리곤으로 주석 처리됐는지 확인하고, 이상이 없어 보여 모든 주석을 승인합니다.

데이터셋은 이미지의 70%를 학습용, 20%를 검증용, 10%를 테스트용으로 나눠 구성합니다. 단일 클래스이며 각 오렌지 주변에 폴리곤 주석을 그린 것이 인스턴스 분할 데이터의 핵심입니다.

⏱ 06:024. YOLOv8s 학습과 평가 지표 해석

⏱ 06:02커스텀 학습에서 YOLOv8s 모델을 선택하고 해당 데이터셋을 불러옵니다. 하이퍼파라미터는 에폭 수를 120에서 100으로 조정해 100 에폭으로 학습을 시작하며, 약 13분이 걸리고 0.42 크레딧이 차감된다고 안내합니다. 학습 데이터는 120장, 검증 데이터는 34장, 테스트 데이터는 17장입니다.

평가 결과 IoU 0.5 기준 mAP는 82.3%, IoU 0.5에서 0.95까지의 평균 mAP는 0.374로 확인됩니다. 최적 신뢰도 임계값은 0.28로 보았고, 이 지점에서 정밀도 85.3%, 재현율 79.2%, F1 점수 82.1%가 나왔습니다. 정밀도는 모델이 낸 감지 중 맞은 비율, 재현율은 실제 객체 중 찾아낸 비율이라고 쉽게 풀어 설명합니다. 테스트 세트 주석 1,133개 중 897개를 맞혔고, 236개는 놓쳤으며, 155개는 잘못 감지했습니다.

모델 보기 기능으로 임의의 테스트 이미지에 적용해 보고, 놓친 오렌지가 있으면 신뢰도 임계값을 낮춰 조정할 수 있다고 보여 줍니다. 손실이 계속 줄고 있어 에폭을 늘리면 성능이 더 오를 수 있다고 언급한 뒤 가중치 파일을 다운로드합니다.

⏱ 12:555. PyCharm 환경 설정과 패키지 설치

⏱ 12:55PyCharm에서 새 프로젝트를 만들고 가상 환경을 활성화한 뒤 필요한 패키지를 설치합니다. 필요한 패키지는 ultralytics 하나이며, requirements.txt에 적고 pip install -r 명령으로 설치하면 OpenCV, SciPy, Matplotlib 등 학습과 추론에 필요한 의존성이 함께 설치됩니다. 가중치 파일은 weights 폴더에, 입력 비디오는 프로젝트 폴더에 넣어 둡니다.

⏱ 16:576. 세그멘테이션 추론 확인

⏱ 16:57먼저 model.predict로 비디오에 세그멘테이션을 적용합니다. 신뢰도는 0.20, NMS IoU는 0.1로 설정해 겹치는 박스가 많이 남지 않도록 합니다. 로컬 PC에 GPU가 없어 CPU로 실행하므로 프레임 처리가 느리지만, 모든 오렌지가 분할되는 것을 확인할 수 있습니다.

⏱ 19:017. 추적과 카운팅 로직 구현

⏱ 19:01추적 및 카운팅 스크립트를 작성합니다. OpenCV로 비디오를 읽고 너비, 높이, FPS를 구해 결과 영상을 저장할 VideoWriter를 만듭니다. 가상의 카운팅 라인을 좌표로 정의하고, 선의 한쪽에서 다른 쪽으로 넘어가는 방향만 셀 수 있도록 방향을 판정하는 함수를 만듭니다. 이미 센 ID를 기록할 딕셔너리와 카운트 변수를 0으로 초기화합니다.

YOLO의 model.track에 ByteTrack을 사용해 각 오렌지에 고유 ID를 부여하고, 신뢰도 0.45 이상의 객체만 표시합니다. 중심점이 선을 넘으면 카운트를 올리고, 카운트된 객체는 녹색, 아직 통과하지 않은 객체는 빨간색 원으로 표시합니다. 화면 왼쪽 상단에 총 개수를 표시하고, 키 1을 누르면 루프가 종료되며, 마지막에 터미널에도 최종 개수를 출력합니다. 영상은 실행 중 화면에 보여 주면서 동시에 저장합니다. 마지막으로 스크립트를 실행했지만 오류가 발생해, 이를 고치는 과정으로 영상이 마무리됩니다.

난이도 응용#컴퓨터비전#객체추적#인스턴스분할#YOLO#OpenCV

← 목록으로
공유페이스북밴드

이 글에 대해 요청(숨김) 수정 요청