Тренировка на большом наборе изображений в высоком разрешении с удалением памяти из памяти
Я пытаюсь использовать Turicreate для обучения модели на 150 фотографиях с высоким разрешением (4Mb каждая, 3000X5000). я бегу
model = tc.object_detector.create(train_data, max_iterations=10)
и через некоторое время я получаю предупреждение о низком уровне виртуальной памяти и сразу после зависания моего компьютера.
Мне было интересно, какова лучшая практика здесь, чтобы иметь возможность тренироваться на такой серии фотографий.
Полный код, который я использую:
import turicreate as tc
data = tc.SFrame('annotations.sframe')
train_data, test_data = data.random_split(0.8)
model = tc.object_detector.create(train_data, max_iterations=10)
predictions = model.predict(test_data)
metrics = model.evaluate(test_data)
model.save('mymodel.model')
model.export_coreml('MyCustomObjectDetector.mlmodel')
2 ответа
Обычно вы хотите уменьшить размер пакета, т. Е. Какой размер части обучающих данных используется для одной итерации. Очевидно, что в Turicreate настроить нелегко, поэтому похоже, что программа использует полный набор данных за одну эпоху. В идеале вы хотите использовать меньшую часть, например, 32 или 64 изображения. Существует некоторая дискуссия на тему Github, и очевидно, что размер пакета как открытый параметр может появиться в некоторых будущих выпусках.
3000 х 5000 также достаточно велик для такого рода работ. Возможно, вы захотите уменьшить размеры изображений, то есть с помощью бикубической интерполяции, реализованной, например, в Scipy. В зависимости от типа изображений, над которыми вы работаете, даже в 10 раз по каждому измерению может не быть слишком большой усадки.
Уменьшите размер изображений набора данных, например, до (ширина: 400 высота: 300), и увеличьте max_iterations как минимум до 1000.