Колиска для AI



Є одна тема в сучасному Computer Vision, яка часто залишається за кадром. У ній немає складної математики і глибокої логіки. Але те, що її ніяк не освітлюють — вганяє в ступор багатьох новачків. А тема не проста: має безліч граблів, про які не дізнаєшся, поки не наступиш.

Тема — називається так: підготовка бази зображень для подальшого навчання.
У статті:

  1. Як можна відрізнити хорошу базу
  2. Приклади хороших баз
  3. Приклади програм, якими зручно розмічати бази

Для початку покажу простий і найбільш улюблений свій приклад: розпізнавання автомобільних номерів. Припустимо ми робимо систему з нуля. Що ми повинні позначити на цьому зображенні:



Ідеальний варіант, на мій погляд, такий:



Тут зазначено:

  1. Рамка для кожного номеру, яку видно. Ключовий момент: потрібно підкреслити кут нахилу номери + його положення.
  2. Значення кожного номера, який видно. Система не буде розпізнавати краще, ніж людина, яка дивиться на фотографію, так що номери, які практично не можна розгледіти можна не позначати.
  3. Положення кожного символу номера.
Ще раз: це ідеальна розмітка. Можливо, вона дещо надлишкова, але зате на її базі можна налаштовувати/навчати практично будь-який алгоритм. Сам я ніколи не робив настільки детальну розмітку ні в одній задачі, яку вирішував. Зазвичай знаходитися ідеальний баланс між тим, що хочеться і тим, на що є сили.

Тепер розглянемо звідки це береться. І чому цього достатньо. Класичний алгоритм виділення номери виглядає наступним чином:



При цьому за кожну частину зазвичай відповідає свій алгоритм або їх група.

Перша частина — нам потрібно знайти номери. Припустимо, що виділення номера ми реалізуємо через каскад Хаара, або через HOG дескриптори. Тоді на вхід алгоритму навчання нам потрібно буде подати набір позитивних і негативних прикладів:

Позитивні:



Негативні:



Якщо ж ми реалізуємо пошук номера через яку-небудь нейронну мережу, то метою навчання мережі буде такий набір прямокутників:



Як видно з даних, які ми розмітили просто отримати обидва варіанти.

Після того як номер знайдений його потрібно обробити. Знову ж таки, тут є багато підходів. Але в цілому, друга частина — це «нормування номери». Можна зробити алгоритм, шукає кордону в ручну, як описано тут:



Цей алгоритм не вимагає навчання, але за тими даними, які у нас є, ми зможемо оцінити його якість роботи.

А можна навчити кілька нейронних мереж. Наприклад перша шукає кут, друга шукає кроп.
І знову. Даних, які ми розмітили — повністю вистачає.

Можна об'єднати частину один і частина два і зробити пошукову мережу для номерів, що відразу виводить і кут і поворот номери. Для неї даних теж достатньо.

Принципи
Спробуємо сформулювати основні принципи розмітки:

1. Заздалегідь обміркуйте всі можливі алгоритми, якими може вирішуватися ваше завдання. Визначте вхідні дані для кожного з варіантів. Якщо це не вимагає великої кількості сил при розмітці, придумайте такий формат розмітки, який би забезпечив вам будь-який з існуючих варіантів розв'язання задачі вхідними даними. Якщо є можливість, то краще, щоб розмітка була надлишкова. Інакше, якщо ваш алгоритм не запрацює, доведеться робити все заново.

2. Намагайтеся, щоб розмітка була в простому, верифицируемом форматі. Пам'ятайте, що будь-які завдання комп'ютерного зору — досить складні в налаштуванні і в пошуку багів. Будь-яка частина повинна бути просто визуализируема і проста для перевірки очима. Віддавайте переваги текстових форматів даних або графічним. Намагайтеся уникати бінарних форматів, або форматів з великим об'ємом метаданих. Намагайтеся писати всю можливу інформацію. Наприклад не забувайте текстове назва зображення. Якщо ви використовуєте якусь функцію «отримати список назв файлів» пам'ятайте, що в Windows, Linux, C#, Python порядок цих файлів може відрізнятися.

3. Пам'ятайте, що розмітка — це тривалий процес. Найчастіше розмітка великої бази може займати дні або тижні. Монотонного праці. Намагайтеся передбачити у вашій програмі все, що знадобитися.

Приклади баз даних
MSRA dataset. MSRA — це ціла серія датасетов. Візьмемо для прикладу датасет з детектуванням об'єктів. Для кожної картинки задано обмежує прямокутник об'єкта на цій картинці:



При цьому всі параметри лежать в текстовому файлі такого виду:

235 - число описаних зображень у файлі

0\0_101.jpg - адреса зображення
400 300 - її розмір
89 10 371 252; 87 9 379 279; 89 11 376 275; - обмежує прямокутник об'єкта

0\0_108.jpg
400 300
112 4 241 214; 119 0 241 208; 118 0 238 141; 
.....

При цьому кожен текстовий файл описує всі об'єкти одного з класів.

VOC2012 Один з найбільш повних датасетов. Робився в дослідницьких цілях => намагалися описати все добре і якісно. До 2012 року датасет оновлювався кожен рік (2005-2012). Формат опису: xml.

На кожному зображенні відзначаються прямокутники всіх об'єктів:



При цьому пишуться всі дані:

<annotation>
<folder>VOC2007</folder>
<filename>000019.jpg</filename>
<source>
<database>The VOC2007 Database</database>
<annotation>PASCAL VOC2007</annotation>
<image>flickr</image>
<flickrid><owner>
<flickrid>Rosenberg1 Simmo</flickrid>
<name>?</name>
</owner>330638158</flickrid>
<source>

<size>
<width>500</width>
<height>375</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>cat</name>
<pose>Right</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>231</xmin>
<ymin>88</ymin>
<xmax>483</xmax>
<ymax>256</ymax>
</bndbox>
</object>
<object>
<name>cat</name>
<pose>Right</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>11</xmin>
<ymin>113</ymin>
<xmax>266</xmax>
<ymax>259</ymax>
</bndbox>
</object>
</annotation>

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



В даному випадку розмітка — це по суті розфарбування.

CIFAR Дослідний датасет з невеликими зображеннями. Приклад незручного датасета. Всі картинки лежать в одному великому файлі. Там же і їх опису. Для доступу до файлу є обгортки під Пітон і під Матлаб. Опис картинки — номер класу. Більше нічого в датасете немає. Колись датасет був популярним. Але був невдалим за форматом проектування. Зараз його рідко хто використовує.

The Street View House Numbers (SVHN) Dataset Відомий датасет з номерами будинків від гугла.



Формат опису — бінарний матлабовский файл для кожного зображення. У файлі — прямокутник обмежує цифру і значення цифри.

MS COCO Датасет від Майкрософта. Напевно один з кращих на сьогоднішній день. По складу — приблизно як VOC, але більше даних, сильно більше інформації про розмітці.



Інформація зберігатися в супровідних json-файли. Ось приклад як аннатируется:

annotation{
"id" : int,
"image_id" : int,
"category_id" : int,
"segmentation" : RLE or [polygon],
"area" : float,
"bbox" : [x,y,width,height],
"iscrowd" : 0 or 1,
}

categories[{
"id" : int,
"name" : str,
"supercategory" : str,
}]

Один з цікавих моментів датасета. Області сегментації задаються не картинкою, їх освітлення заливки, а замкнутим полилайном, який зберігається в тому ж json-файлі. Це значно зменшує обсяг даних. Хоча і погіршує якість розмітки.

Другий момент — для кожної з картинок є текстовий опис того, що відбувається.

The Citycapes Dataset Набір датасетов для чисто сегментационной завдання: розмітити все, що відбувається на вулицях. Для кожної картинки друга картинка з розміткою. В окремому файлі опис що означає кожен колір.



kaggle На каггле багато датасетов і вони завжди різні під різні задачки. Це приклад того, як треба робити датасеты. Всі датасеты максимально прості. Є 10 класів? Ось вони лежать по татусям без зайвих текстовиків. Потрібно щось знайти? Ось сегментационная розмітка.

IMAGENET Величезний, але безблагодатный датасет. Якщо чесно, так і не зміг остаточно розібратися в усіх доступних для нього описах. Більшість описів у mat-файли. Задача розпізнавання вимагає класифікації зображених даних. Так що творці вирішили давати повну класифікацію кожного зображення:



animals → chordate → vertrbrate,craniate → bird → parrot → African grey. — формат опису зображень.

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



http://www.absolutely.net/wenn/handy_manny_05_wenn5360250.jpg worker_2 205.056122449 274.885204082 0 409.147959184 276.691326531 0 287.535714286 291.441326531 0 336.903061224 295.956632653 0 249.306122449 268.864795918 0 249.005102041 281.507653061 0 371.821428571 274.283163265 0 373.928571429 282.410714286 0 227.734693878 307.787755102 0 388.840816327 304.416326531 0 273.489795918 309.473469388 0 340.195918367 309.714285714 0 250.371428571 298.636734694 0 252.779591837 314.771428571 0 362.168 296.06 0 365.72244898 312.844897959 0 252.297959184 305.13877551 0 363.073469388 301.526530612 0 275.655102041 378.605612245 0 352.23877551 377.945408163 0 327.151020408 376.625 0 315.92755102 393.790306122 0 244.620408163 413.645918367 0 359.391836735 417.219387755 0 311.255102041 419.11122449 0 310.204081633 424.996938776 0 308.102040816 438.239795918 0 311.044897959 453.794897959 0 118.526530612 259.768877551 0 446.133 275.046 0 145.594897959 364.081122449 0 438.369 380.507 0 142.954081633 321.828061224 0 435.781 330.688 0 317.351020408 518.537755102 0

Набір біометричних датасетов від CASIA. Тут все просто чудово. Датасеты для алгоритмів біометрії. Для кожної людини окрема таточку, всередині якої все розкладено як по нотах: різні спектри, безліч підходів.

KITTI Набір самих різних датасетов знятих з автомобіля. Для кожної картинки свій власний текстовик з описом:

Pedestrian 0.00 1 1.43 694.62 175.43 703.96 201.82 1.74 0.75 0.64 5.98 1.92 48.22 1.55
Van 0.00 1 2.15 68.34 174.12 189.52 222.12 1.94 1.88 5.30 -21.22 2.03 32.10 1.57
Misc 0.00 1 2.06 184.58 181.15 230.79 211.99 1.54 0.85 2.84 -20.97 1.97 37.62 1.56
Car 0.00 0 2.01 221.83 183.54 302.47 223.76 1.48 1.61 3.39 -13.87 1.93 28.89 1.56
Car 0.00 1 2.07 168.24 186.13 265.38 223.54 1.44 1.79 4.32 -16.76 2.04 30.95 1.58

Опис — приклад доброго датасета. Тут поставлено все: наскільки об'єкт перекритий, межі об'єкта. Наскільки об'єкт повернутий до камери, які реальні координати об'єкта по глибині. Але, як я розумію, більшість дослідників користуються тільки координатами рамки об'єкта.

Крім зображень з розміткою прямокутників в датасете є багато цікавої інформації. Тут є стереопари для дорожньої обстановки.

Є оптичний потік для кожного кадру, який в кожній точці задає колір, що кодує напрямок і швидкість руху (1, 2):



У цьому датасете багато цікаво і правильно заданої інформації.

Існує величезна безліч датасетов які я тут не згадав. Головне, що їх об'єднує: якщо датасет серйозний — він добре зроблений. З ним зручно працювати. Коли будете робити датасеты під свої завдання — не забувайте про це.

Зручність оператора
Навіть якщо базу размечаете не ви — не забувайте про зручність оператора, який буде розмічати. Зручність оператора = швидкість роботи + якість розмітки. Ось декілька порад:

• Намагайтеся дублювати всі можливі операції на клавіатурі. Залишайте на мишу тільки операції виділення об'єктів на зображенні. Це підвищує швидкість роботи в рази.
• Постійно зберігайте роботу. Не тримайте її в пам'яті програми. Так як програми розмітки часто пишуться на коліні — вильоти можливі. Прикро втратити 5000 розмічених зображень.
• Зробіть можливість редагування розмічених даних. Помилок не уникнути.
• Не давайте оператору зайвих інструментів. Все повинно бути просто, всі кути повинні бути зрізані. У вас 3 типи об'єктів? Не треба давати оператору програму де можна розмітити 10 типів. Ваш девіз — «тільки необхідність і достатність».

Пара прикладів
Я наводжу тут кілька прикладів, які я використовував у різних завданнях. Написані на C# + з підключенням EmguCV для роботи з зображеннями (знаю, що надмірно, але так було простіше).

репозиторії 2 програми — одна для розмальовки зображень під завдання сегментації, друга для малювання прямокутників. Нічого надприродного, але може комусь знадобляться.

Інше
Мені сподобався сервісЯндекса — Толока. Частково він може вирішити питання розмітки бази. Але, треба сказати, що сильно не всі з описаного в ньому є.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.