Я начал обучающий каскад, но он ОЧЕНЬ медленный... проблема с памятью?

Я начал тренировать каскад с ~600 негативными изображениями и ~120 позитивами (искаженными и преобразованными, чтобы получить ~1500 позитивов). Я использую opencv_traincascade, и я установил параметры как таковые:

numPos: 1000
numNeg: 609
numStages: 20
preCalcValBufSize: 4096 (mb)
preCalcIdxBufSize: 4096 (mb)
stageType: BOOST
featureType: Haar
sampleWidth: 80
sampleHeight: 80
maxFalseAlarmRate: 0.5
weightTrimRate: 0.95
maxDepth: 1
maxWeakCount: 100
mode: All

Мой компьютер - Mac mini с 16 ГБ памяти, и на нем установлен четырехъядерный процессор i7. Он также имеет жесткий диск, а не SSD. Он работал около 1 дня 8 часов и находится на этапе обучения 3.

Мне интересно, есть ли какая-то причина, по которой обучение длится так долго. В этом случае обучение займет 6-7 дней. Одна вещь, которую я заметил, это то, что я обычно использую 1-2 ГБ подкачки памяти, и иногда это говорит о "давлении" на мою память. Я не знаю много о памяти подкачки, но думаю, что это может замедлить мои тренировки. Как это работает? Кроме того, я должен возобновить обучение, уменьшив использование памяти до 2048 МБ для обоих размеров Buf ради времени?

1 ответ

Я знаю, что опаздываю, но, возможно, кому-то еще понадобится ответ на этот вопрос.
Скорее всего, ваша проблема заключается в использовании довольно больших изображений - я помню, что проводил некоторое обучение (и я взял около одного или двух) с sampleWidth и sampleHeight, равными 20. В упомянутой статье ширина равна 80, а высота равна 40, но число выборок намного меньше и форма объекта довольно проста.
Параметры, которые вы упомянули (preCalcValBufSize и preCalcIdxBufSize) устанавливают максимальное использование оперативной памяти - это все равно что сказать: "вы можете использовать x MB моего оперативной памяти для preCalcValBufSize и y mb для preCalcIdxBufSize и даже не смотреть на остальную часть моей памяти - мне это нужно для чего-то другого." Пока preCalcValBufSize + preCalcIdxBufSize < avaible ram size нет необходимости использовать своп (так что ОС не будет его использовать).

Другие вопросы по тегам