Реализация Pytorch сети пространственных трансформаторов (STN) с тонкой пластинкой (TPS).
STN является мощной архитектурой нейронной сети, предложенной DeepMind в [1]. STN достигает реальной пространственной инвариантности, автоматически исправляя входные изображения, прежде чем они будут поданы в нормальную сеть классификации. Наиболее удивительной частью STN является то, что он является сквозной дифференциалом и может быть напрямую подключена к существующей сетевой архитектуре (Alexnet, Resnet и т. Д.), Без дополнительного надзора.
Оригинальная бумага STN [1] Эксперименты по трем специфическим формам преобразования: аффинное преобразование, проективное преобразование и преобразование сплайна тонкой пластины (TPS) . Среди них я думаю, что TPS - самый мощный перевод, потому что он может деформировать изображение произвольным образом. Как показано ниже, я могу деформировать свой аватар
в
TPS-STN использовался в приложении OCR [2]. В этой статье TPS-Stn должен автоматически исправить искаженные текстовые изображения, прежде чем они будут поданы в нормальную модель распознавания текста OCR:
Я использую imageio для создания визуализации GIF. Просто установите его на pip install imageio .
python mnist_train.py --model unbounded_stn --angle 90 --grid_size 4
python mnist_visualize.py --model unbounded_stn --angle 90 --grid_size 4
python mnist_make_gif.py --model unbounded_stn --angle 90 --grid_size 4
Затем PNG и GIF -ресурсы будут сохранены в ./image/unbounded_stn_angle60_grid4/ и ./gif/unbounded_stn_angle60_grid4/ .
Вы можете попробовать другие комбинации модельной архитектуры, угла случайного вращения MNIST и размер сетки TPS. Подробности ниже.
Есть три контролируемых аргумента: --model , --angle , --grid_size .
--model : Str, требуется
no_stn модуль STN отбрасывается, и остается только один классификатор CNN.bounded_stn вывод сети локализации сжимается до [-1, 1] F.tanh , как это было сделано в [2]unbounded_stn вывод сети локолизации не сжимается --angle : int, default = 60
[-angle, angle] --grid_size : int, default = 4
(grid_size x grid_size) Управляющие точки для определения преобразования сплайна тонкой пластины Результаты с angle = 90 , как правило, плохие:
Результаты с bounded_stn плохие, если grid_size <= 3 :
Но хорошо, если grid_size >= 4 :
Результаты с unbounded_stn в порядке:
Конечно, в каждой комбинации всегда есть плохие случаи. Вы можете скачать все мои GIF -файлы с Baidu NetDisk (размер файла 2G).
[1] Пространственные трансформаторные сети
[2] надежное распознавание текста сцены с помощью автоматической выпрямления
[3] 数值方法 --— 薄板样条插值 (сплайн тонкого пластина)