Классификация изображений и сверточные нейронные сети

За последние несколько лет в компьютерном зрении преобладали методы глубокого обучения. Одна из областей применения компьютерного зрения, в которой глубокое обучение выделяется, - это классификация изображений с помощью сверточных нейронных сетей (CNN) . Цель классификации изображений - классифицировать конкретное изображение по набору возможных категорий. Современные классификаторы изображений часто являются результатом подходов к переносу обучения, основанных на предварительно обученных сверточных нейронных сетях .

В этой статье мы проиллюстрируем обучение модели классификации болезней растений с использованием Fastai library.

Библиотека Fastai

fastai library упрощает и позволяет обучать быстрые и точные нейронные сети с использованием передовых современных методов. Это отличная инициатива Джереми Ховарда и его команды, направленная на демократизацию глубокого обучения и упрощение создания моделей глубокого обучения для всех.

Fastai - это оболочка для PyTorch, которая упрощает доступ к рекомендуемым передовым методам обучения моделей глубокого обучения, в то же время делая все основные функции PyTorch напрямую доступными для разработчиков.

Основная причина успеха fastai - это использование методов трансферного обучения. Трансферное обучение предполагает использование предварительно обученной модели, которая была обучена на большом наборе данных и, наконец, адаптирована под конкретные нужды. Fastai library имеет потрясающую документацию, которая поможет вам ориентироваться в их библиотечных функциях с живыми примерами их использования.

Обучение классификатору болезней растений

Набор данных

Данные, используемые в этой статье, получены из Задачи классификации болезней растений и деревень, организованной CrowdAi. Целью этой задачи была разработка алгоритмов, которые могут точно диагностировать болезнь на основе изображения растения. PlantVillage - это некоммерческий проект Государственного университета Пенсильвании в США и EPFL (Федеральная политехническая школа Лозанны) в Швейцарии.

Организации позволяют мелким фермерам увеличивать урожайность за счет использования искусственного интеллекта для предоставления офлайн-знаний экспертного уровня и советов по расширению. PlantVillage уже собрал и продолжает собирать десятки тысяч изображений больных и здоровых культур.

Тот же набор данных изображений листьев пораженных растений и соответствующих этикеток, включающих 38 классов болезней сельскохозяйственных культур, также можно найти в аккаунте spMohanty’s GitHub.

Примечание редактора: вы также можете ознакомиться с нашим обзором сообщества о том, как Plant Village использует машинное обучение на устройстве для обнаружения болезней растений в отдаленных частях Восточной Африки.

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

Мы используем модуль vision библиотеки Fastai для обучения модели классификации изображений, которая может распознавать болезни растений с самой современной точностью. Хотя обучение модели можно проводить локально с помощью ноутбука, мы используем Google Colab, который дает нам больше вычислительной мощности, доступ к графическому процессору и простую в использовании среду ноутбука Jupyter для создания моделей машинного обучения и глубокого обучения.

Мы начинаем с размещения следующих трех строк в начале записной книжки, чтобы гарантировать, что любые изменения, внесенные в библиотеки, автоматически перезагружаются, а также чтобы все отображаемые диаграммы или изображения отображались в записной книжке. Это не коды Python, а специальные директивы для самого Jupyter Notebook. % - одна из волшебных команд, поддерживаемых в Jupyter Lab, которая добавляет дополнительную функциональность нашим записным книжкам Jupyter Lab (и не ограничивается основным языком).

%reload_ext autoreload
%autoreload 2
%matplotlib inline

Следующим шагом будет импорт необходимых библиотек. Модуль fastai и любой другой модуль можно легко установить с помощью команды pip.

!pip install fastai #installs the fastai library
import numpy as np
from fastai import *
from fastai.vision import *
from pathlib import Path

Загрузка и просмотр данных

Мы загружаем цветные (оригинальные RGB) изображения с помощью следующей команды:

Всякий раз, когда мы приближаемся к проблеме, первое, что нужно сделать, - это взглянуть на данные, чтобы лучше понять, в чем проблема и как они выглядят, прежде чем мы сможем понять, как решить проблему. Взгляд на данные означает понимание того, как структурированы каталоги данных, каковы метки и как выглядят некоторые из образцов изображений.

В этом конкретном наборе данных имя папки представляет собой метку класса всех изображений, присутствующих в этой папке. Нам нужно автоматически извлечь имена меток из имени папки. К счастью, библиотека fastai предоставляет функцию ImageDataBunch.from_folder, которая позволяет автоматически извлекать названия меток из имени папки. Кроме того, класс ImageDataBunch упрощает создание наборов для обучения и проверки с изображениями и этикетками. После загрузки данных мы также можем нормализовать данные, используя параметры .normalize в ImageNet.

Функцию .show_batch() класса ImageDataBunch можно использовать для просмотра случайной выборки изображений из заданных данных.

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

DataBunch имеет свойство под названием c, которое помогает определить количество классов - важную информацию, особенно для задач классификации. Мы печатаем метки классов и количество классов следующим образом:

Передача обучения с использованием предварительно обученной модели: ResNet 50

Теперь, когда наши данные готовы, пора подобрать модель. Для создания модели мы воспользуемся функцией create_cnn из класса Learner и загрузим предварительно обученную модель, в данном случае ResNet 50, из класса моделей. Модель, которую мы строим, будет принимать изображения в качестве входных данных и выводить прогнозируемую вероятность каждой категории с точностью, используемой в качестве меры производительности.

Мы используем метод fit_one_cycle для обучения модели для 4 эпох (4 цикла по данным).

Набор весов, сгенерированный в процессе обучения, может быть сохранен для повторного использования с помощью функции .save класса learner. В нашем случае мы сохраняем его как «стадия-1».

Заключение

Для достижения глобальной продовольственной безопасности обществу необходимо увеличить производство продуктов питания примерно на 70%, чтобы накормить ожидаемую численность населения более 9 миллиардов человек к 2050 году. Одним из способов достижения этой цели является сокращение инфекционных болезней сельскохозяйственных культур, которые часто приводят к снижению потенциальной урожайности в среднем на 40%, а иногда и больше, особенно для мелких фермеров в развивающихся странах.

Широкое распространение смартфонов по всему миру дает возможность превратить наши телефоны в ценные инструменты диагностики заболеваний, позволяя фермерам распознавать болезни по изображениям, снятым с помощью камеры устройства.

Обсудите этот пост в Hacker News и Reddit.

Примечание редактора: Heartbeat - это онлайн-публикация и сообщество, созданное авторами и посвященное предоставлению первоклассных образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.

Независимо от редакции, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по обработке данных и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить модели машинного обучения.