Keras реализация SVHN

искусственный интеллект GitHub Keras Архитектура

Abstract

SVHN — это набор данных номеров просмотра улиц, опубликованный Google в 2013 году.Multi-digit Number Recognition from Street View Imagery using Deep Convolutional Neural Networks” предоставляет обходной путь и утверждает, что этот метод может взломать все капчи.

В этом блоге будет кратко изложена статья, реализована модель с использованием Keras и проведено ее обучение на наборе данных SVHN.

Метод в этой статье в основном используется в качестве основы для обучения набора данных SVHN. Авторы говорят, что его метод обеспечивает точность более 96 процентов.

Требования миссии

Давайте сначала посмотрим на набор данных, который на самом деле является номером из просмотра улиц.

прошлая практика

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

Авторская практика

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

Вклад автора

  • (a) A unified model to localize, segment, and recognize multi-digit numbers from street level photographs
  • (b) A new kind of output layer, providing a conditional probabilistic model of sequences
  • (c) Empirical results that show this model performing best with a deep architecture
  • (d) Reaching human level performance at specific operating thresholds.

описание проблемы

Числа на картинках: Числа на каждой картинке представляют собой последовательность строк:s = s_1 , s_2 , . . . , s_n, например, результат первого изображения выше — «379»,s_1=3, s_2=7, s_3=9.

Длина символа: определяется как n, подавляющее большинство длин меньше 5. Здесь автор предполагает, что максимальная длина символов равна 5.

Выполнение

Авторский метод заключается в обучении вероятностной модели метки изображения. Здесь автор определяет:

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

Здесь цель состоит в том, чтобы максимизироватьlog P (S | X ), изучить модельP (S | X ).

X на самом деле входное изображение, вот посмотрите на S, S это: цифровая последовательность изображенияS_1,...,S_N+ длина последовательности чиселLколлекция . Например, указанное выше «379» — это числовая последовательность изображения, а длина последовательности len («379») равна 3. Тогда S равно «3» + «379», то есть «3379».

здесьP (S | X )Его можно определить как: вероятность длины символа, умноженная на вероятность значения каждого символа. (каждое значение символа независимо).

P(S=s|X)=P(L=n|X)\prod_{i=1}^nP(S_i =s_i |X)

Все вышеперечисленные переменные дискретны,LИмеется семь значений: 0, 1, 2, ...., 5, больше 5;S_iЕсть 10 видов: 10 номеров.

Обучение этой модели заключается в максимизации тренировочного набораlog P (S | X ), здесь автор использует слой Softmax для каждого параметра.

s = (l,s_1,...,s_l) = \arg\max_{L,S_1,...,S_L}logP(S | X).

Структура модели

Ниже взгляните на модель, опубликованную автором в статье.

  • входное изображениеXэто изображение размером 128x128x3.
  • Затем, после серии слоев CNN для извлечения признаков, он становится вектором, содержащим 4096 признаков.
  • Тогда по этим 4096 признакам пустьL,S_1,S_2,S_3,S_4,S_5Пройти через слой Softmax соответственноP(S_i|H)=softmax(W_{S_i}H+b_{S_i}).
  • Для каждой переменнойs_i = \arg\max_{S_i}logP(S_i | H).

Реализация Кераса

См. код:GitHub.com/yourado/beautiful-is…

зависит от окружающей среды

  • python 3.x
  • TensorFlow 1.11
  • Keras 2.x
  • Pillow
  • h5py

загрузка данных

иди первыйUF LDL Стэнфорд Квота/номер дома…скачатьFormat 1Данные.

wget http://ufldl.stanford.edu/housenumbers/test.tar.gz
wget http://ufldl.stanford.edu/housenumbers/train.tar.gz

Затем распакуйте данные и обнаружите, что после распаковки будут еще две папки: test и train.

tar zvxf test.tar.gz
tar zvxf train.tar.gz

Создайте набор данных

Этот набор данных можно прочитать с помощью h5py.

Среди них bbox хранит номер кадра изображения, а name — имя файла изображения. Например, прочитайте следующую картинку:
Затем обрежьте картинку через рамку.

сетевая модель

Сетевая модель разделена на сверточный слой + часть полносвязного слоя, код выглядит следующим образом.

сверточный слой

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

полносвязный слой

После того, как сверточный слой окончательно проходит через Flatten, он попадает в полносвязный слой. Наконец, полностью подключенный слой выводится на 6 слоев softmax, которые представляют: длину символа, первый символ, второй символ, третий символ, четвертый символ и четвертый символ.

Примечание: категория символов здесь 0-10, всего 11 типов, 10 означает нет.

тренируйся и тестируй

Затем вызовите метод подгонки для обучения, всего 7 потерь и 6 точности. Для потерь есть по одному для каждого выходного слоя softmax, а есть общее. Точность - это точность 6 слоев softmax.

Наконец, давайте оценим это, и мы можем добиться точности более 85% для всех 6 точности. Если вы хотите улучшить, вы можете использовать такие структуры, как VGG16.В Интернете говорится, что его можно улучшить до 97%, но, по оценкам, обучение будет очень медленным.

Расширенный случай: код подтверждения Weibo

Кроме того, автор также использует этот метод, чтобы дать код реализации распознавания кода подтверждения входа в систему Sina Weibo, см.:captcha-break/weibo.com.

Но я не знаю, изменился ли сейчас проверочный код Sina Weibo.Когда я использовал облако для кодирования, его проверочный код выглядел так:

Ссылаться на