Существуют инструменты, которые можно использовать, и надежная модель глубокого обучения 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, чтобы получить лучшие результаты. Не стесняйтесь пробовать больше невидимых данных :)