Сверточные нейронные сети для обучения классификатора распознавания цветов

глубокое обучение

вводить

  Эта часть является классификатором цветов..

  Язык классификатора цветов: 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

  Цветочный стиль:

image-20200323134803440

расширение данных

Количество собранных цветов каждого типа не очень велико, но таких как вишни и нарциссы около 50 штук.Объем данных слишком мал.Если вы напрямую обучаете модель, точность не будет слишком высока, и возникнут серьезные проблемы с переоснащением.

  Используемые в настоящее время методы расширения данных делятся на три типа: зеркальный переворот, переворот вверх и вниз, а также шум соли и перца.

  зеркало флип: Отразите изображение влево и вправо, чтобы создать новые данные.

image-20200323161939465

  с ног на голову: Переворачивайте изображение вверх и вниз, чтобы генерировать новые данные.

image-20200323162157922

  шум соли и перца: добавьте шум к изображению и создайте новые данные.

image-20200323162309627

   Расширенное количество цветов выглядит следующим образом:

Нумерация 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, основная функция — чтение данных изображения, а изображение необходимо хранить следующим образом.

image-20200321104936098

   Затем вызовите класс следующим образом:

train_dataset = ImageFolder(root='./data/train/',transform=data_transform)

  root представляет корневой каталог, а transform представляет метод предварительной обработки данных.

   Таким образом, все изображения в папках с кошками и собаками в каталоге поезда используются в качестве тренировочного набора, а имена папок кошка и собака используются в качестве данных меток для обучения.

   Итак, мы разделим набор данных, как того требует ImageFolder.

image-20200323184552442

   У меня коэффициент разделения 3:1:1. На самом деле, если вы не хотите разделять проверочный набор, вы можете закомментировать кодовую часть проверочного набора и можете напрямую использовать обучающий и тестовый наборы.

#比例
scale = [0.6, 0.2, 0.2]

   На данный момент часть данных готова.

обучение модели

   В настоящее время используются две сети, AlexNet и VGG16.Фактически эти две сети похожи.Разница в том, что VGG16 «глубже», чем AlexNet.

  Сетевая структура AlexNet выглядит следующим образом:

img

  Сетевая структура VGG16 выглядит следующим образом:

147

   По сравнению с двумя, VGG16 имеет более высокий уровень точности, и видно, что более глубокая сеть помогает повысить уровень точности.

  Точность процесса обучения AlexNet меняется следующим образом:

image-20200323225509766

  Точность VGG16 после 200 эпох обучения меняется следующим образом:

image-20200323230153110

  AlexNet, наконец, может достичь точности 83 % после обучения в течение 500 эпох.

  VGG16, наконец, может достичь точности 90% после обучения 200 эпох

  Параметры модели, полученные в результате двух вышеуказанных тренировок, я положил на склад.

Проверка модели

  В дополнение к набору проверочных тестов вы также можете использовать изображения для проверки эффекта обучения модели.

  Выбрана сеть VGG16 с лучшим эффектом проверки, а считанные параметры являются параметрами после 200-этапного обучения.

image-20200323231914637

image-20200323231935143

   Видно, что тестовый эффект все еще очень хороший, и модель может очень точно определить тип цветов.

дополнение

Если у вас есть облачный сервер и вы хотите сделать веб-сервер, вы можете попробовать flask framework (конечно, вы также можете использовать flask локально, но это не имеет особого смысла)

в соответствии сflaskпрограмму в папке, запустив ее на сервере, а затем открыв новую веб-страницу, введитеIP:端口?图片地址можно идентифицировать.

image-20200423135159846

вsjcup.cnЭто одно из моих доменных имен, которое можно заменить на имя моего собственного сервера.公网IP

Еще один подвох в том, что название картинки не может быть китайским именем, иначе не детектится

Не удается получить доступ к общедоступному IP-адресупроблема может быть основана наблогвнести некоторые изменения

следующие шаги

  • Дополнение набора данных для определения большего количества категорий цветов
  • Внедрите новое сетевое обучение, такое как Inception V3