Il existe quelques variantes sur la façon de normaliser les images, mais la plupart semblent utiliser ces deux méthodes:
- Soustrayez la moyenne par canal calculée pour toutes les images (par exemple, VGG_ILSVRC_16_layers )
- Soustrayez par pixel / canal calculé sur toutes les images (par exemple, CNN_S , voir aussi le réseau de référence de Caffe )
L’approche naturelle consisterait à normaliser chaque image. Une image prise en plein jour provoquera le déclenchement de plus de neurones qu'une image de nuit et, bien qu'elle puisse nous informer de l'heure à laquelle nous nous soucions généralement des caractéristiques plus intéressantes présentes sur les bords, etc.
Pierre Sermanet fait référence dans 3.3.3 à cette normalisation de contraste locale qui serait basée sur une image, mais je ne l’ai pas trouvé dans les exemples / tutoriels que j’ai vus. J'ai également vu une question intéressante sur Quora et le message de Xiu-Shen Wei, mais ils ne semblent pas soutenir les deux approches ci-dessus.
Qu'est-ce qui me manque exactement? S'agit-il d'un problème de normalisation des couleurs ou existe-t-il un document qui explique réellement pourquoi tant de gens utilisent cette approche?
la source
Réponses:
La soustraction de la moyenne du jeu de données sert à "centrer" les données. De plus, vous souhaitez idéalement diviser par le nombre d'éléments de cette caractéristique ou de ce pixel si vous souhaitez normaliser chaque valeur de fonctionnalité en z-score.
La raison pour laquelle nous faisons ces deux choses est parce que dans le processus de formation de notre réseau, nous allons multiplier (poids) et ajouter à (biais) ces entrées initiales afin de provoquer des activations que nous avons ensuite contre-projetées avec les gradients à former le modèle.
Dans ce processus, nous aimerions que chaque fonctionnalité ait une plage similaire afin que nos gradients ne deviennent pas incontrôlables (et que nous n’ayons besoin que d’un multiplicateur de taux d’apprentissage global).
Une autre façon de penser est que les réseaux d’apprentissage en profondeur partagent traditionnellement de nombreux paramètres. Si vous n’effectuiez pas une mise à l’échelle de vos entrées de manière à obtenir des valeurs d’entité similaires (c.-à-d.: Sur l’ensemble du jeu de données en soustrayant la moyenne), le partage ne serait pas Cela se produit très facilement, car pour une partie de l’image, le poids
w
est trop élevé et pour une autre, il est trop petit.Vous verrez dans certains modèles de CNN que le blanchiment par image est utilisé, ce qui correspond davantage à votre réflexion.
la source
Avant la normalisation des lots, une soustraction moyenne par canal était utilisée pour centrer les données autour de la moyenne zéro pour chaque canal (R, G, B). Cela aide généralement le réseau à apprendre plus rapidement car les gradients agissent de manière uniforme pour chaque canal. Je suppose que si vous utilisez la normalisation par lots, l’étape de prétraitement de la soustraction moyenne par canal n’est pas vraiment nécessaire puisque vous normalisez de toute façon par mini-lot.
la source
La normalisation par image est courante et constitue même la seule fonction intégrée actuellement dans Tensorflow (principalement en raison de sa très grande facilité de mise en œuvre). Il est utilisé pour la raison exacte que vous avez mentionnée (jour contre nuit pour la même image). Cependant, si vous imaginez un scénario plus idéal dans lequel l'éclairage était contrôlé, les différences relatives entre chaque image auraient une grande valeur dans l'algorithme, et nous ne voudrions pas les effacer avec une normalisation par image (et nous voudrions normalisation dans le contexte de l’ensemble du jeu de données d’entraînement).
la source
Ceci s'appelle le prétraitement des données avant de les utiliser. Vous pouvez traiter de nombreuses manières, mais il existe une condition selon laquelle vous devez traiter chaque donnée avec la même fonction X_preproc = f (X). Cette f (.) Ne doit pas dépendre des données elles-mêmes. Par conséquent, si vous utilisez l'image actuelle, vous devez traiter cette l’image actuelle, alors votre f (X) sera réellement f (X, image) et vous ne le voulez pas.
La normalisation du contraste d'image dont vous parliez a un but différent. La normalisation du contraste de l'image aidera dans la fonction.
Mais f (.) Ci-dessus aidera à l'optimisation en gardant toutes les caractéristiques numériquement égales les unes aux autres (bien sûr environ)
la source