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. 커스텀 데이터 준비
- cvat
- 새로운 프로젝트 생성
- 라벨 정보 입력(이름과 색상 설정)
- 새로운 task 생성
- 이미지 업로드
- 이미지 데이터 경계상자 라벨링
- 라벨링 결과물 저장
- Menu-Export Job Dataset
- YOLO 1.1을 선택 후 YOLO 포멧으로 Export
- 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
'컴퓨터 비전' 카테고리의 다른 글
[컴퓨터 비전] VGG19을 활용한 균열 vs 정상 벽 분류하기 (0) | 2024.09.11 |
---|---|
[컴퓨터 비전] ResNet, DenseNet, EfficientNet을 활용한 재활용품 이미지 분류하기 (0) | 2024.09.09 |
[컴퓨터 비전] VGG19을 활용한 산타클로스 vs 일반인 분류하기 (0) | 2024.09.03 |
[컴퓨터 비전] AlexNet을 활용한 안경착용 vs 안경미착용 분류하기 (0) | 2024.08.28 |
[컴퓨터 비전] AlexNet을 활용한 깔끔한 방 vs 지저분한 방 분류하기 (0) | 2024.08.26 |