Простий класифікатор зображень на Python за допомогою бібліотеки TensorFlow: покрокове керівництво


Дізнайтесь більше про нові кар'єрні можливості в EchoUA. Цікаві проекти, ринкова оплата, гарний колектив. Надсилайте резюме та приєднуйтеся до нас.

Це керівництво допоможе Вам створити класифікатор зображень, використовуючи декілька рядків коду і TensorFlow – бібліотеку машинного навчання від Google.

Щоб отримати максимальну користь з керівництва, Вам знадобиться:

  • комп’ютер з 64-бітовою операційною системою Linux або macOS (користувачам Windows рекомендуємо використати віртуальну машину);
  • базове знання Unix-команд та інтерфейсу командного рядка;
  • базове розуміння облаштування контейнерів Docker (допоможе наше керівництво) і віртуальних машин;
  • бібліотека TensorFlow версії 1.2.0, встановлена в контейнері Docker (дивіться нижче);
  • остання версія бібліотеки numpy (pip install numpy);
  • знання Python;
  • базові навички роботи з Git (знову допоможе наше керівництво).

Постановка задачі

Що повинен виконати алгоритм:

  • проаналізувати зображення і визначити, чи є на ньому квітка;
  • якщо є, то визначити, до якої із запропонованих категорій вона відноситься;
  • вивести відсоток упевненості у своїй відповіді.

Категорії кольорів, включені у вхідний набір даних: ромашки, кульбаби, троянди, соняшники і тюльпани.

Ми використовуватимемо Inception v3 – готову модель машинного навчання для тренування на нашому власному наборі даних. Ця нейронна мережа використовується в “Кампанії з широкомасштабного розпізнавання образів ImageNet” (ILSVRC – ImageNet Large Scale Visual Recognition Challenge) і раніше на ній проводилося навчання описуваного алгоритму на визначення категорій об’єктів на зображеннях.

Налаштування інструментів

Скористаємося пакетом контейнерів Docker, TensorFlow, що надається. Однією з переваг контейнера є те, що всі залежності, необхідні для запуску TensorFlow, вже є в контейнері, тому немає необхідності встановлювати що-небудь самостійно (проте, необхідно переконатися, що в контейнері встановлена остання версія бібліотеки TensorFlow. Для цього в консолі Docker необхідно ввести pip install --upgrade tensorflow). Слідуйте цим вказівкам для установки панелі інструментів Docker на ПК.

Docker- контейнер працює за принципом невеликого комп’ютера, відокремленого від Вашого основного комп’ютера. Він має свою власну файлову систему, а також йому буде призначена власна IP-адреса після успішного завершення установки. Щоб перевірити, чи правильно встановлений Docker, запустіть Docker Daemon, ввівши таку команду в основному терміналі:

sudo service docker start

Запуск образу Docker TensorFlow

Встановіть образ Docker TensorFlow:

sudo docker run - it gcr.io/tensorflow/tensorflow:latest-devel

Після того, як Ви введете цю команду, з’явиться новий користувач з рут-правами і довгим номером([email protected]), як це показано на скриншоті нижче. Зверніть увагу, що в Docker знаходитиметься тека tensorflow.

Щоб переконатися в коректній роботі TensorFlow, Ви можете набрати наступний код на Python, що складається з трьох рядків, для відображення вітання TensorFlow в терміналі Docker:

Підготовка вхідних даних для навчання

Щоб модель Inception v3 могла визначати квіти на зображеннях, необхідно підготувати вхідні дані, на яких алгоритм навчатиметься. Для цього спочатку слід створити каталог на Вашому основному комп’ютері / віртуальній машині з назвою tf_files, шлях може виглядати приблизно так: ~/Documents/tutorial ML/tf files.

Якщо Ви все ще знаходитесь у терміналі Docker, можете натиснути Ctrl+D, щоб вийти з Docker і повернутися в термінал Вашого основного комп’ютера / віртуальної машини, або створити нове вікно терміналу. Для завантаження набору зображень з кольорами спочатку перейдіть у каталог tf_files, а потім введіть наступну команду в основному терміналі:

curl - O http://download.tensorflow.org/example_images/flower_photos.tgz

Розархівуйте отриманий файл, ввівши цю команду:

tar xzf flower_photos.tgz

У каталозі flower_photos Ви побачите піддиректорії з іменами: daisy (ромашки), dandelion (кульбаби), roses (троянди), sunflowers (соняшники) і tulips (тюльпани).

Прив’язка набору даних до образу Docker TensorFlow

Оскільки образ Docker TensorFlow не містить вхідного набору даних із зображеннями, треба зв’язати ці файли, набравши команду в терміналі Вашого основного комп’ютера / віртуальної машини, яка активує термінал, Docker:

sudo docker run - it - v $HOME/tf _files:/tf_files gcr.io/tensorflow/tensorflow:latest-devel

Тут $HOME відповідає директорії ~/Documents/tutorial ML/. Щоб дізнатися, чи коректно пов’язані зображення, Ви можете набрати наступну команду в терміналі:

ls /tf_files

Виведення команди повинне містити теку з назвою flower_photos.

Отримання прикладу вихідного коду

Перейдіть у каталог tensorflow, розташований у файловій системі Docker, і введіть git pull, щоб отримати останню версію коду з git-репозиторія TensorFlow. Отриманий вихідний код розташовуватиметься за наступним шляху: /tensorflow/tensorflow/examples/image retraining/.

Для навчання введіть наступну команду і натисніть ENTER:

# python tensorflow/examples/image retraining/retrain.py 
--bottleneck_dir=/tf_files/bottlenecks --how_many_training_steps 500 --model_dir=/tf_files/inception --output_graph=/tf_files/retrained_graph.pb --output_labels=/tf_files/retrained_labels.txt --image_dir /tf_files/flower_photos

Поки модель Inception обробляється (а це тривалий час), Ви побачите, що спочатку створюються критичні параметри (bottlenecks), як це показано на скриншоті нижче. Критичні параметри – це останній шар перед основним шаром початкової моделі, який класифікуватиме зображення. У них полягає змістовне, але при цьому компактне резюме зображення, що допомагає класифікаторові зробити якомога точний вибір:

Після того, як навчання критичних параметрів завершиться, алгоритм перейде на фінальний етап навчання. Під час навчання в терміналі Docker будуть відображені наступні параметри: точність навчання (train accuracy) і точність перевірки (validation accuracy). Ви побачите аналогічну скриншоту нижче картину. Наприкінці буде відображено значення точності від 85 до 99 %:

Тестування класифікатора зображень

У каталозі /tensorflow/.git, який знаходиться в кореневій директорії Docker, створіть файл label_image.py. Введіть рядки коду і збережіть його:

# -* - coding: utf - 8 -* - import tensorflow as tfimport sysfrom numpy import argsortimage_path = sys.argv[1]
# прочитує файл image_dataimage_data = tf.gfile.FastGFile (image_path, 'rb').read ()# завантажує вибраний файл і видаляє символ розриву строкиlabel_lines =[line.rstrip () for line in tf.gfile.GFile ("/tf_files/retrained_labels.txt")]# відділяє граф від файлаwith tf.gfile.FastGFile ("/tf_files/retrained_graph.pb", 'rb') as f: graph_def = tf.GraphDef () graph_def.ParseFromString (f.read())_= tf.import_graph_def (graph_def, name='') # завантажує image_data як вхідні дані і відображає перші припущення with tf.Session () as sess: softmax_tensor = sess.graph.get_tensor_by_name ('final _result:0') predictions = sess.run (softmax_tensor, {'DecodeJpeg/contents:0': image_data})# сортує категорії після перших припущень в порядку зростання уверенностиtop_k = predictions[0].argsort ()[- len (predictions[0]):][::- 1]for node_id in top _k: human_string = label_lines[node_id]
score = predictions[0][node_id] print ('%s (score = %.5f) ' %  (human_string, score))

Якщо Ви вийшли з Docker, введіть наступну команду, щоб перезапустити контейнер:

docker run - it - v $HOME/tf _files:/tf_files gcr.io/tensorflow/tensorflow:latest-devel

Виконайте команду в терміналі Docker, щоб протестувати, наприклад, зображення, на якому є ромашка:

# python /tensorflow/.git/label image.py /tf files/flower photos/daisy/21652746 cc379e0eea m.jpg

Як видно на скриншоті нижче, при тестуванні вибраного зображення було отримано число 0,98929. Це вказує на те, що класифікатор на 98 % упевнений, що зображення містить квітку ромашки. Якщо аналогічним чином протестувати зображення собаки і кота, буде отриманий низький відсоток упевненості для всіх категорій кольорів. Це говорить про те, що алгоритм визначив: наявність квітки маловірогідна на тестованому зображенні:

Пропонуємо поекспериментувати, підготувавши інший набір вхідних даних, щоб створити власний класифікатор зображень. Удачі в навчанні!

Переклад статті “Machine Learning using TensorFlow in 10 Lines of Code”

Київ, Харків, Одеса, Дніпро, Запоріжжя, Кривий Ріг, Вінниця, Херсон, Черкаси, Житомир, Хмельницький, Чернівці, Рівне, Івано-Франківськ, Кременчук, Тернопіль, Луцьк, Ужгород, Кам'янець-Подільський, Стрий - за статистикою саме з цих міст програмісти найбільше переїжджають працювати до Львова. А Ви розглядаєте relocate?


Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *