-
(object detection)YOLOv5 학습예제(마스크데이터셋)Machine Learning 2021. 6. 23. 09:46반응형
안녕하세요.
오늘 소개해드릴 학습예제는 Yolov5입니다.
유튜브를 보다가 빵형의 개발도상국을 운영하시는 분의 유튜브를 보고서 mask 데이터셋으로 실험을 했습니다.
www.youtube.com/channel/UC9PB9nKYqKEx_N3KM-JVTpg
Yolo는 You Only Look Once라는 이름으로 논문이 발표되었고,
One-Stage Object detetion 딥러닝 기법으로 기존에 FastRCNN보다 정말 빠른속도의 추론과정입니다.
20년 6월에 공개되었고, 기존 Yolo를 개발한 개발자와는 다른 개발자가 새로운 버전을 내놓았습니다.
Darknet으로 어렵게 구현하던 Yolo를 벗어나서 쉽게 접근을 할 수 있기 때문에 작성을 합니다.
학습을 하기 위해서는 colab을 사용하시길 추천드립니다.
데이터셋은
이쪽에서 공개된 vision dataset인 mask Dataset을 사용합니다.
다운로드 하실때 버전을 설정해서 다운로드 하실수 있으시니, 프로젝트를 하실땐 원하는 데이터셋을 구하시거나
라벨링을 Yolov5에 맞게끔 설정하시면 됩니다.
Colab 환경에서 진행합니다.
코랩은 리눅스 환경이기 때문에 리눅스의 명령어가 먹힙니다!!
데이터 다운로드
새로운 폴더에 다운로드를 받겠습니다.
%mkdir /content/yolov5_mask %cd /content/yolov5_mask/ !curl -L "https://public.roboflow.com/ds/eL4QUdkpSR?key=0ikL5WLM1w" > roboflow.zip; unzip roboflow.zip; rm roboflow.zip
Yolo v5 깃허브 다운로드
%cd /content !git clone https://github.com/ultralytics/yolov5.git
설정파일 설치
%cd /content/yolov5/ !pip install -r requirements.txt
데이터셋 위치 수정
여기서 주의! 데이터셋을 다운받을때, data.yaml이라는 파일도 같이 다운로드 됐습니다.
파일의 위치와 클래스명을 알려주는 설정파일이라서 꼭 수정해야합니다!
import yaml with open('/content/yolov5_mask/data.yaml', 'r') as f: data = yaml.load(f) print(data) data['train'] = '/content/yolov5_mask/' data['test'] = '/content/yolov5_mask/' data['val'] = '/content/yolov5_mask/' with open('/content/yolov5_mask/data.yaml', 'w') as f: yaml.dump(data, f) print(data)
yolov5 학습
%cd /content/yolov5/ !python train.py --img 416 --batch 16 --epochs 50 --data /content/yolov5_mask/data.yaml --cfg ./models/yolov5s.yaml --weights yolov5s.pt --name mask_yolov5s_results
학습하는 방법이 기존의 tensorflow랑 다릅니다.
이유는 대부분의 py파일 안에 들어가보면
이런식으로 밖에서 설정값을 던져주게끔 설정을 해놨기 때문입니다.
우리가 사용할 파라미터는
img size, batch size, epochs, data 위치, config 파일위치, 가중치파일, 저장될 파일이름입니다.
가중치 파일은 총 5개입니다.
우리는 가장작은 small 가중치 파일을 사용하구요, Defalt값도 small 가중치입니다.
학습이 다끝나면 TensorBoard를 사용할 수 있습니다.
%load_ext tensorboard %tensorboard --logdir /content/yolov5/runs/
학습이 된 가중치 파일들은
/content/yolov5/runs 경로안에 있습니다.
이미지 데이터로 학습결과 확인
%cd /content/yolov5/ from glob import glob img_list = glob('/content/yolov5_mask/test/images/*.jpg') print(len(img_list))
from IPython.display import Image import os val_img_path = img_list[1] weights_path = '/content/yolov5/runs/train/mask_yolov5s_results/weights/best.pt' !python detect.py --weights "{weights_path}" --img 416 --conf 0.5 --source "{val_img_path}" detect_img_path = '/content/yolov5/runs/detect/exp' Image(os.path.join(detect_img_path, os.path.basename(val_img_path)))
여기선 detect.py를 이용해서 detect를 진행합니다.
가중치나 path를 전달할때, "{}"를 이용하시면 변수값이 들어갑니다.
기존 yolo는 darknet이라서 사용하기 너무 힘들었는데,
Yolov5는 조금만 익숙해지면 너무 쉽네요!
여담이지만, StyleGan을 보니깐 detect된 이미지를 바운딩박스대로 잘라서 재학습을 시킨다던데..
다음에 도전해보겠습니다.
Colab url:
colab.research.google.com/drive/1UdkIa695gioUT83bazwcbDoE2-rgCEyI?usp=sharing
6월 23일 수정사항
보기 편하게 조금 수정했습니다.
데이터셋을 추가해서 정확도가 올라갔습니다.
동영상으로 테스트 가능하도록 설정해놨습니다.
반응형'Machine Learning' 카테고리의 다른 글
Llama 2 설명 및 ChatGPT를 활용한 논문 요약 (0) 2023.07.19 배치 크기(batch size)를 늘리는 방법 (0) 2023.04.04 사이킷런(sklearn)을 이용한 머신러닝 - 4 (분류) (0) 2021.03.13 사이킷런(sklearn)을 이용한 머신러닝 - 3 (군집,분류) (0) 2021.03.12 사이킷런(sklearn)을 이용한 머신러닝 - 2 (xgboost) (0) 2021.03.11