Как правильно выполнить увеличение данных на МРТ и подготовить их к глубокому обучению?

Я пытаюсь использовать глубокое обучение (3D CNN) для классификации болезней мозга. В настоящее время установлен размер ввода 96 * 96 * 96. Это связано с тем, что исходный скан имеет размер 256 * 256 * 256. Сначала я удалил фон, изменив размер до 192 * 192 * 192, а затем уменьшил разрешение в 2 раза.
Однако мой набор данных содержит только 825 субъектов. Я хочу увеличить набор данных до достаточного размера, но меня это сильно беспокоило.
Прежде всего, 96 ^ 3 приводят к 884k вокселям для ввода. Исходя из моего прошлого опыта, количество обучающих выборок должно быть намного больше, чем количество входных единиц. Итак, мой первый вопрос: Прав ли я, что обучающих данных должно быть больше, чем единиц ввода (в данном случае более 884 КБ).
Во-вторых, чтобы выполнить увеличение данных, какие методы рекомендуются? До сих пор я пробовал вращение вокруг трех осей с интервалом в 10 градусов. Но это увеличивает размер данных только в 100 раз.
В-третьих, при обучении моделей я использовал добавление входных данных в список и использовал функцию sklearn train-test-split для их разделения. Другой способ - использовать keras ImageDataGenerator.flow_from_directory. Однако сейчас я имею дело с трехмерными данными, и никакая память не может позволить загрузить тысячи трехмерных массивов в целом. И ImageDataGenerator не поддерживает формат файла nifti. Есть ли способ подготовить все свои трехмерные массивы для обучения, не истощая мою память? (Я могу представить себе что-то вроде ImageDataGenerator. Конечно, я понимаю, что генератор данных отправляет данные в модель по одной партии. Поправьте меня, если я ошибаюсь)


person Ke Xu    schedule 25.04.2019    source источник


Ответы (1)


Я столкнулся с той же проблемой с данными для МРТ, поэтому я не могу с этим помочь и лучше найду ответ. Однако в случае с генератором я готовлю свой набор данных ПЕРЕД обучением, в другом скрипте, где я выполняю все преобразования (изменение размера, подготовка трехмерного массива, разделение на обучение / тестирование, ...), и я помещаю все в 3 больших массива (поезд , валидация и тест). Я сохраняю этот массив с помощью функции сохранения Numpy. Вы также можете разделить каждый массив на более мелкие. Если он по-прежнему не умещается в вашей оперативной памяти, вы можете создать подкласс Keras Sequence.

person Hugo Delannoy    schedule 07.04.2020