Обработка нескольких изображений с помощью 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 для ускорения обработки.

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

Вот мои вопросы:

  1. Может ли кто-нибудь указать мне на существующий пример PyMC, включающий модель данных черного ящика, реализованную как пользовательская функция? Либо PyMC2, либо PyMC3 было бы здорово!

  2. Смогу ли я реализовать преимущества Theano deep в моей функции модели данных Python, как только я выясню, как это сделать? PyMC3?

1 2

1 ответ:

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

Вpymc wiki есть несколько примеров моделей из ряда доменов для PyMC 2. Примеры PyMC 3 находятся в папке pymc/examples в главной ветви.

Насколько можно судить, мотивация использования его в качестве зависимости для PyMC связана с тем, что современное состояние MCMC предполагает использование градиентной информации, поэтому нам нужна была возможность вычислять градиенты для произвольных моделей. Мы надеемся в конечном итоге извлечь выгоду из его возможностей GPU, но пока это только для градиентов. Все объекты PyMC являются тензорами Теано в версии 3, так что если у вас есть другие планы для Теано в контексте построения байесовских моделей, то, скорее всего, это может быть сделано, чтобы работать. Например, мы можем в конечном итоге захотеть реализовать вероятностные графические модели в PyMC, так что Theo, вероятно, облегчит и это.