Сорняки – это сорняки, растущие среди посевов. Несмотря на возможность использования некоторых сельскохозяйственных сорняков в качестве источника пищи, многие из них также могут оказаться вредными для сельскохозяйственных культур, как прямо, так и косвенно. Сорняки на полях могут подавлять рост сельскохозяйственных культур, загрязнять урожай и часто быстро распространяются. Поэтому фермерам необходимо обнаруживать сорняки и удалять их, чтобы защитить свои растения и урожай.
Содержание
- Введение в cAINvas
- Источник данных
- Увеличение данных
- Создание набора данных для обучения модели
- Визуализация данных
- Обучение модели
- Введение в DeepC
- Компиляция с DeepC
Введение в cAINvas
cAInvas — это интегрированная платформа разработки для создания интеллектуальных периферийных устройств. Мы можем не только обучать нашу модель глубокого обучения с помощью Tensorflow, Keras или Pytorch, мы также можем скомпилировать нашу модель с помощью периферийного компилятора под названием DeepC, чтобы развернуть нашу рабочую модель на периферийные устройства для производства. Система обнаружения сорняков также является частью галереи cAInvas. Все зависимости, которые вам понадобятся для этого проекта, также предустановлены.
cAInvas также предлагает различные другие блокноты для глубокого обучения в своей галерее, которые можно использовать для справки или для получения информации о глубоком обучении. Он также имеет поддержку графического процессора, что делает его лучшим в своем роде.
Источник данных
При работе с cAInvas одной из его ключевых функций является UseCases Gallary. При работе с любым из его вариантов использования вам не нужно искать данные вручную. Поскольку у них есть функция импорта набора данных в вашу рабочую область, когда вы работаете над ними. загрузить данные, нам просто нужно ввести следующие команды:
Выполнение приведенной выше команды загрузит помеченные данные в вашу рабочую область, которую вы будете использовать для обучения модели.
Увеличение данных
Поскольку размер данных невелик, нам придется увеличить размер набора данных за счет увеличения, чтобы наша модель могла получить столько данных, сколько требуется для правильного обучения. Дополнения, которые мы введем, - это диапазон вращения, сдвиг ширины, высота смещение, диапазон сдвига, яркость, горизонтальное отражение, вертикальное отражение. После завершения дополнений мы создадим новый каталог, в котором будут храниться все исходные данные изображения, а также дополненные данные. Для этого мы можем запустить следующую функцию:
Создание набора данных для обучения модели
Следующим шагом является загрузка значений пикселей данных изображения в виде массивов numpy в переменную вместе с целевыми метками, которые мы передадим в модель для обучения, и мы будем использовать разделительный модуль train-test из scikit Learn для подготовки набора данных поезда и тестовый набор данных.
Визуализация данных
Следующим шагом в конвейере является визуализация и анализ наших данных, чтобы получить представление о данных и о том, с чем мы имеем дело. Для этого мы распечатали первые 40 образцов данных каждого класса из набора данных. Для этого мы можем запустить следующую функцию :
Обучение модели
Следующим шагом после создания набора данных является передача наших обучающих данных для нашей модели глубокого обучения, чтобы научиться идентифицировать или классифицировать различные классы изображений. Используемая архитектура модели была следующей:
Model: "functional_1" _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= input_1 (InputLayer) [(None, 224, 224, 3)] 0 _________________________________________________________________ block1_conv1 (Conv2D) (None, 224, 224, 64) 1792 _________________________________________________________________ block1_conv2 (Conv2D) (None, 224, 224, 64) 36928 _________________________________________________________________ block1_pool (MaxPooling2D) (None, 112, 112, 64) 0 _________________________________________________________________ block2_conv1 (Conv2D) (None, 112, 112, 128) 73856 _________________________________________________________________ block2_conv2 (Conv2D) (None, 112, 112, 128) 147584 _________________________________________________________________ block2_pool (MaxPooling2D) (None, 56, 56, 128) 0 _________________________________________________________________ block3_conv1 (Conv2D) (None, 56, 56, 256) 295168 _________________________________________________________________ block3_conv2 (Conv2D) (None, 56, 56, 256) 590080 _________________________________________________________________ block3_conv3 (Conv2D) (None, 56, 56, 256) 590080 _________________________________________________________________ block3_pool (MaxPooling2D) (None, 28, 28, 256) 0 _________________________________________________________________ block4_conv1 (Conv2D) (None, 28, 28, 512) 1180160 _________________________________________________________________ block4_conv2 (Conv2D) (None, 28, 28, 512) 2359808 _________________________________________________________________ block4_conv3 (Conv2D) (None, 28, 28, 512) 2359808 _________________________________________________________________ block4_pool (MaxPooling2D) (None, 14, 14, 512) 0 _________________________________________________________________ block5_conv1 (Conv2D) (None, 14, 14, 512) 2359808 _________________________________________________________________ block5_conv2 (Conv2D) (None, 14, 14, 512) 2359808 _________________________________________________________________ block5_conv3 (Conv2D) (None, 14, 14, 512) 2359808 _________________________________________________________________ block5_pool (MaxPooling2D) (None, 7, 7, 512) 0 _________________________________________________________________ average_pooling2d (AveragePo (None, 3, 3, 512) 0 _________________________________________________________________ flatten (Flatten) (None, 4608) 0 _________________________________________________________________ dense (Dense) (None, 128) 589952 _________________________________________________________________ dropout (Dropout) (None, 128) 0 _________________________________________________________________ dense_1 (Dense) (None, 1) 129 ================================================================= Total params: 15,304,769 Trainable params: 590,081 Non-trainable params: 14,714,688 _________________________________________________________________
Мы использовали предварительно обученную модель VGG-16 и применили трансферное обучение. Мы изменили последний плотный слой модели VGG в соответствии с нашими потребностями. Мы не будем обучать всю модель VGG, а только определенные слои, которые мы добавили к нашему предварительному -существующая модель.
Использовалась функция потерь «binary_crossentropy», а оптимизатор — «Адам». Для обучения модели мы использовали Keras API с тензорным потоком на бэкэнде. Модель показала хорошую производительность с приличной точностью. Вот графики обучения для модели:
Введение в DeepC
Компилятор DeepC и платформа логического вывода предназначены для включения и выполнения нейронных сетей глубокого обучения с упором на функции устройств малого форм-фактора, таких как микроконтроллеры, eFPGA, процессоры и другие встроенные устройства, такие как raspberry-pi, odroid, arduino, SparkFun Edge, risc. -V, мобильные телефоны, x86 и портативные компьютеры.
DeepC также предлагает заблаговременно компилятор, создающий оптимизированный исполняемый файл на основе цепочки инструментов компилятора LLVM, специализированной для глубоких нейронных сетей с ONNX в качестве внешнего интерфейса.
Компиляция с DeepC
После обучения модели она была сохранена в формате H5 с помощью Keras, так как он легко сохраняет веса и конфигурацию модели в одном файле.
После сохранения файла в формате H5 мы можем легко скомпилировать нашу модель с помощью компилятора DeepC, который входит в состав платформы cAInvas, чтобы он преобразовывал нашу сохраненную модель в формат, который можно легко развернуть на периферии. устройства. И все это можно сделать очень легко с помощью простой команды.
И это все, так легко создать модель обнаружения сорняков, которая также готова к развертыванию на периферийных устройствах.
Ссылка на блокнот cAInvas: https://cainvas.ai-tech.systems/use-cases/crop-weed-detection-app/
Источник: Ашиш Арья