У меня возникли проблемы с моим проектом обнаружения объектов. У меня есть рабочее решение, которое использует tenorflowsharp nuget. Я пытаюсь получить более быстрое обнаружение, и я хотел поэкспериментировать с моделью YOLO.
Я использую darkflow для работы с YOLO с Tensorflow. Я натренировал свою модель на моем собственном наборе данных, а затем заморозил ее, следуя инструкциям на странице darkflow. Теперь у меня есть файл PB и метафайл, пока все хорошо.
Затем я скорректировал свой код в проекте tenorflowsharp, указав на только что созданный protobuf и адаптировав имя входных выходных переменных, из:
String[] outputs = { "detection_boxes:0", "detection_scores:0", "detection_classes:0", "num_detections:0" };
runner.AddInput("image_tensor:0", tensor).Fetch(outputs);
try
{
output = runner.Run();
}
catch (TFException e)
{
Console.WriteLine(e.ToString());
}
чтобы:
runner.AddInput("input:0", tensor).Fetch("output:0");
try
{
output = runner.Run();
}
catch (TFException e)
{
Console.WriteLine(e.ToString());
}
После имени переменных в документации по Darkflow. Я могу добавить входной и выходной указатель на сеанс, но когда я могу запустить обнаружение (Runner.Run
) Я получаю исключение:
TensorFlow.TFException: Expects arg[0] to be float but uint8 is provided
Runner.Run()
возвращает ноль.
Я не уверен, как называются выходные тензоры в darkflow, в документации, которую я нашел:
Наименование входного и выходного тензоров — соответственно «вход» и «выход». Для дальнейшего использования этого файла protobuf, пожалуйста, обратитесь к официальной документации Tensorflow по C ++ API здесь.
но я бы ожидал другую коллекцию (тензоры) как тип возвращаемого значения, как для SSD и других моделей, верно?
Задача ещё не решена.
Других решений пока нет …