Наистина ли единият от тях е по-добър от другия? Обяснение от ML инженер, който използва и двете рамки.

Предистория

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

Един въпрос, който срещнах няколко пъти е:

Кое е по-добро OpenCV или Tensorflow?

За някои това не е валиден въпрос.

За други това е въпрос, върху който си струва да се замислим.

Най-простият отговор е, че Tensorflow е по-добър от OpenCV и OpenCV е по-добър от Tensorflow!

Дано не съм ви объркал! Ако го направих, моля, прочетете нататък!

Реалността е, че всяка от тези рамки е предназначена да се използва в специфични области в машинното обучение и компютърното зрение. Така че директното казване, че едното е по-добро от другото, просто няма смисъл.

Но можем да кажем, че едното е по-добро от другото в определени области и обратното.

Всъщност Tensorflow е рамка за машинно обучение, която ви помага да създавате модели за машинно обучение. Той е по-известен с изграждането на невронни мрежи, които са един вид алгоритми и подходи в машинното обучение, наречено дълбоко обучение.

Следователно Tensorflow е пуснат, за да служи на основна цел, която е изграждането на модели за машинно обучение. Тук казвам машинно обучение, а не само задълбочено обучение, защото имаше известни усилия да направим Tensorflow способен да обучава модели за не-задълбочено машинно обучение, като например „гори за вземане на решения“.

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

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

Този DNN модул е ​​проектиран да улесни интегрирането на модели за дълбоко обучение, които вече са обучени. Ето защо в OpenCV ще намерите примери за това как да интегрирате модели за задълбочено обучение за: класификация на изображения, откриване на обекти на изображения и сегментиране на изображения.

Сега, както можете да видите, всички тези примери са модели на дълбоко обучение, фокусирани върху задачи за компютърно зрение.

Доколкото ми е известно, няма поддръжка за езикови модели например (като BERT).

Сега тези 2 рамки могат да имат някои прилики в конкретни случаи. Например с Tensorflow можете да манипулирате изображения и да ги подготвите за обучение на вашия модел за машинно обучение.

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

Кога да използвате кое

Сега към случаите на използване на всяка от тези 2 широко използвани рамки.

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

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

Както Tensorflow, така и OpenCV имат API на C++ и Python.

В Tensorflow инженерите по машинно обучение използват API на Python за частта за обучение и използват API на C++ за внедряване на своите модели в приложение/API/SDK на C++.

Но както споменах преди, OpenCV можеда бъде добър или дори по-добър избор за внедряване и ето защо.

Много компании използват OpenCV от дълго време. Тези компании създават продукти за компютърно зрение. Те са много свикнали с рамката и не искат да добавят друга библиотека на трета страна (друга зависимост) към производствения си код. В този случай те могат да изберат да използват OpenCV за внедряване на своите модели за задълбочено обучение с компютърно зрение.

Друг много важен момент, при който OpenCV може да бъде по-добър избор за производствени внедрявания, е производителността. Всъщност, за някои модели за задълбочено обучение, изпълнението им в OpenCV може да бъде с порядък по-бързо от изпълнението им в Tensorflow (дори когато се използва C++ API на Tensorflow).

За някои индустрии това може да бъде решаващ момент.

Също така, едно друго нещо относно C++ API на двете рамки, което може да наруши сделката, е документацията. Документацията на OpenCV е много по-добра (дори ако говорим само за DNN модула тук) от документацията на C++ API на Tensorflow.

Последната точка, в която можете да използвате OpenCV вместо Tensorflow, е, че с OpenCV можете да обучите SVM модел на C++. Това означава, че в същия производствен код можете да обучите модел и да го внедрите.

Заключение

Да обобщим:

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

Аз съм инженер по машинно обучение, работещ върху решаването на предизвикателни проблеми с компютърното зрение. Искам да ви помогна да научите машинното обучение, приложено към проблеми с компютърното зрение. Ето как.

  1. Като ви помага да сте в крак с това, което се случва в областта. Правя това, като споделям малки ML публикации в LinkedIn и Twitterпочти всеки ден. Така че ме последвайте там!
  2. Като ви давам седмично резюме на тези дребни публикации в моя бюлетин. Затова се абонирайте за него!
  3. Като пишете статии тук в Medium за различни теми в машинното обучение. Така че ме последвайте тук!
  4. Като ви предоставя безплатен контролен списък, готов за работа с машинно обучение, за да ви помогне да проверите всички точки, които трябва да научите, ако планирате кариера в ML, по-специално в Computer Vision. Можете да получите контролния списък тук.

5. Не на последно място, като споделям с вас моя БЕЗПЛАТЕН въвеждащ курс по Tensorflow, който има повече от 4 часа видео съдържание, и можете да ми зададете всеки въпрос, който имате там.

Освен това не се колебайте да се свържете с мен в LinkedIn или Twitter, ако имате въпроси или просто искате да поговорите за ML!