YOLOv8の情報(自分用)
YOLOv8ドキュメントサイト
YOLOv8 GitHub
YOLOv8推論結果内容
PyTochサポートバージョン
PyTorch 1.7以上をサポート、2.0.0以上もサポートしている。
推論結果のBounding Boxへのアクセス方法
OpenCVを使用して自分でBounding Boxを描画する場合は、model関数のパラメータのshowをFalseにします。resultsには検出した物体のBounding Box情報があるのでそれをもとに描画します。
# YOLOv8 Track
results = model.track(source=img, show=False)
# Bounding Box
bbox = results[0].boxes.xyxy.cpu().numpy().astype(int)
results[0].boxes.xyxyの部分でcpu()というメソッドが呼び出されています。これは、PyTorchのテンソル(Tensor)をCPUメモリに移動するためのメソッドです。
PyTorchでは、テンソルの計算を高速化するためにGPUを使用することが一般的です。results[0].boxes.xyxyはGPUメモリに格納されたテンソルであり、cpu()メソッドを呼び出すことでこのテンソルをCPUメモリに移動させています。
なぜこの操作が行われるのかというと、一般的にOpenCVの関数はCPUメモリに格納されたデータを処理するため、GPUメモリに格納されたテンソルをOpenCVの関数に直接渡すことはできません。そのため、GPUメモリ上のテンソルをCPUメモリに移動させてから、それをNumPy配列に変換してOpenCV関数に渡す必要があります。
cpu()メソッドの呼び出しにより、results[0].boxes.xyxyのテンソルはCPUメモリに移動され、その後.numpy()メソッドを使用してNumPy配列に変換されています。そして、.astype(int)を使用して配列内の要素を整数型に変換しています。
このようにして、GPUメモリからCPUメモリにデータを移動し、NumPy配列として扱えるようにしているのです。