Mein Arbeitsplatz hat eine zweiwöchige Code-Herausforderung, bei der ein Algorithmus erstellt wird, mit dem unter bestimmten Einschränkungen 100 Bob Ross-Musterbilder so genau wie möglich reproduziert werden können:
- "Gemälde" werden als JSON-Datei eingereicht, die eine Hintergrundfarbe und eine Reihe von "Pinselstrichen" enthält.
- Pinselstriche haben einen Startpunkt, einen Endpunkt, einen Radius und eine Farbe.
- Es gibt eine Grenze von 500 Strichen pro Gemälde.
- Alle 100 Referenzbilder haben genau die gleiche Größe und das gleiche Seitenverhältnis: 450x337.
Der Server "malt" jede Einreichung und führt dann einen Diff pro Pixel mit dem Referenzbild durch. Jedes Pixel in dem eingereichten Gemälde wird in einem skalaren Bereich von 0 bis 1 bewertet, basierend darauf, wie ähnlich es dem Wert des Quellpixels ist, und die Bewertung für das Gemälde ist ein Durchschnitt aller Pixelbewertungen. Die Teilnehmer des Wettbewerbs haben Bibliotheken zum Malen und Bewerten von Bildern veröffentlicht, die unter MacOS / Linux über die Befehlszeile ausgeführt werden können.
Ich bin der Meinung, dass dieses Problem für ML zugänglich sein sollte, da wir einen Mechanismus für die feinkörnige Bewertung jedes Versuchs haben, den der Algorithmus versucht. Das Erstellen und Bewerten eines Gemäldes dauert nur etwa 200 ms. Leider bin ich meistens nur ein ML-Fan (ich höre viele Podcasts) und weiß nicht, wie ich das Problem modellieren soll.
Es würde ewig dauern, bis der Algorithmus 500 völlig zufällige Striche macht und dann die Ausgabe bewertet, um zu etwas Nützlichem zu konvergieren. Ich dachte darüber nach, den Farbraum der Striche auf einen Satz der 64 häufigsten Farben in jedem Bild zu beschränken (indem ich ein Histogramm ausführe, bevor ich mit dem Malen beginne) und auch die Auswahl der Pinselgröße des Algorithmus zu begrenzen.
Für die Aufzeichnung erhielt ich eine 65% ige Punktzahl, wenn ich einfach ein Bild einreichte, das ein festes Feld mit der häufigsten Farbe ist. Die derzeit erfolgreichen Algorithmen wandeln die Bilder meist nur in Gitter um und setzen einen Punkt der durchschnittlichen Farbe in jedem Sektor über jeden.