[ YoloV5 사용 방법 및 공부 ] 간단 사용 방법 정리 - Whitmem
[ YoloV5 사용 방법 및 공부 ] 간단 사용 방법 정리
AI Development Study
2023-12-31 22:32 게시 fa0447618270e21358b3

0
0
100
이 페이지는 외부 공간에 무단 복제할 수 없으며 오직 있는 그대로 게시되며 부정확한 내용을 포함할 수 있습니다. 법률이 허용하는 한 가이드 라인에 맞춰 게시 내용을 인용하거나 출처로 표기할 수 있습니다.
This page is not to be distributed to external services; it is provided as is and may contain inaccuracies.
다운로드
YoloV5 라이브러리는 github 사이트에 게시된 레포지토리에서 내려받을 수 있으며 zip 형태로 내려받거나, git clone 을 통해서 라이브러리를 로컬에 다운로드받을 수 있는 듯 합니다.
학습 자료 구조
기본적으로 객체 탐지는 어떤 한 이미지에 대해서 특정 객체의 좌표를 담고 있는 레이블 정보가 쌍으로 구성되어 있으며, Yolo 에서는 하나의 image.png 또는 jpg 에 대해서 txt로 대응되어 있습니다.
디렉터리 구조
예를 들어 train 이라는 디렉터리를 하나 만들고, 그 안에 필수적으로 Images, Labels 라는 디렉터리를 만들어야 합니다. 각 디렉터리 안에는 파일 명을 동일하게 구성하고 하나의 이미지에 대해서 각 클래스 정보가 담겨 있는 txt 파일을 Labels 디렉터리에 담습니다.
레이블 txt 자료에는 다음과 같은 형태로 데이터가 기록되어 있습니다.
클래스번호 x y 너비 높이 0 0.3 0.4 0.3 0.3 1 0.3 0.4 0.3 0.3 2 0.3 0.4 0.3 0.3 3 0.3 0.4 0.3 0.3
클래스 번호는 특정 이미지안에 무슨 객체인지에 대한 가르키는 숫자적 정보를 의미합니다. 만약 본인이 학습할 객체가 총 합쳐서 "물고기, 육고기" 2개라면 클래스 번호는 총 2개가 되며, 0, 1을 의미할 수 있습니다. 0이 물고기인지 1이 물고기인지에 대해서, 그러한 이미지 위치를 가르키는 명시 작업을 해줘야하는데 이는 yml에서 수행할 수 있습니다.
train: train/images val: val/images test: test/images nc: 2 names: ['fish','animals']
data.yml 에서는 train 의 images 위치, val 의 images 위치, test의 images 위치를 지정 해 줍니다. 한편 nc는 클래스의 개수를, names에는 각 클래스의 이름들을 배열로 정의 합니다.
결과적으로 학습 데이터 구조는 다음과 같은 형태로 구성됩니다.
학습자료 구조
학습 수행
상기 데이터 준비가 완료되었으면 학습할 준비는 완료되었습니다. yolov5는 편리하게도 직접 코드를 구성해서 학습할 필요 없이 이미 만들어진 학습 도구들로 학습을 수행할 수 있습니다. yolov5 디렉터리 내부에 존재하는 train.py 파일에 몇 가지 인자를 줌으로써 학습을 수행할 수 있습니다.
YoloV5를 실행할 수 있는 가상환경에서 train.py 를 실행할 때 아래 인자 값을 참고하여 학습을 수행합니다.
python train.py --data "data.yml 위치" --weights yolov5s.pt --epochs 10 --batch-size 2 --img-size 128
위 명렁어는 data.yml 의 데이터를 기본 모델 yolov5s 모델 위에 학습을 수행함을 의미합니다. 각 이미지를 배치사이즈 2만큼씩, 에폭은 10번 수행하는 명령어입니다. 이렇게 학습을 하면 learning rate 및 각종 하이퍼 파라메터는 기본 값으로 수행합니다. 하이퍼 파라메터 자료는 yolov5 의 기본 디렉터리의 data 폴더 내 hyps 폴더에 여러 샘플들이 존재하는데, 내부 값들을 수정하고 학습할 때 아래와 같은 인자를 추가함으로써 특정 하이퍼파라메터를 적용할 수 있습니다.
hyp.yml 예시 ... lr0: 0.01 # initial learning rate (SGD=1E-2, Adam=1E-3) hsv_h: 0.015 # image HSV-Hue augmentation (fraction) hsv_s: 0.7 # image HSV-Saturation augmentation (fraction) hsv_v: 0.4 # image HSV-Value augmentation (fraction) degrees: 0.0 # image rotation (+/- deg) translate: 0.1 # image translation (+/- fraction) scale: 0.9 # image scale (+/- gain) shear: 0.0 # image shear (+/- deg) perspective: 0.0 # image perspective (+/- fraction), range 0-0.001 flipud: 0.0 # image flip up-down (probability) fliplr: 0.5 # image flip left-right (probability) mosaic: 1.0 # image mosaic (probability) mixup: 0.1 # image mixup (probability) ...
python train.py --data "data.yml 위치" --weights yolov5s.pt --epochs 10 --batch-size 2 --img-size 128 --hyp "hyp.yml 위치"
학습을 수행하면, yolov5 디렉터리의 runs 내 train 디렉터리 내에 exp<번호> 순으로 기록되고, 학습된 가중치는 내부 디렉터리의 last.pt 및 best.pt 로 저장됩니다. best.pt는 제일 성능 점수가 높았던 가중치, last.pt는 마지막 에폭의 가중치를 의미합니다. 이 가중치는 나중에 predict 할 때 사용할 수 있습니다. 현재 학습된 정도를 시각적으로 확인하려면 해당 디렉터리 안에 PR 곡선 파일 자료들을 확인하면 됩니다.
결과 추론 (코드)
이렇게 만들어진 가중치 .pt 를 활용해서 특정 이미지의 객체 탐지를 수행할 수 있습니다.
먼저 torch를 로드하고, yolov5 메인 디렉터리가 존재하는 위치와 .pt 경로가 존재하는 위치를 지정하여 모델을 로드합니다.
import torch model = torch.hub.load("./yolov5-master", "custom", "./best.pt", source='local' ) model.conf = 0.5 result = model( ["이미지1.png", "이미지2.png"])
그리고 모델 결과에 추론될 최소 confidence 값을 지정 해주고, 특정 이미지를 배열로 넣어 추론을 수행하고, 그 결과를 확인 합니다.
result.pandas().xywh[0]
0번째 이미지에 대한 결과
result.pandas().xywh[1]
1번째 이미지에 대한 결과
댓글 0개
댓글은 일회용 패스워드가 발급되며 사이트 이용 약관에 동의로 간주됩니다.
확인
Whitmemit 개인 일지 블로그는 개인이 운영하는 정보 공유 공간으로 사용자의 민감한 개인 정보를 직접 요구하거나 요청하지 않습니다. 기본적인 사이트 방문시 처리되는 처리 정보에 대해서는 '사이트 처리 방침'을 참고하십시오. 추가적인 기능의 제공을 위하여 쿠키 정보를 사용하고 있습니다. Whitmemit 에서 처리하는 정보는 식별 용도로 사용되며 기타 글꼴 및 폰트 라이브러리에서 쿠키 정보를 사용할 수 있습니다.
이 자료는 모두 필수 자료로 간주되며, 사이트 이용을 하거나, 탐색하는 경우 동의로 간주합니다.