Finden einer optimalen Parallelisierung aus einem allgemein gewichteten ungerichteten Graphen


9

Ich löse ein Problem beim "Mischen" von überlappenden Bildsätzen. Diese Mengen können durch ein ungerichtetes gewichtetes Diagramm wie dieses dargestellt werden:

7-Knoten-Diagramm

Jeder Knoten repräsentiert ein Bild. Überlappende Bilder sind durch eine Kante verbunden. Das Kantengewicht stellt die Größe des Überlappungsbereichs dar (eine größere Überlappung führt zu einer besseren Gesamtqualität ).

Der Algorithmus entfernt im Allgemeinen Kanten. Dies kann nacheinander oder parallel erfolgen. Wenn jedoch eine Überblendung auftritt, werden die Knoten zusammengeführt und die Diagrammstruktur ändert sich. Eine Parallelisierung ist also nur bei verbundenen Komponenten möglich, die sich selbst nicht überlappen!

Solche nicht überlappenden Komponenten sind DB und FEG. Wir können den Mischalgorithmus für diese Komponenten sicher parallel ausführen. Das Ergebnis ist das folgende Diagramm (zusammengeführte Knoten werden grün angezeigt):

4-Knoten-Diagramm

Jetzt ist keine weitere Parallelisierung mehr möglich, da sich zwei verbundene Komponenten überlappen (sie haben eine Kante direkt zwischen sich).

Die parallele Version des Algorithmus würde folgendermaßen aussehen:

1. Find connected components (no two are connected directly) and create task for each.
2. Run the tasks in parallel.
3. Update graph.
4. Until single node remains, continue with 1.

Der schwierige Teil ist der erste Schritt: Wie finde ich den besten Satz verbundener Komponenten?

Ein Weg wäre ein gieriger Algorithmus, der bei einer bestimmten Iteration einfach die größte Anzahl von Komponenten findet. Der Greedy-Algorithmus maximiert die Parallelisierung am Anfang, jedoch auf Kosten vieler späterer Iterationen.

Die optimale Lösung kann darin bestehen, eine gute Anzahl verbundener Komponenten in jede Iteration einzubringen, um die Parallelisierung zu maximieren und die Anzahl der Iterationen gleichzeitig zu minimieren (daher gibt es zwei Variablen in der Optimierung).

Ich kann mir keinen anderen Optimierungsalgorithmus als Backtracking vorstellen, dh den Suchraum aller möglichen Entwicklungen und den mit maximaler Parallelisierung.

Kantengewichte können ignoriert werden, eine verbesserte Version des Algorithmus kann dies jedoch berücksichtigen, da das Mischen größerer Bereiche mehr Zeit in Anspruch nimmt (z. B. dauert das Mischen von Bereichen der Größe 200 ungefähr doppelt so lange wie das Mischen von zwei Bereichen der Größe 100). Die Berücksichtigung von Gewichten kann zu einer besseren Strategie bei der Auswahl von Komponenten führen (schnellere Gesamtlaufzeit des Algorithmus).

Haben Sie Hinweise auf einen solchen Optimierungsalgorithmus, der die beste Strategie für die Auswahl von Teilen des Diagramms findet, sodass maximale Parallelisierung und minimale Anzahl von Iterationen möglich sind?


T.,S.1,,S.kS.ichS.jS.ich

Antworten:


1

Dies ist sehr ähnlich zu Überlappungen der Gensequenz bei der Genomassemblierung. Kapitel 4 von Ananths These .

Parallel dazu suchen Sie nach vielversprechenden Paaren und pflegen eine verteilte Union Find-Datenstruktur. Siehe Tarjan und Vishkin für ihren Hook- und Shortcut-Algorithmus zum Reduzieren der verbundenen Komponenten.

Sie können auch aktuelle DeBrujin-Diagrammmethoden für 64-Bit- Zeilenabschnitte von Pixeln ausprobieren . Ich denke, das wird Ihnen die besten Ergebnisse bringen. Um bei Quantisierungsproblemen zu helfen, würde ich zuerst die Dimension der Pixel auf 16 oder 8 Bit Schwarz / Weiß reduzieren. Anschließend wenden Sie die 64-Bit-Blöcke parallel an und verwenden sie dann, um Kanten zwischen Bildern abzuleiten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.