本日はUnityの技術調査枠です。
Unity AIのドキュメントを読みながら実際に操作を試して記事に残します。
Unity AI
以下のUnity AIのドキュメントを試しながら実行時のキャプチャをしていきます。
docs.unity3d.com
テンソルの作成
Tensor APIのメソッドを使用して基本的なテンソルを作成できます。
using UnityEngine; using Unity.InferenceEngine; public class ConvertArrayToTensor : MonoBehaviour { void Start() { // 9つの値を持つデータ配列を作成する float[] data = new float[] { 1f, 2f, 3f, 4f, 5f, 6f, 7f, 8f, 9f }; // サイズ3×1×3の3Dテンソルシェイプを作成する TensorShape shape = new TensorShape(3, 1, 3); // 配列から新しいテンソルを作成する Tensor<float> tensor = new Tensor<float>(shape, data); } }
テンソルの値の取得と設定
テンソルデータのバックエンドタイプがBackendType.CPUで計算が完了している場合、値を直接設定および取得できます。
var tensor = new Tensor<float>(new TensorShape(1, 2, 3)); tensor[0, 1, 2] = 5.2f; // set value at index 0 of dim0 = 1, index 1 of dim1 = 2 and index 2 of dim2 = 3 float value = tensor[0, 1, 2]; Assert.AreEqual(5.2f, value);
テンソルの形状を変更する
テンソルを直接形状変更することができます。
var tensor = new Tensor<float>(new TensorShape(10)); tensor.Reshape(new TensorShape(2, 5));
テンソルの新しいシェイプはバックエンドに割り当てられたデータに収まる必要があります。
テンソルシェイプのlengthプロパティとテンソルデータのmaxCapacityプロパティを使用して要素数を確認できます。
var tensor = new Tensor<float>(new TensorShape(10)); Assert.AreEqual(10, tensor.count); Assert.AreEqual(10, tensor.dataOnBackend.maxCapacity); // テンソルをより小さな形状に変形する tensor.Reshape(new TensorShape(2, 3)); Assert.AreEqual(6, tensor.count); Assert.AreEqual(10, tensor.dataOnBackend.maxCapacity); // 基礎となるdataOnBackendにはまだ10個の要素が含まれています // dataOnBackend.maxCapacit に合わせて形状を変更する tensor.Reshape(new TensorShape(1, 10));
テンソルの形状を変更する場合、推論エンジンは基礎となるdataOnBackendのデータや容量を変更しません。