Приносит свои извинения за неправильное использование технических терминов. Я работаю над проектом семантической сегментации с помощью сверточных нейронных сетей (CNN); пытаясь реализовать архитектуру типа Encoder-Decoder, поэтому размер вывода совпадает с размером ввода.
Как вы оформляете этикетки? Какую функцию потерь следует применять? Особенно в ситуации тяжелого дисбаланса классов (но соотношение между классами варьируется от изображения к изображению).
Задача касается двух классов (объекты интереса и фона). Я использую Keras с бэкэндом тензорного потока.
До сих пор я собираюсь разработать ожидаемые выходные данные, которые будут иметь те же размеры, что и входные изображения, применяя пиксельную маркировку. Конечный слой модели имеет либо активацию softmax (для 2 классов), либо сигмовидную активацию (чтобы выразить вероятность того, что пиксели принадлежат классу объектов). У меня проблемы с разработкой подходящей целевой функции для такой задачи, типа:
function(y_pred,y_true)
,
по согласованию с Керасом .
Пожалуйста, попробуйте конкретизировать размеры задействованных тензоров (вход / выход модели). Любые мысли и предложения очень ценятся. Спасибо !
источник
Ответы:
Перекрестная энтропия, безусловно, путь. Я не знаю Keras, но у TF есть это: https://www.tensorflow.org/api_docs/python/tf/nn/sigmoid_cross_entropy_with_logits
Вот документ, непосредственно реализующий это: Полностью сверточные сети для семантической сегментации. Автор Shelhamer et al.
Документ U-Net также является очень успешной реализацией идеи, использующей пропускаемые соединения, чтобы избежать потери пространственного разрешения. Вы можете найти много реализаций этого в сети.
Исходя из моего личного опыта, вы можете сначала начать с простой сети кодер-декодер, но не используйте шаги (или шаги = 1), иначе вы потеряете много разрешения, потому что повышающая дискретизация не идеальна. Пойдите с маленькими размерами ядра. Я не знаю вашего конкретного приложения, но даже сеть из 2-3 скрытых слоев даст очень хорошие результаты. Используйте 32-64 канала на каждом слое. Начните с простого, 2 скрытых слоя, 32 канала каждый, ядра 3х3, шаг = 1 и экспериментируйте с параметрами изолированно, чтобы увидеть их эффект. Держите размеры всегда равными входному измерению для начинающих, чтобы избежать потери разрешения. После этого вы можете включить прогресс и повышение частоты дискретизации и реализовать такие идеи, как U-Net. U-Net прекрасно работает для сегментации медицинских изображений.
Информацию о дисбалансе классов см. На странице https://swarbrickjones.wordpress.com/2017/03/28/cross-entropy-and-training-test-class-imbalance/. Здесь идея состоит в том, чтобы взвесить различные классы с помощью и параметры.α β
источник
Используйте взвешенные потери в кости и взвешенные перекрестные потери энтропии. Потеря костей очень хороша для сегментации. Весами, с которых вы можете начать, должны быть инвертированные частоты классов, т. Е. Взять выборку, скажем, 50-100, найти среднее число пикселей, принадлежащих каждому классу, и сделать вес этих классов 1 / среднее. Возможно, вам придется реализовать кости самостоятельно, но это просто. Кроме того, вы можете посмотреть в обратной потере кости и очаговой потере
источник
Позвольте мне сначала быть более конкретным, а затем более общим. Я прошу прощения, если я вас неправильно понял.
Я думаю, что вы говорите о необходимости нейронной сети автоэнкодера, потому что вы упомянули кодирование и декодирование, и вы упомянули размер ввода такой же, как размер вывода. Если это так, то ваша функция потерь основана на воспроизведении входного вектора, а также на сжатии данных в более короткий вектор в среднем скрытом слое. Выбор будет заключаться в достижении минимальной среднеквадратичной ошибки (для регрессии) или коэффициента логлосса или ошибочной классификации (для классификации). Тем не менее, CNN - это не то, что я видел в авто-кодере, но я думаю, что это было бы возможно и полезно в тех случаях, когда важна трансляционная инвариантность, например, при обнаружении границ и объектов в изображениях.
В более общем смысле, вы, кажется, строите очень сложную модель машинного обучения, так как упомянули CNN. CNN и другие модели глубокого обучения являются одними из самых сложных моделей машинного обучения, которые существуют.
Однако выбор размеров, меток и функций потерь больше похож на элементарное машинное обучение. Я думаю, что вы можете быть глубоко над головой с глубоким изучением. Вы сначала брали урок по обычному машинному обучению?
источник