[PYTHON] Führen Sie YOLO v3 unter AWS aus

Zweck

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. ** ** **

Was wurde verwendet

[YOLO] https://github.com/ptxyasu/keras-yolo3 [AWS] EC2 https://aws.amazon.com/jp/ec2/

fließen

  1. Erstellen Sie eine Umgebung auf AWS
  2. Für AWS erforderliche Dateninstallation
  3. Führen Sie yolo aus

Informationen zu AWS 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.

Problem 1 Volumenmangel

Wenn ich die Umgebung erstelle und versuche, keras-yolo3 zu klonen, tritt ein Fehler auf, dass kein Volume vorhanden ist.

Lösung 1 Ändern Sie das Volumen von EBS

Ä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.

Problem 2 Unzureichender Speicher (wahrscheinlich)

Selbst wenn ich die Fehleranweisung überprüfe, erhalte ich nicht viele Informationen.

Lösung 2 Ändern Sie den Instanztyp

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! ** ** **

Problem 3 Fehler bei der Ausführung von yolo

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'))

Lösung 3 Programmänderungen

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()

Problem 4 Objekt nicht erkannt

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 ...

Lösung 4

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)

Ergebnis

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

Führen Sie YOLO v3 unter AWS v2 aus
Führen Sie YOLO v3 unter AWS aus
Führen Sie Python planmäßig auf AWS Lambda aus
Führen Sie TensorFlow auf einer GPU-Instanz in AWS aus
Jupyter auf AWS
[Python] Führen Sie Headless Chrome unter AWS Lambda aus
YOLO mit Chainer
Führen Sie regelmäßig Python-Programme auf AWS Lambda aus
Ich habe versucht, YOLO v3 mit Google Colab auszuführen
Führen Sie Django auf PythonAnywhere aus
Führen Sie mysqlclient auf Lambda aus
YOLO v4 Umgebungskonstruktion ①
Führen Sie OpenMVG auf einem Mac aus
Führen Sie den Tensorflow der GPU-Version vor Ort in AWS EC2 aus
Führen Sie Jupyter unter Ubuntu unter Windows aus
Führen Sie Openpose unter Python (Windows) aus.
Führen Sie das AWS IoT Device SDK für Python auf Raspberry Pi aus
Führen Sie Tensorflow 2.x unter Python 3.7 aus
Führen Sie Pythons CGI auf CORESERVER aus
Führen Sie den Unix-Befehl auf Python aus
Führen Sie IPython Notebook auf Docker aus
Führen Sie Circuit Python auf Seeeduino XIAO aus
Führen Sie Jupyter Notebook unter Windows aus
Führen Sie OpenVino unter macOS Catalina aus
Führen Sie eine Java-App aus, die sich in AWS EC2 als Daemon befindet
Erstellen einer Umgebung zum Ausführen von ChainerMN auf einer AWS-GPU-Instanz
Führen Sie MuJoCo auf WSL (2) aus (auch GUI)
Installieren Sie Dropbox und führen Sie es unter Ubuntu 20.04 aus
Vorbereiten des Betriebs von Flask auf EC2
Führen Sie Tensorflow mit nativer Unterstützung für Windows aus
Führen Sie das Docker-Image von TensorFlow unter Python3 aus
Wie man Matplotlib auf Heroku ausführt
Führen Sie SwitchBot mit Bleak unter Windows 10 aus
Führen Sie Matplotlib auf einem Docker-Container aus
Führen Sie Headless-Chrome auf einem Debian-basierten Image aus
Führen Sie AWS Kinesis Firehose aus
Führen Sie XGBoost unter Bash unter Ubuntu unter Windows aus
Führen Sie TensorFlow2 auf dem VPS-Server aus
[Hinweis] Führen Sie Django unter Amazon Linux 2 aus
Führen Sie Yocto unter Ubuntu mit QEMU aus.
Führen Sie Sesame auf Sonys PaSoRi (RCS370) aus.
Führen Sie Python regelmäßig auf Heroku Scheduler aus
Führen Sie cron unter Amazon Linux aus (unter Linux eingestellt).
Ich habe versucht, Objekte mit YOLO v3 (TensorFlow 2.0) auf einer Windows-CPU zu erkennen!
Das Modul kann nicht in Python auf EC2 importiert werden, das von AWS Lambda ausgeführt wird