TFException: NodeDef упоминает attr 'Truncate' в Unity3D - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь выполнить Классификацию изображений с помощью следующего процесса в Unity3D:

  1. Создайте модель CNN, используя python 3.7.6, Tensorflow 2.0.0 (но используя приведенную ниже команду для получить совместимость с прежними версиями)
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
Сохранение модели с помощью команды tenorflow.save (model) в формате .pb Изменение расширения .pb вручную на .bytes Создание проекта Unity3D в 2018.11ff * Импорт плагина TensorflowSharp в проект Импорт модели в проекте Написан следующий скрипт в Unity3D
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using TensorFlow;
using System.Drawing;
using System.Linq;

public class InitialScript : MonoBehaviour
{
 [Header("Constants")]
 private const int INPUT_SIZE = 70;
 private const int IMAGE_MEAN = 117;
 private const float IMAGE_STD = 1;
 private const string INPUT_TENSOR = "input";
 private const string OUTPUT_TENSOR = "output";

 [Header("Inspector Stuff")]
 public TextAsset model;

 private TFGraph graph;
 private TFSession session;
 private string [] labels;
 TextAsset graphModel;
 string imageFileName = "Images/84";
 Texture2D image;

 int[] quantized;
 // Start is called before the first frame update
 void Start()
 {
     //startScript();
     // newStartScript();
     instantiateValues();
 }

 void instantiateValues() {
     #if UNITY_ANDROID
     TensorFlowSharp.Android.NativeBinding.Init();
     #endif
     //load graph
     graph = new TFGraph ();
     //graph.Import (model.bytes);
     graph.Import(File.ReadAllBytes(Application.dataPath + "/Resources/retrained_graph.bytes"));
     session = new TFSession (graph);

     ProcessImage();
 }

 void ProcessImage(){
     //pass in input tensor
     Texture2D image = duplicateTexture(Resources.Load("Images/84") as Texture2D);
     Debug.Log (image.width);
     Debug.Log (image.height);

     var matrix = new float[1, image.height, image.width, 1];
     for (var iy = 0; iy < image.height; iy++)
     {
         for (int ix = 0, index = iy * image.width; ix < image.width; ix++, index++)
         {
             UnityEngine.Color pixel = image.GetPixel(ix, iy);
             matrix[0, iy, ix, 0] = pixel.b / 255.0f;
         }
     }
     TensorFlow.TFTensor tensor = matrix;

     // var tensor = TransformInput (camFeed.GetImage (), INPUT_SIZE, INPUT_SIZE);
     var runner = session.GetRunner();
     runner.AddInput (graph [INPUT_TENSOR] [0], tensor).Fetch (graph [OUTPUT_TENSOR] [0]);
     var output = runner.Run();
     //put results into one dimensional array
     float[] probs = ((float [] [])output[0].GetValue (jagged: true)) [0];
     //get max value of probabilities and find its associated label index
     float maxValue = probs.Max ();
     int maxIndex = probs.ToList ().IndexOf (maxValue);
     //print label with highest probability
     string label = labels [maxIndex];
     print (label);

 }
}

On line

   graph.Import(File.ReadAllBytes(Application.dataPath + "/Resources/retrained_graph.bytes"));

Я получаю сообщение об ошибке выполнения, следующее:

TFException: NodeDef упоминает attr 'Truncate', который не указан в Op y: DstT; атр = SrcT: тип; атр = DSTT: тип>; NodeDef: Cast = CastDstT = DT_FLOAT, SrcT = DT_UINT8, Truncate = false. (Проверьте, соответствует ли ваш двоичный файл, интерпретирующий GraphDef, вашему двоичному файлу, генерирующему GraphDef.). TensorFlow.TFStatus.CheckMaybeRaise (TensorFlow.TFStatus incomingStatus, System.Boolean последний) (при <6ed6db22f8874deba74ffe3e566039be>: 0) TensorFlow.TFGraph.Import (TensorFlow.TFBuffer graphDef, опции TensorFlow.TFImportGraphDefOptions, TensorFlow.TFStatus статус) (при <6ed6db22f8874deba74ffe3e566039be> : 0) TensorFlow.TFGraph. префикс, состояние TensorFlow.TFStatus) (в <6ed6db22f8874deba74ffe3e566039be>: 0) InitialScript.instantiateValues ​​() (в Assets / Scripts / InitialScript.cs: 44) InitialScript.Start () (в Assets / Scripts / InitialScript.cs: 34)

Я правда не знаю, что не так? Если кто-то может помочь в этом отношении?

...