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

По прибытии я был в восторге от огромного, красочного и очень впечатляющего офиса. После регистрации, легкого завтрака и встречи с командой Microsoft мы застряли в настройке нашей среды. Мы настроили Виртуальную машину для анализа данных в Azure, которая включала JupyterHub. Это облегчило нам совместную работу в команде при создании наших решений. Я никогда раньше не использовал Azure, и вначале я был немного ошеломлен его качествами космического корабля и бесконечным количеством услуг! Как команда, нам удалось ориентироваться в документации и получить все необходимое для работы.

Предпосылки к проблемам:

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

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

Пусть начнутся испытания!

Для первого задания мы использовали Custom Vision, службу Microsoft, которая позволяет создавать классификаторы изображений, использующие преимущества трансферного обучения. Custom Vision было удобно использовать и легко понять. Он позволяет загружать несколько групп изображений и добавлять теги к каждой группе. Вы также можете выполнить быструю проверку, загрузив несколько изображений, которые не были частью ваших данных обучения, чтобы проверить правильность предполагаемой классификации.

Сервис Custom Vision отлично подходит, если вы пытаетесь создать простое доказательство концепции или прототипа. Мне показалось особенно полезным то, что нам не нужно было очищать наш набор данных для его использования (подробнее об очистке позже), мы могли просто загрузить изображения и позволить пользовательскому зрению обрабатывать их.

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

Это заняло у нас довольно много времени, чтобы разобраться, и это немного сбивало с толку, поскольку некоторые изменения было трудно увидеть человеческим глазом, например различные диапазоны пикселей. Чтобы мы могли увидеть, действительно ли работает наш код, мы отображали изображения в виде гистограмм.

Получив некоторый опыт использования сервисов Microsoft Congnitive Services и приступив к очистке большого набора данных, пришло время сделать перерыв на день и пойти приготовить барбекю на террасе Mircosoft с видом на ипподром Леопардстауна.

Неужели для этого есть алгоритм?

День 2! Данные были очищены, настроение было приподнято, а кофе разливался. Пора перейти к следующему испытанию и перейти на новый уровень сложности. Нашей задачей было использовать мощные API для машинного обучения.

Мы начали исследовать классическое / традиционное машинное обучение и поняли, что Sci-kit learn предоставляет реализации множества различных алгоритмов. Нам просто нужно было выяснить, какой из них лучше для нас. После некоторого исследования мы как команда решили, что для нашего случая использования наиболее подходящим для нас будет RandomForest. RandomForest в основном создает несколько деревьев решений с различными возможными вариантами и делает свои прогнозы на их основе.

Лучшее в использовании Sci-kit learn было то, что документация была отличной. Когда наш алгоритм был на месте и работал, он давал нам точность чуть выше 80%. Хотя мы были очень довольны этим, мы хотели сделать еще один шаг вперед. Мы хотели посмотреть, сможем ли мы довести это значение до уровня более 90%… войти в глубокое обучение.

80%? Мы хотим больше!

Классическое / традиционное машинное обучение могло делать за нас прогнозы, но глубокое обучение лучше подходит для сложных наборов данных изображений и может помочь нам повысить нашу точность.

Эта задача требовала от нас создания сверточной нейронной сети. CNN - это тип архитектуры глубокого обучения, который широко используется при классификации изображений. Поскольку это была сложная задача, наставник нашей команды обратился к Microsoft Surface Hub и дал нам небольшое объяснение глубокого обучения и нейронных сетей.

Для решения этой задачи мы использовали TensorFlow для создания наших алгоритмов глубокого обучения. Нам потребовалось некоторое время, чтобы изучить Tensorflow и попытаться выяснить, как он может нам помочь. Объединив наши исследования и помощь нашего наставника, мы смогли реализовать его и достичь нашей цели - более 90% точности.

Заключение

OpenHack показал мне различные подходы к машинному обучению - от использования базовых когнитивных сервисов до передовых методов глубокого обучения. В течение трех дней я мог решать различные задачи, опираясь на свои знания в области машинного обучения.

В целом мероприятие Microsoft OpenHack было потрясающим. Это было отличное введение в машинное обучение и побудило меня продолжать убеждать меня в своем интересе к этой области. Хотя это была крутая кривая обучения, я многому научился и получил огромное удовольствие. Я надеюсь, что смогу использовать эти новые знания и применить их в будущих проектах, а также поделиться ими с моими коллегами в Кайносе.

И, наконец, три моих ключевых момента, которые я хотел бы вынести:

  1. Необязательно сразу погружаться в глубокое обучение. В зависимости от вашего варианта использования вы можете решить свою проблему с помощью облачной службы, такой как Microsoft Custom Vision.
  2. Удостоверьтесь, что вы нашли время, чтобы очистить свои данные, так как это сэкономит ваше время в будущем и даст вам более точные результаты.
  3. Уделите время тщательному выбору алгоритма, помните о своем сценарии использования, а также о своем наборе данных. Вот несколько инструментов, которые я нашел полезными - Шпаргалка по алгоритмам Microsoft и Sci-Kit изучает карту алгоритмов.