J'expérimente le deep learning sur les images. J'ai environ ~ 4000 images provenant de différentes caméras avec différentes conditions d'éclairage, résolutions d'image et angle de vue.
Ma question est la suivante: Quel type de prétraitement d'image serait utile pour améliorer la détection d'objets? (Par exemple: contraste/normalisation des couleurs, débruitage, etc.)
Pour le prétraitement des images avant de les alimenter dans les réseaux de neurones. Il est préférable de rendre les données Centrées sur le zéro . Essayez ensuite la technique de normalisation. Cela augmentera certainement la précision car les données sont mises à l'échelle dans une plage supérieure à des valeurs arbitrairement grandes ou trop petites.
Un exemple d'image sera: -
Voici une explication de Stanford CS231n 2016 Lectures.
*
La normalisation fait référence à la normalisation des dimensions des données afin qu'elles soient approximativement de la même échelle. Pour les données d'image Il existe deux façons courantes de réaliser cette normalisation. L'une consiste à diviser chaque dimension par son écart-type, une fois centrée sur le zéro:
(X /= np.std(X, axis = 0))
. Une autre forme de ce prétraitement normalise chaque dimension de sorte que les valeurs min et max le long de la dimension soient respectivement -1 et 1. L'application de ce prétraitement n'a de sens que si vous avez une raison de croire que différentes entités en entrée ont des échelles (ou unités) différentes, mais elles doivent avoir une importance à peu près égale pour l'algorithme d'apprentissage. Dans le cas d'images, les échelles relatives des pixels sont déjà approximativement égales (et comprises entre 0 et 255), il n'est donc pas strictement nécessaire d'effectuer cette étape de prétraitement supplémentaire.
*
Lien pour l'extrait ci-dessus: - http://cs231n.github.io/neural-networks-2/
C'est certainement une réponse tardive pour ce post, mais j'espère que vous l'aiderez à tomber sur ce post.
Voici un article que j'ai trouvé en ligne Pré-traitement des données d'images pour les réseaux de neurones , je pensais que c'était certainement un bon article sur la façon dont le réseau devrait être formé.
L'essentiel de l'article dit
1) Comme les données (images) peu dans le NN doivent être mises à l'échelle en fonction de la taille de l'image que le NN est conçu pour prendre, généralement un carré, c'est-à-dire 100x100,250x250
2) Considérez la [~ # ~] moyenne [~ # ~] (Image de gauche) et LA DÉVIATION STANDARD (Image de droite) valeur de toutes les images d'entrée dans votre collection d'un ensemble particulier d'images
3) Normalisation des entrées d'image effectuée en soustrayant la moyenne de chaque pixel puis en divisant le résultat par l'écart-type, ce qui accélère la convergence lors de l'apprentissage du réseau. Cela ressemblerait à une courbe gaussienne centrée sur zéro
4) Réduction de la dimensionnalité Image RVB en niveaux de gris, les performances du réseau neuronal peuvent être invariantes à cette dimension, ou rendre le problème de formation plus traitable
Lisez attentivement this , j'espère que cela vous sera utile. L'idée est de diviser l'image d'entrée en parties. Cela s'appelle R-CNN ( ici sont quelques exemples). Ce processus comporte deux étapes, la détection et la segmentation des objets. La détection d'objets est le processus par lequel certains objets au premier plan sont détectés en observant les changements de gradient. La segmentation est le processus où les objets sont assemblés dans une image avec un contraste élevé. Les détecteurs d'images de haut niveau utilisent l'optimisation bayésienne qui peut détecter ce qui pourrait arriver ensuite en utilisant le point d'optimisation local.
Fondamentalement, en réponse à votre question, toutes les options de prétraitement que vous avez données semblent bonnes. Comme le contraste et la normalisation des couleurs permettent à l'ordinateur de reconnaître différents objets et le débruitage rendra les dégradés plus faciles à distinguer.
J'espère que toutes ces informations vous seront utiles!
En plus de ce qui est mentionné ci-dessus, un excellent moyen d'améliorer la qualité des images basse résolution (LR) serait de faire de la super-résolution en utilisant l'apprentissage en profondeur. Cela signifierait créer un modèle d'apprentissage en profondeur qui convertirait une image basse résolution en haute résolution. Nous pouvons convertir une image haute résolution en une image basse résolution en appliquant des fonctions de dégradation (filtres comme le flou). Cela signifierait essentiellement LR = dégradation (HR) où la fonction de dégradation convertirait l'image haute résolution en basse résolution. Si nous pouvons trouver l'inverse de cette fonction, alors nous convertissons une image basse résolution en haute résolution. Cela peut être traité comme un problème d'apprentissage supervisé et résolu en utilisant l'apprentissage en profondeur pour trouver la fonction inverse. Je suis tombé sur ce article intéressant sur l'introduction à la super-résolution en utilisant le deep learning. J'espère que ça aide.