Я работал над проблемой регрессии, когда входной сигнал представляет собой изображение, а метка представляет собой непрерывное значение между 80 и 350. Изображения имеют некоторые химические вещества после реакции. Цвет, который получается, указывает концентрацию другого химического вещества, которое осталось, и это то, что модель должна вывести - концентрацию этого химического вещества. Изображения можно поворачивать, переворачивать, отражать, и ожидаемый результат должен быть таким же. Этот вид анализа проводится в реальных лабораториях (очень специализированные машины выводят концентрацию химических веществ с использованием цветового анализа, как я тренирую эту модель).
До сих пор я экспериментировал только с моделями, основанными примерно на VGG (множественные последовательности блоков conv-conv-conv-pool). Прежде чем экспериментировать с более поздними архитектурами (Inception, ResNets и т. Д.), Я подумал, что я буду исследовать, существуют ли другие архитектуры, более часто используемые для регрессии с использованием изображений.
Набор данных выглядит следующим образом:
Набор данных содержит около 5000 выборок размером 250x250, размер которых я изменил до 64x64, чтобы облегчить обучение. Как только я найду перспективную архитектуру, я поэкспериментирую с изображениями с большим разрешением.
До сих пор мои лучшие модели имели среднеквадратичную ошибку как для тренировочных, так и для проверочных наборов около 0,3, что далеко не приемлемо в моем случае использования.
Моя лучшая модель до сих пор выглядит так:
// pseudo code
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])
x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])
x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])
x = dropout()->conv2d(x, filters=128, kernel=[1, 1])->batch_norm()->relu()
x = dropout()->conv2d(x, filters=32, kernel=[1, 1])->batch_norm()->relu()
y = dense(x, units=1)
// loss = mean_squared_error(y, labels)
Вопрос
Какова соответствующая архитектура для регрессионного вывода из ввода изображения?
редактировать
Я перефразировал свое объяснение и удалил упоминания о точности.
Редактировать 2
Я реструктурировал свой вопрос так, надеюсь, понятно, что я после