Doppelte Bilder finden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
SAOJulius
User
Beiträge: 6
Registriert: Freitag 11. März 2022, 22:30

Hallo zusammen,

ich arbeite seit längerem an meinem eigenen machine learning Datensatz aus Bildern. Jetzt habe ich schon relativ viele Bilder(50.000 Bilder). Nun sind in dem Datensatz viele doppelte Bilder vorhanden die ich aussortieren will. Gibt es da eine Lösung die schnell auszusortieren die nicht sehr grafikintensive ist, denn ich habe nur einen alten Laptop.

VG
Julius
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mit einem alten Laptop wird das dann aber eher nix, ML braucht eine Menge Power. Zur Frage: datei de-duplizierer gibt es doch wie Sand am Meer. Einfach mal suchen.
LukeNukem
User
Beiträge: 232
Registriert: Mittwoch 19. Mai 2021, 03:40

SAOJulius hat geschrieben: Freitag 11. März 2022, 22:39 ich arbeite seit längerem an meinem eigenen machine learning Datensatz aus Bildern. Jetzt habe ich schon relativ viele Bilder(50.000 Bilder). Nun sind in dem Datensatz viele doppelte Bilder vorhanden die ich aussortieren will. Gibt es da eine Lösung die schnell auszusortieren die nicht sehr grafikintensive ist, denn ich habe nur einen alten Laptop.
Das ist... hüstel so eine Sache. Einfache Duplikate von Dateien finden, kann schon ziemlich... tricky sein, denn so eine Datei kann ja viele Attribute haben.

Attribute, die mir spontan einfallen, könnten der Dateiname (wenn sie in verschiedenen Verzeichnissen liegen), das Erstellungsdatum und die Dateigröße sein. Trotzdem könnten Dateien denselben Namen, dasselbe Datum, und dieselbe Dateigröße haben... genau. Und trotzdem könnten es trotz Unterschieden dieselben Dateien sein... genau: oder auch nicht.

Man muß da einfach die Realitäten sehen: sogar dann, wenn Du dasselbe Bild mit denselben Algorithmen oder Bibliotheken -- oder sogar denselben Bibliotheken in unterschiedlichen Versionen -- komprimierst, kommen verschiedene Dateien heraus. Veränderst Du ein einziges Pixel in dem Bild, sind es (womöglich, sicher ist das nicht) verschiedene Dateien -- sogar dann, wenn die Dateien byteweise Unterschiede haben, können alle vorher genannten Attribute dieselben sein. Trotzdem wären es verschiedene Dateien...

Wenn Du wirklich auf 1:1-Duplikate gehen willst, da gibt es eine Reihe von Möglichkeiten, die mit einem alten Laptop aber... keinen Spaß machen. Aber Ansätze mit Machine Learning, die auch Ausschnitte von Bildern oder Ähnliches erkennen können, bei 50k Bildern... das würde nicht einmal auf meinem relativ dicken Desktop Spaß machen. Für sowas gibt es Compute Cluster, und auch dann ist das nichts, was man mal nebenbei macht.
SAOJulius
User
Beiträge: 6
Registriert: Freitag 11. März 2022, 22:30

Okay vielen Dank für die schnelle Antwort. Dann weiß ich dass das sehr schwierig ist. Falls ich doch noch was finden sollte schreibe ich es rein.

VG
Julius
Benutzeravatar
ThomasL
User
Beiträge: 1367
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Diese Thematik kann einfach oder auch komplex gelöst werden.

Deine "doppelten" Bilder, sind die denn Byteidentisch, d.h. die Dateien wurden kopiert?
Dann kannst du mit einem De-Duplizierer, ich empfehle hier die Freeware AllDup https://alldup.info/index.php , diese Dateien finden.
Das Programm bietet mittlerweile auch eine Suche nach ähnlichen Bildern an.

Die komplexe Lösung erschließt sich dir, wenn du mal diese Google Suche hier verwendest:
https://www.google.de/search?q=finding+ ... p+learning
Da gibt es so viele Lösungsansätze, da fehlt mir die Zeit, die alle hier aufzulisten.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
imonbln
User
Beiträge: 149
Registriert: Freitag 3. Dezember 2021, 17:07

SAOJulius hat geschrieben: Freitag 11. März 2022, 22:39 Nun sind in dem Datensatz viele doppelte Bilder vorhanden die ich aussortieren will.
Definiere doppelt, wie schon geschrieben, wenn die bearbeitet wurden, ist es schwer, aber wenn es wirklich einfach nur Kopien sind, hast du eine Chance.
Ich sage mal, Stumpf ist Trumpf, einfach einen schnellen Hash wert über jedes Bild berechnen und den Hash mit den Dateinamen speichern, jetzt nur noch die gleichen Hash werte finden und du hast einen ersten verdacht welche Bilder gleich sein könnten. Wenn du nun in einem zweiten Schritt über die Doppelten Hashvalues nochmal einen anderen Hash Algorithmus laufen lasst und der kommt auch zum Ergebnis ist gleich, dann hast du die 1:1 Kopien gefunden.

Wichtig der erste Hash Algorithmus sollte schnell gehen, dafür kannst du gerne Hash Kollisionen in Kauf nehmen. Der zweite, Durchgang berechnet nur noch ein Bruchteil der Bilder. Hier solltest du einen Algorithmus vorziehen, der möglichst kollisionsfrei ist, aber dafür darf er aufwändiger rechnen.
narpfel
User
Beiträge: 646
Registriert: Freitag 20. Oktober 2017, 16:10

Es gibt auch Hashfunktionen wie `pHash`, die speziell auf Bilder ausgelegt sind und „visuell“ hashen, sodass kleine Unterschiede (unterschiedliche Metadaten, unterschiedliche Kompressionsstufen bei JPEG, Bildrauschen) nicht dazu führen, dass man komplett unterschiedliche Hashes bekommt.
SAOJulius
User
Beiträge: 6
Registriert: Freitag 11. März 2022, 22:30

Die Bilder habe ich durch eine Web scraper aus dem Internet heruntergeladen ich weiß also nicht welche Bilder ich doppelt heruntergeladen habe und welche Bilder gleich sind mit einer anderen Auflösung. Würde es vielleicht etwas bringen wenn ich mir einfach einen PC mit einer gescheiten GPU zu lege? Habe das ganze schon mit 20 bis 30 Bildern mit der difpy library geschafft aber sobald ich mehr Bilder nehme (ungefähr 500)dauert das viel zu lange.
SAOJulius
User
Beiträge: 6
Registriert: Freitag 11. März 2022, 22:30

Ich werde es auch nochmal mir alldup versuchen
tonikae
User
Beiträge: 90
Registriert: Sonntag 23. Februar 2020, 10:27

Was sind bei dir "Viele Doubletten"?

Wegen ein paar Doubletten im Dataset braucht man sich keinen Kopf
zu machen.Das ist bei großen Datasets eher der Normalfall und spielt
für das Training nicht wirklich eine Rolle.Wenn man den Eindruck hat
es gibt zuviele Doubletten bei den Rohdaten, geht man mit den bereits
erwähnten Hashwerten kurz drüber und mistet den gröbsten Kram aus.
Mehr ist da eigentlich nicht notwendig.d.h. wenn da ein paar Doubletten
übrigbleiben....geschenkt.

Hat man trotzdem das Gefühl die Vielfalt des Datasets ist wegen der
Doubletten zu gering, der Algorithmus "lernt" damit zu wenig und man
sollte unbedingt etwas für die Verbesserung der Trainingsqualität tun,
dafür gibt es andere Wege. z.B. Dropout

https://de.wikipedia.org/wiki/Dropout_( ... ales_Netz)


Dropout ist ja speziell dafür gedacht, aus möglichst wenig Trainingsdaten
eine größtmögliche Trainingsvielfalt und bestmögliche Trainingsqualität
herauszukitzeln.....und das funktioniert sogar recht gut.
d.h.
Man muß da auch nicht unbedingt irgendwelche Monsterdatasets trainieren
wollen.Weniger kann da durchaus mehr sein.
SAOJulius
User
Beiträge: 6
Registriert: Freitag 11. März 2022, 22:30

Danke für alle Antworten AllDup hat für mich funktioniert dropout werde ich mir auch nochmal anschauen.

VG

SAOJulius
Antworten