Я только что внедрил Mask RCNN в Pytorch с нуля, и вот код: https://github.com/arthurhero/Mask_R-CNN_Pytorch/blob/master/masker_ops.py
У меня есть только один GTX1080 и один Quadro6000 на двух разных машинах, поэтому я могу тренироваться только с 2 imgs за итерацию. Мои вопросы: сколько времени обычно требуется, чтобы маска RCNN сходилась? И как я могу определить, находится ли он на правильном пути или нет?
Сейчас я тренирую только голову RPN (так что это первый из четырех "прагматических шагов"). После одной ночной тренировки эта модель все еще дает мне много уведомлений «0 положительных bbox», т. Е. Когда она присваивает метки каждому bbox для img, все они являются отрицательными (не достаточно большими, чем, например, с правдой) BBOX). И кажется, что количество уведомлений «0 положительных ящиков» не уменьшилось, поскольку обучение вообще идет.
Я подумал о нескольких причинах.
Прямо сейчас, я пропущу весь пакет, если один из img имеет "0 положительных bboxes", просто потому, что это сделает тензорную форму странной для последующих вычислений. Так люди обычно справляются с такой ситуацией? Это приносит слишком много неэффективности к обучению?
Скорость обучения может быть слишком большой? В настоящее время я использую 0,02 из бумаги. Но так как размер моей партии всего 2, слишком ли велика скорость обучения?
Я немного сомневаюсь в том, как смещения применяются к якорям ... В настоящее время головка RPN возвращает dy, dx, logh, logw относительно якорного ящика. И код для применения этих смещений к якорному полю выглядит так:
center_y = center_y + (dy*height)
center_x = center_x + (dx*width)
height = height * torch.exp(dh)
width = width * torch.exp(dw)
Результирующий bbox может находиться далеко за границей исходного якоря (если dy и dx большие). Но когда этому bbox присваивается «отрицательный», метка класса в центре исходного якоря получит наказание, если метка положительная. Это не выглядит справедливым для меня ...... У меня тут недоразумение? Или это просто не имеет значения? Должны ли мы наложить жесткие ограничения на эти смещения, чтобы результирующий bbox не мог зайти слишком далеко от якоря?
Слишком много для петель. Это проблема для уровня ROIAlign и уровня фильтра предложений. Поскольку у каждого img может быть разное количество отфильтрованных предложений, а также просто потому, что трудно манипулировать 5-мерным тензором ... Я обычно просто делю партию bbox или предложений вдоль оси партии и использую цикл for для работы с набором. предложений по одному img за раз. Но из-за моего ограниченного знания ОС, графические процессоры плохо справляются с последовательной работой. Это те петли, которые затягивают скорость тренировки? И есть ли лучший способ реализовать эти вычисления на 5d-тензорах без цикла for?
Слишком мало графических процессоров. Фундаментальный вопрос: можно ли тренировать маску RCNN только на одном GPU? Если нет ... каковы рекомендации для маскировщика объектов с более дешевой стоимостью? Я слышал, что YOLO также очень дорогой в вычислительном отношении ...
Большое, большое спасибо !!
-Z