Przeprasza za niewłaściwe użycie terminów technicznych. Pracuję nad projektem segmentacji semantycznej za pośrednictwem splotowych sieci neuronowych (CNN); próbuje zaimplementować architekturę typu Enkoder-Dekoder, dlatego wyjście ma ten sam rozmiar co wejście.
Jak projektujesz etykiety? Jaką funkcję utraty należy zastosować? Zwłaszcza w sytuacji dużej nierównowagi klas (ale stosunek między klasami jest zmienny w zależności od obrazu).
Problem dotyczy dwóch klas (przedmiotów zainteresowania i tła). Używam Keras z backendem tensorflow.
Do tej pory zajmowałem się projektowaniem oczekiwanych wyników o takich samych wymiarach jak obrazy wejściowe, stosując etykietowanie pikselowe. Ostatnia warstwa modelu ma albo aktywację softmax (dla 2 klas), albo aktywację sigmoidalną (aby wyrazić prawdopodobieństwo, że piksele należą do klasy obiektów). Mam problem z zaprojektowaniem odpowiedniej funkcji celu dla takiego zadania typu:
function(y_pred,y_true)
,
w porozumieniu z Keras .
Proszę starać się być konkretnym w odniesieniu do wymiarów zaangażowanych tensorów (wejście / wyjście modelu). Wszelkie uwagi i sugestie są mile widziane. Dziękuję Ci !
źródło
Odpowiedzi:
Cross entropia to zdecydowanie najlepsza droga. Nie znam Keras, ale TF ma to: https://www.tensorflow.org/api_docs/python/tf/nn/sigmoid_cross_entropy_with_logits
Oto papier bezpośrednio realizacji to: Całkowicie splotowy Sieci semantycznej Segmentacja przez Shelhamer et al.
Dokument U-Net jest również bardzo udaną realizacją pomysłu, wykorzystując pomijanie połączeń, aby uniknąć utraty rozdzielczości przestrzennej. Wiele implementacji tego można znaleźć w sieci.
Z mojego osobistego doświadczenia możesz zacząć od prostej sieci kodera-dekodera, ale nie używaj kroków (lub kroków = 1), w przeciwnym razie tracisz dużo rozdzielczości, ponieważ upsampling nie jest idealny. Idź z małymi rozmiarami jądra. Nie znam twojej konkretnej aplikacji, ale nawet sieć 2-3 warstw ukrytych da bardzo dobre wyniki. Użyj 32-64 kanałów na każdej warstwie. Rozpocznij proste, 2 ukryte warstwy, 32 kanały każdy, jądra 3x3, krok = 1 i eksperymentuj z parametrami w sposób izolowany, aby zobaczyć ich efekt. Zachowaj wymiary zawsze równe wymiarowi wejściowemu dla starterów, aby uniknąć utraty rozdzielczości. Następnie możesz włączyć kroki i upsamplowanie oraz wdrożyć pomysły takie jak U-Net. U-Net działa bardzo dobrze do segmentacji obrazów medycznych.
Aby dowiedzieć się więcej na temat nierównowagi klas, patrz https://swarbrickjones.wordpress.com/2017/03/28/cross-entropy-and-training-test-class-imbalance/ Tutaj chodzi o ważenie różnych klas za pomocą i parametryα β
źródło
Użyj ważonej utraty kości i ważonej utraty entropii krzyżowej. Utrata kości jest bardzo dobra do segmentacji. Wagi, od których można zacząć, powinny być odwróconymi częstotliwościami klasy, tj. Pobrać próbkę, powiedzmy 50-100, znaleźć średnią liczbę pikseli należących do każdej klasy i sprawić, aby klasa miała wagę 1 / średnią. Być może będziesz musiał zaimplementować kości samodzielnie, ale to proste. Dodatkowo możesz sprawdzić odwrotną utratę kości i utratę ogniskowej
źródło
Pozwól, że na początku będę bardziej szczegółowy, a następnie bardziej ogólny. Przepraszam, jeśli cię źle zrozumiałem.
Myślę, że mówisz o potrzebie sieci neuronowej autoencodera, ponieważ wspomniałeś o kodowaniu i dekodowaniu, a także o rozmiarze wejściowym takim samym jak rozmiar wyjściowy. Jeśli tak, to twoja funkcja utraty polega na odtworzeniu wektora wejściowego, ale także na kompresji danych do krótszego wektora w środkowej ukrytej warstwie. Można wybrać minimalny błąd średniokwadratowy (dla regresji) lub współczynnik utraty logów lub błędnej klasyfikacji (dla klasyfikacji). Jednak CNN nie są czymś, co widziałem w autoenkoderze, ale myślę, że byłoby to zarówno możliwe, jak i użyteczne, w przypadkach, gdy ważna jest niezmienność translacyjna, taka jak wykrywanie krawędzi i obiektów w obrazach.
Mówiąc bardziej ogólnie, wydaje się, że budujesz bardzo złożony model uczenia maszynowego, odkąd wspomniałeś o CNN. CNN i inne modele głębokiego uczenia są jednymi z najbardziej złożonych modeli uczenia maszynowego.
Wybór wymiarów, etykiet i funkcji utraty przypomina raczej elementarne uczenie maszynowe. Myślę, że możesz mieć kłopoty z głębokim uczeniem się. Czy najpierw wziąłeś lekcje na temat zwykłego uczenia maszynowego?
źródło