컴퓨터 비전

[컴퓨터 비전] YOLO

Uno_says 2024. 10. 2. 20:02
728x90

1. 객체 탐지(Object Detection)

  • 컴퓨터 비전과 이미지 처리와 관련된 컴퓨터 기술로써, 디지털 이미지와 비디오로 특정한 계열의 시멘틱 객체 인스턴스를 감지하는 일
  • 보행자 검출, 동물 사물 검출 등이 포함

 

2. 컴퓨터 비전의 Task 비교

  • Image classification: 이미지에 있는 객체 범주 목록 생성
  • Single-Object Localization: 이미지에 있는 객체 범주의 한 인스턴스의 위치와 배율을 나타내는 Bounding Box를 생성
  • Object Detection: 각 객체 범주의 모든 인스턴스의 위치와 배율을 나타내는 경계 상자와 함께 이미지에 있는 객체 목록을 생성

 

3. One-Stage 모델

  • Resion Proposal과 Detection이 한 번에 수행
  • YOLO(You Only Look Once): 2015년 제안된 객체 검출 모델로 이미지 전체를 단일 그리드로 나누고, 각 그리드 셀마다 여러 개의 바운딩 박스와 클래스를 예측하는 방식

 

4. YOLO(You Only Look Once)

  • 이미지 분류, 객체 탐지, 인스턴스 분할 작업에 사용할 수 있는 모델
  • 초기버전(1~4)에서는 Redmond가 작성한 커스텀 프레임워크인 Darknet에서 유지
  • Ultralytics에서 YOLO3 레포를 PyTorch로 작성하여 출시(YOLOv5)
  • 유연한 Python 구조 덕분에 YOLOv5는 SOTA 레포가 되었음
  • Ultralytics는 2023sus 1월에 YOLOv8을 출시
  • 아키텍처
 

아키텍처 요약

Ultralytics 에서 강력한 YOLOv5 아키텍처에 대해 자세히 알아보고 모델 구조, 데이터 증강 기술, 학습 전략 및 손실 계산을 살펴보세요.

docs.ultralytics.com

 

 

5. PascalVOC 2007 데이터셋

  • 분류와 객체 검출을 위해 만들어진 데이터셋
  • 총 20개의 클래스를 가지고 있음
    • Person: person
    • Animal: bird, cat, cow, dog, horse, sheep
    • Vehicle: aeroplane, bicycle, boat, bus, car, motorbike, train
    • Indoor: bottle, chair, dining table, potted plant, sofa, tv/monitor

 

6. YOLO 실습

  • PascalVOC 2007 데이터셋
    • train: 2501장, val: 2510장
    • test: 4952장
    • 학습 데이터가 너무 적어서 train과 val 합쳐서 학습시킨 후, 테스트 데이터를 검증 데이터셋, 직접 만들어서 사용

 

 

 

 

📌 디렉토리 구조

 

  • xml에서 (XMin, YMin, XMax, YMax)을 YOLO 모델에서 사용하기 위해 포멧 변경이 필요
  • YOLO 형식: 클래스번호 X의 Center좌표, Y의 Center 좌표 너비 높이

 

 

7. names 파일

  • 머신러닝, 딥러닝 모델이 데이터셋 내의 클래스를 인식하고 구분할 수 있도록 클래스 이름을 정의한 파일 형식
  • YOLO와 같은 유명한 객체 탐지 알고리즘을 구현하는데 제공

  • !python3 example.py: example.py 스크립트를 실행한다.
  • --datasets VOC: 데이터셋 유형을 지정한다. 여기서는 Pascal VOC 데이터셋을 변환 대상으로 지정한다.
  • --img_path: 변환할 이미지 파일들이 저장된 경로를 지정한다.
  • --labels: 이미지에 대한 어노테이션 파일들이 저장된 경로를 지정한다.
  • --convert_output_path: 변환된 YOLO 형식의 라벨 파일들을 저장할 경로를 지정한다.
  • --img_type ".jpg": 변환할 이미지 파일의 확장자를 지정한다.
  • --manifest_path: 변환 과정에서 생성되는 매니페스트 파일의 경로를 지정한다.
  • --cls_list_file: 클래스 이름들이 나열된 파일을 지정한다.

-> 이 명령은 Pascal VOC 데이터셋의 trainval, test 데이터를 YOLO 형식으로 변환한다. 이미지와 어노테이션 파일을 읽어들여 YOLO 형식의 라벨 파일로 변환하고, 지정된 디렉토리에 저장한다. 이 과정에서 클래스 이름 리스트(voc.names)를 찾조하여 올바른 형식으로 변환한다.

 

 

8. PascalVOC 제공 파일로 train, val 라벨 분할

  • /content/pascal_datasets/trainval/VOCdevkit/VOC2007/ImageSets/Main/val.txt 파일을 읽어서 /content/pascal_datasets/VOC/labels/train2007 파일 중 txt문서에 있는 파일이름을 /content/pascal_datasets/VOC/labels/val2007 옮기기

 

9. VOC/labels에 맞게 images 분할

  • /content/pascal_datasets/trainval/VOCdevkit/VOC2007/JPEGImages/content/pascal_datasets/test/VOCdevkit/VOC2007/JPEGImages 에서 이미지를 가져와 디렉토리에 맞게 저장 

 

 

10. 커스텀 데이터 준비

  1. cvat
  2. 새로운 프로젝트 생성
  3. 라벨 정보 입력(이름과 색상 설정)
  4. 새로운 task 생성
  5. 이미지 업로드
  6. 이미지 데이터 경계상자 라벨링
  7. 라벨링 결과물 저장
  8. Menu-Export Job Dataset
  9. YOLO 1.1을 선택 후 YOLO 포멧으로 Export
  10. Requests에서 다운로드

 

11. YOLO 모델 불러오기

 

 

12. WanDB를 이용한 학습 및 평가 과정 로깅

  • WanDB
  • 머신러닝/딥러닝 개발자들을 위한 종합적인 보조 도구
  • 딥러닝 모델 학습할 때 학습 과정에 대해 로깅을 진행
  • 손실값의 감소하는 형태를 쉽게 파악할 수 있음
  • 팀 단위로 실험 결과를 추적할 수 있도록 해주기 때문에 웹에서 편리하게 분석이 가능 

 

 

13. 실험의 재현성 보장

 

 

14. data.yaml 파일

  • custom_voc.yaml: Pascalvoc2007 데이터 명시 파일
  • custom_dataset.yaml: 직접 라벨링한 태스크 데이터 명시 파일
  • 파일 경로: /content/yolo5/data/

 

15. YOLOv5 가중치 파일

  • yolov5s.pt: 가장 작은 버전으로 경량화된 모델이며 작은 크기의 객체를 감지하거나 시스템 리소스가 제한된 환경에서 사용
  • yolo5m.pt: 중간 크기의 모델로 기본적인 객체 탐지와 분류에 적합
  • yolo5l.pt: 큰 모델로 더 높은 정확도를 제공. 크기가 큰 객체나 복잡한 시나리오에 유용
  • yolo5x.pt: 가장 큰 모델로 가장 높은 정확도를 목표로 함

훈련 완료됨

 

 

16. mAP(mean Average Precision)

  • Precision(정밀도): 모델이 검출한 객체 중에서 실제로 객체인 비율
    • True Positive(TP): 올바르게 검출한 객체
    • False Positive(FP): 잘못 검출한 객체
  • Recall(재현율): 실제 객체 중에서 모델이 올바르게 검출한 비율
    • False Negative(FN): 검출하지 못한 객체
  • Average Precision(AP)
    • Precision과 Recall의 관계를 나타내는 Recision-Recall 곡선의 아래 면적(Area Under Curve)을 계산하여 얻음
  • mean Average Precision(mAP)
    • 다양한 객체 클래스에 대해 AP를 평균한 값
    • 예) 클래스 1: AP=0.75, 클래스 2: AP=0.85, 클래스 3: AP=0.8 -> mAP = (0.75+0.85+0.8)/3 = 0.8
    • 모델이 다양한 객체 클래스를 얼마나 잘 검출하고 있는지를 종합적으로 평가할 수 있는 중요한 지표 8 객체 검출 모델의 성능을 비교할 때 많이 사용 -> mAP값이 높을수록 모델의 검출 성능이 좋다는 것을 의미 
728x90