AI-For-Beginners/translations/bg/lessons/4-ComputerVision/07-ConvNets/README.md

61 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Конволюционни невронни мрежи
Вече видяхме, че невронните мрежи са доста добри в обработката на изображения, и дори еднослойният перцептрон може да разпознава ръкописни цифри от набора данни MNIST с приемлива точност. Въпреки това, наборът данни MNIST е доста специален, тъй като всички цифри са центрирани в изображението, което прави задачата по-лесна.
## [Тест преди лекцията](https://ff-quizzes.netlify.app/en/ai/quiz/13)
В реалния живот искаме да можем да разпознаваме обекти на снимка, независимо от тяхното точно местоположение в изображението. Компютърното зрение се различава от общата класификация, защото когато се опитваме да намерим определен обект в изображението, ние сканираме изображението, търсейки специфични **шаблони** и техните комбинации. Например, когато търсим котка, първо може да търсим хоризонтални линии, които могат да формират мустаци, а след това определена комбинация от мустаци може да ни подскаже, че това всъщност е снимка на котка. Относителното положение и наличието на определени шаблони са важни, а не тяхното точно местоположение в изображението.
За да извлечем шаблони, ще използваме понятието за **конволюционни филтри**. Както знаете, едно изображение се представя чрез 2D-матрица или 3D-тензор с цветова дълбочина. Прилагането на филтър означава, че вземаме сравнително малка матрица, наречена **ядро на филтъра**, и за всеки пиксел в оригиналното изображение изчисляваме претегленото средно с неговите съседни точки. Можем да си представим това като малък прозорец, който се плъзга по цялото изображение и осреднява всички пиксели според теглата в матрицата на ядрото на филтъра.
![Филтър за вертикални ръбове](../../../../../translated_images/bg/filter-vert.b7148390ca0bc356.webp) | ![Филтър за хоризонтални ръбове](../../../../../translated_images/bg/filter-horiz.59b80ed4feb946ef.webp)
----|----
> Изображение от Дмитрий Сошников
Например, ако приложим 3x3 филтри за вертикални и хоризонтални ръбове към цифрите от MNIST, можем да подчертаем (например високи стойности) местата, където има вертикални и хоризонтални ръбове в оригиналното изображение. Така тези два филтъра могат да се използват за "търсене" на ръбове. По същия начин можем да проектираме различни филтри, за да търсим други нискоуровневи шаблони:
<img src="../../../../../translated_images/bg/lmfilters.ea9e4868a82cf74c.webp" width="500" align="center"/>
> Изображение на [Leung-Malik Filter Bank](https://www.robots.ox.ac.uk/~vgg/research/texclass/filters.html)
Въпреки това, докато можем ръчно да проектираме филтри за извличане на определени шаблони, можем също така да проектираме мрежата така, че тя автоматично да научава шаблоните. Това е една от основните идеи зад CNN.
## Основни идеи зад CNN
Работата на CNN се основава на следните важни идеи:
* Конволюционните филтри могат да извличат шаблони
* Можем да проектираме мрежата така, че филтрите да се обучават автоматично
* Можем да използваме същия подход, за да намираме шаблони в характеристики на високо ниво, а не само в оригиналното изображение. Така извличането на характеристики в CNN работи на йерархия от характеристики, започвайки от нискоуровневи комбинации от пиксели до по-високо ниво комбинации от части на изображението.
![Йерархично извличане на характеристики](../../../../../translated_images/bg/FeatureExtractionCNN.d9b456cbdae7cb64.webp)
> Изображение от [статия на Hislop-Lynch](https://www.semanticscholar.org/paper/Computer-vision-based-pedestrian-trajectory-Hislop-Lynch/26e6f74853fc9bbb7487b06dc2cf095d36c9021d), базирано на [тяхното изследване](https://dl.acm.org/doi/abs/10.1145/1553374.1553453)
## ✍️ Упражнения: Конволюционни невронни мрежи
Нека продължим да изследваме как работят конволюционните невронни мрежи и как можем да постигнем обучаеми филтри, като работим с подходящите тетрадки:
* [Конволюционни невронни мрежи - PyTorch](ConvNetsPyTorch.ipynb)
* [Конволюционни невронни мрежи - TensorFlow](ConvNetsTF.ipynb)
## Пирамидална архитектура
Повечето CNN, използвани за обработка на изображения, следват така наречената пирамидална архитектура. Първият конволюционен слой, приложен към оригиналните изображения, обикновено има сравнително малък брой филтри (8-16), които съответстват на различни комбинации от пиксели, като хоризонтални/вертикални линии или щрихи. На следващото ниво намаляваме пространственото измерение на мрежата и увеличаваме броя на филтрите, което съответства на повече възможни комбинации от прости характеристики. С всеки слой, докато се придвижваме към крайния класификатор, пространствените измерения на изображението намаляват, а броят на филтрите нараства.
Като пример, нека разгледаме архитектурата на VGG-16, мрежа, която постигна 92.7% точност в класификацията на ImageNet (топ 5) през 2014 г.:
![Слоеве на ImageNet](../../../../../translated_images/bg/vgg-16-arch1.d901a5583b3a51ba.webp)
![Пирамида на ImageNet](../../../../../translated_images/bg/vgg-16-arch.64ff2137f50dd49f.webp)
> Изображение от [Researchgate](https://www.researchgate.net/figure/Vgg16-model-structure-To-get-the-VGG-NIN-model-we-replace-the-2-nd-4-th-6-th-7-th_fig2_335194493)
## Най-известни архитектури на CNN
[Продължете обучението си за най-известните архитектури на CNN](CNN_Architectures.md)
---