2016-08-18 4 views
3

Я использую dlib's train_object_detector для обнаружения лица, и у меня есть примерно 6k изображений в папке, с которой я пытаюсь обучить мою модель.dlib train_object_detector огромные объемы использования ОЗУ

Кроме того, для этой цели я использую код python для примера dlib (train_object_detector.py).

Но дело в том, что использование ОЗУ программы является безумным. Для примерно 300 изображений требуется примерно 15 ГБ оперативной памяти и прямо сейчас с моими 6к изображениями, я застрял.

Для изображений 6k, при обучении, потребовалось более 100 ГБ ОЗУ и, в конечном итоге, программа убила себя.

Это всегда было так? или я делаю что-то неправильно? Нормально ли использовать эту большую часть ОЗУ?

Это почти не изменено совсем и почти так же, как в примере кода из dlib.

Примечание: Размеры изображений находятся между 10-100 КБ.

Вот код, я использую (дистанционное управление): http://pastebin.com/WipU8qgq Вот код:

import os 
import sys 
import glob 
import dlib 
from skimage import io 


if len(sys.argv) != 4: 
     print(
     "Give the path to the faces directory as the argument to this " 
     "program with training and test xml files in order. For example: \n" 
     " ./train_object_detector_modified.py ../faces ../faces/training.xml ../faces/testing.xml") 
    exit() 
faces_folder = sys.argv[1] 
training_xml_path = sys.argv[2] 
testing_xml_path = sys.argv[3] 

options = dlib.simple_object_detector_training_options() 
options.add_left_right_image_flips = True 
options.C = 5 
options.num_threads = 8 
options.be_verbose = True 

dlib.train_simple_object_detector(training_xml_path, "detector.svm", options) 
print 'training end' 

print("") # Print blank line to create gap from previous output 
print("Training accuracy: {}".format(
    dlib.test_simple_object_detector(training_xml_path, "detector.svm"))) 

print("Testing accuracy: {}".format(
    dlib.test_simple_object_detector(testing_xml_path, "detector.svm"))) 


''' 
# Now let's use the detector as you would in a normal application. First we 
# will load it from disk. 
detector = dlib.simple_object_detector("detector.svm") 

# We can look at the HOG filter we learned. It should look like a face. Neat! 
win_det = dlib.image_window() 
win_det.set_image(detector) 

# Now let's run the detector over the images in the faces folder and display the 
# results. 
print("Showing detections on the images in the faces folder...") 
win = dlib.image_window() 
for f in glob.glob(os.path.join(faces_folder, "*.jpg")): 
    print("Processing file: {}".format(f)) 
    img = io.imread(f) 
    dets = detector(img) 
    print("Number of faces detected: {}".format(len(dets))) 
    for k, d in enumerate(dets): 
     print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
      k, d.left(), d.top(), d.right(), d.bottom())) 

    win.clear_overlay() 
    win.set_image(img) 
    win.add_overlay(dets) 
    dlib.hit_enter_to_continue() 
''' 
+0

Пожалуйста, разместите код в вопросе, ссылки могут стать недействительными. – SurvivalMachine

+0

Насколько велики ваши входные изображения? Действительно ли они огромны? Сколько пикселей? –

+0

@ DavisKing действительно большая их часть - 320x320, с некоторыми более крупными файлами, такими как 2560x1440, которых очень мало. – ABuyukcakir

ответ

1

Это происходит потому, что у вас есть сочетание больших изображений и/или небольшие ограничительные рамки. По умолчанию dlib.train_simple_object_detector использует окно обнаружения размером 6400 пикселей. Если изображения содержат целевые поля намного меньше, чем эти, то эти изображения повышаются, чтобы сделать объекты достаточно большими.

Все эти параметры являются полями в объекте параметров.

+0

Хорошо, спасибо за быстрый ответ, г-н Кинг. Я буду упорядочивать все мои изображения, либо перемасштабируя, либо удаляя исключения, и поместит для этой записи использование ОЗУ этой версии, если кому-то это интересно. – ABuyukcakir

+1

Кстати, мой детектор не смог классифицировать лица. Полагаю, это потому, что изображения, которые у меня были с несколькими ориентациями и схожи с тем, что обсуждалось здесь, http://stackoverflow.com/questions/38349615/traning-dlib-object-detector-with-450k-instances, мне может потребоваться кластер. Теперь, на мой вопрос, сколько использования бара вы обычно ожидаете для обучения этому набору данных, который вы использовали, а именно dlib_face_detector_training_data (упомянутый в ссылке выше)? Сейчас около 45 ГБ. Это обычный @DavisKing? – ABuyukcakir