본문 바로가기

창업성장기술개발(디딤돌) 연구 기록

[디딤돌] 연구 기록 4~5주차 - YOLOv5 탐구

반응형

 

 

 

☞ 운영 체제 : Windows 10 Education 64비트 (10.0, 빌드 19043)
☞ CPU : AMD Ryzen 7 5800H with Radeon Graphics (16 CPUs), ~3.2GHz
☞ 그래픽카드 : NVIDIA GeForce RTX3070 Laptop GPU

 

 

☞ 설치 목록

  1. ROLO
  2. Scipy 1.8.1

 

YOLOv5 탐구로 건너뛰기

 

 

 


 

 

♣ 유의 사항 ♣

 

 

중간중간에 에러 발생 시 해결 방법을 적어두었는데 해당 방법과 똑같이 진행했는데도 에러가 나면 일단 끝까지 진행해보자. 그래도 에러가 발생하면 댓글로 남겨주기 바란다.

 

 

 

 


 

 

 

 

 

 

 

 

ROLO

ROLO란?

ROLO는 Recurrent YOLO의 약자로, YOLO와 같은 물체 인식 오픈소스이다. YOLO와 접근법이 달라 물체 인식률을 높일 수 있는 오픈 소스로 알려져 있다. YOLO와 가장 큰 차별점은 ROLO는 한 프레임에서 비슷한 물체가 동시에 발견되더라도 올바르게 물체를 인식한다는 점과 프레임 재생 중에 Tracking 할 물체가 잠시 시야에서 보이지 않더라도 시각적 특징뿐만 아니라 위치에 대해 파악하는 것이 가능하여 잠시 사라진 물체와 물체의 위치를 예상할 수 있다는 점이다.

 

 

출처 : http://guanghan.info/projects/ROLO/

 

 

 

☞ LSTM(Long Short-Term Memory)이란?

위키 독스 설명

https://wikidocs.net/22888

 

2) 장단기 메모리(Long Short-Term Memory, LSTM)

바닐라 아이스크림이 가장 기본적인 맛을 가진 아이스크림인 것처럼, 앞서 배운 RNN을 가장 단순한 형태의 RNN이라고 하여 바닐라 RNN(Vanilla RNN)이라고 합니다 ...

wikidocs.net

 

 

 

 

 

출처 : https://github.com/Guanghan/ROLO/issues/36

 

 

위의 내용을 보면, ROLO가 YOLO에 비해 더욱 정확도가 높다고 한다. 연구 결과물에 성공 평가 기준치가 있기 때문에 물체에 대한 인식률을 높이기 위해서 YOLO와 ROLO의 정확도를 비교해보려 한다.

 

 

 

 

 

☞ ROLO 설치

 

ROLO 깃허브 주소

https://github.com/Guanghan/ROLO

 

 

출처 : https://github.com/Guanghan/ROLO
출처 : https://github.com/Guanghan/ROLO

 

 

위와 같이 링크가 있고 이를 눌러 훈련된 모델과 데이터를 다운로드하라고 하는데, 실제로 눌러보면 되지 않는다. 그래서 아래의 document 주소에 가야 올바르게 다운로드할 수 있다.

 

 

ROLO 훈련된 모델 및 데이터 다운로드 주소

http://guanghan.info/projects/ROLO/

 

Projects · Guanghan Ning

[Arxiv] [Github] If you find this work useful, please cite: @article{ning2016spatially, title={Spatially Supervised Recurrent Convolutional Neural Networks for Visual Object Tracking}, author={Ning, Guanghan and Zhang, Zhi and Huang, Chen and He, Zhihai an

guanghan.info

 

 

출처 :http://guanghan.info/projects/ROLO/

 

 

일단 있는 건 전부 다운로드한다.

 

 

 

 

 

 

◎ 필요한 소프트웨어

 

 

 

 

Python, Tensorflow는 설치가 되어있는 상태인데, Scipy는 설치됐는지 모르겠다. cmd에 가서 import scipy로 모듈이 설치되었는지 확인할 수 있다.

 

 

 

 

위처럼 에러 없이 출력되면 문제없이 다운로드가 된 것이니 다음 Scipy 설치는 건너뛰고 ROLO 실행을 해보도록 하자.

 

 

 

 

 


② Scipy 설치

 

Scipy 다운로드 사이트 주소

https://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy

 

 

출처 : https://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy

 

 

다양한 Python 모듈을 설치할 수 있는 모듈 다운로드 사이트이다. Scipy는 아래쪽에 있으니 Ctrl+f로 찾아서 다운로드하자.

 

 

 

 

설치 전에 Python 버전을 확인하고 다운로드하자. Python 3.8 버전에 맞는 Scipy 버전을 다운로드해야 하기 때문이다. 위에서 파일을 다운로드하고 파일을 cmd 위치에 맞춰주거나 cmd에서 'cd' 명령어로 파일의 위치를 맞춰주자.

 

 

 

 

그리고 위와 같이 명령어를 치면 Scipy를 설치할 수 있다.

 

 

 


③ YOLOv5 탐구

※ YOLO 디렉터리

 

ROLO 실행하는 방법을 모르겠어서 일단 건너뛰고 YOLO에 대해 더 알아보려 한다.

 

 

 

 

◎ data : data 디렉터리 내부에는 coco128, Objects365 등 다양한 데이터 세트 정보 파일(.yaml)과 하위 디렉터리인 images에는 물체 인식에 사용할 이미지나 영상을 저장한다.

 

◎ models : YOLO 전용의 사전 훈련 모델 정보가 담겨있다. 아래와 같이 크기에 따라 나뉘며 YOLOv5l 모델이 정확도가 높으면서 시간도 비교적 오래 걸린다고(가성비가 좋다고) 한다.

 

 

출처 : https://docs.ultralytics.com/tutorials/train-custom-datasets/

 

 

◎ runs : python detect.py 명령에 의해 data/images 디렉터리 내의 이미지나 영상 자료를 사용자가 선택한 모델을 통해 결과를 얻을 수 있다. 결과는 runs/detect 디렉터리 내에 저장된다. 

 

 

 

 

 YOLO 실행

 

YOLOv5 Documentation 주소

https://docs.ultralytics.com/quick-start/

 

 

yolo를 실행하는 방법은 다음과 같다.

 

// yolo 디렉터리 안에서
// 내 디렉터리 - D:/library/yolov5-master
python detect.py

 

 

YOLOv5 개발자의 Document에 보면 명령어 뒤에 2가지 옵션을 붙여서 사용할 수 있다고 한다.

 

 

출처 : https://docs.ultralytics.com/quick-start/

 

 

연구는 풋살 경기장에서 웹캠으로 영상을 녹화하여 이를 분석하는 방식으로 하고 있기 때문에 웹캠이 아닌 비디오로 명령을 수행하면 된다.

 

 

 

 

cmd에 직접 입력해본 결과 위와 같이 다양한 옵션이 있다.

 

 

◎ --source : Object Detection을 위한 이미지나 영상이 있는 디렉터리를 삽입한다. (예시: ./data/images)

 

◎ --data : 데이터 세트를 지정한다. (예시 : ./data/coco128.yaml)

 

 

일단은 두 가지 정도만 알고 있으면 되지 싶다.

 

 

 

 

 

 

※ 데이터 세트

데이터 세트는 인식하고자 하는 물체 이미지나 영상 자료의 집합을 의미한다. YOLO는 사용자가 이미지나 영상 자료를 가져오면 이미 데이터 세트에 의해 학습된 모델을 기반으로 Object Detection을 해주는 오픈 소스이다.

 

 

 

 

디렉터리에 외 yaml 파일이 데이터 세트에 대한 정보를 담고 있다. yaml 파일에는 데이터 세트 경로, 학습 이미지 경로, 인식할 물체의 수, 인식할 물체의 이름 등의 정보를 저장되어 있다.

 

 

python detect.py --data ./data/coco128.yaml
			./data/GlobalWheat2020.yaml
                        ./data/Object365.yaml
                        ./data/VOC.yaml

 

 

데이터 세트를 바꾸고 싶으면 --data 옵션 뒤에 활용한 데이터 세트의 yaml 파일 경로를 함께 입력해주면 된다. 실행하면 가장 윗부분에 어떤 데이터 세트로 작동하는지 출력이 되니 확인할 수 있다.

 

보통 데이터 세트를 찾아보면 Labeling, Annotating된 것이 아닌 순수한 데이터 자체로만 존재한다. 그래서 이를 yolo_mark와 같은 툴을 이용해서 직접 Labeling 작업을 해줘야 한다. Labeling은 YOLO와 같은 Object Detection을 적용하기 전 모델을 학습할 때 사용된다. 데이터 세트에서 제공한 이미지나 영상에 학습시킬 물체를 사각형으로 표시함으로써 YOLO는 표시한 데이터를 이용해 특징을 파악한다.  

 

구글링을 해보면 Custom Dataset을 직접 Labeling 하는 과정을 정리한 블로그 들이 많다. 아래에는 그 블로그 중에서 설명이 간단명료하게 되어 있다.

 

 

 

YOLOv5 학습 예제 코드 (튜토리얼) - 마스크 쓰고 있는/안 쓴 얼굴(사람) 찾기

YOLOv5는 x(x-large), l(large), m(medium), s(small)의 4종류로 구성됩니다. 자세한 내용은 이전 글을 참조해주시고, 이 포스트에서는 학습 코드(스크립트)에 대해서 다루고자 합니다. [분류 전체보기] - YOLO v5

lv99.tistory.com

 

 

CV - Ultralytics YOLO v3 (Oxford Pet Dataset)

📌 이 글은 권철민님의 딥러닝 컴퓨터 비전 완벽 가이드 강의를 바탕으로 정리한 내용입니다. 목차 Ultalytics YOLO Custom Dataset 만들기 Oxford Pet Dataset Download Ultralytics YOLO 포멧 디렉토리 구조..

woochan-autobiography.tistory.com

 

 

 

 

 

 

※ 가중치

YOLO에서는 가중치를 변경해주지 않으면 기본값으로 Small인 s 모델이 선택된다. s 모델은 GPU 가동을 기준으로 한 프레임 당 약 0.008초씩 걸린다. 

 

 

 

 

위에서 옵션을 보았을 때는 weights에 관한 옵션이 없었으나 --weights와 함께 사전 훈련된 모델 파일명을 적어 넣으면 위와 같이 실행이 된다. 기본값인 yolov5s.pt 파일은 이미 있어서 다운로드 없이 실행이 되는 것이었고, 이른 Large의 l모델로 바꿔 실행하니 YOLOv5 깃허브 주소에서 자동으로 다운로드되는 것을 볼 수 있었다. [pt 확장자는 pre-trained의 줄임말로 사전 훈련된 모델 파일을 의미한다.]

 

 

// n : Nano // s : Small // m : Medium // l : Large // x : XLarge
python detect.py --weights yolov5l.pt

 

 

GPU 가동 기준 l 모델의 경우 이미지는 0.016초 정도, 영상은 프레임 당 약 0.012초 정도 소요된다. x모델의 경우 이미지가 0.025초, 영상은 프레임 당 약 0.020초 정도 소요된다. 일반 사용자에게는 매우 미미한 차이이다.

 

 

 

 

다운로드 한 pt 확장자 파일은 YOLO 디렉터리 가장 하단에 다운로드된다.

 

 

 

 

 

 

※ yaml 파일

 

디렉터리 위치 : D:/library/yolov5-master/data

파일명 : coco128.yaml

 

 

 

 

yaml 파일에는 데이터 세트에 대한 정보가 담겨 있다. 위 내용에서 앞부분 주석을 제외하고 필요한 부분만 살펴보자면 아래와 같다.

 

 

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco128  # dataset root dir
train: images/train2017  # train images (relative to 'path') 128 images
val: images/train2017  # val images (relative to 'path') 128 images
test:  # test images (optional)

# Classes
nc: 80  # number of classes
names: ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
        'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
        'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
        'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
        'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
        'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
        'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
        'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
        'hair drier', 'toothbrush']  # class names


# Download script/URL (optional)
download: https://ultralytics.com/assets/coco128.zip

 

 

◎ path : 데이터 세트의 디렉터리를 의미한다. root dir는 루트 디렉터리의 줄임말로 해당 내용들을 포함하는 가장 상위의 디렉터리를 의미한다.

 

◎ train : 훈련하고자 하는 자료 위치를 의미한다.

 

◎ val : valid의 줄임말로 검증에 사용되는 자료 위치를 의미한다.

 

◎ test : 테스트 할 자료를 삽입한다. (선택 옵션)

 

◎ nc : number of classes의 줄임말, 의미 그대로 물체로 인식할 수를 의미한다.

 

◎ names : 리스트 타입으로 nc의 수 만큼 인식할 물체 이름을 적어 넣는다.

 

 

 

☞ 데이터 세트 coco128

 

coco128 데이터 세트 다운로드 주소

https://www.kaggle.com/datasets/ultralytics/coco128

 

 

 

 

YOLOv5의 기본 데이터 세트인 coco128을 다운로드하면 위와 같이 images, labels 디렉터리 두 개가 나온다.

 

 

 

 

images 디렉터리와 labels 디렉터리에는 각각 학습에 필요한 128개의 이미지와 이미지에 표시한 라벨링 좌표와 물체(클래스) 번호가 담겨있다.

 

 

다음 주차에는 위 내용을 이용하여 데이터 세트를 다운로드 받아 사용하는 것을 목표로 한다.

 

 

 

 

반응형