Istnieją pewne warianty normalizacji obrazów, ale większość wydaje się używać tych dwóch metod:
- Odejmij średnią na kanał obliczoną dla wszystkich zdjęć (np. VGG_ILSVRC_16_layers )
- Odejmij według pikseli / kanałów obliczonych na wszystkich obrazach (np. CNN_S , zobacz także sieć referencyjną Caffe )
Moim zdaniem naturalne podejście do normalizacji każdego obrazu. Zdjęcie zrobione w świetle dziennym spowoduje, że wystrzeli więcej neuronów niż zdjęcie nocne, i chociaż może poinformować nas o czasie, zwykle dbamy o bardziej interesujące cechy obecne na krawędziach itp.
Pierre Sermanet wspomina w 3.3.3, że lokalna normalizacja kontrastu byłaby oparta na obrazie, ale nie natknąłem się na to w żadnym z przykładów / samouczków, które widziałem. Widziałem także interesujące pytanie Quory i post Xiu-Shen Wei, ale wydaje się, że nie obsługują one dwóch powyższych podejść.
Czego dokładnie brakuje? Czy jest to problem z normalizacją kolorów, czy jest papier, który faktycznie wyjaśnia, dlaczego tak wielu stosuje takie podejście?
źródło
Odpowiedzi:
Odejmowanie średniej zestawu danych służy do „wyśrodkowania” danych. Dodatkowo idealnie byłoby podzielić także sttdev tej cechy lub piksela, jeśli chcesz znormalizować każdą wartość funkcji do wyniku Z.
Powodem, dla którego robimy obie te rzeczy, jest to, że w trakcie szkolenia naszej sieci będziemy zwielokrotniać (wagi) i dodawać (odchylać) te początkowe dane wejściowe, aby spowodować aktywacje, które następnie przesadzamy z gradientami do wytrenuj model.
W tym procesie chcielibyśmy, aby każda funkcja miała podobny zakres, aby nasze gradienty nie wymknęły się spod kontroli (i abyśmy potrzebowali tylko jednego globalnego mnożnika szybkości uczenia się).
Innym sposobem, w jaki możesz o tym myśleć, są sieci głębokiego uczenia, które tradycyjnie dzielą wiele parametrów - gdyby nie skalować danych wejściowych w sposób, który skutkowałby podobnymi zakresami wartości funkcji (tj. W całym zestawie danych przez odjęcie średniej), dzielenie nie zdarza się bardzo łatwo, ponieważ w jednej części obrazu
w
jest dużo, a w drugiej jest zbyt mała.W niektórych modelach CNN zobaczysz, że stosuje się wybielanie na obraz, co jest bardziej zgodne z myśleniem.
źródło
Przed normalizacją partii zastosowano średnie odejmowanie na kanał, aby wyśrodkować dane wokół średniej zerowej dla każdego kanału (R, G, B). Zwykle pomaga to sieci uczyć się szybciej, ponieważ gradienty działają jednolicie dla każdego kanału. Podejrzewam, że jeśli użyjesz normalizacji wsadowej, etap wstępnego przetwarzania średniego odejmowania na kanał nie jest tak naprawdę konieczny, ponieważ i tak normalizujesz dla pojedynczej partii.
źródło
Normalizacja poszczególnych obrazów jest powszechna i jest nawet jedyną wbudowaną funkcją w Tensorflow (przede wszystkim dlatego, że jest bardzo łatwa do wdrożenia). Jest używany z dokładnie wymienionego powodu (dzień kontra noc dla tego samego obrazu). Jeśli jednak wyobrażasz sobie bardziej idealny scenariusz, w którym kontrolowane jest oświetlenie, wówczas względne różnice między każdym obrazem będą miały dużą wartość w algorytmie i nie chcielibyśmy tego wymazać za pomocą normalizacji poszczególnych obrazów (i chcieliby wykonać normalizację w kontekście całego zestawu danych treningowych).
źródło
Nazywa się to przetwarzaniem danych przed ich użyciem. Możesz przetwarzać na wiele sposobów, ale jest jeden warunek, że powinieneś przetwarzać wszystkie dane za pomocą tej samej funkcji X_preproc = f (X), a to f (.) Nie powinno zależeć od samych danych, więc jeśli użyjesz bieżącego obrazu oznacza to przetworzenie bieżący obraz, wtedy twój f (X) będzie naprawdę f (X, obraz) i nie chcesz tego.
Normalizacja kontrastu obrazu, o której mówiłeś, ma inny cel. Normalizacja kontrastu obrazu pomoże w funkcji.
Ale f (.) Powyżej pomoże w optymalizacji, utrzymując wszystkie funkcje liczbowo równe sobie (oczywiście w przybliżeniu)
źródło