Функція втрати для смислової сегментації


10

Вибачає за нецільове використання технічних термінів. Я працюю над проектом семантичної сегментації за допомогою конволюційних нейронних мереж (CNN); намагаючись реалізувати архітектуру типу Encoder-Decoder, тому вихід має той же розмір, що і вхідний.

Як ви проектуєте етикетки? Яку функцію втрат слід застосувати? Особливо в умовах важкої нерівноваги класу (але співвідношення між класами змінюється від зображення до зображення).

Проблема стосується двох класів (об'єкти, що цікавлять та передумови). Я використовую Керас із тензорфлоу-серцем.

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

function(y_pred,y_true),

за погодженням з Керасом .

Будь ласка, спробуйте бути конкретними з розмірами залучених тензорів (вхід / вихід моделі). Будь-які думки та пропозиції дуже вдячні. Дякую !


Прочитайте цей arxiv.org/pdf/1511.00561.pdf "Ми використовуємо крос-ентропійну втрату як цільову функцію для навчання мережі".
Міс Палмер

Відповіді:


6

Перехресна ентропія, безумовно, шлях. Я не знаю Кераса, але TF має таке: https://www.tensorflow.org/api_docs/python/tf/nn/sigmoid_cross_entropy_with_logits

Ось документ, що безпосередньо реалізує це: Повністю згорткові мережі для семантичної сегментації Shelhamer та співавт.

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

З мого особистого досвіду, ви можете спочатку почати з простої мережі кодера-декодера, але не використовуйте кроки (або кроки = 1), інакше ви втратите велику роздільну здатність, оскільки перегляд вибору не є ідеальним. Перейдіть з невеликими розмірами ядра. Я не знаю вашої конкретної програми, але навіть 2-3 приховані шари мережі дадуть дуже хороші результати. Використовуйте 32-64 канали на кожному шарі. Почніть прості, 2 приховані шари, 32 канали кожен, 3х3 ядра, stride = 1 та експериментуйте з параметрами ізольовано, щоб побачити їх ефект. Тримайте розміри завжди рівними вхідним розміром для стартерів, щоб уникнути втрати роздільної здатності. Після цього ви можете ввімкнути кроки та оптимізацію та реалізувати такі ідеї, як U-Net. U-Net надзвичайно добре працює для сегментації медичних зображень.

Щодо незбалансованості класів, див. Https://swarbrickjones.wordpress.com/2017/03/28/cross-entropy-and-training-test-class-imbalance/ Тут ідея полягає у зважуванні різних класів за допомогою та параметри.αβ


Я не фахівець у цій галузі, але чи не повинні заняття бути ексклюзивними в цій обстановці? Якщо так, чи не втрата softmax була б кращим варіантом? tensorflow.org/api_docs/python/tf/nn/…
Харальд Томсон

1
@HaraldThomson, сегментація є бінарною проблемою. Багато людей використовують софтмакс для бінарних проблем, але це зовсім непотрібно і надмірно. Замість того, щоб мати два вихідні вузли, майте один вихідний вузол, який представляє P (y = 1), а потім використовуйте крос-ентропію.
Рікардо Крус

2

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


-1

Дозвольте спочатку бути більш конкретним, а потім більш загальним. Прошу вибачення, якщо я вас неправильно зрозумів.

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

Загалом, ви, здається, будуєте дуже складну модель машинного навчання, оскільки ви згадували CNN. CNN та інші моделі глибокого навчання - одні з найскладніших моделей машинного навчання.

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


Це навіть потрібно? Наприклад, див. Метод Pixon .
Карл

це правильний підхід: arxiv.org/pdf/1511.00561.pdf
Міс Палмер

"CNN та інші моделі глибокого навчання - одні з найскладніших моделей машинного навчання, що існують." Я схильний не погоджуватися. Сама модель може бути складною, але насправді неймовірно проста у використанні з дуже невеликим теоретичним розумінням. Це причина всього галасу щодо DL, мало теорії, легко писати моделей і дуже високої точності ...
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.