最新版をご覧ください。
- Jetson Nano 4GB
- micro SDXC 64GB
- logicool C270N
- Ubuntu 20.04
Google Colab上でYOLOv8.0.230を用いて学習する
Pythonのバージョンを確認します(2023/12/28:3.10.12)
!python3 -V
Google Driveをマウントします
from google.colab import drive
drive.mount('/content/drive')
YOLOv8用のディレクトリを作成します
%cd "/content/drive/MyDrive/"
%mkdir Python3.10_YOLOv8.0
%cd Python3.10_YOLOv8.0
YOLOv8をインストールします
!pip3 install ultralytics
YOLOv8の動作確認をします
!yolo predict model=yolov8n.pt source='https://ultralytics.com/images/zidane.jpg'
from IPython.display import Image, clear_output
Image(filename='runs/detect/predict/zidane.jpg', width=600)
Python3.10_YOLOv8.0直下にdata.yamlをアップロードします
data.yaml
path ./datasets/pcb
train: train/images
val: valid/images
# number of classes
nc: 4
# class names
names: ['pcb', 'battery', 'nut', 'spacer']
Python3.10_YOLOv8.0直下にdatasets/pcb/フォルダを作成し、train、validフォルダをアップロードし、学習を行います
!yolo detect train data=data.yaml model=yolov8n.pt epochs=300 imgsz=640 batch=8
マイドライブ > Python3.10_YOLOv8.0 > runs > detect > train > weights に重みファイル best.ptが保存されます。
Jetson Nanoで YOLOv8を動かす
Jetson Nano with Ubuntu 20.04 OS image(2023/12/28:20.04 3b)を入手します
※username:jetson、password:jetson
キーボード、タイム ゾーンの設定
Settings
-> Region & Language -> Input Sources:Other -> Japanese
-> Data & Time -> Time Zone:JST(Tokyo, Japan)
モジュールの追加・更新
pip3 install psutil==5.9.5
YOLOv8.0.230をクローンします
git clone https://github.com/ultralytics/ultralytics
cd ultralytics/
nano requirements.txt
requirements.tx 全ての行をコメントアウトします
# Ultralytics requirements
# Example: pip install -r requirements.txt
# Base ----------------------------------------
#matplotlib>=3.3.0
#numpy>=1.22.2 # pinned by Snyk to avoid a vulnerability
#opencv-python>=4.6.0
途中略
# pycocotools>=2.0.6 # COCO mAP
# roboflow
YOLOv8の動作確認
yolo predict model=yolov8n.pt source="https://ultralytics.com/images/zidane.jpg"
検出結果は「Home/runs/detect/predict」内に保存されます(zidane.jpg)。
- Google Colabで学習した重みファイルを使用して認識を実行
yolo task=detect mode=predict model=best.pt source=0 show=True imgsz=256
Jetson Nano:1 frame:49.0ms(20.4fps)
Pythonでプログラムを作成する
プログラム
JetsonYolo.py
import cv2
import numpy as np
from ultralytics import YOLO
classes = ['pcb', 'battery', 'nut', 'spacer']
colors = list(np.random.rand(4, 3)*255)
model = YOLO('best.pt')
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
cv2.namedWindow('win', cv2.WINDOW_AUTOSIZE)
while True:
ret, frame = cap.read()
results = model(frame, conf=0.5, iou=0.5)
result = results[0]
for box in result.boxes:
label = classes[int(box.cls)]
score = round(float(box.conf), 2)
color = colors[int(box.cls)]
print(label, score)
r = box.xyxy.tolist()
cv2.rectangle(frame, (int(r[0][0]), int(r[0][1])),
(int(r[0][2]), int(r[0][3])), color, 2)
cv2.putText(frame, f'{label} ({str(score)})', (int(r[0][0]), int(r[0][1])),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, color, 2, 4)
cv2.imshow('win', frame)
if cv2.waitKey(30) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
実行方法
python3 JetsonYolo.py