Компютърното зрение е бързо развиваща се област в света на технологиите и компютърните науки. Това е многостранно поле на високо ниво, което позволява на машините итеративно да учат и разбират сложни представяния от изображения и видеоклипове, за да автоматизират човешки визуални задачи. Съвсем наскоро компании като Amazon отвориха магазин за хранителни стоки без касиер, който използва компютърно зрение и задълбочено обучение, за да открива автоматично кои артикули са извадени от рафта. Pinterest разработи визуална търсачка, която използва конвейер за откриване на обекти за препоръчване на съдържание. Компютърното зрение се използва и при решаването на някои от големите предизвикателства на човечеството, като проекта на Станфордския университет „Лаборатория за устойчивост и изкуствен интелект“, който комбинира сателитни изображения и машинно обучение за прогнозиране на бедността.

В тази публикация описвам как изградих алгоритъм за откриване на обекти (FurniSure), по време на моето време като сътрудник на Insight Data Science, използвайки базиран на конволюционна невронна мрежа алгоритъм, наречен „You Only Look Once“, за идентифициране, класифициране и локализирайте различни видове мебели в изображения и видеоклипове. Компанията, за която се консултирах, има платформа за потребителите да качват лични снимки и видеоклипове, които могат да се споделят в различни социални медийни платформи. За този проект фокусът беше върху автоматизирането на откриването на мебели, така че тези елементи да могат да бъдат идентифицирани за рекламни цели.

Разработване на набора от данни

Събирането на достатъчно количество данни беше първото предизвикателство. Според Андрю Нг и други експерти по машинно обучение количеството използвани данни за обучение оказва най-голямо влияние върху ефективността на алгоритъм за дълбоко обучение; повече от настройка на хиперпараметри или сложност на мрежовата архитектура. За да съм сигурен, че съм събрал достатъчно, започнах с данни, предоставени от компанията, с която работех, и след това изтрих допълнителни изображения на обществени мебели от Google и API на Pinterest, използвайки библиотеката Beautiful Soup в Python.

За да създам още повече данни за обучение, използвах библиотека за увеличаване на изображения, наречена Augmentor, която използва стохастичен метод с градивни елементи, водещи до възпроизводим и по-малко склонен към грешки конвейер. Инструментът прекарва изображение през тръбопровода многократно чрез прилагане на предварително дефиниран вероятностен параметър за всяка операция. Тези операции са основните характеристики на Augmentor и се състоят от стандартни функции за манипулиране на изображения като завъртане, изкривяване на перспектива, еластично изкривяване, завъртане, срязване и огледално отразяване. Стохастичният подход ми позволява да генерирам голямо количество данни (10x) от първоначалния набор от данни.

Етикетирането на изображения за откриване на обекти е много важна и плашеща задача. Използвах Labellmg, който е инструмент за анотации на графични изображения, който може да се използва за създаване на етикетирани набори от данни. Ръчно анотирах изображенията за откриване на обекти, като нарисувах ограничаващи полета около интересните обекти в изображенията. Изображенията и метаданните на посочения обект, като височина и ширина, координати на ограничителните полета и индивидуални класове, се записват във формата на данни PASCAL VOC като XML файлове.

Отвъд класификацията на изображенията

Класификацията на изображения е много популярен проблем в компютърното зрение. Това включва класифициране на изображения в различни категории чрез прилагане на отличителен тип многослойна невронна мрежа, наречена „Конволюционни невронни мрежи“ (CNN). CNN са проектирани да идентифицират визуални модели от изображения, използвайки феноменални геометрични трансформации и изключителна променливост. Първият CNN, известен като LeNet-5 е разработен през 1998 г. от LeCun и др. През последните години станахме свидетели на нарастване на класификационните модели, вдъхновени от CNN, обучени върху набори от данни на ImageNet, които могат да надминат човешките предизвикателства поне с един порядък. Примери за такива алгоритми са AlexNet и Inception module (или Google LeNet). Отивайки още една стъпка напред, локализацията и сегментирането на обект/екземпляр се въвеждат като напредък в класификацията на изображения. Те включват интегриране на определянето на класове обекти с локализация чрез изчертаване на ограничаваща рамка около обекта или маскиране на обекта в изображението, пиксел по пиксел.

Откриване на обекти – гледате само веднъж „YOLO“

Системата за откриване на обекти се състои от разпознаване, класифициране и локализиране не само на един обект в изображението, но и на всеки рефериран обект. Това е много по-трудна задача от традиционната класификация на изображения. За този проект използвах тип алгоритъм за откриване на единичен изстрел (SSD), наречен „You Only Look Once „YOLO““. Това е авангарден алгоритъм за откриване, който може да идентифицира отделни обекти в пространството на изображението. Той преглежда изображението веднъж, разделя го на клетки от мрежата, които са отговорни за предсказване на ограничаващи полета, и извежда резултат, известен като Intersection Over Union (IOU). За всяка ограничителна кутия клетките на мрежата също предвиждат клас заедно с разпределението на вероятността за всички възможни класове. Резултатът за доверителност, специфичен за класа, е умножение на прогнозите за доверителност на индивидуалната кутия и вероятностите за условен клас.

Pr(Class | Object) * Pr(Object) * IOU = Pr(Class) * IOU

Реших да използвам трансферно обучение, вместо да обучавам пълния YOLOv2 на моя набор от данни. Това ми позволи да използвам ефективно наличните данни, да намаля изчислителните разходи, да подобря начина, по който моделът обобщава и да го направя по-стабилен. Изтеглих и след това замразих първите 24 конволюционни слоя на YOLO, използвах предварително обучените тежести на тези слоеве и тренирах само на последните напълно свързани слоеве. Обработката на изображенията беше извършена с OpenCV и обработените изображения бяха използвани за обучение на последните напълно свързани слоеве на мрежата с помощта на пакета Keras на Python с Darknet и Tensorflow като бекенд.

Производителност на модела

Моят нов алгоритъм YOLO беше обучен с помощта на трансферно обучение върху някои от оригиналните изображения, плюс всички увеличени изображения. Тестването беше извършено върху много малка подизвадка от целия набор от данни, който се състои главно от оригинални, неразширени изображения. За проблема с откриването на обект най-често срещаният начин да видите дали едно предложение за обект е правилно е да проверите Intersection Over Union (IOU). За прага на IOU е дефиниран критерий за припокриване. За моя случай задавам този праг на IOU › 0,5, което означава, че моята прогноза е попадение, ако прогнозираната ограничителна кутия удовлетворява този критерий по отношение на основната ограничителна кутия. В противен случай е пропуск. За всеки клас прецизността и припомнянето бяха оценени с помощта на истински положителни резултати (TP), фалшиви положителни резултати (FP) и фалшиви отрицателни резултати (FN). Средната прецизност (AP) в този случай е прецизността, осреднена за всички стойности на извикването, която пада между 0 и 1. Средната средна прецизност (mAP) дава средната стойност на прецизността на индивидуалния клас. За този проект mAP на моя тестов набор беше оценен като 0,714 от кривата на прецизност-припомняне за всеки клас мебели.

Заключение

Създадох модел за откриване на обекти, за да идентифицирам, класифицирам и сегментирам множество мебели, дадени на набор от изображения, с помощта на най-съвременен алгоритъм за дълбоко обучение. Също така приложих този модел към видеоклипове и откриване в реално време с уеб камера. Видеоклиповете са разделени на 20 кадъра в секунда с помощта на OpenCV и са извършени прогнози за всеки кадър. Използването на стохастично увеличение също показа, че специфичността за дадено извикване може да бъде значително подобрена.

Най-добрият начин за подобряване на модела в бъдеще е да получите повече данни и да намерите по-добре балансиран клас от обекти. „Facebook AI research“ наскоро публикува статия, която се бори с проблема с класовия дисбаланс при откриването на обекти чрез коригиране на теглата, присвоени на стандартната загуба на кръстосана ентропия и обучена на проста мрежа с пирамида на функции (FPN) за откриване на обекти, наречена RetinaNet. Този метод е възможен кандидат за подобряване на проблема с екстремния дисбаланс в YOLO и други методи за откриване на SSD.

Етикетирането на големи количества изображения за откриване на обекти е много скучна и чувствителна към времето задача. Това може да стане чрез краудсорсинг на платформи като Amazon’s Mechanical Turk или чрез създаване на метод за геймификация, чрез който потребителите да взаимодействат с изображенията и да ги коментират автоматично. Подобряването на сложността на модела може да доведе до по-добър mAP, но не непременно до по-добра скорост. Използването на алгоритми като Mask R-CNN, които разчитат на форма на сегментиране на екземпляри, която съпоставя откриване на обект и семантично сегментиране чрез обучение на цели за маски на ниво пиксел по пиксел, може значително да подобри цялостната точност.

Интересувате ли се да работите по проекти с голямо въздействие и да преминете към кариера в областта на данните? Регистрирайте се, за да научите повече за Програмите Insight Fellows и започнете кандидатстването си днес.

Уейл Акинфадерин беше сътрудник на Data Science в Insight Data Science (Сиатъл, пролет 2018 г.). През първите си три седмици в Insight той се консултира за стартиране и изгради FurniSure: алгоритъм за откриване на множество мебели от изображения и видеоклипове чрез използване на най-съвременни техники за дълбоко обучение. Неговото докторско изследване се фокусира върху повишаване на чувствителността на магнитно-резонансната спектроскопия. Преди това е работил за IBM Research, където е разработил модел за достоверност за подобряване на реакцията при инциденти, свързани с безопасността в Източна Африка, използвайки машинно обучение и обработка на естествен език. В момента работи като специалист по данни в Lowe’s Companies, Inc.