Führen Sie YOLO unter AWS aus. ** Ich weiß nicht viel über AWS, daher sehen Sie es bitte als Beispiel für eine Lösung. ** ** **
[YOLO] https://github.com/ptxyasu/keras-yolo3 [AWS] EC2 https://aws.amazon.com/jp/ec2/
Dieses Mal habe ich mich für Ubuntu 16.04 AMI entschieden, um es an die Entwicklungsumgebung anzupassen. Der Instanztyp ist t2.micro, ein freier Frame.
Wenn ich die Umgebung erstelle und versuche, keras-yolo3 zu klonen, tritt ein Fehler auf, dass kein Volume vorhanden ist.
Ändern Sie die Lautstärke nach und nach von 8 GB. ** Beachten Sie, dass Sie es nur etwa alle 6 Stunden ändern können. Beachten Sie jedoch, dass je mehr Sie erhöhen, desto mehr wird Ihnen berechnet! !! ** ** ** Infolgedessen wurde es auf 20 GiB erhöht.
Selbst wenn ich die Fehleranweisung überprüfe, erhalte ich nicht viele Informationen.
Ich hatte das Gefühl, dass eine virtuelle CPU von t2.micro und 1 GB Speicher die Probleme waren. Also habe ich den Instanztyp von t2.micro in t3a.2xlarge geändert. In diesem Zusammenhang war es möglicherweise sinnvoll, auf t2.large oder t2.xlarge zu wechseln. ** Bitte beachten Sie, dass der Preis sehr hoch sein wird! ** ** **
Wenn Sie die Fehleranweisung lesen, ist wahrscheinlich Folgendes das Problem. Ich denke, es gibt keine Schriftart in AWS.
yolo_video.py
font = ImageFont.truetype(font='font/FiraMono-Medium.otf',
size=np.floor(8e-3 * image.size[1] + 0.5).astype('int32'))
Dieses Mal müssen nur der Klassenname und seine Koordinaten anstelle des erkannten Bildes abgerufen werden, damit der mit der Darstellung verbundene Teil gelöscht werden kann.
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()
Mit der vorherigen Methode konnten wir yolo ausführen. Es wird jedoch zu "Gefunden 0 Felder für img" und das Objekt wird nicht erkannt ...
Ein Fehler im Lernmodell auf dem Server? → Es gibt kein Problem mit dem Modell Erlaubnis zum Öffnen von Bildern und Programmen? → Keine Änderung, auch wenn die Berechtigung erteilt wurde Entwicklungsumgebung besteht aus mehreren GPUs, AWS verfügt über mehrere CPUs → Es scheint, dass es ursprünglich nicht verwandt ist, aber es kann geringfügige Auswirkungen haben (Überprüfung erforderlich)
Es wurde ausgeführt, aber es wurde kein Objekt erkannt. Die Instanz wurde gelöscht, da die Gebühr aufgrund der Erweiterung des Volumens und der Änderung des Instanztyps um etwa 5.000 Yen gestiegen ist.
Wir werden erneut daran arbeiten, nachdem wir die Fehlerursache geklärt und den optimalen Instanztyp berücksichtigt haben. Wenn Sie eine Vorstellung von dem Fehler haben, kommentieren Sie bitte! Bitte.
Recommended Posts