인공지능05

서유리·2022년 7월 29일
0

AI_Study

목록 보기
5/25
post-thumbnail

🔴 공부할 영상 및 링크주소

🟢 YOLO ver_5 학습 튜토리얼 (1)
◾ 준비사항

  • Yolo 데이터 셋 형태 (선행 지식)
  • Yolo v5 커스텀 데이터셋 학습 (득템 가능 지식)
  • Colab (필요한 아이템)

🟢 YOLO ver_5 학습 튜토리얼 (2-1)
◾ 데이터-셋
(1) roboflow 사이트 접속
https://public.roboflow.com/
(2) Object detection 클릭

(3) Pistols Dataset > 2973 images 클릭

(4) Format에서 YOLO v5 PyTorch 선택 > show download code 클릭 > continue

(5) "GPU를 사용할 수 있도록 환경 변경하기" 구글로 로그인 후 colab 접속 > 위 상단 메뉴에서 런타임 > 런타임 유형변경 > 노트설정: 하드웨어 가속기를 GPU 선택 > 저장

🟢 YOLO ver_5 학습 튜토리얼 (2-2)
◾ (1) 코드 작성 : 파일 압축풀기

# 파일 압축 풀기
!curl -L "https://public.roboflow.ai/ds/WKkUorQ71T?key=wIBAdyawPa" > roboflow.zip; unzip roboflow.zip; rm roboflow.zip

🟢 YOLO ver_5 학습 튜토리얼 (2-3)
◾ (2) images & labels 확인

  • 왼쪽에 export > images를 클릭하면 권총 이미지를 확인할 수 있다
  • 왼쪽에 export > labels를 클릭하면 권총 이미지에 대한 레이블을 확인 할 수 있다
  • 레이블은 class x y width height로 값이 지정되어 있다

🟢 YOLO ver_5 학습 튜토리얼 (2-4)
◾ (3) 왼쪽 폴더 창에서 dataset 폴더 생성 > export 폴더, REASME.dataset, REASME.roboflow, data.yaml 파일 옮기기

🟢 YOLO ver_5 학습 튜토리얼 (2-5)
◾ (4) YOLO ver_5를 깃 클론에서 받는다

# git clone에서 yolov5를 받는다
%cd /content
!git clone https://github.com/ultralytics/yolov5.git
  • yolov5 폴더가 생성된 것을 확인할 수 있다

🟢 YOLO ver_5 학습 튜토리얼 (2-6)
◾ (5) yolov5를 위한 패키지 설치하기

# yolov5 디렉토리로 이동
%cd /content/yolov5/
# yolov5를 위한 패키지 설치하기
!pip install -r requirements.txt

🟢 YOLO ver_5 학습 튜토리얼 (2-7)
◾ (6) 데이터 셋 yaml 파일 확인

# 데이터 셋 (data.yaml)이 어떤 것을 포함하고 있는지 확인
%cat /content/dataset/data.yaml
# nc = class의 개수
# names = class의 이름
# train & val & nc & names를 지정해줘야 하는데, 경로가 잘못 되어있어 수정이 필요하다

🟢 YOLO ver_5 학습 튜토리얼 (2-8)
◾ (7) 이미지 장수 확인

# 디렉토리를 루트로 변경
%cd /
# glob 패키지 import 하기
from glob import glob
# 모든 이미지를 가져오기
img_list = glob('/content/dataset/export/images/*.jpg')
# 이미지는 총 2971장
print(len(img_list))

🟢 YOLO ver_5 학습 튜토리얼 (2-9)
◾ (8) train & val 나누기 & 개수 확인

# train & val 나누기 위해 모듈 import
from sklearn.model_selection import train_test_split
# train_test_split() --> trainset(80%) & testset(20%)로 나눈다
train_img_list, val_img_list = train_test_split(img_list, test_size=0.2, random_state=2000)
# train_img_list(2376) & val_img_list(595) 개수 출력
print(len(train_img_list), len(val_img_list))

🟢 YOLO ver_5 학습 튜토리얼 (2-10)
◾ (9) train_img & val_img의 경로를 txt 파일로 저장

# train_img의 경로를 txt 파일로 저장
with open('/content/dataset/train.txt', 'w') as f:
  f.write('\n'.join(train_img_list) + '\n') # 리스트로 되어 있으니 join 하기
# val_img의 경로를 txt 파일로 저장
with open('/content/dataset/val.txt', 'w') as f:
  f.write('\n'.join(val_img_list) + '\n')

🟢 YOLO ver_5 학습 튜토리얼 (2-11)
◾ (10) train & val 이미지 경로 변경

# yaml 모듈 import
import yaml
# 아래의 파일을 오픈해서 읽어주기
with open('/content/dataset/data.yaml', 'r') as f:
  data = yaml.safe_load(f) # load로 하면 에러발생하여 safe_load로 작성함
print(data)
data['train'] = '/content/dataset/train.txt'
data['val'] = '/content/dataset/val.txt'
with open('/content/dataset/data.yaml', 'w') as f:
  yaml.dump(data, f)
print(data)
# 원래는 train/images 였는데, content/dataset/train.txt로 변경됨
# 원래는 val/images 였는데, content/dataset/val.txt로 변경됨

🟢 YOLO ver_5 학습 튜토리얼 (2-13)
◾ (12) 이미지 training(훈련)

# yolov5 설치한 곳으로 가기
%cd /content/yolov5/
# train 시켰던 파일로 가서 실행
# img = 416 사이즈, batch = 16, epochs = 50번 
# cfg 모델의 구조를 나타냄 (위치 : yolo5 > models > yolov5l-가장큼/yolov5m-중간크기/yolov5s-작음/yolov5x-가장작음)
!python train.py --img 416 --batch 16 --epochs 50 --data /content/dataset/data.yaml --cfg ./models/yolov5s.yaml --weights yolov5s.pt --name gun_yolov5s_results
  • yolo5 > runs > gun_yolov5s_results > test_batch0_pred.jpg를 클릭
  • test_batch의 예측데이터 이미지를 볼 수 있다

🟢 YOLO ver_5 학습 튜토리얼 (2-14)
◾ (13) 텐서보드로 학습 결과 보기

# 텐서보드로 학습 결과 보기
%load_ext tensorboard
%tensorboard --logdir /content/yolov5/runs/
  • 텐서보드 학습 결과 확인 (그래프)

🟢 YOLO ver_5 학습 튜토리얼 (2-15)
◾ (14) 테스트 데이터로 추론하기

# 테스트 데이터로 추론하기
from IPython.display import Image
import os
val_img_path = val_img_list[4]
!python detect.py --weights /content/yolov5/runs/exp0_gun_yolov5s_results/weights/best_gun_yolov5s_results.pt --img 416 --conf 0.5 --source "{val_img_path}"
Image(os.path.join('/content/yolov5/inference/output', os.path.basename(val_img_path)))
profile
best of best

0개의 댓글