[PYTHON] [AI] Apprentissage en profondeur pour le débruitage d'image

introduction

Cela fait longtemps que Deep Learning n'a pas fermement établi sa position dans le domaine de l'apprentissage d'opportunité. Il existe de nombreux domaines d'application du Deep Learning, mais cette fois je voudrais présenter un bref résumé et quelques démos sur l'application de "Image Denoising", qui est extrêmement utile et pratique. .. Nous effectuons également un débruitage et un débruitage normaux lorsque seules les images de bruit sont disponibles comme paramètre proche du problème réel.

Qu'est-ce que le débruitage d'image?

Le débruitage d'image est littéralement "suppression du bruit de l'image". Du bruit est ajouté aux photos et aux données vidéo prises avec un appareil photo en raison de divers facteurs tels que l'environnement de prise de vue, ce qui entraîne une diminution de la visibilité par rapport à l'image d'origine. La restauration de l'image originale à partir d'une image avec un tel bruit est appelée débruitage, et elle est appliquée non seulement aux images que nous voyons habituellement, mais également au domaine des images médicales telles que la suppression du bruit des images CT et IRM. Ça a été.

Deep Learning for Image Denoising

Les processus de lissage tels que les filtres médians, les filtres gaussiens et les moyennes mobiles ont longtemps été utilisés comme méthodes de base pour éliminer le bruit des images. Dans le domaine de l'apprentissage automatique, la méthode elle-même utilisant le réseau de neurones est proposée depuis longtemps, mais ce n'est pas la méthode courante. Cependant, à partir de l'invention des réseaux de neurones convolutifs, le Deep Learning a montré des performances écrasantes dans le domaine de l'image, et son application au domaine du débruitage a rapidement progressé. C'est l'un des domaines qui font encore l'objet de recherches jour et nuit, et c'est l'un des principaux sujets des principales conférences de vision par ordinateur.

Ci-dessous, nous présenterons certaines des principales méthodes et démos de débruitage à l'aide de Deep Learning.

Démo 1. Suppression du bruit d'un texte manuscrit

Les données seront à nouveau utilisées en utilisant MNIST (image de texte manuscrite). Apprenez un modèle qui supprime le bruit en utilisant une image avec du bruit comme données d'entrée et l'image d'origine comme des données correctes, et débruit une nouvelle image de bruit.

test.png

Données d'entrée: 50000 images de bruit avec bruit gaussien ajouté aux données de réponse correctes Données de réponse correctes: 50000 images originales

Comme modèle à apprendre, en plus du CNN (Convolutional Neural Network) habituel, nous comparerons les trois suivants.

  1. CAE(Convolutional Autoencoder)

  2. DnCNN(Denoising Convolutional Neural Network)

  3. Win5-RB(Wide Inference Network 5layer + Resnet and BatchNormalization)

  4. CAE(Convolutional Autoencoder) L'autocodeur est un type d'architecture de réseau neuronal qui entraîne les données de sortie pour approcher les données d'entrée, et est principalement utilisé dans le domaine de la réduction de dimension. L'encodeur et le décodeur sont appariés, et la structure est telle que les données d'entrée sont compressées en variables latentes par l'encodeur et restaurées par le décodeur à partir des variables latentes compressées.

En rendant la dimension de la variable latente plus petite que les données d'entrée, il est possible de capturer des caractéristiques de faible dimension qui peuvent reproduire les données d'entrée, et comme un réseau neuronal est utilisé pour l'encodeur et le décodeur, une réduction de dimension non linéaire est possible. Il est utilisé non seulement pour la réduction de dimension mais aussi pour l'élimination du bruit en raison des propriétés de «compression en variables latentes pour capturer les caractéristiques essentielles» et de «récupération d'images avec le décodeur», et transforme l'image d'entrée en image de bruit. Le Denoise est possible en faisant cela (également connu sous le nom de Denoising Autoencoder).

CAE remplace les réseaux neuronaux Encoder et Decoder d'Autoencoder par des réseaux neuronaux convolutifs, et la précision du débruitage à partir des données d'image est grandement améliorée grâce à l'utilisation des réseaux neuronaux convolutifs.

  1. DnCNN(Denoising Convolutional Neural Network) DnCNN, comme son nom l'indique «Denosing», est un CNN visant à supprimer le bruit. DnCNN est un CNN multicouche composé de 17 couches, et se présente sous la forme d'une application répétée de la convolution et de la normalisation par lots à l'image d'entrée.

La normalisation par lots est une méthode pour normaliser la sortie de chaque couche du réseau neuronal, et elle peut supprimer le problème du décalage de covariable interne (la distribution de chaque couche change pendant l'entraînement), ce qui contribue à l'amélioration de l'efficacité et de la précision de l'apprentissage. Je vais. En outre, l'une des principales caractéristiques de DnCNN est qu'il utilise le cadre de ResNet (réseau résiduel), de sorte qu'il estime la composante de bruit à partir de l'image de bruit au lieu d'estimer directement l'image avec le bruit supprimé, et le bruit. L'image d'origine est estimée en supprimant les composants de l'image de bruit. Dans le cadre du débruitage, les valeurs d'entrée et de sortie sont souvent proches les unes des autres, y compris lorsque le niveau de bruit est faible, et il est inefficace d'effectuer un apprentissage proche d'un mappage uniforme avec un mappage non linéaire à l'aide d'un réseau neuronal fini, donc la différence est apprise. Cela améliorera l'efficacité de l'apprentissage. Par exemple, s'il n'y a pas de différence, il n'est pas nécessaire de former le mappage constant avec un réseau neuronal, et le poids de chaque couche peut être simplement défini sur 0. En tant que méthode de mise en œuvre, en contournant la valeur d'entrée telle quelle et en la connectant à la couche finale, le réseau neuronal apprend la différence.

  1. Win5-RB(Wide Inference Network 5layer + Resnet and BatchNormalization) Win5-RB est un modèle dans lequel Wide Inference Network (Win) a 5 couches et est connecté par Resnet (R) et Batch Normalization (B). Dans la tâche de débruitage, non seulement la profondeur de la couche mais aussi le nombre de filtres On prétend qu'il est efficace de rendre la taille du noyau plus grande que le CNN normal, et cela s'appelle Wide Inference. À partir d'expériences de débruitage utilisant diverses données, 128 filtres et une taille de noyau 7x7 ont été adoptés, et la puissance expressive de chaque couche est élevée en raison du nombre de filtres et de la taille de la taille du noyau, et la configuration du réseau est moins profonde que DnCNN. Je vais.

Construction de modèles

La construction du modèle est effectuée à l'aide de Keras sur Google Colaboratory. Le contour de chaque modèle est le suivant.

図12.png

** Divers paramètres d'apprentissage **

--Nombre d'époques: 10

résultat

A titre de test, le résultat du débruitage de l'image de bruit avec le bruit gaussien ajouté est le suivant.

図1.png

Dans CNN, quelque chose comme un flou apparaît dans certaines parties, mais dans CAE, DnCNN, Win5-RB, le bruit peut être bien supprimé à un niveau où la différence par rapport à l'image d'origine est à peine visible.

Win5-RB a la plus grande précision en MSE (erreur quadratique moyenne) avec 10 000 images de test.

modèle MSE
CNN 0.01171
CAE 0.00991
DnCNN 0.00943
Win5-RB 0.00873

Démo sur Flask

En utilisant le modèle entraîné, j'ai fait une démo qui peut être traitée en temps réel par Flask. Il s'agit d'une démonstration chez CAE, mais vous pouvez voir qu'elle supprime bien le bruit.

Démo 2. Denoise dans la situation de données de bruit uniquement

Dans la démonstration 1, nous avons créé un modèle qui supprime les composants de bruit à l'aide d'une image de bruit et d'une image originale sans bruit. Comme vous l'avez peut-être déjà remarqué, est-il possible d'obtenir l'image originale sans bruit en premier lieu? Dans le problème réel, il arrive souvent que l'image originale sans bruit ne soit pas disponible, et tout ce qui est disponible est l'image avec du bruit. Considérant un tel problème réel, nous ferons du débruitage dans une situation où seules des images de bruit peuvent être obtenues.

Noise2Noise Noise2Noise (N2N) est une méthode d'apprentissage d'opportunité de suppression du bruit qui n'utilise que des images de bruit pendant l'apprentissage, et a des performances comparables aux méthodes d'apprentissage qui utilisent des images sans bruit (données de réponse correctes) même si seules des images de bruit sont utilisées. C'est une technique qui peut être émise. En un mot, en apprenant la conversion d'une image de bruit en image de bruit (Noise2Noise), vous apprendrez la conversion d'une image de bruit en une image sans bruit (données de réponse correctes).

図4.png

Voici une brève explication. La tâche de supprimer le bruit de l'image de bruit $ \ hat {x} _i $ et de l'image originale sans bruit $ y_i $ pair $ (\ hat {x} _i, y_i) $ est de minimiser la perte d'expérience suivante. Il est formulé.

\tag{1}
\underset{\theta}{argmin} \displaystyle \sum_i L(f_\theta(\hat{x}_i),y_i)

Où $ f_ {\ theta} $ est le paramètre de conversion (par exemple poids CNN) sous la condition de la fonction de perte $ L $. D'autre part, dans Noise2Noise, l'image correcte est aussi une image de bruit, donc la perte d'expérience suivante où $ y_i $ devient $ \ hat {y} _i $ est minimisée.

\tag{2}
\underset{\theta}{argmin} \displaystyle \sum_i L(f_\theta(\hat{x}_i),\hat{y}_i)

Dans Noise2Noise, distribution cible avec conditions d'entréep(y|x)Paramètres à optimiser même si est remplacé par une distribution avec la même valeur attendue\thetaPrétend que cela ne changera pas. En d'autres termes, même si la cible est une image de bruit, la valeur attendue est$E \{ \hat{y} _i | \hat{x} _i \} = y _i Parce que c'est(1)Quand(2)Obtenu lors de l'optimisationf _\theta$は等価であるQuandいう事になります(Cependant, la variance du résultat de l'estimation est la moyenne de la variance du bruit à la cible divisée par le nombre d'échantillons d'apprentissage.)。

Ceci est facile à comprendre dans le contexte de la régression, et si vous souhaitez déduire le modèle sous-jacent à partir des échantillons résultants, il existe d'innombrables combinaisons d'échantillons dans lesquelles le même modèle peut être déduit. Par conséquent, même si la valeur observée varie en raison du bruit, si la valeur attendue de la variation est la même que celle de l'échantillon d'origine ($ E \ {\ hat {y} _i | \ hat {x} _i \ } = y _i $), le modèle obtenu en minimisant la perte de l'échantillon et le modèle obtenu en minimisant la perte dans une image sans bruit sont les mêmes. C'est la raison pour laquelle il est possible d'apprendre la conversion d'une image de bruit en une image sans bruit (données de réponse correctes) en apprenant la conversion d'une image de bruit en image de bruit (Noise2Noise).

図6.png

Construction de modèles

La formation utilise des images de bruit pour l'entrée et la cible respectivement.

図7.png

Le modèle utilise Win5-RB et utilise les mêmes paramètres d'apprentissage que dans la démonstration 1.

résultat

A titre de test, le résultat du débruitage de l'image de bruit avec le bruit gaussien ajouté est le suivant.

N2N.png

De manière surprenante, le bruit a été supprimé même si seules les images de bruit sont utilisées pour l'apprentissage. Quand j'ai lu le journal pour la première fois, j'étais sceptique, mais j'ai été assez surpris de voir ce résultat. De cette manière, N2N peut supprimer le bruit même dans les situations où il est difficile d'obtenir des données de réponse correctes, de sorte que l'on peut voir qu'il s'agit d'une technologie historique qui élargit considérablement la gamme de scènes disponibles.

Dans l'article, il est rapporté que les performances sont comparables à la méthode d'apprentissage utilisant des images sans bruit (données de réponse correctes), mais en regardant la valeur MSE pour 10000 images de test, démo 1 utilisant des données de réponse correctes C'est une valeur élevée par rapport à.

modèle MSE
Win5-RB(N2N) 0.0425

Pour considération, regardons un histogramme des valeurs de pixel des images pendant l'entraînement et les tests (0 correspond au noir et 1 correspond aux valeurs de pixel blanc).

図8.png

Étant donné que l'image cible pendant l'entraînement dans la démo 1 est l'image originale sans bruit (original), il y a beaucoup de 0 dans la valeur du pixel, tandis que l'image cible dans la démo 2 est une image de bruit, donc le nombre de 0 diminue en raison du bruit et des pixels Vous pouvez voir que les valeurs sont uniformément réparties. En regardant l'image estimée, Win5-RB de la démo 1 montre une distribution proche de l'image de test (distribution où 0 et 1 sont clairement séparés), mais l'image estimée de la démo 2 est centrée sur 0 et 1. La distribution est basée sur. En d'autres termes, en apprenant d'une image de bruit à une image de bruit, on comprend que ce résultat est obtenu car il contribue à la minimisation de la fonction de perte en donnant une valeur proche d'un temps court plutôt que de donner 0 ou 1 clairement. Je vais. L'image de caractère manuscrite utilisée cette fois est proche d'une image binaire, et le biais est extrêmement grand, il est donc déduit qu'un tel résultat a été obtenu. En regardant l'image du résultat réel de l'estimation de Demo 2, on peut voir que l'image est un peu mince dans son ensemble, bien que la forme soit fermement saisie et que la distribution des valeurs de pixels ressemble à une image naturelle. Il semble que de meilleures performances sortiront quand il sera doux à gauche et à droite.

Résumé

En introduisant l'application du Deep Learning au domaine de la réduction du bruit d'image, nous avons supprimé le bruit dans les cas où l'apprentissage est basé sur des images correctes sans bruit et dans les cas où seules des images de bruit sont disponibles, ce qui est proche du problème réel. Cette fois, nous nous sommes concentrés sur le bruit gaussien, mais l'article montre également qu'il s'agit d'une méthode efficace pour le bruit du sel de sésame et d'autres bruits.

Cette fois, nous avons effectué la suppression du bruit, mais je voudrais vous présenter non pas le niveau de bruit, mais aussi la restauration par Deep Learning quand il y a un gros défaut dans l'image.

<Référence> Article Qiita ・ [AI] Deep Metric LearningUn piège que n'importe qui peut facilement créer un RPAUn piège que quiconque peut construire un VBA peut facilement créer un RPAJ'ai créé un outil de vérification du codage UiPath [RPA]La raison pour laquelle la RPA est si bonne que vous pouvez approfondir votre compréhension de la RPALivres recommandés par RPALes personnes qui conviennent au développement RPA, celles qui ne le sont pasJ'ai essayé d'automatiser la fabrication des sushis

démo

Recommended Posts

[AI] Apprentissage en profondeur pour le débruitage d'image
[AI] Apprentissage métrique profond
Lire et mettre en œuvre l'apprentissage résiduel profond pour la reconnaissance d'image
Implémentation du modèle Deep Learning pour la reconnaissance d'images
Plan d'apprentissage Python pour l'apprentissage de l'IA
Reconnaissance d'image par apprentissage profond 1 théorie
Apprentissage profond pour la formation composée?
L'apprentissage en profondeur
Deep learning 2 appris par l'implémentation (classification d'images)
Premiers pas pour les débutants en apprentissage automatique (IA)
Modèle de reconnaissance d'image utilisant l'apprentissage profond en 2016
Créez votre propre PC pour un apprentissage en profondeur
Alignement d'image: du SIFT au deep learning
[Apprentissage en profondeur] Détection de visage Nogisaka ~ Pour les débutants ~
Reconnaissance d'image en apprentissage profond 3 après la création du modèle
À propos du traitement d'expansion des données pour l'apprentissage en profondeur
Plan d'apprentissage Python pour la gestion de la progression de l'apprentissage de l'IA
Commencer l'apprentissage en profondeur
Image d'apprentissage gonflée
Apprentissage en profondeur Python
Apprentissage profond × Python
Premier apprentissage profond ~ Lutte ~
Script Python de collection d'images pour créer des ensembles de données pour l'apprentissage automatique
Python: pratique du Deep Learning
Fonctions d'apprentissage en profondeur / d'activation
Analyse d'images par apprentissage profond à partir de Kaggle et Keras
[Détection d'anomalies] Détecter la distorsion de l'image par apprentissage à distance
Deep learning 1 Pratique du deep learning
Apprentissage profond / entropie croisée
Premier apprentissage profond ~ Préparation ~
Première solution d'apprentissage en profondeur ~
J'ai essayé le deep learning
Techniques pour comprendre la base des décisions d'apprentissage en profondeur
Apprendre en profondeur à l'expérience avec Python Chapitre 2 (Matériel pour une conférence ronde)
Python: réglage du Deep Learning
Technologie d'apprentissage en profondeur à grande échelle
Résumé de l'apprentissage RAPIDS
Une scène où le GPU est utile pour le deep learning?
Fonction d'apprentissage profond / softmax
Conseils pour gérer les entrées de longueur variable dans le cadre d'apprentissage en profondeur
Traduction japonaise du matériel pédagogique public du diplôme nano d'apprentissage profond
Créez un environnement pour "Deep Learning from scratch" avec Docker
Configurer AWS (Ubuntu 14.04) pour le Deep Learning (installer CUDA, cuDNN)
Créez une IA qui identifie le visage de Zuckerberg grâce à l'apprentissage en profondeur ③ (Apprentissage des données)
[Apprentissage en profondeur] Classification d'images avec un réseau neuronal convolutif [DW jour 4]
Classifier les ensembles de données d'image CIFAR-10 à l'aide de divers modèles d'apprentissage en profondeur
L'histoire d'un ingénieur directeur de 40 ans qui réussit "Deep Learning for ENGINEER"
Apprentissage en profondeur avec Shogi AI sur Mac et Google Colab
Ensemble de données pour l'apprentissage automatique
Prétraitement japonais pour l'apprentissage automatique
Apprentissage profond à partir de zéro 1 à 3 chapitres
Essayez l'apprentissage en profondeur avec TensorFlow
Deep Learning Gaiden ~ Programmation GPU ~
<Cours> Apprentissage en profondeur: Day2 CNN
Flux d'apprentissage pour les débutants en Python
Apprentissage profond / code de travail LSTM
<Cours> Apprentissage en profondeur: Jour 1 NN
Apprentissage profond du noyau avec Pyro