Як ви найкраще здогадуєтесь, як працює пошук зображень Google? Я можу завантажити фотографію та шукати схожі зображення. Який алгоритм використовується для ідентифікації подібних зображень?
Як ви найкраще здогадуєтесь, як працює пошук зображень Google? Я можу завантажити фотографію та шукати схожі зображення. Який алгоритм використовується для ідентифікації подібних зображень?
Відповіді:
Я не знаю, який алгоритм використовує Google. Але, оскільки ви хотіли найкращого здогаду, дозвольте дати кілька ідей щодо того, як може бути побудована подібна система .
Все поле, що займається пошуком зображення на основі зображення за бажанням зображення, називається пошуку вмісту на основі вмісту (CBIR) . Ідея полягає в тому, щоб якось побудувати зображення зображення (не обов'язково зрозуміле людям), яке містить інформацію про вміст зображення .
Існують два основні підходи:
Локальний підхід на низькому рівні дуже добре вивчений. Найкращий сучасний підхід витягує локальні функції (тут є вибір алгоритму вилучення функцій), і використовує їх локальні дескриптори (знову ж, вибір дескрипторів) для порівняння зображень.
У нових роботах локальні дескриптори спочатку кластеризуються, а потім кластери розглядаються як візуальні слова - техніка дуже схожа на пошук документів Google, але використовує візуальні слова замість буквених слів.
Ви можете розглядати візуальні слова як еквіваленти кореням слова в мові: наприклад, слова: робота, робота, відпрацювали всі належать до одного кореня слова.
Одним з недоліків таких видів методів є те, що вони зазвичай недостатні для зображень із низькою текстурою.
Я вже дав і бачив багато відповідей, де деталізуються ці підходи, тому я просто надам посилання на ці відповіді:
Семантичні підходи , як правило, засновані на ієрархічних уявленнях усього образу. Ці підходи ще не вдосконалені, особливо для загальних типів зображень. Є певний успіх у застосуванні подібних методів до конкретних областей зображень.
Оскільки я зараз перебуваю в середині досліджень цих підходів, я не можу зробити жодних висновків. Тепер, сказавши це, я пояснив загальну ідею цих методів у цій відповіді .
Ще раз коротко: загальна ідея полягає у зображенні зображення з деревоподібною структурою, де листя містять деталі зображення, а предмети можна знайти у вузлах, ближчих до кореня таких дерев. Потім якимось чином ви порівнюєте піддерева, щоб виявити об'єкти, що містяться в різних зображеннях.
Ось декілька посилань на різні зображення дерев. Я не прочитав їх усіх, і деякі з них використовують цей вид уявлень для сегментації замість CBIR, але все-таки ось:
Окрім відповіді пенелопи, є два підходи, перцептивне хеширование та модель "сумкових слів", основна функціональність якої легко реалізується, і для них приємно грати чи навчатися, перш ніж заходити на більш просунуту територію.
Перцептивний хешинг
Алгоритми перцептивного хешування мають на меті побудувати хеш, який, на відміну від криптографічного хеша, дасть подібні або близькі аналогічні значення хешу для однакових зображень, які були дещо спотворені, наприклад, шляхом масштабування або стиснення JPEG. Вони служать корисною метою для виявлення біля дублікатів у колекції зображень.
У своїй найпростішій формі ви можете реалізувати це наступним чином:
Перетворити зображення в відтінки сірого
Зробіть ваше зображення нульовим значенням
В результаті виходить пружний 64-бітний хеш, оскільки він заснований на низькочастотних компонентах зображення. Варіантом цієї теми було б розділити кожне зображення на 64 підблоки та порівняти середнє значення глобального зображення з середнім середнім підблоком та записати відповідно 1 або 0.
Перцептивне хешуваннявання реалізується, наприклад, phash
Модель сумових слів
Модель сумкових слів має на меті семантичну ідентифікацію зображення, наприклад, усі зображення із собаками в них. Це робиться за допомогою певних виправлень зображень у тому ж дусі, який можна було б класифікувати текстовим документом на основі появи певних слів. Можна було б класифікувати слова, сказати "собака" та "собаки" та зберегти їх як ідентифікатор у перевернутому файлі, де категорія "собака" тепер вказує на всі документи, що містять або "собаку", або "собаку".
У своїй найпростішій формі це можна зробити із зображеннями наступним чином:
Тепер у вас є величезна колекція дескрипторів SIFT. Проблема полягає в тому, що навіть поблизу однакових зображень буде дещо невідповідності між дескрипторами. Ви хочете згрупувати однакові разом, більш-менш, як трактування деяких слів, як "собака" та "собака" як однакові, і вам потрібно компенсувати помилки. Тут грає кластеризація.
Запит на зображення, наприклад, знайдіть мені подібні зображення до зображення запиту, вирішується наступним чином:
Інший цікавий підхід, який, здається, нехтують вищезазначеними відповідями, - це глибокі згорткові нейронні мережі. Схоже, Google зараз використовує його для своєї пошукової системи зображень та служби перекладу . CNN є надзвичайно потужними в таких пізнавальних завданнях, як пошук схожості. Схоже, CNN проводить аналогічну процедуру Bag-of-worlds, яка вбудована через її мережеві шари. Недоліком цієї методики є неможливість вивчити і потреба у величезному наборі даних для тренувань та, звичайно, великі обчислювальні витрати на етапі тренувань.
Пропонований документ з цього приводу:
та реалізація пошуку зображень із відкритим кодом (з наступним документом): https://github.com/paucarre/tiefvision