Существуют инструменты, которые можно использовать, и надежная модель глубокого обучения Inception v3 - одна из них. В этом посте показано, как обучить модель, которая может дифференцировать 12 видов растений на основе изображений RGB сырых растений, а затем делать прогнозы на изображениях невидимых растений, чтобы увидеть, что это за растения.

Я использовал Tensorflow 1.6 и предварительно обученные модели, которые можно найти в его исходном коде, доступном в его репозитории Github. Перед началом убедитесь, что в вашей системе установлены python и tensorflow, не стесняйтесь следовать этому руководству, чтобы сделать это, если это необходимо.

Первым делом необходимо организовать данные в этом случае изображения, которые необходимо передать в сеть Inception. Я создал папку data и поместил туда 12 подпапок, каждая для каждого вида растений, каждая из которых содержит изображения своего вида растений. Вот уменьшенная версия исходных данных «https://github.com/moisesvw/plants-kaggle секс/

После того, как данные были систематизированы, я загрузил исходный код tenorflow с Github.

# This download tensorflow source code
(ml-dev) $ git clone [email protected]:tensorflow/tensorflow.git

Затем вошел в системный терминал в этом каталоге, чтобы я мог выполнить следующую команду для обучения сети. Я пропустил путь, который указывает на каталог dowloadeddata.

(ml-dev) $ cd tensorflow
(ml-dev) $ python tensorflow/examples/image_retraining/retrain.py \
    --image_dir=/tmp/plants-kaggle/data \
    --learning_rate=0.009 \
    --how_many_training_steps=5000 \
    --validation_batch_size=-1 \
    --eval_step_interval=50 \
    --train_batch_size=128

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

INFO:tensorflow:800 bottleneck files created.
INFO:tens........:54:28.845552: Step 0: Train accuracy = 21.9%
INFO:tens........:54:28.845749: Step 0: Cross entropy = 2.429032
INFO:tens........:54:30.231310: Step 0: Validation accuracy = 6.9% 
INFO:tens........:54:36.333759: Step 50: Train accuracy = 54.7%
INFO:tens........:54:36.333906: Step 50: Cross entropy = 1.902977
INFO:tens........:54:36.402562: Step 50: Validation accuracy = 47.2%
INFO:tens........:54:41.343385: Step 100: Train accuracy = 62.5%
.
.
.
.
INFO:tens..:02:30.609346: Step 4950: Validation accuracy = 75.0% 
INFO:tens..:02:35.285169: Step 4999: Train accuracy = 100.0%
INFO:tens..:02:35.285309: Step 4999: Cross entropy = 0.147399
INFO:tens..:02:35.338843: Step 4999: Validation accuracy = 75.0%
Model path:  /tmp/imagenet/classify_image_graph_def.pb
INFO:tensorflow:Restoring parameters from /tmp/_retrain_checkpoint
INFO:tensorflow:Final test accuracy = 83.1% (N=77)
Model path:  /tmp/imagenet/classify_image_graph_def.pb
INFO:tensorflow:Restoring parameters from /tmp/_retrain_checkpoint
INFO:tensorflow:Froze 2 variables.
Converted 2 variables to const ops.
Model path:  /tmp/imagenet/classify_image_graph_def.pb
INFO:tensorflow:Restoring parameters from /tmp/_retrain_checkpoint
INFO:tensorflow:No assets to save.
INFO:tensorflow:No assets to write.
INFO:tensorflow:SavedModel written to: b'/tmp/saved_models/1/saved_model.pb'

Сеть была обучена и достигла точности теста 83,1%. Следующим этапом является тестирование сети с невидимым изображением растения кукурузы, чтобы увидеть, как сети выполняют свою работу по классификации.

(ml-dev) $ python tensorflow/examples/label_image/label_image.py \
--graph=/tmp/output_graph.pb --labels=/tmp/output_labels.txt \
--input_layer=Mul \
--output_layer=final_result \
--input_mean=128 --input_std=128 \
--image=/tmp/eefba9376.jpg
maize 0.9562881
sugar beet 0.03343972
fat hen 0.006015149
charlock 0.0020397396
cleavers 0.0014281995
.
.

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

Я рекомендую обучить эту сеть с полной версией данных, которые можно найти в этом Kaggle, чтобы получить лучшие результаты. Не стесняйтесь пробовать больше невидимых данных :)