#tensorflow #keras #deep-learning
Вопрос:
У меня есть полная модель CNN. его выходная форма равна (16,16,5), а активация-softmax. Мне нужно классифицировать каждую ячейку отдельно, один класс предназначен для фона, а другой-для класса каждого объекта ( 4 1 ).
например, для вывода 3*3 вывод моего желания выглядит так
из-за того, что класс фона более повторяющийся, моя модель смещается к классу 0 (фон ). что я должен сделать для этой классификации дисбаланса. Для этого я использую TensorFlow и Keras. И моя базовая модель-Resnet50
большое вам спасибо
Комментарии:
1. Не могли бы вы показать пример того, как вы создали обучающий набор данных?
2. Я добавляю картинку. Я думаю, это может вам помочь. мой проект-это что-то вроде капчи «Я не робот». Я назначаю класс каждой ячейке, содержащей объект этого класса.
3. Я понимаю, чего вы хотите достичь, но я хотел бы посмотреть, как выглядит ваш обучающий набор данных, чтобы увидеть возможную «ошибку».
4. мой набор данных для обучения взят из kaggle.com/c/severstal-steel-defect-detection . но я изменил метки с маски на классификацию сетки
Ответ №1:
Простой и обычно успешный подход заключается в использовании весовых коэффициентов для каждого класса, в сумме которых складывается убыток. Коэффициент может быть обратным размерам классов или где-то между этим и 1
.
Например, для соотношения классов 100:1 обычно хорошо работает перевес 1:100 или 1:10.
Комментарии:
1. не могли бы вы дать мне пример кода для функции потерь? учитывая, что мой вывод представляет собой 4d-тензор с формой (пакет, количество ячеек, количество ячеек, класс )
2. @amirhossein_mlkz Если вы используете перекрестную энтропию, вместо
loss=sum(cross_entropy(output,output_target))
, используйтеloss=sum(cross_entropy(output,output_target)*reweighting)
, гдеoutput
output_target
иreweighting
все имеют размер массива , который вы упомянули,cross_entropy
и*
sum
работают по элементам и работают во всех измерениях его входного массива.
Ответ №2:
Хотя я все еще жду, чтобы увидеть набор данных для обучения, я бы сказал, что в принципе я бы работал только с четырьмя классами: автомобилем, мотоциклом, грузовиком и велосипедом (я их изобрел). То есть у меня не было бы пятого класса, который был бы фоном, но я бы получил этот последний, отбросив его.
Если процент вероятности меньше X, мы отбрасываем четыре возможных класса и говорим, что это фон.
Тем не менее, важно, чтобы, если вы будете следовать этому методу, в вашем наборе данных для обучения не было только изображений автомобилей, мотоциклов и т. Д. во всей его полноте. Вы, должно быть, приучили себя распознавать транспортные средства по частям.
Другим интересным вариантом было бы предварительно обработать изображение, соединить X частей, составляющих изображение, применить NN непосредственно к изображению, а затем перенести результаты в разные кадры (возможно, здесь вам нужно применить другие типы NN, такие как сегментация).
Я надеюсь, что был вам полезен, если вы расширите информацию, которую мы можем попытаться помочь вам вместе.
Комментарии:
1. Если я удалю класс фона, может ли это привести к снижению точности моей модели и увеличению ложноположительного результата? еще один вопрос: можете ли вы объяснить свою цель предварительной обработки изображений? в моем проекте я обрабатываю все ячейки в одной последовательности в модели, и классификация ячеек возвращается в виде тензора 16x16x5 для всего изображения.