Obecnie próbuję stworzyć program różnicujący zgniłe pomarańcze i jadalne pomarańcze wyłącznie na podstawie ich wyglądu zewnętrznego. Aby to zrobić, planuję użyć Convolutional Neural Network, aby ćwiczyć ze zgniłymi pomarańczami i normalnymi pomarańczami. Po kilku poszukiwaniach mogłem znaleźć tylko jedną bazę danych o wielkości ok. 150 zgniłych pomarańczy i 150 normalnych pomarańczy na czarnym tle (http://www.cofilab.com/downloads/). Oczywiście model uczenia maszynowego potrzebuje co najmniej kilku tysięcy pomarańczy, aby uzyskać dokładność powyżej 90 procent. Czy mogę jednak zmienić te 150 pomarańczy w jakiś sposób, aby uzyskać więcej zdjęć pomarańczy? Przez zmianę, mam na myśli dodanie różnych odcieni pomarańczy na cytrusach, aby uzyskać "inny kolor pomarańczowy". Czy byłaby to skuteczna metoda szkolenia sieci neuronowej?Zmiana przeszkolonych obrazów do szkolenia sieci neuronowej
Odpowiedz
Jest to bardzo dobry sposób na zwiększenie liczby dacie masz. To, co zrobisz, zależy od twoich danych. Na przykład, jeśli szkolisz dane uzyskane z czujnika, możesz dodać trochę zakłóceń do danych treningowych, abyś mógł zwiększyć swój zestaw danych. W końcu możesz spodziewać się hałasu z czujnika później.
Zakładając, że będziesz ćwiczyć na obrazach, oto bardzo dobre repozytorium github, które zapewnia środki do wykorzystania tych technik. Ta biblioteka pytona pomaga w powiększaniu obrazów do projektów uczenia maszynowego. Konwertuje zestaw obrazów wejściowych na nowy, znacznie większy zbiór lekko zmienionych obrazów. Link: https://github.com/aleju/imgaug
Cechy:
większości standardowych technik powiększania dostępny.
Techniki można zastosować zarówno do obrazów, jak i punktów szczególnych/punktów orientacyjnych na obrazach . Zdefiniuj sekwencję augmentacji raz na początku eksperymentu , a następnie zastosuj ją wielokrotnie.
Zdefiniuj elastyczne zakresy stochastyczne dla każdej augmentacji, np. "obróć każde zdjęcie o wartość pomiędzy -45 a 45 stopni" lub "obróć każdy obraz o wartość próbkowaną z rozkładu normalnego N (0, 5.0)".
łatwo przekształcić wszystkie zakresy stochastycznych do wartości deterministycznych do zwiększenia różne partie obrazu w dokładnie identyczny sposób (na przykład obrazy i ich Strefy).
To naprawdę dobry sposób na zwiększenie zestawu danych. Można na przykład zastosować rozmycie gaussowskie do obrazów. Staną się rozmyte, ale różnią się od oryginału. Możesz także odwrócić obrazy. Lub, w ostatnim przypadku, poszukaj nowych obrazów i zastosuj cytowane techniki.
Rozszerzenie danych jest tym, czego szukasz. W twoim przypadku możesz zrobić różne rzeczy:
Zastosuj filtry, aby uzyskać nieco inny obraz, jak już powiedziano, możesz użyć rozmycia gaussowskiego.
Wytnij pomarańczę i umieść ją na innym tle.
Skaluj pomarańcze, używając różnych współczynników skali.
Obracanie obrazów.
twórz syntetyczne zgniłe pomarańcze.
Wymieszaj wszystkie kombinacje poprzednio wymienionych. Przy pomocy tego rodzaju ulepszenia możesz łatwo stworzyć tysiąc różnych pomarańczy.
Zrobiłem coś takiego ze zbioru danych o 12.000 obrazów i mogę tworzyć 630.000 próbek
danych powiększania jest naprawdę dobry sposób na zwiększenie szkoleń ustawiony ale jeszcze nie na tyle aby trenować głęboki koniec sieciowej, aby zakończyć na własną rękę, biorąc pod uwagę możliwość, że będzie to nadmierne dopasowanie. Powinieneś popatrzeć na adaptację domeny, w której bierzesz udoskonalony model, taki jak incepcja, który jest szkolony na zestawie danych imagenet i finalizujesz go dla twojego problemu. Ponieważ musisz nauczyć się tylko parametrów wymaganych do sklasyfikowania twojego przypadku użycia, możliwe jest osiągnięcie dobrych dokładności przy relatywnie mniej dostępnych danych treningowych. Wystawiłem demo klasyfikacji w tej technice here. Wypróbuj go z zestawem danych i sprawdź, czy to pomaga. Demo zajmuje się udoskonalonym modelem, a także rozszerzeniem danych dla zbioru danych, który prześlesz.
- 1. Szkolenia sieci neuronowej w Ruby
- 2. Ustawienia sieci neuronowej do szybkiego szkolenia
- 3. zestaw obrazów treningowych dla prostej sieci neuronowej
- 4. Backpropagation sieci neuronowej Pythona
- 5. Konfiguracja sieci neuronowej java
- 6. Szkolenie sieci neuronowej ze zbrojeniem uczącym się
- 7. Określanie odpowiedniej liczby neuronów dla sieci neuronowej
- 8. Jak wprowadzić obraz do sieci neuronowej?
- 9. skalowanie danych wejściowych do sieci neuronowej
- 10. Matlab - szkolenie z sieci neuronowej
- 11. Implementacja sieci neuronowej w java
- 12. Problemy z wdrożeniem metody propagacji sieci neuronowej
- 13. Jak mogę obliczyć lub monitorować trening sieci neuronowej w pybrain?
- 14. Przybliżenie funkcji sinusoidalnej za pomocą sieci neuronowej
- 15. Przykład sieci neuronowej Kod źródłowy (najlepiej Python)
- 16. Gdzie dodać przerwanie w sieci neuronowej?
- 17. Prognozy długoterminowe z wykorzystaniem sztucznej sieci neuronowej
- 18. Pełno-macierzowe podejście do propagacji wstecznej w Sztucznej Sieci Neuronowej
- 19. Jak zwiększyć dokładność sprawdzania za pomocą głębokiej sieci neuronowej?
- 20. Wprowadzanie obrazu z sieci neuronowej Theano/Lasagne/Nolearn
- 21. Traincascade OpenCV do szkolenia LBP
- 22. Jak wybrać liczbę ukrytych warstw i węzłów w sieci neuronowej?
- 23. Encog - Jak załadować dane treningowe dla sieci neuronowej
- 24. Nie można szkolić sieci neuronowej rozwiązującej mapowanie XOR
- 25. Wykreślanie modelu sieci neuronowej z pakietu nnet R cran
- 26. Zmiana rozmiaru obrazów w VB.NET
- 27. Dlaczego musimy znormalizować wejście dla sztucznej sieci neuronowej?
- 28. Szkolenie z zerowej dokładności w sieci neuronowej w Keras
- 29. Ocena wydajności osadzania sieci neuronowej w klasyfikatorze kNN
- 30. Gradient w ciągłej regresji przy użyciu sieci neuronowej