yolo를 이용한 지정차로 분류

이재상·2023년 12월 13일
0

yolo를 이용한 지정차로 분류를 해보고 있는데 지금 까지의 과정을 간단하게 정리해보겠다.


순서는 데이터수집(aihub)-데이터전처리(labelimg)-yolo모델 이용해서 학습 순서 이다.

1. 데이터 수집


데이터 수집은 aihub에 있는 데이터셋을 이용했다.

aihub데이터셋


  • 일단 데이터는 aihib에 있는 차종/연식/번호판 이미지를 이용해서 만들었다.
  • 여기에는 세단과 suv,버스,트럭등이 분류되어서 있어서 내가 찾는 데이터에 부합하여서 사용하였다.

2. 데이터 전처리


  • 데이터 전처리는 labelimg를 이용해서 전처리를 하였다.
  • 일단 처음은 가볍게 실험 형식으로train:600장,validation:300장 정도만 라벨링을 해보았다.
    • 세단과 suv를 어떻게 인식시킬까 고민하다가 전면 그릴 높이가 다른걸 잡아도 되지만 차의 전체적인 높이 즉 차의 바닥면에서 부터 천장까지의 길이가 다른점을 이용하면 yolo가 어느정도 인식을 하지 않을까? 라는 희망으로 이렇게 해보았다.


  • 일단 먼저 승용차 사진을 이용해서 위반여부만 잡도록 만들어 보았다.
    • 나중에 버스랑 트럭 ,suv도 yaml파일을 만들어서 합쳐볼 예정이다.

3. yolo 학습


yaml 파일을 먼저 생성해보았다.

import yaml

data = {
    "train" : 'ijaesang/train/',
        "val" : 'ijaesang/validation/',
        "names" : {0 : '위반', 1 : '정상'}}

with open('yolo.yaml', 'w') as f :
    yaml.dump(data, f)

# check written file
with open('yolo.yaml', 'r') as f :
    lines = yaml.safe_load(f)
    print(lines)

이코드를 작동하면 yaml파일이 작성이된다.

names:
  0: "\uC704\uBC18"
  1: "\uC815\uC0C1"
train: ijaesang/Documents/train/
val: ijaesang/Documents/validation/

이렇게 나오게 되고 yaml파일을 이용해서 yolo에 커스텀 학습을 해준다.

import torch
from ultralytics import YOLO
device = torch.device("mps")
model = YOLO('yolov8n.pt') # 어떤 모델의 객체를 생성한 뒤
model.train(data='/Users/ijaesang/Documents/yolo.yaml', epochs=100, patience=30, batch=32,imgsz=412,device="mps")
model.export()
  • m1,m2 arm64기반의 맥들은 mps을 이용하면 gpu를 이용해서 학습을 돌릴수 있다.
    • mps로 작동시키는데 진짜 되게 간단한 코드 한줄 처럼 보이지만 계속 cpu로만 작동이 되서 해결하는데 4시간이나 걸렸다,,,,,,;;;

그렇게 고생해서 돌린 결과물은 ??


하... 진짜 인생 재밌다 ㅎㅎ;;;;

profile
방랑하는 개발자

0개의 댓글