Я работаю над расширением данных, используя opencv2 в python. Набор данных, который я использую, состоит из около 4000 изображений 96х96 одноканальных изображений.
Я применяю серию аффинных преобразований перевода и масштабирования с использованием cv2.warpAffine
. Однако я заметил, что по мере повторения кода через набор данных процесс становится медленнее и медленнее. Код поворотного преобразования ниже - я называю это на каждом изображении.
def augment_rotation(depth):
augment_rotate = []
rows,cols = depth.shape
for i in range(-180,181):
M = cv2.getRotationMatrix2D(((cols-1)/2.0,(rows-1)/2.0),i,1)
augment_rotate.append(cv2.warpAffine(depth,M,(cols,rows)))
return augment_rotate
Это не ограничивается моим компьютером, поскольку я пробовал его на других компьютерах и имел ту же проблему. Любая идея, как решить эту проблему или сделать ее быстрее, поэтому мне не нужно ждать часов, чтобы выполнить аугментацию?
Я наткнулся на встроенный питон библиотеки joblib
. Он предназначен для этой цели. В соответствии с документом joblib
помогает выполнять циклы параллельно, используя библиотеку multiprocessing
в бэкэнд.
Документы иллюстрируют численный пример для выполнения простых математических операций для параллельного списка чисел. Я смог расширить эту функциональность до обработки изображений. В качестве примера демо я решил выполнить взвешенную сумму всех изображений на моем рабочем столе с и без joblib
.
Оказывается, что для 14 изображений коллективного размера 58 Мб я получил следующее:
('Using Joblib : ', 0.09400010108947754)
('Without Joblib : ', 15.386000156402588)
Вот запись для ответа, который я написал недавно. Я уверен, что вы можете использовать его и для аугментации!
Попробуйте и дайте мне знать, как это работает!