Потеря кубиков и образцы, не содержащие данных в целевых тензорах? - PullRequest
0 голосов
/ 10 декабря 2018

У меня очень несбалансированный 3D-набор данных, где около 80% объема составляют фоновые данные, меня интересуют только элементы переднего плана, которые составляют около 20% от общего объема в случайных местах.Эти местоположения отмечены в тензор метки, данной сети.Целевой тензор является двоичным, где 0 представляет фон, а 1 представляет области, которые мы заинтересованы или хотим сегментировать.

Размер каждого тома равен [30,512,1024].Я перебираю каждый том, используя блоки размером [30,64,64].Таким образом, большинство моих блоков имеют только 0 значений в целевом тензоре.

Я читал, что DiceLoss идеально подходит для таких задач и успешно используется при сегментировании 3D МРТ-сканов.Вот одна простая реализация: https://github.com/pytorch/pytorch/issues/1249#issuecomment-305088398

def dice_loss(input, target):
    smooth = 1.

    iflat = input.view(-1)
    tflat = target.view(-1)
    intersection = (iflat * tflat).sum()

    return 1 - ((2. * intersection + smooth) /
              (iflat.sum() + tflat.sum() + smooth))

Это не работает для меня, я имею в виду для патча, где все, что у меня есть, это фон tflat.sum() будет 0.Это также составит intersection 0, поэтому для большинства моих патчей или блоков я получу возврат 1.

Это правильно?Это не так, как это должно работать.Но я борюсь с этим, так как это мой сетевой вывод:

idx:  0 of  312 - Training Loss:  1.0 - Training Accuracy:  3.204042239857152e-11
idx:  5 of  312 - Training Loss:  0.9876335859298706 - Training Accuracy:  0.0119545953348279
idx:  10 of  312 - Training Loss:  1.0 - Training Accuracy:  7.269467666715101e-11
idx:  15 of  312 - Training Loss:  0.7320756912231445 - Training Accuracy:  0.22638492286205292
idx:  20 of  312 - Training Loss:  0.3599294424057007 - Training Accuracy:  0.49074622988700867
idx:  25 of  312 - Training Loss:  1.0 - Training Accuracy:  1.0720428988975073e-09
idx:  30 of  312 - Training Loss:  1.0 - Training Accuracy:  1.19782361807097e-09
idx:  35 of  312 - Training Loss:  1.0 - Training Accuracy:  1.956790285362331e-09
idx:  40 of  312 - Training Loss:  1.0 - Training Accuracy:  1.6055999862985004e-09
idx:  45 of  312 - Training Loss:  1.0 - Training Accuracy:  7.580232552761856e-10
idx:  50 of  312 - Training Loss:  1.0 - Training Accuracy:  9.510597864803572e-10
idx:  55 of  312 - Training Loss:  1.0 - Training Accuracy:  1.341515676323013e-09
idx:  60 of  312 - Training Loss:  0.7165247797966003 - Training Accuracy:  0.02658153884112835
idx:  65 of  312 - Training Loss:  1.0 - Training Accuracy:  4.528208030762926e-09
idx:  70 of  312 - Training Loss:  0.3205708861351013 - Training Accuracy:  0.6673439145088196
idx:  75 of  312 - Training Loss:  0.9305377006530762 - Training Accuracy:  2.3437689378624782e-05
idx:  80 of  312 - Training Loss:  1.0 - Training Accuracy:  5.305786885401176e-07
idx:  85 of  312 - Training Loss:  1.0 - Training Accuracy:  4.0612556517771736e-07
idx:  90 of  312 - Training Loss:  0.8207412362098694 - Training Accuracy:  0.0344742126762867
idx:  95 of  312 - Training Loss:  0.7463213205337524 - Training Accuracy:  0.19459737837314606
idx:  100 of  312 - Training Loss:  1.0 - Training Accuracy:  4.863646818620282e-09
idx:  105 of  312 - Training Loss:  0.35790306329727173 - Training Accuracy:  0.608722984790802
idx:  110 of  312 - Training Loss:  1.0 - Training Accuracy:  3.3852198821904267e-09
idx:  115 of  312 - Training Loss:  1.0 - Training Accuracy:  1.5268487585373691e-09
idx:  120 of  312 - Training Loss:  1.0 - Training Accuracy:  3.46353523639209e-09
idx:  125 of  312 - Training Loss:  1.0 - Training Accuracy:  2.5878148582347826e-11
idx:  130 of  312 - Training Loss:  1.0 - Training Accuracy:  2.3601216467272756e-11
idx:  135 of  312 - Training Loss:  1.0 - Training Accuracy:  1.1504343033763575e-09
idx:  140 of  312 - Training Loss:  0.4516671299934387 - Training Accuracy:  0.13879922032356262

Я не думаю, что сеть чему-то научится из этого ..

Теперь я запутался, поскольку моя проблема должнаНе будь слишком сложным, так как я уверен, что у МРТ также есть целевые тензоры, где большинство из них указывают на фон .. Что я делаю не так?

Спасибо

1 Ответ

0 голосов
/ 10 декабря 2018

Вы получите возврат 1, если ваш алгоритм предсказывает, что все фоновые вокселы должны иметь значение ровно 0, но если он предсказывает какое-либо положительное значение (что он обязательно сделает, если вы используете сигмовидную активацию), он все еще может улучшитьсяпотери, выводя как можно меньше.Другими словами, числитель не может превышать smooth, но алгоритм все еще может научиться сохранять знаменатель как можно меньшим.

Если вы не удовлетворены поведением вашего алгоритма, вы можете попытаться либо увеличить свой пакетразмер (так что вероятность того, что ни один из томов не будет иметь каких-либо выпадений на переднем плане) или прямо вверх, пропускают такие партии.Это может или не может помочь в обучении.

При этом я лично никогда не имел успеха в изучении сегментации с Dice / IoU в качестве функций потерь и обычно выбираю двоичную кросс-энтропию или аналогичные потери, сохраняя первый какметрики проверки.

...