API Azure Custom Vision возвращает результаты, отличные от результатов портала проекта?

Я создал индивидуальный проект видения для распознавания персонажей (A, B, C ...). Что интересно: если я загружу изображение персонажа (в данном случае «N») на портал Vision API, он скажет мне, что на 99,9% уверен, что это «N»:

введите здесь описание изображения

Если, однако, я использую клиентские библиотеки для предсказания того же изображения, я получаю 53%, что это "W", и только 37%, что это "N":

введите здесь описание изображения

  • Я дважды проверил, что последняя итерация опубликована
  • Я дважды проверил, что использую правильный идентификатор проекта
  • Моя конечная точка установлена ​​на "https://westeurope.api.cognitive.microsoft.com" в CustomVisionPredictionClient

Код для получения прогноза на моем клиенте:

var client = new CustomVisionPredictionClient()
{
    ApiKey = predictionKey,
    Endpoint = endpoint
};

var result = await client.PredictImageAsync(Guid.Parse(projectId), imageStream).ConfigureAwait(false);
var prediction = result.Predictions.FirstOrDefault();

Откуда эта разница и как исправить, потому что согласно тестам, которые я провел, загружая изображения, результаты близки к 100% правильным, независимо от того, какое изображение персонажа я загружаю?

ОБНОВЛЕНИЕ. Я заметил обновление клиентских библиотек. Они перешли с 0.12pre на 1.0stable. После обновления PredictImageAsync исчезнет и заменен на DetectImageAsync. Ожидается, что в качестве дополнительного параметра будет указано название модели. Я пробовал использовать имя итерации, и через некоторое время метод возвращается с внутренней ошибкой сервера. Так что не знаю, что попробовать дальше.


person Krumelur    schedule 27.03.2019    source источник
comment
Если вы сомневаетесь в наличии проблемы в клиентских библиотеках, попробуйте напрямую вызвать API REST Custom Vision через WebClient. Существует два разных API ClassifyImage & DetectImage для разных прикладных целей, см. southcentralus.dev.cognitive.microsoft.com/docs/services/.   -  person Peter Pan    schedule 27.03.2019
comment
Вы мне правильно намекнули! Я искал метод ClassifyImage, а не DetectImage! Используя это, он работает как шарм!   -  person Krumelur    schedule 28.03.2019


Ответы (1)


Комментарий выше указал мне правильное направление - спасибо!

В новой клиентской библиотеке есть два метода ClassifyImage и DetectImage (и их различные вариации), которые заменяют использовавшиеся ранее, включая PredictImage, который я использовал с предварительной версией клиентской библиотеки.

Для классификации изображения (что я и хотел сделать), конечно, следует использовать ClassifyImage. Новый код выглядит так и дает почти 100% правильный прогноз:

var client = new CustomVisionPredictionClient()
{
    ApiKey = predictionKey,
    Endpoint = endpoint
};

var result = await client.ClassifyImageAsync(Guid.Parse(projectId), "Iteration12", imageStream).ConfigureAwait(false);
var prediction = result.Predictions.FirstOrDefault();
  • endpoint - это URL-адрес региона, в котором размещен API Vision, в моем случае https://westeurope.api.cognitive.microsoft.com.
  • predictionKey доступен на сайте CustomVision.AI в вашем проекте, как и projectId
  • Параметр publishedName - это имя используемой итерации (в моем случае "Iteration12"
person Krumelur    schedule 28.03.2019