YOLO를 이용하여 로봇을 구동시켜 보자(2)
이전에 labelImg를 사용하는 방법을 알아봤는데요. 이번엔 yolo를 사용해서 직접 학습된 데이터로 객체 인식하는 단계를 확이해볼게요.
YOLO를 이용하여 로봇을 구동시켜 보자(1)
1. YOLO를 사용해보자 DeepLearning을 활용해서 사진에 특정 인물 or 사물을 탐지하고 싶으면 여러가지 툴이 있지만 그중에 저는 YOLOv7을 사용했습니다. YOLOv7을 사용하기 전에 준비해야할 것과 알아둬
rowithpeople.tistory.com
2. Yolov7을 사용해보자.
우선 yolov7 툴을 다운받아주어야 합니다.
https://github.com/WongKinYiu/yolov7
GitHub - WongKinYiu/yolov7: Implementation of paper - YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time
Implementation of paper - YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors - GitHub - WongKinYiu/yolov7: Implementation of paper - YOLOv7: Trainable bag-of...
github.com
해당 링크에 들어가서 툴을 다운받아주고 압축을 풀어주면 yolov7-main폴더가 생성됩니다.
여기서 yolov7이 동작하기 위한 환경을 설치해주어야 합니다. (torch, torchvision, pandas...등등)
편의를 위해 폴더 안에 있는 requirements.txt를 열어보면 라이브러리들을 확이할 수 있어요.
이 txt안에 수정해야할 것이 있어요.
각 노트북이나 컴퓨터의 gpu 사양에 따라서 torch와 torchvision값을 변경해주어야 합니다.
변경하는 방법을 알려드릴게요.
- cuda 버전을 확인한다
nvcc --version
- PyTorch에 들어가서 자기 컴퓨터의 cuda 버전을 확인한대로 PyTorch v1.13.0에서 CUDA 11.7의 명령어를 복사하고 requirements.txt에 torch와 torchvision에 수정한다.
PyTorch
An open source machine learning framework that accelerates the path from research prototyping to production deployment.
pytorch.org
바탕화면에 yolo폴더를 생성하고 설치한 yolov7-main폴더를 옮겨줍니다.
그리고 vscode를 실행해줍니다
yolov7-main폴더 안에 data폴더에 기존의 train폴더와 val폴더를 옮겨줍니다.
이제 data폴더 안에 있는 coco.yaml 내용을 수정해줘야 합니다.
학습할 이미지의 물체의 갯수는 1개이기 때문에 클래스의 이름은 1개입니다. train 경로와 val 경로를 절대위치 경로로 가지와 줍니다.
cfg폴더의 training을 보면 yolov7의 여러 모델을 확인할 수 있습니다. 이는 각 모델마다 용도가 다르기 때문에 github공식 문서를 확인하시고 원하는 모델을 사용하시면 됩니다. 저는 yolob7-x를 사용했어요.
yolov7x.yaml의 내용을 수정해줘야 합니다. 마찬가지로 이미지가 1개이므로 nc: 1으로 수정해주세요.
이제 셋팅을 다 했으니 마지막으로 가상환경을 만들어주고 requirements.txt의 라이브러리를 설치해줍니다.
pip install -r requirements.txt
- train
이제 훈련을 시키면 되는데요. terminal에 아래와 같은 명령어를 해주면 학습이 됩니다.
python3 train.py --workers 1 --device 0 --batch-size 8 --epochs 100 --img 640 640 --data data/custom_data.yaml --hyp data/hyp.scratch.custom.yaml --cfg cfg/training/yolov7-custom.yaml --name yolov7-custom --weights yolov7.pt
python train.py 파이썬으로 train.py를 실행하고 train.py에 있는 설정값을 지정해줍니다.
--workers 1 : 컴퓨터 1대
--device 0 : 현재 사용하고 컴퓨터에 연결된 장비 - 그래픽카드번호
--batch-size 8 : 배치사이즈 - 한번에 연산하는 데이터의 크기 클수록 빨리되지만 하드웨어 성능이 받쳐줘야한다.
--epochs 100 : epochs 횟수
--img 640 640 : 학습되는 이미지의 크기 각 네트워크마다 고정된 값이 있다.
--data data/custom_data.yaml : 데이터가 있는 정보 yaml의 위치
--hyp data/hyp.scratch.custom.yaml : 하이퍼파리미터 정보가 있는 yaml의 위치
--cfg cfg/training/yolov7-custom.yaml : cfg 정보가 있는 yaml의 위치
--name yolov7-custom : 저장위치
--weights yolov7.pt : weight값의 위치
아래와 같이 run폴더가 생성되고 학습된 데이터가 생성됩니다.
이제 weight폴더에 best.pt로 detect.py를 실행해주면 객체를 탐지할 수 있습니다.
- detect
python detect.py --weights best.pt --conf 0.5 --img-size 640 --source 0
--weights : 학습한 모델 사용
--conf : 정확도 임계점 설정
--source : 0으로 하면 실시간 카메라로 탐지, 이미지 경로로 설정하면 해당 이미지안에 객체 탐지
이렇게해서 최종 객체를 탐지할 수 있는 모델을 만들었고 이를 통해 해당된 객체만 보고 주행하는 로봇을 제작해보도록 하겠습니다.긴 내용 읽어주셔서 감사합니다~~