Експериментальне програмування , або шаманський код у комп'ютерному зорі

Комп'ютерний зір - це саме ті цікаві завдання, про які мріють українські сеньйори , розбираючи черговий гуано -код веб -проекту за сир і автомобіль . Тема, до якої включено безліч пекельно складного мату, шаманства і просто комп'ютерної магії. Причому все це часто за складністю порівнюється з квантовою теорією , хоча практичної користі від останньої набагато менше.

Так от , комп'ютерне зір- це певний набір алгоритмів , в більшості випадків евристичних , кожен з яких може взяти один образ , порівняти з іншим і видати ступінь їх відповідності або прийняти якесь рішення (знову ж , на основі відповідності розпізнаваних образів і відповідності їм певного рішення чи дії) . Причому ефекти застосування різні: від віднесення пікселя зображення до фону або образу ( бінаризація ) до визначення траєкторії руху в 3D -просторі . У деяких випадках і там , і там в основі може використовуватися одна і та ж алгоритмічна база .

Теорія

Припустимо , перед вами ставиться завдання звичайного пошуку зображень в базі на основі еталонного зображення. Ви берете один з методів - ну , скажімо , попиксельного порівняння після вирівнювання контрасту і еквалізациі . Швидкість роботи - просто супер , повністю лінійна O (N) , де N - кількість пікселів , а O = двом операціям - еквалізациі і звичайному порівнянні двох зображень . От тільки при цьому будь-який поворот , зміна масштабу , та й банальний зсув зображення щодо еталонного з бази - вже біда. Розумієш , що швидкість - це , звичайно добре , от тільки якість нижче плінтуса. В результаті береш небудь кутковий детектор Харіса , де відбувається пошук і виділення опорних точок з подальшим їх порівнянням , реалізуєш його і отримуєш , що якість , звичайно , супер , причому практично инвариантно до масштабу , повороту і зсуву . Ось тільки швидкість впала в 1500 разів. Оптімізіруешь детектор в щось типу SIFT ' а , де незначні деталі відкидаються , і зіставлення точок виробляється в деякому радіусі , а верхня межа кількості опорних точок заданий константою . Замість картинок в базі вже зберігаєш їх індекс ( обчислені дескриптори ) . Швидкість вже всього в 15 разів в порівнянні з першим варіантом , якість розпізнавання трохи впало в порівнянні з оригіналом. Тімліда все влаштовує , і рішення йде в продакшен .

Ти радий , ти вкрай радий , тому що результати магії виявилися успішні. А потім виявляється , що за новими вимогами потрібно розпізнавати зашумлені і розмиті картинки. Ти видирати з голови останні волосся і йдеш читати матеріали про scale - space .

Проблеми

Одна з основних проблем у CV полягає в тому , що комп'ютери повільні , вони моторошно повільні , і мають вкрай мало пам'яті , адже звичайна матриця типу float в A4 при вирішенні 600dpi ( 35 мегапікселів ) займає в пам'яті 140 мегабайт , а іноді для роботи потрібно 2-7 таких матриць . От і маємо гігабайт на обробку тільки одного документа .

З приводу швидкості - проблема в тому , що будь-яка людина дуже розумний , навіть якщо здається , що тупий. Зорова кора - це 20 % від обсягу мозку. У середньому мозку 8 мільярдів нейронів , при цьому один нейрон має близько 20K синапсів , і бета - ритм(у стані неспання ) становить від 14 до 30 Гц. У результаті , щоб змоделювати людиноподібну систему зору на основі матриці зв'язків з типом float , нам знадобиться обчислювальний модуль з полпетабайта ОЗУ під завдання і з піковою продуктивністю майже 20 екзафлопс . Ні, такі комп'ютери вже навіть є , ось тільки їх поки пара на весь світ.

Практика

Продемонструвати вищесказане можна на прикладі Apple Siri , іскін - помічниці для смартфонів iPhone , ядро якої використовує суперкомп'ютер Watson , що володіє об'ємом пам'яті в 15 Тб ОЗУ і сумарною обчислювальною потужністю в 24 ТФлопс . Величезні обчислювальні можливості , робота 8 провідних університетів впродовж 40 років - і в результаті інтелект на рівні 4 -річного дитини. Так що справа як і в часи Амосова , так і зараз полягає в апаратних обмеженнях. Поточна комп'ютерна техніка поки ще перебуває на вкрай примітивному рівні.

Пошук рішення в комп'ютерному зорі - пошук алгоритмів , які дозволять експериментально знайти набір особливостей , які більш-менш відповідають якості вирішення даної задачі (нехай навіть і гірше можливого рішення людиною) , але при цьому цілком здатні працювати online для вирішення завдання . Це вкрай шаманський процес . Причин декілька. Одна з них - евристика більшості алгоритмів . Наприклад , теорема Колмогорова- Арнольда- Хехт - Нільсона голосують , що двовимірна нейросеть з нелінійної функцією активації нейрона здатна змоделювати будь детермінований процес . Ні, це , звичайно , класно , але рішення - як з анекдоту : « прийшов математик на пожежу , обчислив , що рішення є, і пішов далі ». Все, аж до рівнів нейромережі , кількості зв'язків та активаційних функцій нейронів , доводиться підбирати після камлання типу методу відпалуабо генетичних алгоритмів. C новомодними SVMне набагато краще : так , математичний базис є, SVM - це знаходження максимальної розділяє гіперплощини (яка може бути і криволінійною поверхнею ) . Ось тільки для вирішення доводиться підбирати щось робоче з десятка ядер. Кілька методів знаходження цих площин, схоже , засновані на чистій магії.

Ще складніше знайти описатели сцени , які чітко і однозначно дозволяють описати даний клас , причому , в ідеальному випадку , не перетинаються для різних класів. При знаходженні достовірних описателей швидкість може зрости на порядки за рахунок скорочення домену вимірювань при збереженні або навіть поліпшенні якості. Наприклад , стоїть завдання визначити через веб -камеру , чи достатньо на вулиці освітлення , щоб не включати ліхтар . Все дуже просто: вважаєте значення яскравості, і за межею включаєте ліхтар . Все, рішення є, причому просте . Раптово виявляється, що у веб - камери є не відключається нічний режим , який виставляє практично однакову яскравість картинки і для дня , і для ночі. Тоді розраховуємо зміна контрасту ( у нічного режиму воно має бути нижче). І тут раптово виявляється , що якийсь censored розмістив камеру прямо під ліхтарем , і причина глюків не в нічному режимі.

Висновок

Робота в сфері ІІ , або комп'ютерного зору , - дуже шаманський процес . Ти отримуєш завдання , переглядаєш відомі і вже раніше використані методи рішення, переглядаєш статті , де описані інші способи вирішення . Після чого будуєш гіпотезу рішення. У даному випадку будується гіпотеза по знаходженню особливостей , і неважливо , будуть це опорні точки або карта глибини для переведення об'єкта в 3D. Далі підбирається алгоритм класифікації . Алгоритм класифікації дещо менш впливає на якість , ніж неправильний підбір особливостей , але все-таки він важливий . По суті , підбір алгоритму - це як вибір фреймворку : різниця є, але у відсотки . Неправильний вибір описателей набагато болючіше . Далі тестіруешь свою гіпотезу на вхідному тестовому наборі ( так, тут розробка без попередньої розробки тестових модулів попросту неможлива , без неї в кінцевому результаті взагалі немає сенсу ) і іноді отримуєш високу якість класифікації та низьку швидкість , іноді навпаки. А іноді - обидва випадки разом , низька якість і фіговим швидкість :). І вже на основі отриманих даних ти приймаєш рішення: коригувати гіпотезу до повного сходження з тестовими даними ( це більше схоже на баг - фіксинг , коли ти абсолютно не уявляєш , чому вискакує саме цей баг ) або відкинути її повністю і почати з іншого. І так - до переможного кінця , поки якість і прийнятна швидкість не зійдуться . У результаті , в рідкісних випадках , маємо перетворення шісток в вісімки , так як це хоч і не оптимально , але прийнятно .

Підсумувавши , давайте визначимося , що ж таке робота розробником в комп'ютерному зорі. По-перше , це цікаво , в іншому випадку я б в цю область не пішов : працювати в Web в рази простіше. Це одночасно суміщення роботи бізнес- аналітика , розробника , тестувальника і баг - фіксери , причому над однією і тією ж завданням . Ну , і це ще , схоже , єдина область , де розробка в дусі MIT 60- х залишається не звичайним робочим процесом , а шаманством , мистецтвом і магією.

Опубліковано: 11/09/13 @ 08:04
Розділ Програмування

Рекомендуємо:

3 вересня , Київ - Андрій Хорс : " Практика побудови технологічного стартапу "
14 вересня - 6 жовтня, Київ - футзалу турнір IT -компаній " DOU.ua CUP 2013 "
Бесіда з Антоном Карпенко ( Karpolan ) , CTO Happy Farm
19 вересня, Київ - AppClub { build , monetize } S02E01 "Відкриття сезону "
Аутсорсинг vs . продукт: бліц -опитування топ -менеджерів ІТ -компаній різних типів