Измерение уровня алгоритма классификации

RawImage не имеет sprite, но предполагает Texture.

Вы не можете просто передать URL. Вы должны загрузить текстуру и затем применить результат к rawImage.texture. Пример из документации:

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;

public class MyBehaviour : MonoBehaviour 
{
    void Start() 
    {
        StartCoroutine(GetTexture());
    }

    IEnumerator GetTexture() 
    {
        UnityWebRequest www = UnityWebRequestTexture.GetTexture("http://www.my-server.com/image.png");
        yield return www.SendWebRequest();

        if(www.isNetworkError || www.isHttpError) 
        {
            Debug.Log(www.error);
        }
        else 
        {
            Texture myTexture = ((DownloadHandlerTexture)www.downloadHandler).texture;
        }
    }
}

Загрузка происходит асинхронно, поэтому префабы могут появиться до того, как будут загружены все изображения ... это зависит от вас, как вы хотите справиться с этим (например, отобразить анимацию загрузки или тем временем) - я предполагаю, что вы хотите создать экземпляр сразу.

Вы можете просто добавить обратный вызов в метод загрузки, чтобы выполнить любой метод в случае успеха или неудачи:

IEnumerator GetTexture(string url, Action successCallback, = null, Action errorCallback = null) 
{
    UnityWebRequest www = UnityWebRequestTexture.GetTexture(url);
    yield return www.SendWebRequest();

    if(www.isNetworkError || www.isHttpError) 
    {
        errorCallback?.Invoke(www.error);
    }
    else 
    {
        successCallback?.Invoke(((DownloadHandlerTexture)www.downloadHandler).texture);
    }
}

и в своем коде добавить обратные вызовы, например. используя лямбда-выражений , которые должны быть выполнены при успехе или ошибке:

// ...

if (GetItems.getItems.itemsModel[i] != null)
{
    // optional here add a loading or default texture 
    // to be displayed until texture is downloaded e.g.
    newObj.transform.GetChild(2).GetComponent().texture = someDefaultTexture;                         

    // start the download
    StartCoroutine(GetTexture(
        // The url
        GetItems.getItems.itemsimage[i],

        // executed on success
        (s) => 
        {
            OnSuccess(newObj.transform.GetChild(2).GetComponent(), s);
        },

        // optional for visualizing download errors
        (e) =>
        {
            OnError(e);
        }
    ));
}

// ...

и, наконец, реализовать обратные вызовы, например:

// callback for success download
private void OnSuccess(RawImage rawImage, Texture texture)
{
    rawImage.texture = texture;
}

// callback for download error
private void OnError(RawImage rawImage, string error)
{
    rawImage.Texture = someErrorTexture;
    Debug.Log(error, this);
}

Одно предупреждение о скачанном Текстуры (потому что в последнее время я тоже допустил эту ошибку):

Обычно неиспользуемые / не имеющие ссылок текстуры собирают / удаляют мусор, поэтому память вашего устройства не заполняется ... , но , по-видимому, текстуры созданные через UnityWebRequest не уничтожаются, даже если у них больше нет ссылок.

Это может привести к утечкам памяти, заполняющим память вашего устройства загруженными текстурами!

Так что обязательно уничтожайте любую загруженную текстуру, когда она вам больше не нужна, например, добавив скрипт типа

public class CleanUpTexture : MonoBehaviour
{
    private RawImage rawImage;

    private void Awake()
    {
        rawImage = GetComponent();
    }

    private void OnDestroy()
    {
        if(!rawImage || rawImage.texture == null) return;

        Destroy(rawImage.texture);
    }
}

рядом с компонентом RawImage, если эта текстура должна быть уничтожена вместе с объектом.

Это предполагает, конечно, что вы никогда не назначите такую ​​же текстуру ни для чего другого. И это также предполагает, что вы никогда не назначите другую текстуру этому объекту (потому что вы 1. потеряете ссылку на загруженную текстуру и 2. возможно уничтожите текстуру, которую вы не хотели)

8
задан Jon Seigel 22 May 2010 в 22:15
поделиться

2 ответа

Вы могли использовать 10-кратную Перекрестную проверку для этого. Я полагаю, что это - довольно стандартный подход для оценки результатов деятельности алгоритма классификации.

Основная идея состоит в том, чтобы разделить Ваше приобретение знаний образцов на 10 подмножеств. Затем используйте одно подмножество для данных тестирования и других для данных поезда. Повторите это для каждого подмножества и вычислите среднюю производительность на конце.

14
ответ дан 5 December 2019 в 10:44
поделиться

Поскольку г-н Brownstone сказал, что 10-кратная Перекрестная проверка является, вероятно, лучшим способом пойти. Я недавно должен был оценить производительность многих различных классификаторов для этого, я использовал Weka. Который имеет API и загрузку инструментов, которые позволяют Вам легко проверять производительность большого количества различных классификаторов.

2
ответ дан 5 December 2019 в 10:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: