Dzień dobry,
W ramach pracy przejściowej mam nauczyć model ML albo NN, który ma rozpoznawać dwa sygnały (klasyfikacja binarna). Bez wdawania się w zbędne szczegóły, są to sygnały uzyskane z kart pomiarowych (rodzaj drgań mechanicznych). Jednak tu pojawiają się problemy, ponieważ nie jestem w stanie wyciągnąć cech charakterystycznych dla danego rodzaju sygnału. Dominujące częstotliwości dla jednego, jak i drugiego sygnału, są w jednym pasmie.
Wykres PSD uzyskany metodą Welcha (częstotliwość próbkowania fs = 50000 Hz). Na czerwono sygnały oznaczone jako 1, a na niebiesko jako 0.
Kolejny problem z tymi sygnałami jest taki, że mam ich bardzo mało - w sumie mam ich 120, przy czym mają one różne długości: od 20 000 do 1 000 000 próbek. Jeżeli chodzi o przygotowanie danych, to na sygnałach wykonywałem StandardScaler (od każdej próbki odejmowałem wartość średnią ze wszystkich sygnałów i dzieliłem przez odchylenie standardowe. W teorii to powinno zmniejszyć wariancję). Jako próby wyciągnięcia cech charakterystycznych z domeny czasu wyciągałem: wartość średnią, odchylenie standardowe, max wartość, min wartość, ptp, współczynnik szczytu, skośność, kurtozę, odchylenie bezwzględne, RMS i entropię. Jednak na podstawie tych danych i algorytmu jakim jest RandomForest, nie byłem w stanie klasyfikować sygnałów (dokładność dla zbioru testowego to 53 procent).
Następnie próbowałem wyciągnąć cechy z domeny częstotliwościowej. Próbowałem do tego wykorzystać PSD. Na podstawie różnej ilości punktów w wykresie próbowałem wyciągać cechy z wykorzystaniem konwolucji jednowymiarowej połączonej z maxpoolem, a jako klasyfikację wykorzystałem warstwy LSTM, żeby wyciągać sekwencyjne cechy. Tutaj udało mi się trochę lepiej, uzyskałem dokładność na poziomie 81 procent.
Następną metodą, jaką próbowałem, było robienie spektrogramów i przepuszczanie ich przez sieć VGG. Dla tej metody uzyskałem maksymalną dokładność na poziomie 77 procent. Ostatnią metodą, jaką próbowałem, było wykorzystanie STFT. Sygnał "kroiłem" na mniejsze kawałki i z każdego z nich robiłem obraz STFT. Następnie te wszystkie obrazy sklejałem w jeden pakiet i przepuszczałem przez sieć typu VGG. Tutaj miałem dokładność na poziomie 82 procent.
Jednak te wszystkie dokładności, jakie uzyskałem, są wciąż za małe, bo jako wymóg podany od prowadzącego było uzyskanie ponad 90 procent. Skoczyły mi się już pomysły, w jaki sposób mogę wyciągnąć cechy charakterystyczne dla sygnałów. Ma ktoś jakiś pomysł na to, ewentualnie czy mógłby ktoś polecić jakąś specjalistyczną architekturę sieci neuronowej stworzoną do tego? Ja próbowałem jeszcze ArchNet i WaveNet. Żadna z nich nie działa (w ogóle się nie uczy dla zbioru treningowego).
Z góry dziękuje za pomoc
W ramach pracy przejściowej mam nauczyć model ML albo NN, który ma rozpoznawać dwa sygnały (klasyfikacja binarna). Bez wdawania się w zbędne szczegóły, są to sygnały uzyskane z kart pomiarowych (rodzaj drgań mechanicznych). Jednak tu pojawiają się problemy, ponieważ nie jestem w stanie wyciągnąć cech charakterystycznych dla danego rodzaju sygnału. Dominujące częstotliwości dla jednego, jak i drugiego sygnału, są w jednym pasmie.
Wykres PSD uzyskany metodą Welcha (częstotliwość próbkowania fs = 50000 Hz). Na czerwono sygnały oznaczone jako 1, a na niebiesko jako 0.
Kolejny problem z tymi sygnałami jest taki, że mam ich bardzo mało - w sumie mam ich 120, przy czym mają one różne długości: od 20 000 do 1 000 000 próbek. Jeżeli chodzi o przygotowanie danych, to na sygnałach wykonywałem StandardScaler (od każdej próbki odejmowałem wartość średnią ze wszystkich sygnałów i dzieliłem przez odchylenie standardowe. W teorii to powinno zmniejszyć wariancję). Jako próby wyciągnięcia cech charakterystycznych z domeny czasu wyciągałem: wartość średnią, odchylenie standardowe, max wartość, min wartość, ptp, współczynnik szczytu, skośność, kurtozę, odchylenie bezwzględne, RMS i entropię. Jednak na podstawie tych danych i algorytmu jakim jest RandomForest, nie byłem w stanie klasyfikować sygnałów (dokładność dla zbioru testowego to 53 procent).
Następnie próbowałem wyciągnąć cechy z domeny częstotliwościowej. Próbowałem do tego wykorzystać PSD. Na podstawie różnej ilości punktów w wykresie próbowałem wyciągać cechy z wykorzystaniem konwolucji jednowymiarowej połączonej z maxpoolem, a jako klasyfikację wykorzystałem warstwy LSTM, żeby wyciągać sekwencyjne cechy. Tutaj udało mi się trochę lepiej, uzyskałem dokładność na poziomie 81 procent.
Następną metodą, jaką próbowałem, było robienie spektrogramów i przepuszczanie ich przez sieć VGG. Dla tej metody uzyskałem maksymalną dokładność na poziomie 77 procent. Ostatnią metodą, jaką próbowałem, było wykorzystanie STFT. Sygnał "kroiłem" na mniejsze kawałki i z każdego z nich robiłem obraz STFT. Następnie te wszystkie obrazy sklejałem w jeden pakiet i przepuszczałem przez sieć typu VGG. Tutaj miałem dokładność na poziomie 82 procent.
Jednak te wszystkie dokładności, jakie uzyskałem, są wciąż za małe, bo jako wymóg podany od prowadzącego było uzyskanie ponad 90 procent. Skoczyły mi się już pomysły, w jaki sposób mogę wyciągnąć cechy charakterystyczne dla sygnałów. Ma ktoś jakiś pomysł na to, ewentualnie czy mógłby ktoś polecić jakąś specjalistyczną architekturę sieci neuronowej stworzoną do tego? Ja próbowałem jeszcze ArchNet i WaveNet. Żadna z nich nie działa (w ogóle się nie uczy dla zbioru treningowego).
Z góry dziękuje za pomoc