🙋‍♀️ AI

[YOLOv3] Colab - Custom 데이터를 활용한 Yolov3 훈련

수댕ʕت̫͡ʔ 2023. 4. 24. 18:04

나는 졸업 프로젝트를 하면서 차례대로 Yolov3, Yolov4 , Yolov5를 경험했다!

가장 처음으로 Yolov3를 이용하여 custom 훈련을 하였다.

Yolov3는 colab으로 Yolov4와 Yolov5는 각각 visual studio, pycharm으로 훈련하였다.

 

먼저  train을 위해서는 데이터 라벨링이 필요한데 그 방법으로는 아래의 링크를 참고하자!

https://sojinlee1004.tistory.com/5

 

[DarkLabel v2] YOLO custom 학습을 위한 라벨링

오늘은 Yolo 커스텀 학습을 위한 라벨링 과정에 대해서 적어보려고한다. 일단 나는 졸업프로젝트를 위해서 Yolo를 이용해서 모델을 훈련중이다! 우리는 custom 데이터를 훈련시켜야하기 때문에 라

sojinlee1004.tistory.com

 

처음으로 Yolov3가 무엇인지 공부했다.

 

YOLOv3 란?

 

YOLOv3(You Only Look Once version 3)는 실시간 객체 탐지 알고리즘 중 하나이다. YOLOv3는 이미지에서 다수의 객체를 동시에 감지할 수 있으며, 높은 정확도와 빠른 속도를 가지고 있어서 실시간 환경에서도 적용이 가능하다.

 

 

 

 

나는 Yolov3 훈련을 Colab을 이용하여 학습을 진행하였다.

 

사용 Data 

Data를 촬영할때는 웹캠을 사용하였다. 각도와 거리를 바꿔가며 촬용했고 객체를 진열대에서 하나씩 빼가면서 다양한 모습을 촬영하여 라벨링하였다.

- 총 이미지 파일 갯수 " 4170장 "

- 총 txt 파일 갯수 "4170장"

라벨링 방법은 따로 포스팅을 참고하자!

https://sojinlee1004.tistory.com/5

 

[DarkLabel v2] YOLO custom 학습을 위한 라벨링

오늘은 Yolo 커스텀 학습을 위한 라벨링 과정에 대해서 적어보려고한다. 일단 나는 졸업프로젝트를 위해서 Yolo를 이용해서 모델을 훈련중이다! 우리는 custom 데이터를 훈련시켜야하기 때문에 라

sojinlee1004.tistory.com

 

 

1. myDrive에 yolov3 폴더 생성


2. yolov3 폴더에 images.zip 파일로 라벨링한 이미지와 txt파일을 올려줌

※ 여기서 중요한 점은 이미지파일와 txt파일 이름이 같아야한다는 것이다!

 

3. train.txt 파일과 test.txt 파일을 data 폴더에 생성

train.txt파일과 test.txt 파일은 images의 위치 정보가 담겨있다.

 

4. obj.data , obj.names 파일

<obj.data>

classes= 6
train  = /mydrive/yolov3/data/train.txt
valid  =/mydrive/yolov3/data/test.txt
names =/mydrive/yolov3/data/obj.names
backup = /mydrive/yolov3/data

 

<obj.names>

sand
choco
kan
chap
fried
shrimp

 

4. data 파일 구성

- 밑은 훈련을 위해 세팅한 파일 구성이다. 

 

 

5. 훈련

- Train_YoloV3.ipynb 파일을 한줄씩 실행

# Start the training
!./darknet detector train data/obj.data cfg/yolov3_training.cfg darknet53.conv.74 -dont_show

- 훈련이 완료되면 backup폴더에 yolov3_training_final.weight,  yolov3_training_last.weight이 생성된다. 

 

6. 테스트

해당 모델을 test 해보았다.

 

 


7. 사용한 코드

- 밑에는 data정리나 훈련을 위한 세팅 등에 사용한 코드이다. 

더보기

< 파일 합치기 위한 코드>

import os

file_path = '파일 위치'
file_names = os.listdir(file_path)


i = 0
for name in file_names:
    src = os.path.join(file_path, name)
    dst = str(i) + '.png'
    dst = os.path.join(file_path, dst)
    os.rename(src, dst)
    i += 1

<train.txt , test.txt 파일 생성>

import os
path_dir = ''

file_list = os.listdir(path_dir)

f = open("train.txt", 'w')
for i in file_list:
    if i[-4:] != '.txt':
        f.write('' + i + '\n')

f.close()