Je suis en train d'utiliser le réseau de neurones en profondeur pour détecter la signalisation routière sur les images (basées sur the tflearn example):Comment améliorer réseau neuronal profond pour travailler avec une plus grande image d'entrée?
dataset_file = [path_to_dataset_file]
X, Y = image_preloader(dataset_file, image_shape=(32, 32), mode='file',
categorical_labels=True, normalize=True)
X, Y = shuffle(X, Y)
network = input_data(shape=[None, 32, 32, 3])
network = conv_2d(network, 32, 3, activation='relu')
network = max_pool_2d(network, 2)
network = conv_2d(network, 64, 3, activation='relu')
network = conv_2d(network, 64, 3, activation='relu')
network = fully_connected(network, 512, activation='relu')
network = dropout(network, 0.5)
network = fully_connected(network, 2, activation='softmax')
network = regression(network)
model = tflearn.DNN(network, tensorboard_verbose=0)
model.fit(X, Y, n_epoch=1000, show_metric=True)
Il fonctionne vraiment agréable avec de petites images (32 x 32px), mais je voudrais améliorer mon réseau pour travailler avec des images plus grandes (500 x 500px ou plus si possible) avec des panneaux de signalisation en arrière-plan, dans le coin, etc. Tenter d'exécuter ce code avec shape = [Aucun, 500, 500, 3] a tué mon ordinateur :)
Je pense à cette façon (pseudo-code):
SIZE_GOOD_ENOUGH = 32
def try_detect(image):
if image_too_small(image): # image is too small when width
return FALSE # or height < SIZE_GOOD_ENOUGH
resized_image = image.resize_to(SIZE_GOOD_ENOUGH, SIZE_GOOD_ENOUGH)
result = detect_with_DNN(resized_image) # returns TRUE if detected
if result:
return TRUE
smaller_images_list = cut_into_pieces(image) # list of smaller images
for smaller_image in smaller_images_list:
result = try_detect(smaller_image) # recursion
if result:
return TRUE
return FALSE
... ou quelque chose comme ça, mais je voudrais encore avoir plus grand SIZE_GOOD_ENOUGH, car certains panneaux de signalisation redimensionnés sont difficiles à reconnaître, même pour moi. Est-il possible d'améliorer mon réseau pour qu'il fonctionne mieux avec (par exemple) des images 200 x 200px? Mieux pour moi signifie "ne pas tuer mon GPU" et obtient toujours une précision> 0.9. Peut-être que mes conv_2d/max_pool_2d ne sont pas bien sélectionnés? Je serais reconnaissant pour tout conseil.
Nous vous remercions de votre réponse. J'ai trouvé ce lien: https://github.com/tensorflow/models/tree/master/object_detection en utilisant vos conseils et il ressemble à une solution facile à tous mes problèmes! :) – Vether