Question

Je suis sûr que beaucoup de gens ont déjà vu des démonstrations d'utilisation d'algorithmes génétiques pour générer une image qui correspond à un exemple d'image. Vous commencez avec du bruit, et progressivement cela ressemble de plus en plus à l’image cible, jusqu’à obtenir un doublon plus ou moins exact.

Tous les exemples que j'ai vus, cependant, utilisent une comparaison pixel par pixel assez simple, ce qui permet d'obtenir un "fondu en entrée" assez prévisible de l'image finale. Ce que je recherche, c’est quelque chose de plus nouveau: une mesure de la condition physique qui se rapproche davantage de ce que nous considérons comme «similaire» à l’approche naïve.

Je n'ai pas de résultat précis en tête - je cherche simplement quelque chose de plus "intéressant" que le défaut. Suggestions?

Était-ce utile?

La solution

Je suppose que vous parlez de quelque chose comme Le programme de Roger Alsing .

J'ai implémenté une version de cela, alors je m'intéresse également aux fonctions alternatives de fitness, même si j'aborde ce point dans une perspective d'amélioration des performances plutôt que de l'esthétique. Je m'attends à ce qu'il y ait toujours un élément de " fade-in " en raison de la nature du processus évolutif (bien que le fait de modifier les opérateurs évolutifs puisse affecter son apparence).

Une comparaison pixel par pixel peut coûter cher, sauf pour les petites images. Par exemple, l'image 200x200 pixels que j'utilise compte 40 000 pixels. Avec trois valeurs par pixel (R, G et B), il faut 120 000 valeurs à intégrer au calcul de la condition physique pour une seule image. Dans mon implémentation, je réduis l'image avant de faire la comparaison afin qu'il y ait moins de pixels. Le compromis est une précision légèrement réduite de l’image évoluée.

En recherchant des fonctions de fitness alternatives, je suis tombé sur quelques suggestions d'utilisation de l'espace YUV . RVB, car cela correspond plus étroitement à la perception humaine.

Une autre idée que j'avais était de comparer uniquement un échantillon de pixels sélectionné de manière aléatoire. Je ne sais pas si cela fonctionnerait bien sans l'essayer. Étant donné que les pixels comparés seraient différents pour chaque évaluation, cela aurait pour effet de maintenir la diversité au sein de la population.

Au-delà, vous êtes dans le domaine de la vision par ordinateur. Je m'attends à ce que ces techniques, qui reposent sur l'extraction de caractéristiques, soient plus coûteuses par image, mais elles peuvent être globalement plus rapides si elles permettent de réduire le nombre de générations nécessaires pour obtenir un résultat acceptable. Vous voudrez peut-être explorer la bibliothèque PerceptualDiff . cette page présente des éléments Java. code pouvant être utilisé pour comparer des images par similarité en fonction de caractéristiques plutôt que de pixels.

Autres conseils

  

Une mesure de la condition physique qui se rapproche davantage de ce que nous considérons comme "similaire" à l'approche naïve.

La mise en œuvre d’une telle mesure dans les logiciels n’est absolument pas triviale. Google "Modèle de vision humaine", "métrique d'erreur de perception" pour certains points de départ. Vous pouvez contourner le problème - présentez simplement les images candidates à un humain pour qu'il sélectionne les meilleures, bien que cela puisse paraître un peu ennuyeux pour l'homme.

Je n'ai pas vu une telle démo (vous pouvez peut-être en créer une). Mais quelques proto-idées de votre description peuvent en déclencher une intéressante:

  • Trois algorithmes différents fonctionnant en parallèle, peut-être RVB ou HSV.
  • Déplacez, faites pivoter ou modifiez légèrement l'image cible pendant l'exécution.
  • Fitness basé sur les différences de contraste / valeur entre pixels, mais sans connaître la couleur réelle.
  • ... alors "prime" un seul pixel avec la bonne couleur?

Je conviens avec d’autres contributeurs que cela n’est pas trivial. J'ajouterais également que ce serait très utile sur le plan commercial - par exemple, les entreprises qui souhaitent protéger leur propriété intellectuelle visuelle seraient extrêmement heureuses de pouvoir naviguer sur Internet à la recherche d'images similaires pour leurs logos.

Mon approche naïve à cet égard consisterait à former un identificateur de motif sur un certain nombre d’images, chacune générée à partir de l’image cible à laquelle une ou plusieurs transformations lui sont appliquées: par ex. tourné de quelques degrés dans les deux sens; une traduction de quelques pixels dans les deux sens; différentes échelles de la même image; divers flous et effets (les masques de convolution sont bons ici). Je voudrais aussi ajouter un peu de bruit aléatoire à chacune des images. Plus il y a d'échantillons, mieux c'est.

La formation peut être effectuée hors ligne. Cela ne devrait donc pas causer de problèmes de performances d'exécution.

Une fois que vous avez formé un identifiant de motif, vous pouvez le pointer sur les images de la population de GA et obtenir un score scalaire à partir des identifiants.

Personnellement, j'aime les réseaux à base radiale . Rapide à former. Je commencerais par beaucoup trop d'entrées et les réduirais à l'analyse en composantes principales (IIRC). Les résultats pourraient simplement être une mesure de similarité et une mesure de dissimilarité.

Une dernière chose; quelle que soit l'approche choisie - pourriez-vous bloguer à ce sujet, publier la démo, peu importe; Dites-nous comment vous en êtes arrivé.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top