Popcorn-Pop-Zähler



  • Hallo,

    wollte fragen ob jemand eine Programmbibliothek kennt, die mit Maschinellem Lernen möglichst einfach das Popcorn Pop- oder Platzgeräusch lernen kann, also vom Mikrofon-Akustik-Signal? 😕

    Es gibt zwar den Weg, dass man zuerst die Grundlagen lernt und dann implementiert, aber ich wollte fragen, ob jemand eine Schritt für Schritt Anleitung kennt, die Grundlagen kann man ja dann immer noch im Nachhinein lernen.

    Die Idee dahinter ist, z.B. dass man die Popcorn wägt und dann die Anzahl bestimmt. Danach erhitzt man die Popcorn und kann dann anhand des Zählers genau wissen, wann alle Popcorn fertig sind und läuft evntl. nicht Gefahr, dass die Popcorn anbrennen.

    Zudem kann man dann auch die Zeitabstände zwischen dem Platzen messen. Ich vermute bisher, dass diese exponentialverteilt sind, aber instationär. Also zu Beginn platzen eher weniger weil noch nicht alle erhitzt sind. Ab dann werden ungeplatzten weniger und dadurch platzt es auch "weniger". Siehe auch https://www.c-plusplus.net/forum/339414

    Als letzte Frage habe ich noch, ob jemand eine Möglichkeit kennt, dass alle Popcorn gleichzeitig platzen? 😉


  • Mod

    Warum willst du das unbedingt mit Maschinenlernen machen? Das klingt nach etwas, dass man unbedingt erst einmal mit konventionellen Methoden ausprobieren sollte. So ein Pop dürfte mit einfachen Heuristiken doch sehr leicht erkennbar sein. Hattest du da bereits konkrete Misserfolge, die dich dazu bringen Maschinenlernen ausprobieren zu wollen?



  • Ich würde das an deiner Stelle auch erstmal so versuchen.

    Ansonsten, grade bei maschinellem Lernen, dürfte es schwer sein, ohne Grundlagen was gescheites zu finden oder zu entwickeln.

    Ich habe mal Objekterkennung auf Bildern gemacht. Von der Theorie da hinter, ist das halbwegs ähnlich.
    Du wirst irgendwelche Feature erkennen müssen. Ich weiß jetzt nicht, welche man in der Audio Signal Verarbeitung üblicherweise verwendet.
    Um Audiofeature zu extrahieren, sollte es aber Bibliotheken geben. Ein erstes googlen hat sowas zu Tage gebracht: http://marsyas.info/index.html.
    Anhand der Feature kannst du dann klassifizieren, ob es ein Sound ist, bei dem ein "Plop" vorkommt oder nicht.
    Was man zum klassifizieren nehmen sollte, ist ohne Grundlagen schwer zu sagen. Evt. reicht eine Art "Distanz mit Threshold" -> Ist eher eine Art naive Heuristic und der "traditionelle" Ansatz, wie von SeppJ vorgeschlagen.

    Oder du trainierst ein Neuronal Network mit den Daten, oder verwendest eine Support Vektor Machine, oder ein anderes Verfahren. Zu den einzelnen Verfahren wird es auch jeweils was fertiges geben.
    Das zusammen schrauben von Feature Extraction und maschinellem Lern-Framework wirst du wahrscheinlich selber machen müssen.



  • Vielen Dank für die Antworten.

    Als Neuronal Network Programmbibliothek, ist mir die von Nvidia bekannt (https://developer.nvidia.com/deep-learning).

    Ich dachte, ich könnte Popcorn machen, dabei mit einem Mikrofon die Geräusche aufnehmen, die Teile des "Audiosignals" in dem ein Plop vorkommt "auseinanderschnipseln" und die dann als Trainingsdaten, Validierungsdaten und Testdaten verwenden.

    Vermutlich geht es doch nicht fast ganz ohne Grundlagen.

    Schlangenmensch schrieb:

    Anhand der Feature kannst du dann klassifizieren, ob es ein Sound ist, bei dem ein "Plop" vorkommt oder nicht.

    Dann gibt es vermutlich noch ein Problem bei einem "laufenden" Audio-Signal. Also wenn ich es z.B. all 5 s abspeichere, was wenn das "Plop" zerteilt wird. Oder geht so etwas ganz anders?

    SeppJ schrieb:

    Hattest du da bereits konkrete Misserfolge, die dich dazu bringen Maschinenlernen ausprobieren zu wollen?

    Nein, ich habe am Wochenende Popcorn gemacht und dann ist mir die Idee in den Sinn gekommen. Und mich eben auch gewundert, dass nicht alle gleichzeitig platzen.


  • Mod

    titan99_ schrieb:

    SeppJ schrieb:

    Hattest du da bereits konkrete Misserfolge, die dich dazu bringen Maschinenlernen ausprobieren zu wollen?

    Nein, ich habe am Wochenende Popcorn gemacht und dann ist mir die Idee in den Sinn gekommen. Und mich eben auch gewundert, dass nicht alle gleichzeitig platzen.

    Aber warum Maschinenlernen? Möchtest du Popcorn-Pops von Feuerwerk unterscheiden können? Das wäre eine geeignete Frage, die du damit beantworten könntest. Aber du möchtest doch in erster Linie Popcorn-Pops zählen und wirst das Mikrofon doch sicher auf den Topf richten, ohne Feuerwerk im Hintergrund. So ein Pop wird dann sicherlich in so ziemlich jeder Art und Weise, ein Geräusch darzustellen, extrem auffallen. Z.B. wird es in einer Amplitudendarstellung als steile Spitze auffallen; in einer Frequenzdarstellung wird es ein plötzlicher Anstieg auf allen Bändern sein. Da braucht man doch kein Maschinenlernen, um das zu erkennen. Du guckst dir am besten Mal ein paar Aufzeichnungen an, da wirst auch du als Mensch sicher sofort ein einfaches Muster erkennen können. Dann programmierst du einen Zähler für das Auftreten dieser Muster und zählst damit die Anzahl solcher Ereignisse in deiner Tonaufzeichnung. Mag sein, dass diese Heuristik dann an Silvester versagt, aber damit kommst du viel schneller und einfacher zum Erfolg.

    Beim Maschinenlernen wäre mir hier auch überhaupt nicht klar, welche Frage überhaupt beantwortet werden soll. Wie viele Popcorn-Pops ein Tonausschnitt enthält? Du bräuchtest entweder eine enorme Menge Popcorn zum Anlernen, oder du musst deine vorhandenen Aufzeichnungen sowieso erst einmal von Hand oder mit anderen Heuristiken zerlegen und kategorisieren, und hättest dann nichts gewonnen.



  • SeppJ schrieb:

    Du guckst dir am besten Mal ein paar Aufzeichnungen an, da wirst auch du als Mensch sicher sofort ein einfaches Muster erkennen können. Dann programmierst du einen Zähler für das Auftreten dieser Muster und zählst damit die Anzahl solcher Ereignisse in deiner Tonaufzeichnung.

    Ist das nicht Überwachtes Lernen, was zu Maschinellem Lernen gehört?

    Vielen Dank für die Antworten. Möchte eure Zeit nicht länger beanspruchen, da mir im Moment das "Sitzleder" dazu fehlt, es ernsthaft anzugehen, also über die Idee hinaus etwas Konkretes anzufangen.

    Edit:

    Ist das nicht Überwachtes Lernen, was zu Maschinellem Lernen gehört?

    Sorry, habe Fehler gemacht, ist doch nicht Überwachtes Lernen, da ja die dann die spezielle Hypothese per Lernalgorithmus gefunden würde.



  • titan99_ schrieb:

    SeppJ schrieb:

    Du guckst dir am besten Mal ein paar Aufzeichnungen an, da wirst auch du als Mensch sicher sofort ein einfaches Muster erkennen können. Dann programmierst du einen Zähler für das Auftreten dieser Muster und zählst damit die Anzahl solcher Ereignisse in deiner Tonaufzeichnung.

    Ist das nicht Überwachtes Lernen, was zu Maschinellem Lernen gehört?

    Nein, überwachtes Lernen heist lediglich, dass du im Taining feststellst: Ergbenis richtig -> Belohnung, Ergebnis falsch -> Bestrafung. Und die Funktion wird optimiert, so dass es so häufig wie möglich zu Belohnungen kommt.

    Beim Unüberwachten lernen, versucht die Software Muster zu erkennen (z.B. ein Clustering).

    Edit: Das Edit zu spät gesehen 😃



  • Schlangenmensch schrieb:

    Ergbenis richtig -> Belohnung, Ergebnis falsch -> Bestrafung.

    Also nach meinem Informationsstand auch nur wenn man Belohnung als 1 oder true definiert und Bestrafung als 0 oder false. Nicht dass der Computer noch durch die Bestrafungen traumatisiert wird. 😞

    Edit:
    Hat Fehler, Überwachtes Lernen und Bestärkendes Lernen ist nicht das gleiche.


  • Mod

    titan99_ schrieb:

    SeppJ schrieb:

    Du guckst dir am besten Mal ein paar Aufzeichnungen an, da wirst auch du als Mensch sicher sofort ein einfaches Muster erkennen können. Dann programmierst du einen Zähler für das Auftreten dieser Muster und zählst damit die Anzahl solcher Ereignisse in deiner Tonaufzeichnung.

    Ist das nicht Überwachtes Lernen, was zu Maschinellem Lernen gehört?

    Kommt drauf an, welche Frage du überhaupt beantworten möchtest, was mir immer noch nicht klar ist. Willst du die Maschine tatsächlich zählen lassen? Dann musst du enorme Mengen Popcorn zubereiten. Du wirst jeweils für alle möglichen Anzahlen von Körnern viele verschiedene Aufzeichnungen durchführen müssen. Oder zumindest in groben Kategorien, z.B. 10 Körner, 20 Körner, usw. Das müsstest du ein paar zig mal machen für jede Kornmenge und dann könntest du damit eine Maschine trainieren, die dir zu einer bestimmten Aufzeichnung sagt, ob das eher 20 oder eher 30 Körner waren.

    Aber das willst du doch gar nicht wissen, oder?. Du möchtest live mitzählen, wie viele Körner in einer bestimmten Aufzeichnung zu einer bestimmten Zeit geplatzt sind. Maschinenlernen beantwortet aber Fragen, in welche Kategorie eine Messung fällt. Das ist aber eine ganz andere Art von Fragestellung als Mitzählen.

    Was du daher machen könntest, ist, eine Aufzeichnung in viele kleine Teilstücke zu zerlegen. Dann könntest du einer Maschine beibringen, zu erkennen, wie viele Körner in solch einem Teilabschnitt geplatzt sind. Dann zählst du extern mit. Das Problem dabei ist, dass du dafür erst einmal ein Trainingsset erstellen musst, indem du deine Aufzeichnungen in eben solche kleinen Abschnitte zerlegst und dann jeweils einordnest, wie viele Pops darin zu hören sind (und was mit Pops genau auf der Grenze ist, ist noch einmal ein anderes Problem). Das ist aber entweder enorm viel Handarbeit für dich, oder du entwickelst irgendeine Automatik dafür. Aber wenn du so eine Automatik hast, dann brauchst du kein maschinelles Lernen mehr!



  • titan99_ schrieb:

    Schlangenmensch schrieb:

    Ergbenis richtig -> Belohnung, Ergebnis falsch -> Bestrafung.

    Also nach meinem Informationsstand auch nur wenn man Belohnung als 1 oder true definiert und Bestrafung als 0 oder false. Nicht dass der Computer noch durch die Bestrafungen traumatisiert wird. 😞

    Wie man das genau ausimplementiert bleibt jedem selbst überlassen, viele Wege führen zum Ziel 😉 . Aber es gibt da mehr Möglichkeiten als 0 und 1. Ich habe schon mit -1 bestraft.
    Typisches Szenario ist der Agent, der von Positon A nach Positon B will und der pro Schritt bestraft wird.

    Meine Computer sind da einiges gewöhnt, da mache ich mir keine Sorgen, dass ich einen Computerpsychologen brauche 😃


Log in to reply