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

Содержание

  • Введение в 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/

Источник: Ашиш Арья