Мульти-обработка изображений с PyMC3
У меня проблема с обработкой изображений, которую я решил использовать, чтобы поэкспериментировать с изучением PyMC3. Я потратил много времени, играя с нелинейными решателями и методами грубой силы, и до сих пор ничто не делает меня счастливым.
У меня есть сложный метод совместной регистрации двух изображений одной и той же сцены, но записанных в разных модальностях. Подумайте о попытке сопоставить обычное черно-белое видимое изображение с тепловым инфракрасным изображением. Или, с точки зрения медицинской визуализации, подумайте о том, чтобы попытаться сопоставить данные МРТ с рентгеновскими данными.
Для простоты я могу представить свой рабочий процесс обработки данных с помощью следующей функции:
def process_and_compare(image_src, image_dst, parameters):
"""
Parameters
----------
image_src : 2D array
image_trg : 2D array
parameters : sequence of 7 scalars defining image transform
Output
------
metric : Scalar value indicating how well the transformed source image
matches up with the target image.
"""
image_src_warp = image_warper(image_src, parameters)
metric = compare_two_images(image_src_warp, image_trg)
return metric
Эта функция принимает в качестве входных данных два изображения и вектор параметров модели. Некоторое сложное сокращение числа происходит внутри. Когда это сделано, возвращается скаляр, который указывает, насколько хорошо модель (определяется исключительно вектором параметров) выравнивает два изображения. Детали того, как искажается исходное изображение или как сравниваются два изображения, пока являются черными ящиками. В конце концов, я в конечном итоге хочу получить искривленное изображение, соответствующее модели, что дает наилучшее совпадение. Но сейчас, пока я все еще играю со своими алгоритмами, я думаю, что могу многому научиться, визуализируя апостериорные распределения параметров моей модели для некоторых простых изображений тестового примера. Сначала я думал, что PyMC сделает это легко, но как только я начал изучать детали реализации, я немного запутался.
Я просмотрел недавние презентации PyMC3 Томаса Вики, а также прочитал большую часть замечательной онлайн-книги Кэма Дэвидсона-Пилона. До сих пор мне кажется, что замечательными новыми функциями PyMC3 по сравнению с PyMC2 являются (частично) шикарный синтаксис спецификации модели и автоматическое использование Theano для ускорения обработки.
В примерах, которые я видел до сих пор, похоже, что модель данных теперь часто полностью определяется с использованием новой синтаксической системы. Но в моем случае это более сложная функция.
Вот мои вопросы:
Может кто-нибудь указать мне на существующий пример PyMC, включающий модель данных черного ящика, реализованную как пользовательская функция? Либо PyMC2, либо PyMC3 было бы здорово!
Смогу ли я реализовать преимущества Theano глубоко в моей функции модели данных Python, когда выясню, как заставить это работать с PyMC3?
1 ответ
Функция, которую вы указали выше, будет включена в модель PyMC как детерминированный узел, где она рассчитывается на основе некоторых (предположительно) стохастических родительских узлов (ваших параметров). Затем этот узел будет подключен вниз по течению к вероятности (наблюдаемый стохастический узел), который предоставляет информацию для подгонки параметров. Например, у вас может быть некоторое параметрическое распределение, которое описывает распределение ошибки, соответствующее метрическому выводу, process_and_compare
,
Вики PyMC имеет несколько примеров моделей из ряда доменов для PyMC 2. В PyMC 3 есть примеры pymc/examples
папка в мастер ветке.
Что касается Theano, то мотивация использования его в качестве зависимости для PyMC обусловлена тем фактом, что современное состояние в MCMC включает использование информации о градиенте, поэтому нам нужна была возможность рассчитывать градиенты для произвольных моделей. Мы надеемся в конечном итоге извлечь выгоду из его возможностей графического процессора, но пока это только для градиентов. Все объекты PyMC являются тензорами Theano в версии 3, поэтому, если у вас есть другие планы относительно Theano в контексте построения байесовских моделей, то есть вероятность, что это можно заставить работать. Например, мы могли бы в конечном итоге захотеть реализовать вероятностные графические модели в PyMC, поэтому Theano, вероятно, также облегчит это.