Exécutez YOLO sur AWS. ** Je ne connais pas grand-chose à AWS, veuillez donc le voir comme un exemple de solution. ** **
[YOLO] https://github.com/ptxyasu/keras-yolo3 [AWS] EC2 https://aws.amazon.com/jp/ec2/
Cette fois, j'ai choisi l'AMI Ubuntu 16.04 pour correspondre à l'environnement de développement. Le type d'instance est t2.micro, qui est une trame libre.
Lorsque je crée l'environnement et que je tente de cloner keras-yolo3, une erreur se produit: il n'y a pas de volume.
Modifiez petit à petit la taille du volume de 8 Go. ** Notez que vous ne pouvez le changer que toutes les 6 heures environ. Cependant, sachez que plus vous augmentez, plus vous serez facturé! !! ** ** En conséquence, il a été porté à 20 Gio.
Même si je vérifie la déclaration d'erreur, je n'obtiens pas beaucoup d'informations.
J'ai senti qu'un processeur virtuel de t2.micro et 1 Go de mémoire étaient les problèmes. J'ai donc changé le type d'instance de t2.micro à t3a.2xlarge. À ce propos, il aurait peut-être été bon de passer à t2.large ou t2.xlarge. ** Veuillez noter que le prix sera très élevé! ** **
Si vous lisez l'instruction d'erreur, ce qui suit est probablement le problème. Je pense qu'il n'y a pas de police dans AWS.
yolo_video.py
font = ImageFont.truetype(font='font/FiraMono-Medium.otf',
size=np.floor(8e-3 * image.size[1] + 0.5).astype('int32'))
Cette fois, il suffit d'obtenir le nom de la classe et ses coordonnées à la place de l'image détectée, de sorte que la partie liée à la représentation peut être supprimée.
yolo_video.py
def detect_image(self, image):
start = timer()
if self.model_image_size != (None, None):
assert self.model_image_size[0]%32 == 0, 'Multiples of 32 required'
assert self.model_image_size[1]%32 == 0, 'Multiples of 32 required'
boxed_image = letterbox_image(image, tuple(reversed(self.model_image_size)))
else:
new_image_size = (image.width - (image.width % 32),
image.height - (image.height % 32))
boxed_image = letterbox_image(image, new_image_size)
image_data = np.array(boxed_image, dtype='float32')
print(image_data.shape)
image_data /= 255.
image_data = np.expand_dims(image_data, 0) # Add batch dimension.
out_boxes, out_scores, out_classes = self.sess.run(
[self.boxes, self.scores, self.classes],
feed_dict={
self.yolo_model.input: image_data,
self.input_image_shape: [image.size[1], image.size[0]],
K.learning_phase(): 0
})
print('Found {} boxes for {}'.format(len(out_boxes), 'img'))
for i, c in reversed(list(enumerate(out_classes))):
predicted_class = self.class_names[c]
box = out_boxes[i]
score = out_scores[i]
predicted_value = self.get_concentration(predicted_class)
value = max(value,predicted_value)
label = '{} {:.2f}'.format(predicted_class,score)
top, left, bottom, right = box
top = max(0, np.floor(top + 0.5).astype('int32'))
left = max(0, np.floor(left + 0.5).astype('int32'))
bottom = min(image.size[1], np.floor(bottom + 0.5).astype('int32'))
right = min(image.size[0], np.floor(right + 0.5).astype('int32'))
print(label, (left, top), (right, bottom))
if top - label_size[1] >= 0:
text_origin = np.array([left, top - label_size[1]])
else:
text_origin = np.array([left, top + 1])
# My kingdom for a good redistributable image drawing library.
end = timer()
print(end - start)
return image
def close_session(self):
self.sess.close()
En utilisant la méthode précédente, nous avons pu exécuter yolo. Cependant, il devient "Trouvé 0 cases pour img" et l'objet n'est pas reconnu ...
Une erreur dans le modèle d'apprentissage placé sur le serveur? → Il n'y a pas de problème avec le modèle Autorisation d'ouvrir des images et des programmes? → Pas de changement même si l'autorisation est donnée L'environnement de développement est composé de plusieurs GPU, alors qu'AWS a plusieurs processeurs → Il semble qu'il ne soit pas lié à l'origine, mais cela peut avoir un léger effet (vérification requise)
Il a été exécuté, mais aucun objet n'a été détecté. L'instance a été supprimée car les frais ont augmenté d'environ 5 000 yens en raison de l'expansion du volume et du changement de type d'instance.
Nous y travaillerons à nouveau après avoir clarifié la cause de l'échec et considéré le type d'instance optimal. Si vous avez une idée de l'erreur, veuillez commenter! S'il vous plaît.
Recommended Posts