Один из них действительно лучше другого? Объяснение от инженера машинного обучения, использующего оба фреймворка.

Предыстория

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

Один вопрос, с которым я сталкивался несколько раз:

Что лучше OpenCV или Tensorflow?

Для некоторых это неправильный вопрос.

Для других это вопрос, над которым стоит задуматься.

Самый простой ответ - Tensorflow лучше OpenCV, а OpenCV лучше Tensorflow!

Надеюсь, я вас не запутала! Если да, то читайте дальше!

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

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

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

Следовательно, Tensorflow был выпущен для основной цели - построения моделей машинного обучения. Здесь я говорю о машинном обучении, а не только о глубоком обучении, потому что были предприняты некоторые попытки сделать Tensorflow способным обучать модели неглубокого машинного обучения, такие как леса решений.

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

С развитием глубокого обучения OpenCV начал интегрировать больше функций, которые поддерживают задачи, основанные на глубоком обучении, представив новый модуль под названием DNN (Deep Neural Networks).

Этот модуль DNN был разработан, чтобы упростить интеграцию моделей глубокого обучения, которые уже обучены. Вот почему вы найдете в OpenCV примеры того, как интегрировать модели глубокого обучения для: классификации изображений, обнаружения объектов изображения и сегментации изображений.

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

Насколько мне известно, нет поддержки, например, языковых моделей (таких как BERT).

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

OpenCV также можно использовать для выполнения некоторых задач машинного обучения. Например, вы можете обучить модель SVM, модель логистической регрессии или модель Bag Of Visual Words в OpenCV.

Когда использовать какой

Теперь перейдем к вариантам использования каждого из этих двух широко используемых фреймворков.

Если вы работаете над созданием новой модели глубокого обучения для какой-то конкретной задачи и с настраиваемым набором данных, вам следует выбрать Tensorflow.

Если вы закончили обучение модели глубокого обучения для задачи компьютерного зрения, особенно: классификации изображений, обнаружения объектов и сегментации изображений, и вы хотите развернуть свою модель, тогда OpenCV МОЖЕТ быть хорошим выбором.

И Tensorflow, и OpenCV имеют API C ++ и Python.

В Tensorflow инженеры машинного обучения используют API Python для обучающей части, а также API C ++ для развертывания своих моделей в приложении / API / SDK C ++.

Но, как я упоминал ранее, OpenCV может быть хорошим или даже лучшим выбором для развертывания, и вот почему.

Многие компании уже давно используют OpenCV. Эти компании создают продукты для компьютерного зрения. Они очень привыкли к фреймворку и не хотят добавлять в свой производственный код еще одну стороннюю библиотеку (другую зависимость). В этом случае они могут выбрать использование OpenCV для развертывания своих моделей глубокого обучения компьютерного зрения.

Еще один очень важный момент, когда OpenCV может быть лучшим выбором для производственного развертывания, - это производительность. Фактически, для некоторых моделей глубокого обучения их запуск в OpenCV может быть на порядок быстрее, чем их запуск в Tensorflow (даже при использовании Tensorflow C ++ API).

Для некоторых отраслей это может быть решающим моментом.

Кроме того, есть еще одна вещь о C ++ API обеих фреймворков, которая может помешать сделке, - это документация. Документация OpenCV намного лучше (даже если мы говорим здесь только о модуле DNN), чем документация Tensorflow C ++ API.

Последний момент, когда вы могли бы пойти с OpenCV вместо Tensorflow, заключается в том, что с OpenCV вы можете обучать модель SVM на C ++. Это означает, что в том же производственном коде вы можете обучить модель и развернуть ее.

Заключение

Обобщить:

  1. Tensorflow лучше OpenCV для некоторых случаев использования, а OpenCV лучше, чем Tensorflow в некоторых других случаях.
  2. Сильные стороны Tensorflow находятся в тренировочной части. Сильные стороны OpenCV - это развертывание, если вы развертываете свои модели как часть приложения / API / SDK C ++.
  3. Основные моменты наложения этих двух структур происходят в задачах компьютерного зрения.

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

  1. Помогая вам быть в курсе того, что происходит на местах. Я делаю это, почти ежедневно публикуя небольшие сообщения ML в LinkedIn и Twitter . Так что следуйте за мной туда!
  2. Предоставляя вам еженедельный дайджест этих небольших сообщений в моем информационном бюллетене. Так что подписывайтесь на нее!
  3. Написав здесь статьи на Medium по различным темам машинного обучения. Так что следуй за мной сюда!
  4. Предоставляя вам бесплатный контрольный список для машинного обучения, который поможет вам проверить все моменты, которые вам нужно изучить, если вы планируете карьеру в области машинного обучения, особенно в области компьютерного зрения. Вы можете получить контрольный список здесь.

5. И наконец, что не менее важно, поделившись с вами своим БЕСПЛАТНЫМ вводным курсом Tensorflow, который включает более 4 часов видеоконтента, и вы можете задать мне любой интересующий вас вопрос.

Кроме того, не стесняйтесь обращаться ко мне через LinkedIn или Twitter, если у вас есть какие-либо вопросы или вы просто хотите поговорить о ML!