Все примеры, которые я нашел на ML. NET Классификация изображений использует Image Path при обучении конвейера, однако в производстве. Я хотел бы прогнозировать непосредственно из растрового изображения, поэтому я преобразовал обучающий конвейер для использования растрового изображения вместо пути. это вызывает другие проблемы, например, когда у нас есть список IEnumerable Dataset с 615 000 битмапами, загруженными в память, ну, у этого P C недостаточно RAM.
Есть ли способ создать загруженный IEnumerable с отложенной загрузкой Набор данных, содержащий растровые модели, когда конвейер подходит / обучается?
РЕДАКТИРОВАТЬ:
По предложению Jona sH я просто реализую свой собственный перечислитель для обрабатывать загрузку изображений во время выполнения. Вот реализация:
public class ImageDataCollection : IEnumerable<ImageClassificationData>
{
private IEnumerable<string> files { get; set; }
public Func<Bitmap, Bitmap> Handler { get; set; }
public ImageDataCollection(IEnumerable<string> files)
{
this.files = files;
}
public IEnumerator<ImageClassificationData> GetEnumerator()
{
IEnumerator<string> iterator = files.GetEnumerator();
while (iterator.MoveNext())
{
string data = iterator.Current;
Bitmap image = new Bitmap(data);
if (Handler != null)
{
image = Handler(image);
}
string[] c = data.Split(new char[] { '\\' });
yield return new ImageClassificationData { Label = c[c.Length - 1], Image = image };
image.Dispose();
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
Это РАБОТАЕТ однако я хотел бы видеть его как метод расширения некоторого вида в ML. NET, если это было возможно, или в наименее документированный, поскольку это НЕ было ясно, в конце концов, DEEP Learning использует ОЗУ МНОГО: P ..