«Abolition de Hanko» que M. Kono a commencé par une réforme administrative D'autre part, le Conseil Hanko n'est pas d'accord avec "les moyens les plus efficaces de vérification d'identité" (Référence «Hanko Council» Les mentions légales sont efficaces pour la vérification d'identité «Request for abolition»)
Très bien ... osons demander! "** Hanko a-t-il vraiment la possibilité de vérifier votre identité? **" Afin de vérifier ce paradoxe, j'ai réalisé un "générateur de hanko" avec GAN (Generative Adversarial Network).
«Pour le moment, j'ai essayé de faire une signature manuscrite et un échantillon de Hanko par la force.
―― D'une manière ou d'une autre, quand vous le regardez comme ça, il est manquant, incliné ou mince, et même si la même personne pousse le même format de trois phrases, il y a pas mal de variations.
Ensuite, divisez chaque timbre ――Il est difficile de faire un travail manuel avec un logiciel de traitement d'image, et je veux faire correspondre les spécifications de données avec 64 * 64 pixels de MNIST, j'ai donc créé un programme simple. (Référence)
import os
import glob
import numpy as np
import skimage.util
import skimage.io
import skimage.transform
out_size = 64 #Taille de sortie finale (horizontale, verticale)
img = skimage.io.imread('data/low/hanko.jpg')
print(img.shape)
# (3307, 2340, 3)
#Si la taille est à mi-chemin et ne peut pas être divisée ici, une erreur se produira, donc redimensionner
img_ = skimage.transform.resize(img, (64*14, 64*10), anti_aliasing=True)
img_gray = skimage.color.rgb2gray(img_) #Conversion de l'échelle de gris
print(img_gray.shape)
#(3307, 2340)
blocks = skimage.util.view_as_blocks(img_gray, (img_gray.shape[0]//14, img_gray.shape[1]//10)).squeeze()
print(blocks.shape)
# (14, 10, 64, 64)
path_to_out = 'data/low/hanko/' #Destination de sortie
os.makedirs(path_to_out, exist_ok=True) #Créer sinon
file_list = glob.glob(path_to_out + "hanko*jpg") #Vérification et suppression d'existence
for f in file_list: os.remove(f)
idx = 0
for i in range(14):
for j in range(10):
skimage.io.imsave(path_to_out + 'hanko{:0=3}.jpg'.format(idx), blocks[i,j])
idx += 1
Le programme est fondamentalement le même que celui présenté dans le livre suivant. (Les principes détaillés du contenu sont omis ici)
"Apprenez en créant! Développement en deep learning par PyTorch" --Chapitre 5 Génération d'images par GAN (DCGAN, Self-Attention GAN)
Réserver: https://www.amazon.co.jp/dp/4839970254
Exemple de programme: https://github.com/YutaroOgawa/pytorch_advanced/tree/master/3_semantic_segmentation
Partiellement modifié comme ci-dessous --Récrivez correctement le chemin du dossier et ajustez le nombre d'échantillons de données ―― Dans le cas du MNIST original (jeu de données de nombres manuscrits), il était de 200, mais cette fois il est de 140, ce qui est 60 de moins. Est-ce que ça va ···
def make_datapath_list():
train_img_list = list()
img_num = 140 #Le nombre d'échantillons
for img_idx in range(img_num):
img_path = "../data/low/hanko/hanko{:0=3}.jpg ".format(img_idx)
train_img_list.append(img_path)
return train_img_list
import sys
args = sys.argv
num_epochs = int(args[1]) if len(args)>1 else 300
G_update, D_update = train_model(
G, D, dataloader=train_dataloader, num_epochs=num_epochs)
Code source
https://github.com/ishihara-jp/HankoGenerator/tree/main/SAGAN
Résultat d'exécution ――Oh, je peux voir un peu! (Le temps d'apprentissage est d'environ 10 minutes sur GPU)
―― Regardez la carte d'auto-attention à ce moment (plus la couleur est foncée, plus vous portez attention lors de la génération de l'image).
―― D'une certaine manière, il semble qu'il s'enflamme autour de Hanko
Essayez d'augmenter l'époque (nombre d'essais d'apprentissage) de 300 à 500
-Je peux le voir! Tu peux le voir! ... Ensuite, c'est le double de 1000 époques!
Le contraste de la carte d'auto-attention est devenu clair.
――Il semble que la partie sombre en haut à droite du tampon fonctionne. Vous voyez peut-être l'habitude d'atterrir en haut à droite lorsque vous appuyez sur le timbre (interprétation arbitraire)
Maintenant c'est un problème. A et B hanko. Quel est le vrai?
Peux tu le repérer?
Vous pourrez peut-être dire par la profondeur de la couleur, mais cela peut être impossible à distinguer à première vue.
Peut-être dit-on que "Si vous dupliquez avec ce type de traitement d'image, ce sera un seul coup", Le générateur Hanko a fait cette fois juste entrer un nombre aléatoire L'endroit où vous pouvez faire "** infini faux hanko **" est le miso.
Ce n'est pas seulement une copie, mais tout comme mes variations push, GAN crée une variété de hanko.
Cette fois, c'est ce niveau avec un petit nombre d'échantillons préparés au premier plan miso et un programme de base. Le dernier GAN, Deepfake, est destiné aux vrais et faux visages, même en ciblant le «visage» qui aurait la plus grande discrimination humaine. Il a atteint un niveau où il est presque impossible de le distinguer.
Alors, je suis arrivé à la conclusion que "** A l'ère de l'IA, la capacité d'Hanko à prouver son identité est déjà douteuse **".
(Ne faites pas un tsukkomi naïf que vous pouvez dire à l'encre ou à la viande rouge!)
À propos, la bonne réponse est B. A était un faux généré par GAN.
Même si l'œil humain peut être trompé, il peut être possible de le détecter dans des calculs informatiques. Par conséquent, je voudrais calculer la similitude entre les images Hanko réelles et fausses en utilisant la «correspondance des points caractéristiques» utilisée dans le jugement des empreintes digitales. Je publierai un article s'il y a un besoin.
Recommended Posts