capcha icon indicating copy to clipboard operation
capcha copied to clipboard

train the neural network for captcha recognition

Profile views GitHub top language GitHub language count GitHub code size in bytes GitHub repo size GitHub GitHub last commit

GitHub User's stars

Распознавание чисел капчи Wmail.ru от 0 до 9 на изображениях с помощью сверточной нейронной сети

Для распознавания используется сверточная нейронная сеть.

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

Каталог с данными для обучения

'train'

Каталог с данными для проверки

'images'

Размеры изображения

img_width, img_height = 18, 60

Количество эпох

epochs = 75

Размер мини-выборки

batch_size = 320

Количество изображений для обучения

nb_train_samples = 13691

Количество изображений для проверки

nb_validation_samples = 3490

Количество изображений для тестирования

nb_test_samples = 3490

используем VGG-подобную сверточную нейросеть

компилируем модель с помощью SGD

обучаем нейросеть

H = model.fit_generator(aug.flow(trainX, trainY, batch_size=BS), validation_data=(testX, testY), steps_per_epoch=len(trainX) // BS, epochs=EPOCHS)


Epoch 1/75
320/320 [==============================] - 45s 138ms/step - loss: 3.0718 - accuracy: 0.1586 - val_loss: 2.8747 - val_accuracy: 0.2039
Epoch 2/75
320/320 [==============================] - 45s 141ms/step - loss: 2.0340 - accuracy: 0.3405 - val_loss: 1.5463 - val_accuracy: 0.4949
Epoch 3/75
320/320 [==============================] - 45s 141ms/step - loss: 1.6661 - accuracy: 0.4304 - val_loss: 1.8066 - val_accuracy: 0.3734
Epoch 4/75
320/320 [==============================] - 46s 143ms/step - loss: 1.4168 - accuracy: 0.5179 - val_loss: 5.4259 - val_accuracy: 0.2612
Epoch 5/75
320/320 [==============================] - 47s 148ms/step - loss: 1.3071 - accuracy: 0.5456 - val_loss: 4.1710 - val_accuracy: 0.2384
Epoch 6/75
320/320 [==============================] - 46s 144ms/step - loss: 1.1419 - accuracy: 0.6007 - val_loss: 2.4280 - val_accuracy: 0.3731
Epoch 7/75
320/320 [==============================] - 52s 162ms/step - loss: 1.0775 - accuracy: 0.6175 - val_loss: 1.3217 - val_accuracy: 0.5463
Epoch 8/75
320/320 [==============================] - 50s 154ms/step - loss: 1.0251 - accuracy: 0.6398 - val_loss: 2.0804 - val_accuracy: 0.4455
Epoch 9/75
320/320 [==============================] - 49s 152ms/step - loss: 0.9256 - accuracy: 0.6727 - val_loss: 2.0043 - val_accuracy: 0.4657
Epoch 10/75
320/320 [==============================] - 49s 154ms/step - loss: 0.8982 - accuracy: 0.6898 - val_loss: 0.5300 - val_accuracy: 0.8057
Epoch 11/75
320/320 [==============================] - 49s 154ms/step - loss: 0.8588 - accuracy: 0.6939 - val_loss: 0.8826 - val_accuracy: 0.6892
Epoch 12/75
320/320 [==============================] - 49s 153ms/step - loss: 0.7952 - accuracy: 0.7281 - val_loss: 1.3459 - val_accuracy: 0.5805
Epoch 13/75
320/320 [==============================] - 49s 153ms/step - loss: 0.8165 - accuracy: 0.7150 - val_loss: 0.2727 - val_accuracy: 0.9115
Epoch 14/75
320/320 [==============================] - 50s 156ms/step - loss: 0.7523 - accuracy: 0.7351 - val_loss: 0.4619 - val_accuracy: 0.8349
Epoch 15/75
320/320 [==============================] - 49s 154ms/step - loss: 0.7059 - accuracy: 0.7493 - val_loss: 0.2661 - val_accuracy: 0.9094
Epoch 16/75
320/320 [==============================] - 51s 160ms/step - loss: 0.6947 - accuracy: 0.7590 - val_loss: 0.5004 - val_accuracy: 0.8133
Epoch 17/75
320/320 [==============================] - 51s 158ms/step - loss: 0.6710 - accuracy: 0.7668 - val_loss: 0.4021 - val_accuracy: 0.8522
Epoch 18/75
320/320 [==============================] - 51s 161ms/step - loss: 0.6725 - accuracy: 0.7706 - val_loss: 0.4330 - val_accuracy: 0.8498
Epoch 19/75
320/320 [==============================] - 51s 158ms/step - loss: 0.6192 - accuracy: 0.7829 - val_loss: 1.1799 - val_accuracy: 0.6544
Epoch 20/75
320/320 [==============================] - 49s 153ms/step - loss: 0.6304 - accuracy: 0.7818 - val_loss: 0.5104 - val_accuracy: 0.8127
Epoch 21/75
320/320 [==============================] - 49s 154ms/step - loss: 0.6187 - accuracy: 0.7840 - val_loss: 0.2027 - val_accuracy: 0.9375
Epoch 22/75
320/320 [==============================] - 49s 154ms/step - loss: 0.5515 - accuracy: 0.8119 - val_loss: 0.2799 - val_accuracy: 0.8986
Epoch 23/75
320/320 [==============================] - 50s 157ms/step - loss: 0.5742 - accuracy: 0.7989 - val_loss: 3.6793 - val_accuracy: 0.3012
Epoch 24/75
320/320 [==============================] - 51s 160ms/step - loss: 0.5306 - accuracy: 0.8096 - val_loss: 0.1548 - val_accuracy: 0.9480
Epoch 25/75
320/320 [==============================] - 52s 162ms/step - loss: 0.5399 - accuracy: 0.8171 - val_loss: 0.1523 - val_accuracy: 0.9477
Epoch 26/75
320/320 [==============================] - 51s 158ms/step - loss: 0.5281 - accuracy: 0.8157 - val_loss: 0.8797 - val_accuracy: 0.7076
Epoch 27/75
320/320 [==============================] - 52s 161ms/step - loss: 0.5107 - accuracy: 0.8269 - val_loss: 0.3116 - val_accuracy: 0.8934
Epoch 28/75
320/320 [==============================] - 53s 166ms/step - loss: 0.4681 - accuracy: 0.8397 - val_loss: 0.1853 - val_accuracy: 0.9366
Epoch 29/75
320/320 [==============================] - 52s 162ms/step - loss: 0.5115 - accuracy: 0.8284 - val_loss: 0.4041 - val_accuracy: 0.8604
Epoch 30/75
320/320 [==============================] - 53s 165ms/step - loss: 0.4654 - accuracy: 0.8332 - val_loss: 0.1272 - val_accuracy: 0.9559
Epoch 31/75
320/320 [==============================] - 52s 161ms/step - loss: 0.4699 - accuracy: 0.8364 - val_loss: 0.5959 - val_accuracy: 0.7905
Epoch 32/75
320/320 [==============================] - 50s 157ms/step - loss: 0.4488 - accuracy: 0.8444 - val_loss: 0.1304 - val_accuracy: 0.9588
Epoch 33/75
320/320 [==============================] - 50s 155ms/step - loss: 0.4422 - accuracy: 0.8481 - val_loss: 1.6404 - val_accuracy: 0.5732
Epoch 34/75
320/320 [==============================] - 50s 155ms/step - loss: 0.4337 - accuracy: 0.8500 - val_loss: 0.0986 - val_accuracy: 0.9673
Epoch 35/75
320/320 [==============================] - 52s 162ms/step - loss: 0.4061 - accuracy: 0.8590 - val_loss: 1.2640 - val_accuracy: 0.6339
Epoch 36/75
320/320 [==============================] - 51s 160ms/step - loss: 0.3999 - accuracy: 0.8570 - val_loss: 0.2862 - val_accuracy: 0.8989
Epoch 37/75
320/320 [==============================] - 49s 153ms/step - loss: 0.3947 - accuracy: 0.8643 - val_loss: 0.1509 - val_accuracy: 0.9480
Epoch 38/75
320/320 [==============================] - 51s 158ms/step - loss: 0.3789 - accuracy: 0.8676 - val_loss: 0.5706 - val_accuracy: 0.8092
Epoch 39/75
320/320 [==============================] - 50s 155ms/step - loss: 0.4204 - accuracy: 0.8613 - val_loss: 0.1649 - val_accuracy: 0.9404
Epoch 40/75
320/320 [==============================] - 49s 152ms/step - loss: 0.3780 - accuracy: 0.8704 - val_loss: 0.4611 - val_accuracy: 0.8472
Epoch 41/75
320/320 [==============================] - 48s 151ms/step - loss: 0.3882 - accuracy: 0.8667 - val_loss: 0.0660 - val_accuracy: 0.9804
Epoch 42/75
320/320 [==============================] - 49s 155ms/step - loss: 0.3687 - accuracy: 0.8701 - val_loss: 0.3412 - val_accuracy: 0.8837
Epoch 43/75
320/320 [==============================] - 50s 156ms/step - loss: 0.3591 - accuracy: 0.8837 - val_loss: 0.3206 - val_accuracy: 0.8899
Epoch 44/75
320/320 [==============================] - 50s 157ms/step - loss: 0.3750 - accuracy: 0.8766 - val_loss: 0.0612 - val_accuracy: 0.9796
Epoch 45/75
320/320 [==============================] - 50s 156ms/step - loss: 0.3528 - accuracy: 0.8804 - val_loss: 0.9149 - val_accuracy: 0.7476
Epoch 46/75
320/320 [==============================] - 50s 156ms/step - loss: 0.3478 - accuracy: 0.8804 - val_loss: 0.0685 - val_accuracy: 0.9804
Epoch 47/75
320/320 [==============================] - 51s 159ms/step - loss: 0.3290 - accuracy: 0.8878 - val_loss: 0.1138 - val_accuracy: 0.9571
Epoch 48/75
320/320 [==============================] - 52s 162ms/step - loss: 0.3594 - accuracy: 0.8716 - val_loss: 0.1523 - val_accuracy: 0.9436
Epoch 49/75
320/320 [==============================] - 50s 155ms/step - loss: 0.3354 - accuracy: 0.8867 - val_loss: 0.2443 - val_accuracy: 0.9135
Epoch 50/75
320/320 [==============================] - 50s 155ms/step - loss: 0.3262 - accuracy: 0.8859 - val_loss: 0.1149 - val_accuracy: 0.9571
Epoch 51/75
320/320 [==============================] - 50s 155ms/step - loss: 0.3373 - accuracy: 0.8873 - val_loss: 0.0711 - val_accuracy: 0.9772
Epoch 52/75
320/320 [==============================] - 51s 159ms/step - loss: 0.3326 - accuracy: 0.8867 - val_loss: 1.8877 - val_accuracy: 0.5349
Epoch 53/75
320/320 [==============================] - 51s 159ms/step - loss: 0.3179 - accuracy: 0.8933 - val_loss: 0.1751 - val_accuracy: 0.9401
Epoch 54/75
320/320 [==============================] - 52s 163ms/step - loss: 0.3258 - accuracy: 0.8939 - val_loss: 0.1542 - val_accuracy: 0.9454
Epoch 55/75
320/320 [==============================] - 52s 162ms/step - loss: 0.3072 - accuracy: 0.8929 - val_loss: 0.6961 - val_accuracy: 0.7742
Epoch 56/75
320/320 [==============================] - 52s 163ms/step - loss: 0.3246 - accuracy: 0.8920 - val_loss: 0.1306 - val_accuracy: 0.9535
Epoch 57/75
320/320 [==============================] - 52s 164ms/step - loss: 0.2910 - accuracy: 0.9028 - val_loss: 0.2006 - val_accuracy: 0.9360
Epoch 58/75
320/320 [==============================] - 52s 163ms/step - loss: 0.3061 - accuracy: 0.8957 - val_loss: 0.1173 - val_accuracy: 0.9597
Epoch 59/75
320/320 [==============================] - 53s 165ms/step - loss: 0.2842 - accuracy: 0.9022 - val_loss: 0.0547 - val_accuracy: 0.9842
Epoch 60/75
320/320 [==============================] - 51s 159ms/step - loss: 0.2968 - accuracy: 0.8941 - val_loss: 0.0429 - val_accuracy: 0.9871
Epoch 61/75
320/320 [==============================] - 54s 170ms/step - loss: 0.2732 - accuracy: 0.9094 - val_loss: 0.7990 - val_accuracy: 0.7441
Epoch 62/75
320/320 [==============================] - 54s 168ms/step - loss: 0.2783 - accuracy: 0.9033 - val_loss: 0.1100 - val_accuracy: 0.9609
Epoch 63/75
320/320 [==============================] - 54s 168ms/step - loss: 0.2693 - accuracy: 0.9058 - val_loss: 0.3150 - val_accuracy: 0.8916
Epoch 64/75
320/320 [==============================] - 52s 162ms/step - loss: 0.2852 - accuracy: 0.9018 - val_loss: 0.1812 - val_accuracy: 0.9363
Epoch 65/75
320/320 [==============================] - 51s 160ms/step - loss: 0.2904 - accuracy: 0.8992 - val_loss: 0.2737 - val_accuracy: 0.9024
Epoch 66/75
320/320 [==============================] - 52s 162ms/step - loss: 0.2670 - accuracy: 0.9089 - val_loss: 1.3612 - val_accuracy: 0.6415
Epoch 67/75
320/320 [==============================] - 49s 152ms/step - loss: 0.2740 - accuracy: 0.9065 - val_loss: 0.0618 - val_accuracy: 0.9810
Epoch 68/75
320/320 [==============================] - 49s 152ms/step - loss: 0.2846 - accuracy: 0.9000 - val_loss: 0.0780 - val_accuracy: 0.9760
Epoch 69/75
320/320 [==============================] - 49s 152ms/step - loss: 0.2704 - accuracy: 0.9121 - val_loss: 0.0647 - val_accuracy: 0.9769
Epoch 70/75
320/320 [==============================] - 49s 153ms/step - loss: 0.2710 - accuracy: 0.9077 - val_loss: 0.0791 - val_accuracy: 0.9758
Epoch 71/75
320/320 [==============================] - 50s 155ms/step - loss: 0.2744 - accuracy: 0.9017 - val_loss: 0.3773 - val_accuracy: 0.8744
Epoch 72/75
320/320 [==============================] - 49s 154ms/step - loss: 0.2684 - accuracy: 0.9076 - val_loss: 0.0712 - val_accuracy: 0.9749
Epoch 73/75
320/320 [==============================] - 49s 153ms/step - loss: 0.2570 - accuracy: 0.9126 - val_loss: 0.0327 - val_accuracy: 0.9901
Epoch 74/75
320/320 [==============================] - 49s 153ms/step - loss: 0.2493 - accuracy: 0.9140 - val_loss: 0.0797 - val_accuracy: 0.9714
Epoch 75/75
320/320 [==============================] - 49s 153ms/step - loss: 0.2645 - accuracy: 0.9102 - val_loss: 0.0379 - val_accuracy: 0.9901

[INFO] evaluating network...
              precision    recall  f1-score   support

           0       0.98      1.00      0.99       142
           1       1.00      0.99      0.99       695
           2       0.98      0.99      0.99       268
           3       0.99      0.97      0.98       289
           4       1.00      1.00      1.00       338
           5       1.00      0.98      0.99       290
           6       0.96      0.99      0.98       278
           7       0.98      1.00      0.99       321
           8       0.98      0.99      0.99       266
           9       1.00      1.00      1.00       536

    accuracy                           0.99      3423
   macro avg       0.99      0.99      0.99      3423
weighted avg       0.99      0.99      0.99      3423

оцениваем нейросеть

Итоговая точность 99% из 3423 файлов