Как обрабатывать изображения больших размеров в CNN?


15

Предположим, для CNN требуется 10K изображений размером 2400 x 2400. По моему мнению, будут полезны обычные компьютеры, которые используют люди. Теперь вопрос заключается в том, как обрабатывать изображения такого большого размера, когда нет привилегий понижающей дискретизации.

Вот системные требования: -

Ubuntu 16.04 64-битная RAM 16 ГБ GPU 8 ГБ HDD 500 ГБ

1) Существуют ли методы для обработки таких больших изображений, которые нужно обучать?
2) Какой размер партии целесообразно использовать?
3) Есть ли какие-либо меры предосторожности, которые я могу предпринять, или какое-либо увеличение или уменьшение аппаратных ресурсов?

Ответы:


14

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

Я предполагаю, что под понижающей дискретизацией вы подразумеваете уменьшение входных данных перед передачей их в CNN. Сверточный слой позволяет уменьшить изображение в сети, выбирая большой шаг, что позволит сэкономить ресурсы для следующих слоев. Фактически, это то, что нужно сделать, иначе ваша модель не поместится в GPU.

1) Существуют ли методы для обработки таких больших изображений, которые нужно обучать?

Обычно исследования масштабируют изображения до разумного размера. Но если это не вариант для вас, вам нужно ограничить свой CNN. В дополнение к понижающей дискретизации в ранних слоях, я бы порекомендовал вам избавиться от слоя FC (который обычно принимает большинство параметров) в пользу сверточного слоя . Также вам придется передавать данные в каждую эпоху, потому что они не будут вписываться в ваш графический процессор.

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

2) Какой размер партии целесообразно использовать?

Вот еще одна проблема. 2400x2400x3x4Одно изображение занимает (3 канала и 4 байта на пиксель), что составляет ~ 70 МБ, поэтому вы вряд ли сможете позволить себе даже размер пакета 10. Более реалистично было бы 5. Обратите внимание, что большая часть памяти будет занята параметрами CNN. Я думаю, что в этом случае имеет смысл уменьшить размер, используя 16-битные значения, а не 32-битные - таким образом вы сможете удвоить количество пакетов.

3) Есть ли какие-либо меры предосторожности, которые я могу предпринять, или какое-либо увеличение или уменьшение аппаратных ресурсов?

Ваше узкое место - память GPU. Если вы можете позволить себе другой графический процессор, получите его и разделите сеть между ними. Все остальное незначительно по сравнению с памятью GPU.


1
Спасибо. Я уже следовал нескольким из предложений, которые вы предоставили в этом ответе. Хороший ответ.
WaterRocket8236

5

Обычно для изображений набор функций представляет собой значения плотности пикселей, и в этом случае это приведет к довольно большому набору функций; также не рекомендуется делать выборку изображений с понижением частоты, так как вы можете потерять (фактически потеряете) важные данные.

[1] Но есть некоторые методы, которые могут помочь вам уменьшить размер набора функций, такие подходы, как PCA (Принцип анализа компонентов), помогут вам в выборе подмножества важных функций.

Для получения подробной информации см. Ссылку http://spark.apache.org/docs/latest/ml-features.html#pca .

[2] Кроме этого, чтобы уменьшить вычислительные затраты при обучении вашей нейронной сети, вы можете использовать стохастический градиентный спуск вместо обычного использования подхода градиентного спуска, который уменьшит размер набора данных, необходимый для обучения в каждой итерации. Таким образом, размер вашего набора данных, который будет использоваться за одну итерацию, сократится и, следовательно, сократит время, необходимое для обучения сети.

Точный размер пакета, который будет использоваться, зависит от вашего распределения для обучающего набора данных и тестируемого набора данных, более общее использование - 70-30. Где вы также можете использовать вышеупомянутый стохастический подход, чтобы сократить необходимое время.

Детали для стохастического градиентного спуска http://scikit-learn.org/stable/modules/sgd.html

[3] Похоже, что для обновления потребуется оборудование, но при необходимости посмотрите на облачные решения, такие как AWS, где вы можете получить бесплатную подписку на учетную запись до предела использования.


Спасибо за ответ. Обновите ответ, если получите больше информации.
WaterRocket8236

Спасибо за эту ссылку на Stochastic Gradient Descent и добро пожаловать в AI!
DukeZhou

2

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

  1. Масштабируйте все ваши изображения к меньшим размерам. Вы можете изменить их размер до 112x112 пикселей. В вашем случае, потому что у вас квадратное изображение, обрезка не понадобится. Вы по-прежнему не сможете загрузить все эти образы в оперативную память с определенной целью.

  2. Наилучшим вариантом является использование функции генератора, которая будет подавать данные в пакетном режиме. Пожалуйста, обратитесь к использованию fit_generator, как в Keras. Если параметры вашей модели становятся слишком большими, чтобы поместиться в память графического процессора, рассмотрите возможность использования пакетной нормализации или использования остаточной модели, чтобы уменьшить количество параметров.


3
Почему бы вы выбрали размер 112x112 пикселей? Это не сила 2 и не делитель 2400.
Andi R

@AndiR. Вот эта вещь. Когда дело доходит до входного измерения, каждый волен выбирать любой размер. Это связано с тем, что если в сети имеются какие-либо несовместимости измерений, это можно легко решить с помощью заполнения нулями. Таким образом, нет фиксированной методологии для размера входных данных. Надо быть осторожным, чтобы слишком низкая дискретизация не влияла на качество входного сигнала. Пожалуйста, взгляните на этот документ, который использует размер 112x112. ( cv-foundation.org/openaccess/content_iccv_2015/papers/… )
Rockyne
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.