본문 바로가기
AI 도구

Ultralytics YOLO v8: 누구나 손쉽게 할 수 있는 컴퓨터 비전 작업 솔루션

by James AI Explorer 2024. 3. 22.
    728x90

    안녕하세요! 오늘은 다양한 컴퓨터 비전 작업을 지원하는 AI 프레임워크인 Ultralytics YOLO에 대해서 알아보겠습니다. YOLO는 이미지나 비디오에서 객체의 인식과 분류, 세분화, 객체 추적, 포즈 추정 등과 같은 다양한 비전 작업 수행이 가능한 솔루션입니다.  이 블로그에서는 Ultralytics YOLO 개요와 기능에 대해 알아보고, 이미지와 비디오에서의 객체인식 및 보행자 동선추적, 실시간 차량속도 추정, 교통 흐름 분석 예제를 살펴보겠습니다. 

    Ultralytics YOLO v8: 누구나 할 수 있는 컴퓨터 비전 AI 작업

    https://github.com/ultralytics/ultralytics

     

    GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite

    NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite - ultralytics/ultralytics

    github.com

    "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

    Ultralytics YOLO 개요

    Ultralytics YOLO는 객체 감지와 이미지 세분화를 위한 최신 딥 러닝 모델인 YOLO v8을 기반으로 한 솔루션입니다. YOLO v8는 You Only Look Once라는 개념에 기반하여 이미지를 한 번만 처리하여 객체를 감지하는 방법론을 사용합니다. 이를 통해 속도와 정확성 면에서 우수한 성능을 제공하고, 다양한 하드웨어 플랫폼에서 컴퓨터 비전 애플리케이션을 사용할 수 있도록 지원합니다.

     

    Ultralytics YOLO v8는 다음과 같은 다양한 컴퓨터 비전 작업을 지원합니다.

    • 객체 감지 (Detection): 이미지 또는 비디오 프레임에서 객체를 감지하고 해당 객체 주위에 경계 상자를 그리는 작업입니다. YOLO v8는 단일 이미지나 비디오 프레임에서 여러 객체를 높은 정확도와 속도로 감지할 수 있습니다.
    • 영역 세분화 (Segmentation): 이미지를 여러 영역으로 분할하여 각 영역에 적절한 레이블을 할당하는 작업입니다. 이를 통해 이미지의 콘텐츠를 구체적으로 이해할 수 있습니다. YOLO v8는 U-Net 아키텍처의 변형을 사용하여 세분화 작업을 수행합니다.
    • 카테고리 분류 (Classification): 이미지를 여러 카테고리로 분류하는 작업입니다. YOLO v8을 사용하여 콘텐츠에 따라 이미지를 분류할 수 있습니다. 이를 위해 EfficientNet 아키텍처의 변형이 사용됩니다.
    • 포즈 추정 (Pose Estimation): 이미지나 비디오 프레임에서 특정 포인트를 감지하여 움직임을 추적하거나 포즈를 추정하는 작업입니다. YOLO v8는 높은 정확도와 속도로 키포인트를 감지하여 포즈 추정 작업을 수행할 수 있습니다.
    • 방향성 객체 감지 (Oriented Bounding Box Detection): 객체 감지를 더욱 정확하게 수행하기 위해 회전된 객체를 감지하는 작업입니다. 이를 통해 객체의 방향성을 고려하여 더욱 정확한 감지가 가능합니다.

    또한 이 솔루션은 간소화된 디자인을 통해 사용자가 다양한 애플리케이션에서 쉽게 적용할 수 있도록 하여, 엣지 디바이스에서부터 클라우드 API까지 다양한 환경에서 사용할 수 있습니다. Ultralytics YOLO의 특징은 다음과 같습니다 

    • 고성능 및 속도: YOLO v8는 높은 정확성과 빠른 속도를 동시에 제공합니다. 객체 감지 및 이미지 분할 작업을 빠르게 처리하여 실시간 응용 프로그램 및 대량 데이터 처리에 적합합니다.
    • 다목적성: Ultralytics YOLO는 객체 감지, 이미지 분할, 분류, 포즈 추정 등 다양한 컴퓨터 비전 작업을 지원합니다. 이러한 다양성은 다양한 응용 분야 및 사용 사례에 유연하게 대응할 수 있도록 합니다.
    • 사용자 친화적: Ultralytics YOLO는 사용자가 손쉽게 모델을 학습하고 적용할 수 있도록 설계되었습니다. CLI(Command Line Interface)를 통해 간편한 모델 학습 및 예측이 가능하며, 노코드 솔루션을 통해 더욱 간편하게 사용할 수 있습니다.
    • 효율적인 모델 관리: 학습된 모델은 Ultralytics HUB에 저장되어 모델 관리 및 추적이 용이합니다. 사용자는 다양한 모델을 한 곳에서 손쉽게 관리할 수 있습니다.
    • 클라우드 및 엣지 기기 지원: 학습된 모델은 다양한 형식으로 내보낼 수 있어 클라우드 서비스 및 엣지 기기에서 쉽게 배포할 수 있습니다. 이를 통해 다양한 환경에서 모델을 적용할 수 있습니다.
    • 실시간 모델 미리 보기: 모델 학습 후에는 Ultralytics HUB 앱을 사용하여 실시간으로 모델의 성능을 모바일 기기에서 확인할 수 있습니다. 이를 통해 모델을 효과적으로 평가하고 조정할 수 있습니다.
    • 공개 데이터셋 및 모델 공유: Ultralytics HUB는 다양한 공개 데이터셋과 사전 학습된 모델을 제공하여 사용자들이 쉽게 시작할 수 있도록 지원합니다.

    이러한 특징들은 Ultralytics YOLO를 강력한 컴퓨터 비전 솔루션으로 만들어주며, 자율 주행 자동차, 보안 시스템, 의료 이미지 분석, 로봇 항법, 산업 자동화 등 다양한 비전 AI 작업에 활용할 수 있습니다.

    728x90

    주요 기능 예제

    다음은 Ultralytics YOLO의 주요 기능 예제를 알아보겠습니다. 이 블로그에서 사용한 예제코드의 실행환경은 Windows 11 Pro(23H2),  파이썬 버전 3.11, 코드 에디터는 비주얼 스튜디오 코드(이하 VSC)이며, 예제는 이미지 객체인식, 동영상 객체 추적, 실시간 차량속도 추정 및 교통 트래픽 분석의 총 4가지입니다. 

    이미지 객체인식

    먼저 이미지 객체인식 기능 예제입니다. VSC를 실행하여 "WSL에 연결"을 통해 Windows Subsystem for Linux(WSL)을 사용하여 Linux 환경에 액세스 하도록 구성합니다. Torch와 같은 딥 러닝 프레임워크와 CUDA (Compute Unified Device Architecture)를 사용하여 모델을 GPU에 로드하고 그래픽 드라이버를 다루는 프로그램은 호환성이 까다롭기 때문에 윈도우 보다는 Linux 환경을 추천합니다. 

     

    의존성 라이브러리 설치는 가상환경이 활성화된 상태에서 아래 명령어를 통해 실행하시면 됩니다. 

    pip install ultralytics

     

    라이브러리 설치가 완료되면 이미지의 객체를 인식하기 위해 VSC의 WSL 명령어 프롬프트 상태에서 아래와 같이 yolo predict 명령을 실행하면 웹 이미지에서 객체를 감지하고 경계 상자 (bounding box)를 그리게 됩니다. 

    yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'

     

    위 코드는 Ultralytics YOLOv8의 명령줄 인터페이스를 사용하여 주어진 이미지에서 객체를 감지하고 해당 객체 주위에 경계 상자를 그리는 작업을 실행하는 것입니다. 

    • `yolo predict`: 이 명령은 YOLOv8의 명령줄 인터페이스를 실행하고, 객체를 예측하는 작업을 수행합니다. -
    • `model=yolov8n.pt`: 이 부분은 사용할 `yolov8n.pt` 모델의 경로를 지정합니다. 
    • `source='https://ultralytics.com/images/bus.jpg'`: 이 부분은 객체를 감지할 이미지의 소스를 지정합니다. 여기서는 웹상에 있는 이미지인 'https://ultralytics.com/images/bus.jpg'를 사용하고 있습니다. 

    따라서 이 코드는 지정된 YOLO v8 모델을 사용하여 주어진 이미지에서 객체를 감지하고, 발견된 객체 주위에 경계 상자를 그리는 작업을 수행합니다.

    이미지 객체인식 예제코드 실행화면

    위 코드의 실행 결과는 YOLOv8 모델을 사용하여 이미지에서 객체를 감지한 후의 정보를 제공합니다. 결과는 다음과 같은 내용을 포함하고 있습니다:

    • Ultralytics YOLO 버전 및 환경 정보: 코드가 실행되는 Ultralytics YOLO의 버전 및 환경 정보가 표시됩니다. 이는 어떤 버전의 Ultralytics YOLO가 사용되었는지와 해당 환경의 세부 정보를 알려줍니다.
    • YOLOv8n 모델 요약: 사용된 YOLOv8n 모델의 요약 정보가 표시됩니다. 이는 모델의 레이어 수, 파라미터 수, 그래디언트 수, GFLOPs(플로팅 포인트 연산 수) 등의 정보를 보여줍니다.
    • 이미지 정보: 분석된 이미지의 정보가 제공됩니다. 해당 이미지에는 사람 4명, 버스 1대, 정지 신호 1개가 감지되었다는 내용이 표시됩니다. 또한 이미지의 해상도와 처리 속도 등의 정보도 함께 제공됩니다.
    • 처리 시간 정보: 이미지 처리 시간에 대한 정보가 제공됩니다. 이미지 전처리, 추론, 후처리에 소요된 시간이 각각 표시되며, 해당 이미지에 대한 전체 처리 시간도 보여줍니다.
    • 결과 저장 경로: 객체 감지 결과가 저장된 경로가 제공됩니다. 여기에서는 결과가 "runs/detect/predict" 경로에 저장되었다고 나타냅니다. 경계상자에 나타나는 숫자는 해당 객체가 존재할 확률입니다. 

    객체 인식 테스트 소스 이미지(좌), 객체 인식 경계상자 출력 이미지(우)

    동영상 객체 추적

    다음은 동영상 객체 추적예제입니다.  먼저 VSC의 WSL 명령어 프롬프트 상태에서 git clone 명령으로 아래와 같이 깃허브 레포지토리를 로컬로 복제해서 가져옵니다. 

    git clone https://github.com/roboflow/supervision.git
    cd supervision/examples/tracking

    깃허브 레포지토리 로컬 복제

    레포지토리 복제가 완료되면 supervision/examples/tracking 디렉토리로 이동하여, 가상환경이 활성화된 상태에서 아래의 pip install 명령어를 실행하고, 아래 표의 입력비디오를 다운로드하여 해당 디렉토리에 input.mp4로 저장한 후, 예제코드를 실행합니다. 예제코드는 YOLOv8 모델을 사용하여 입력 비디오 파일에서 객체를 감지하고, 추적한 후에 추적 결과가 포함된 비디오 파일을 생성합니다.

    pip install -r requirements.txt
    python ultralytics_example.py \
    --source_weights_path yolov8s.pt \
    --source_video_path input.mp4 \
    --target_video_path tracking_result.mp4

     

    코드를 실행하면 진행바가 나타나고 처리가 완료되면 아래 동영상과 같이 움직이는 선수들과 공 객체를 추적하는 경계상자가 표시되는 tracking_result.mp4 동영상이 생성됩니다.  

    동영상 객체 추적 예제 실행화면

    동영상 객체 추적 입력 비디오
    동영상 객체 추적 결과 비디오

     

     

    히트맵(Heatmap) 표시

    히트맵(heatmap)은 데이터의 밀도를 시각적으로 나타내는 그래픽 기법 중 하나입니다. 일반적으로 히트맵은 특정 지역 또는 지점에서 발생하는 사건의 빈도나 집중도를 보여줍니다. VSC의 가상환경이 활성화 된 WSL 명령어 프롬프트 상태에서 supervision/examples/heatmap_and_track 디렉토리로 이동하여, "pip install -r requirements.txt" 명령어를 실행합니다. 혹시 해당 디렉토리에 yolov8s.pt 모델파일이 없으면 tracking 디렉토리에서 복사해서 가져옵니다.

    python script.py \
    --source_weights_path yolov8s.pt \
    --source_video_path  input_video.mp4 \
    --confidence_threshold 0.3 \
    --iou_threshold 0.5 \
    --target_video_path  output_video.mp4

     

    예제코드를 실행하기 전 아래 표의 위쪽 동영상을 다운로드해서 input_video.mp4로 저장하고, 예제 코드를 실행하면 output_video.mp4가 생성되고, 영상에서 사람들이 오래 머무르는 곳은 빨간색으로 히트맵이 표시됩니다. 

    히트맵(Hearmap) 표시 입력 비디오
    히트맵(Hearmap) 표시 출력 비디오

    실시간 차량속도 추정

    다음은 실시간 차량속도 추정 예제입니다. 먼저, VSC의 가상환경이 활성화된 WSL 명령어 프롬프트 상태에서 supervision/examples/speed_estimation 디렉토리로 이동하여 아래 화면과 같이 video_downloader.py를 실행해서 차량속도를 추정할 vehicles.mp4 소스비디오를 data 디렉토리로 다운로드합니다. 

    차량속도 추정 소스비디오 다운로드

    입력비디오 다운로드가 끝나면  "pip install -r requirements.txt" 명령어를 실행한 후, 아래의 예제코드를 실행합니다.  

    python ultralytics_example.py \
    --source_video_path data/vehicles.mp4 \
    --target_video_path data/vehicles-result.mp4 \
    --confidence_threshold 0.3 \
    --iou_threshold 0.5

     

    위 코드에서 --confidence_threshold 0.3 옵션은 객체를 감지하는 데 필요한 최소 신뢰도(확률) 임계값을 설정합니다. 즉, 모델이 감지한 객체의 신뢰도가 이 임계값 0.3보다 낮은 경우, 해당 객체는 무시됩니다. --iou_threshold 0.5 옵션은 겹치는 경계 상자를 제거하는 기술인 Non-Maximum Suppression (NMS)을 수행하는 데 사용되는 Intersection over Union (IoU) 임계값을 설정합니다. IoU 임계값은 겹치는 경계 상자들을 병합하기 위한 기준으로 사용됩니다. 여기서는 0.5의 IoU 임계값을 사용하여 겹치는 경계 상자를 병합합니다.

     

    예제코드를 실행하면 처리가 진행되는 동안 실시간으로 차량의 추정속도가 표시되는 동영상이 재생됩니다. 

    실시간 차량속도 추정 소스비디오
    실시간 차량속도 추정 화면

    교통 트래픽 분석

    다음은 교통 트래픽 분석예제입니다. 먼저 "pip install gdown" 명령어로 Google Drive에서 파일을 다운로드하기 위한 패키지를 설치한 후, 아래 명령어를 실행하여 분석할 비디오 파일 "traffic_analysis.mov"과 딥러닝 모델의 학습된 가중치를 저장하는 PyTorch 모델 파일 "traffic_analysis.pt"를 다운로드합니다. 

    pip install gdown
    
    # Download the traffic_analysis.mov file from Google Drive
    gdown -O "./data/traffic_analysis.mov" "https://drive.google.com/uc?id=1qadBd7lgpediafCpL_yedGjQPk-FLK-W"
    
    # Download the traffic_analysis.pt file from Google Drive
    gdown -O "./data/traffic_analysis.pt" "https://drive.google.com/uc?id=1y-IfToCjRXa3ZdC1JpnKRopC7mcQW-5z"

     

    다운로드가 완료되면 아래 예제코드를 복사하여  VSC의 가상환경이 활성화된 WSL 명령어 프롬프트 상태에서 붙여 넣습니다. --confidence_threshold와 --iou_threshold 0.5 옵션은 이전 예제와 동일합니다. 

    python ultralytics_example.py \
    --source_weights_path data/traffic_analysis.pt \
    --source_video_path data/traffic_analysis.mov \
    --confidence_threshold 0.3 \
    --iou_threshold 0.5 \
    --target_video_path data/traffic_analysis_result.mov

     

    예제코드의 결과 동영상을 보면 어느 방향에서 진입한 차량의 트래픽이 얼마나 정체되는지 색구분을 통해 알 수 있습니다. 

    트래픽 분석 입력 비디오
    트래픽 분석 출력 비디오

    "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

    맺음말

    오늘은 Ultralytics YOLO에 대한 개요와 주요 기능을 살펴보았습니다. Ultralytics YOLO는 객체 감지와 이미지 세분화를 위한 최신 딥 러닝 모델인 YOLO v8을 기반으로 하며, 다양한 컴퓨터 비전 작업을 지원합니다. 이를 통해 이미지와 비디오에서 객체의 인식과 분류, 세분화, 객체 추적, 포즈 추정 등과 같은 다양한 작업을 수행할 수 있습니다.

     

    예제코드에서는 이미지 객체 인식, 동영상 객체 추적, 히트맵 표시, 실시간 차량 속도 추정, 교통 트래픽 분석 예제들을 통해 Ultralytics YOLO가 어떻게 다양한 비전 AI 작업에 활용될 수 있는지를 알아보았습니다. Ultralytics YOLO의 컴퓨터 비전 AI 작업은 자율 주행 자동차, 보안 시스템, 의료 이미지 분석, 로봇 항법, 산업 자동화 등 다양한 분야에서 활용될 수 있을 것으로 보입니다. 

     

    오늘 내용은 여기까지입니다. 그럼 저는 다음 시간에 더 유익한 정보를 가지고 다시 찾아뵙겠습니다. 감사합니다. 

     

    2024.03.21 - [AI 논문 분석] - MM1: 애플의 새로운 멀티모달 언어 모델

     

    MM1: 애플의 새로운 멀티모달 언어 모델

    안녕하세요! 오늘은 최근 애플에서 공개한 MM1이라는 이미지-투-텍스트, 멀티모달 언어 모델(Multimodal Language Model, MMLM)에 대해서 알아보겠습니다. MM1은 이미지 캡셔닝, 이미지에 대한 질문에 답하

    fornewchallenge.tistory.com

     

    https://fornewchallenge.tistory.com/

    "이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

     

     

     

    728x90