вводить
Эта часть является классификатором цветов..
Язык классификатора цветов: Python, платформа глубокого обучения: PyTorch, метод: обучение сверточной нейронной сети
Основные сведения об использовании PyTorch см. в блоге:Заметки PyTorch
Репозиторий Gitee:цветочная идентификация
Репозиторий Github:цветочная идентификация
Использование Git может относиться к блогу:Примечания по использованию Git
Позже будут опубликованы более подробные статьи по некоторым из этих материалов.
набор данных
В настоящее время для классификации выбрано 20 видов цветочных данных.
В папке данных на складе хранятся 20 наборов данных цветов, которые я использую. В будущем он будет расширяться.
Источники данных в основном зависят от 3 аспектов:
- 5 видов цветочных наборов данных, каждый тип цветов содержит от 600 до 900 изображений.
- Получено из набора данных Oxford 102 Flowers, который содержит 102 категории данных о цветах Великобритании, от 40 до 258 изображений в каждой категории.
- Последняя часть исходит из изображений Baidu, использующих программу python для сбора данных изображений цветов в пакетах.
Названия некоторых цветов я писал сам, используя научные названия цветов, обычно на латыни.
Данные о 20 цветках, которые я выбрал, следующие:
Нумерация | name | название | количество |
---|---|---|---|
1 | daisy | маргаритка | 633 |
2 | dandelion | одуванчик | 898 |
3 | roses | Цветок роза | 641 |
4 | sunflowers | подсолнух | 699 |
5 | tulips | тюльпан | 799 |
6 | Nymphaea | кувшинка | 226 |
7 | Tropaeolum_majus | Настурция | 196 |
8 | Digitalis_purpurea | наперстянка | 190 |
9 | peach_blossom | персиковый цвет | 55 |
10 | Jasminum | Жасмин | 60 |
11 | Matthiola | Фиалки | 54 |
12 | Rosa | Роза | 54 |
13 | Rhododendron | Рододендрон | 57 |
14 | Dianthus | гвоздика | 48 |
15 | Cerasus | Цветение вишни | 50 |
16 | Narcissus | нарциссы | 52 |
17 | Pharbitis | ипомея | 46 |
18 | Gazania | Медаль Хризантема | 108 |
19 | Eschscholtzia | календула | 82 |
20 | Tithonia | Набухшая хризантема | 47 |
Цветочный стиль:
расширение данных
Количество собранных цветов каждого типа не очень велико, но таких как вишни и нарциссы около 50 штук.Объем данных слишком мал.Если вы напрямую обучаете модель, точность не будет слишком высока, и возникнут серьезные проблемы с переоснащением.
Используемые в настоящее время методы расширения данных делятся на три типа: зеркальный переворот, переворот вверх и вниз, а также шум соли и перца.
зеркало флип: Отразите изображение влево и вправо, чтобы создать новые данные.
с ног на голову: Переворачивайте изображение вверх и вниз, чтобы генерировать новые данные.
шум соли и перца: добавьте шум к изображению и создайте новые данные.
Расширенное количество цветов выглядит следующим образом:
Нумерация | name | название | количество | Количество после увеличения |
---|---|---|---|---|
1 | daisy | маргаритка | 633 | 2496 |
2 | dandelion | одуванчик | 898 | 3588 |
3 | roses | Цветок роза | 641 | 2400 |
4 | sunflowers | подсолнух | 699 | 2796 |
5 | tulips | тюльпан | 799 | 3196 |
6 | Nymphaea | кувшинка | 226 | 1808 |
7 | Tropaeolum_majus | Настурция | 196 | 1568 |
8 | Digitalis_purpurea | наперстянка | 190 | 1360 |
9 | peach_blossom | персиковый цвет | 55 | 440 |
10 | Jasminum | Жасмин | 60 | 480 |
11 | Matthiola | Фиалки | 54 | 432 |
12 | Rosa | Роза | 54 | 432 |
13 | Rhododendron | Рододендрон | 57 | 456 |
14 | Dianthus | гвоздика | 48 | 384 |
15 | Cerasus | Цветение вишни | 50 | 400 |
16 | Narcissus | нарциссы | 52 | 416 |
17 | Pharbitis | ипомея | 46 | 368 |
18 | Gazania | Медаль Хризантема | 108 | 464 |
19 | Eschscholtzia | календула | 82 | 656 |
20 | Tithonia | Набухшая хризантема | 47 | 376 |
сегментация данных
Набор данных готов, его нужно разделить на обучающий набор, проверочный набор и тестовый набор.
В пакете torchvision PyTorch есть класс чтения данных для компьютерного зрения.ImageFolder
, его метод вызова — torchvision.datasets.ImageFolder, основная функция — чтение данных изображения, а изображение необходимо хранить следующим образом.
Затем вызовите класс следующим образом:
train_dataset = ImageFolder(root='./data/train/',transform=data_transform)
root представляет корневой каталог, а transform представляет метод предварительной обработки данных.
Таким образом, все изображения в папках с кошками и собаками в каталоге поезда используются в качестве тренировочного набора, а имена папок кошка и собака используются в качестве данных меток для обучения.
Итак, мы разделим набор данных, как того требует ImageFolder.
У меня коэффициент разделения 3:1:1. На самом деле, если вы не хотите разделять проверочный набор, вы можете закомментировать кодовую часть проверочного набора и можете напрямую использовать обучающий и тестовый наборы.
#比例
scale = [0.6, 0.2, 0.2]
На данный момент часть данных готова.
обучение модели
В настоящее время используются две сети, AlexNet и VGG16.Фактически эти две сети похожи.Разница в том, что VGG16 «глубже», чем AlexNet.
Сетевая структура AlexNet выглядит следующим образом:
Сетевая структура VGG16 выглядит следующим образом:
По сравнению с двумя, VGG16 имеет более высокий уровень точности, и видно, что более глубокая сеть помогает повысить уровень точности.
Точность процесса обучения AlexNet меняется следующим образом:
Точность VGG16 после 200 эпох обучения меняется следующим образом:
AlexNet, наконец, может достичь точности 83 % после обучения в течение 500 эпох.
VGG16, наконец, может достичь точности 90% после обучения 200 эпох
Параметры модели, полученные в результате двух вышеуказанных тренировок, я положил на склад.
Проверка модели
В дополнение к набору проверочных тестов вы также можете использовать изображения для проверки эффекта обучения модели.
Выбрана сеть VGG16 с лучшим эффектом проверки, а считанные параметры являются параметрами после 200-этапного обучения.
Видно, что тестовый эффект все еще очень хороший, и модель может очень точно определить тип цветов.
дополнение
Если у вас есть облачный сервер и вы хотите сделать веб-сервер, вы можете попробовать flask framework (конечно, вы также можете использовать flask локально, но это не имеет особого смысла)
в соответствии сflask
программу в папке, запустив ее на сервере, а затем открыв новую веб-страницу, введитеIP:端口?图片地址
можно идентифицировать.
вsjcup.cn
Это одно из моих доменных имен, которое можно заменить на имя моего собственного сервера.公网IP
Еще один подвох в том, что название картинки не может быть китайским именем, иначе не детектится
Не удается получить доступ к общедоступному IP-адресупроблема может быть основана наблогвнести некоторые изменения
следующие шаги
- Дополнение набора данных для определения большего количества категорий цветов
- Внедрите новое сетевое обучение, такое как Inception V3