Bonjour Licht. Suivant ici, Tutoriel Deep Learning Chapitre 3 Décrit la reconnaissance de caractères à l'aide d'un modèle.
Nous utiliserons le modèle 16 généré par le machine learning de Deep Learning dans le chapitre 2. Tout d'abord, préparons une image de Hira Kana. En fait, celle avec la police qui n'est pas dans les données utilisées pour l'apprentissage est bonne, mais il est difficile de la trouver, alors préparez-la pour le texte.
Si vous avez du mal à le trouver, veuillez télécharger et utiliser l'image ci-dessous. (J'ai écrit «A» dans OneNote et l'ai découpé en tant qu'image)
Placez l'image précédente "A" (a.png) dans le même répertoire que model16,
Entrez la commande suivante depuis le terminal
python hiraganaNN_predictor.py --img a.png --model model16
Puis dans la sortie
Numéro de neurone candidat:1, Unicode:3042,Hiragana:Ah
Numéro de neurone candidat:1, Unicode:3042,Hiragana:Ah
Numéro de neurone candidat:1, Unicode:3042,Hiragana:Ah
Numéro de neurone candidat:1, Unicode:3042,Hiragana:Ah
Numéro de neurone candidat:1, Unicode:3042,Hiragana:Ah
Numéro de neurone candidat:1, Unicode:3042,Hiragana:Ah
Numéro de neurone candidat:1, Unicode:3042,Hiragana:Ah
Numéro de neurone candidat:1, Unicode:3042,Hiragana:Ah
Numéro de neurone candidat:1, Unicode:3042,Hiragana:Ah
Numéro de neurone candidat:1, Unicode:3042,Hiragana:Ah
Numéro de neurone candidat:10, Unicode:304b,Hiragana:Ou
Numéro de neurone candidat:1, Unicode:3042,Hiragana:Ah
Numéro de neurone candidat:78, Unicode:308f,Hiragana:sensationnel
Numéro de neurone candidat:1, Unicode:3042,Hiragana:Ah
**Numéro de neurone du jugement final:1, Unicode:3042,Hiragana:Ah**
Le résultat de la prédiction est sorti. Bien qu'il y ait «ka» et «wa» parmi les candidats, le résultat du jugement final est «a», donc la reconnaissance est réussie. Ce candidat est le résultat de la reconnaissance de chaque image lorsqu'une image est agrandie à plusieurs (14 images). Le jugement final est la moyenne de chaque résultat de reconnaissance.
TTA (Test Time Argumentation) que cela n'est pas jugé à partir d'une seule image, mais qu'il est jugé sous différents angles pour améliorer la précision de la reconnaissance. C'est le même concept que la méthode. Essayez également d'autres perceptions.
a2.png reconnaissance
python hiraganaNN_predictor.py --img a2.png --model model16
résultat
**Numéro de neurone du jugement final:1, Unicode:3042,Hiragana:Ah**
a3.png reconnaissance
python hiraganaNN_predictor.py --img a2.png --model model16
résultat
**Numéro de neurone du jugement final:1, Unicode:3042,Hiragana:Ah**
C'est bon.
Essayons une reconnaissance un peu plus difficile car c'est la bonne réponse. Reconnaissons le "A" manuscrit.
Pour être honnête, c'est déraisonnable, mais faisons-le.
python hiraganaNN_predictor.py --img a_tegaki.png --model model16
Commencer la reconnaissance avec
Numéro de neurone candidat:71, Unicode:3088,Hiragana:Yo
Numéro de neurone candidat:30, Unicode:305f,Hiragana:Ta
Numéro de neurone candidat:71, Unicode:3088,Hiragana:Yo
Numéro de neurone candidat:1, Unicode:3042,Hiragana:Ah
Numéro de neurone candidat:24, Unicode:3059,Hiragana:Su
Numéro de neurone candidat:71, Unicode:3088,Hiragana:Yo
Numéro de neurone candidat:30, Unicode:305f,Hiragana:Ta
Numéro de neurone candidat:24, Unicode:3059,Hiragana:Su
Numéro de neurone candidat:32, Unicode:3061,Hiragana:Chi
Numéro de neurone candidat:32, Unicode:3061,Hiragana:Chi
Numéro de neurone candidat:24, Unicode:3059,Hiragana:Su
Numéro de neurone candidat:30, Unicode:305f,Hiragana:Ta
Numéro de neurone candidat:1, Unicode:3042,Hiragana:Ah
Numéro de neurone candidat:1, Unicode:3042,Hiragana:Ah
**Numéro de neurone du jugement final:32, Unicode:3061,Hiragana:Chi**
C'est un échec! Lol Il y a un petit "A" comme candidat, mais ce n'était pas bon car c'était la décision finale "Chi". Eh bien, le modèle 16 a une perte de 0,526, et je l'ai appris en version imprimée, donc c'est comme ça. Cependant, si vous essayez avec un modèle avec perte réduite à 0,237 en appliquant certaines mesures d'amélioration dans les chapitres suivants
python hiraganaNN_predictor.py --img a2.png --model loss237model
Numéro de neurone candidat:30, Unicode:305f,Hiragana:Ta
Numéro de neurone candidat:52, Unicode:3075,Hiragana:Fu
Numéro de neurone candidat:52, Unicode:3075,Hiragana:Fu
Numéro de neurone candidat:1, Unicode:3042,Hiragana:Ah
Numéro de neurone candidat:1, Unicode:3042,Hiragana:Ah
Numéro de neurone candidat:32, Unicode:3061,Hiragana:Chi
Numéro de neurone candidat:71, Unicode:3088,Hiragana:Yo
Numéro de neurone candidat:52, Unicode:3075,Hiragana:Fu
Numéro de neurone candidat:9, Unicode:304a,Hiragana:Oh
Numéro de neurone candidat:52, Unicode:3075,Hiragana:Fu
Numéro de neurone candidat:9, Unicode:304a,Hiragana:Oh
Numéro de neurone candidat:1, Unicode:3042,Hiragana:Ah
Numéro de neurone candidat:9, Unicode:304a,Hiragana:Oh
Numéro de neurone candidat:10, Unicode:304b,Hiragana:Ou
**Numéro de neurone du jugement final:1, Unicode:3042,Hiragana:Ah**
Je peux le reconnaître correctement (même si c'est à peine)! Fondamentalement, nous avons utilisé des données d'impression comme données d'apprentissage pour l'apprentissage automatique, mais c'est un modèle qui peut reconnaître un peu l'écriture manuscrite. Puisque les candidats le reconnaissent par erreur, nous pouvons voir l'utilité de TTA.
Au fait Il y a 3 «A» et 4 «Fu» comme candidats, alors pourquoi la décision finale est-elle «A»? Si vous pensez, c'est génial! Cependant, nous ne prenons pas ici une décision à la majorité simple. Nous examinons les résultats de la prise de décisions plus confiantes. En d'autres termes, alors que les quatre «fu» ont été prédits par Ayafuya, trois «A» étaient confiants, le jugement final était donc «A».
Enfin, un aperçu du code source. Principalement identique à hiraganaNN.py utilisé pour l'apprentissage automatique.
def forward(x_data, train=False):
x = chainer.Variable(x_data, volatile=not train)
h = F.max_pooling_2d(F.relu(model.bn1(model.conv1(x))), 2)
h = F.max_pooling_2d(F.relu(model.bn2(model.conv2(h))), 2)
h = F.max_pooling_2d(F.relu(model.conv3(h)), 2)
h = F.dropout(F.relu(model.fl4(h)), train=train)
y = model.fl5(h)
return y.data
Il s'agit de la structure du réseau neuronal de Deep Learning et devrait avoir la même structure que l'avant de hiraganaNN.py.
src = cv2.imread(args.img, 0)
src = cv2.copyMakeBorder(
src, 20, 20, 20, 20, cv2.BORDER_CONSTANT, value=255)
src = cv2.resize(src, (IMGSIZE, IMGSIZE))
Lisez l'image d'entrée et redimensionnez à la taille d'image de 64 * 64. En outre, l'image a une marge de 20 pixels chacun. Avec le modèle actuel, il ne peut être bien reconnu que si la marge est un montant approprié.
for x in xrange(0, 14):
dst = dargs.argumentation([2, 3])
ret, dst = cv2.threshold(dst,
23,
255,
cv2.THRESH_BINARY)
#Pour la confirmation de l'image
#cv2.imshow('ARGUMENTATED', dst)
#cv2.waitKey(0)
#cv2.destroyAllWindows()
xtest = np.array(dst).astype(np.float32).reshape(
(1, 1, IMGSIZE, IMGSIZE)) / 255
if result is None:
result = forward(xtest)
else:
result = result + forward(xtest)
Après avoir agrandi les données de l'image d'entrée et les avoir binarisées, la valeur de pixel est normalisée à 0-1 et prédite par la fonction avant.
tmp = np.argmax(forward(xtest))
for strunicode, number in unicode2number.iteritems():
if number == tmp:
hiragana = unichr(int(strunicode, 16))
print 'Numéro de neurone candidat:{0}, Unicode:{1},Hiragana:{2}'.format(number, strunicode, hiragana.encode('utf_8'))
Le résultat de la reconnaissance du réseau neuronal (nombre 0-82) est converti en unicode et sorti en hiragana. Le chapitre 3 se termine ici. Dans le chapitre 4, nous allons agrandir une image à 3500 pour voir la précision.
chapitre | Titre |
---|---|
Chapitre 1 | Construire un environnement Deep Learning basé sur le chainer |
Chapitre 2 | Création d'un modèle de prédiction Deep Learning par Machine Learning |
chapitre 3 | Reconnaissance de caractères à l'aide d'un modèle |
Chapitre 4 | Amélioration de la précision de la reconnaissance en élargissant les données |
Chapitre 5 | Introduction à Neural Net et explication du code source |
Chapitre 6 | Amélioration de l'efficacité d'apprentissage en sélectionnant Optimizer |
Chapitre 7 | TTA,Amélioration de l'efficacité d'apprentissage par la normalisation des lots |
Recommended Posts