일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 파이썬
- 멋쟁이사자처럼
- Python
- 프로그래머스
- 면접전형
- 페이지네이션
- EC2
- spring-boot
- 파이썬 #백준 #BFS
- 절차지향
- S3
- yolov5
- 피로그래밍
- jQuery
- 합격후기
- AWS
- 서류전형
- 솝트
- CRUD
- 사물인식
- MongoDB
- nodejs
- 백준
- 멋사
- 카카오
- objectdetection
- 솝트 후기
- 인공지능
- Java
- jwt
- Today
- Total
찔끔찔끔씩😎
[Yolov5] 자율주행 데이터 사물인식 실습 본문
roboflow에서 제공하는 Udacity Self Driving Car Dataset 을 이용하였고,
Colab 환경에서 진행하였다.
모든 이미지 파일들은 라벨링이 되어있는 상태이다.
1. roboflow에서 제공하는 images 받아오기
roboflow에서 원하는 데이터를 선택한뒤 Yolo v5 PyTorch로 Export 시킨다.
# roboflow에서 제공하는 images 받아오기
!curl -L "https://public.roboflow.com/ds/0Q4TDaIgXT?key=v8qXdebOxZ" > roboflow.zip; unzip roboflow.zip; rm roboflow.zip
2. yolo v5 clone 해오기
# yolov5 clone 해오기
%cd /content
!git clone https://github.com/ultralytics/yolov5.git
3. 필요한 라이브러리들을 install 해준다.
%cd /content/yolov5/
!pip install -r requirements.txt
4. data.yaml 파일을 확인해보자
아래 코드 입력전에, dataset 이라는 이름의 폴더를 만들고 클론받은 것들을 옮겨주자.
%cat /content/dataset/data.yaml
[ 출력 ]
train: ../train/images
val: ../valid/images
해야할 일
1) train, val 경로를 재설정하기.
2) train, test 데이터를 나눠주기.
5. 앞서서 이미지가 잘 불어와 지는지, glob을 사용하여 확인해보자
%cd /
from glob import glob
img_list = glob('/content/dataset/export/images/*.jpg')
print(len(img_list))
6. train, test data 나누기
train_test_split 을 사용할 거고 이의 형태는 다음과 같다.
train_test_split(data, target, test_size=0.2, shuffle=True, stratify=target, random_state=34)
- test_size: 테스트 셋의 비율
- test_size= 0.2: 전체의 20%를 테스트 셋으로 지정
- shuffle: split 이전에 섞어줄 것인지 여부
- default = True
- stratify: classification 시에 매우 중요한 옵션값이다. 한쪽에 쏠려서 분배되는 것을 방지
- default = None
- random_state: 세트를 섞을 때 int값을 보고 섞으며, 하이퍼 파라미터를 튜닝시 이 값을 고정해두고 튜닝해야 매번 데이터셋이 변경되는 것을 방지할 수 있다.
# train, test data 나누기
from sklearn.model_selection import train_test_split
train_img_list, val_img_list = train_test_split(img_list, test_size=0.2, random_state=2000)
print(len(train_img_list), len(val_img_list))
7. 두 img를 txt 파일로 저장해준다.
리스트로 되어있는 넘을 join을 사용하여 txt 파일로 저장해준다.
with open('/content/dataset/train.txt', 'w') as f: # write
f.write('\n'.join(train_img_list) + '\n')
with open('/content/dataset/val.txt', 'w') as f: # write
f.write('\n'.join(val_img_list) + '\n')
8. yaml 파일에서 train, val의 위치를 7.에서 만든 txt로 변경해준다.
import yaml
with open('/content/dataset/data.yaml', 'r') as f: #read
data = yaml.safe_load(f) # 문자열 -> 파이썬데이터로
print(data)
data['train'] = '/content/dataset/train.txt'
data['val'] = '/content/dataset/val.txt'
with open('/content/dataset/data.yaml', 'w') as f: #write
yaml.dump(data, f) # 파이썬데이터 -> yaml 형태로
print(data)
[ 출력 ]
{'train': '../train/images', 'val': '../valid/images', 'nc': 11, 'names': ['biker', 'car', 'pedestrian', 'trafficLight', 'trafficLight-Green', 'trafficLight-GreenLeft', 'trafficLight-Red', 'trafficLight-RedLeft', 'trafficLight-Yellow', 'trafficLight-YellowLeft', 'truck']}
{'train': '/content/dataset/train.txt', 'val': '/content/dataset/val.txt', 'nc': 11, 'names': ['biker', 'car', 'pedestrian', 'trafficLight', 'trafficLight-Green', 'trafficLight-GreenLeft', 'trafficLight-Red', 'trafficLight-RedLeft', 'trafficLight-Yellow', 'trafficLight-YellowLeft', 'truck']}
9. 학습 시키기
시간 상 epocs 를 10으로 설정하여 학습을 진행했다.
%cd /content/yolov5/
!python train.py --img 416 --batch 16 --epochs 10 --data /content/dataset/data.yaml --cfg ./models/yolov5s.yaml --weights yolov5s.pt --name self_driving_car_yolov5_result
결과
1. 텐서보드로 결과 확인하기
%load_ext tensorboard
%tensorboard --logdir /content/yolov5/runs/
코드로 확인하지 않아도 results.png로 저장되어있을 것이다!
2. 나누어 둔 테스트 데이터로 결과 확인하기
아래 코드에선 나누어둔 val_img_list 중 5번째 이미지로 테스트 해본 결과이다.
from IPython.display import Image
import os
val_img_path = val_img_list[5]
!python detect.py --weights /content/yolov5/runs/train/self_driving_car_yolov5_result2/weights/best.pt --img 416 --conf 0.5 --source "{val_img_path}"
Image(os.path.join('/content/yolov5/inference/output', os.path.basename(val_img_path)))
'Study > 인공지능' 카테고리의 다른 글
[인공지능] Supervised Learning, Unsupervised Learning (0) | 2022.06.05 |
---|---|
[인공지능] 인공지능 개론 (0) | 2022.06.01 |
[Yolov5] Yolo를 이용한 Object Detection (0) | 2022.05.16 |
[CNN] 합성곱 신경망 (Convolutional Neural Network) (0) | 2022.05.16 |