[PYTHON] Erstes tiefes Lernen ~ Kampf ~

Hallo zusammen. @best_not_best. Dieser Artikel ist eine Fortsetzung von First Deep Learning ~ Preparation ~. Wenn Sie es nicht gelesen haben, lesen Sie es bitte zuerst.

Hinweis

Dieser Artikel wurde aus persönlichen Wünschen erstellt und ist nicht die offizielle Ansicht der Organisation, zu der er gehört.

Trainieren

3. Sammeln Sie Lernbilder (Lieblingsunterhalter)

Ich wollte die Google Bildsuch-API verwenden, aber gemäß dem folgenden Artikel scheinen die Nutzungsbeschränkungen streng zu sein. Sammeln von Bildern mit Web Image Search-Nodoame

Verwenden Sie die Bing Search API. Ich habe auch auf den obigen Artikel für den Quellcode verwiesen.

get_images.py


#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import sys
import os
import requests
import urllib
import urllib2
import json

BING_URL = 'https://api.datamarket.azure.com/Bing/Search/Image?'
MS_ACCTKEY = 'hogehoge'
QUERY = 'Der Name Ihres Lieblingsstars'
OUTPUT_DIR_PATH = './talent/'

opener = urllib2.build_opener()
urllib2.install_opener(opener)

def download_urllist(urllist):
    for url in urllist:
        try:
            print 'url: ' + url
            with open(OUTPUT_DIR_PATH + '/' + os.path.basename(url), 'wb') as f:
                img = urllib2.urlopen(url, timeout = 5).read()
                f.write(img)
        except urllib2.URLError:
            print('URLError')
        except IOError:
            print('IOError')
        except UnicodeEncodeError:
            print('EncodeError')
        except OSError:
            print('OSError')

if __name__ == "__main__":
    query = urllib2.quote(QUERY)
    step = 20
    num = 50

    url_param_dict = {
        'Query': "'"+QUERY+"'",
        'Market': "'ja-JP'",
    }
    url_param_base = urllib.urlencode(url_param_dict)
    url_param_base = url_param_base + "&$format=json&$top=%d&$skip="%(num)

    for skip in range(0, num*step, num):
        url_param = url_param_base + str(skip)
        url = BING_URL + url_param
        print url

        response = requests.get(url,
                                auth = (MS_ACCTKEY, MS_ACCTKEY),
                                headers = {'User-Agent': 'My API Robot'})
        response = response.json()

        urllist = [item['MediaUrl'] for item in response['d']['results']]
        download_urllist(urllist)

Führen Sie es mit dem folgenden Befehl aus.

$ python get_images.py

"MS_ACCTKEY" ist der primäre Kontoschlüssel von Azure Market Place, "QUERY" ist die Zeichenfolge, nach der Sie suchen möchten, und "OUTPUT_DIR_PATH" ist das Speicherverzeichnis der abgerufenen Datei. Wählen Sie sie daher entsprechend aus. Auf diese Weise erhalten Sie ungefähr 1.000 Bilder für 50 x 20 Seiten. Du hast es geschafft!

4. Schneiden Sie den Gesichtsteil des Lernbildes aus

Ich wollte die vorherige cutout_face.py so wie sie ist verwenden, aber da einige der im Web gesammelten Bilder unregelmäßig sind, habe ich beim Zuschneiden die Ausnahmebehandlung hinzugefügt. Übrigens hat mir die Tatsache nicht gefallen, dass der Name der ausgeschnittenen Bilddatei Japanisch enthielt, deshalb versuche ich, die Seriennummer als Dateinamen zu verwenden.

cutout_talent_face.py


#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import numpy
import os
import cv2

CASCADE_PATH = '/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml'
INPUT_DIR_PATH = './talent/'
OUTPUT_DIR_PATH = './talent_cutout/'
OUTPUT_FILE_FMT = '%s%d_%d%s'

count = 1
files = os.listdir(INPUT_DIR_PATH)
for file in files:
    input_image_path = INPUT_DIR_PATH + file

    #Datei lesen
    image = cv2.imread(input_image_path)
    #Graustufenumwandlung
    try:
        image_gray = cv2.cvtColor(image, cv2.cv.CV_BGR2GRAY)
    except cv2.error:
        continue

    #Ermitteln Sie die Merkmalsmenge des Kaskadenklassifikators
    cascade = cv2.CascadeClassifier(CASCADE_PATH)

    #Ausführung der Objekterkennung (Gesichtserkennung)
    facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))

    if len(facerect) > 0:
        #Erkennungsergebnisse speichern
        i = 1
        for rect in facerect:
            print rect
            x = rect[0]
            y = rect[1]
            w = rect[2]
            h = rect[3]

            path, ext = os.path.splitext(os.path.basename(file))
            output_image_path = OUTPUT_FILE_FMT % (OUTPUT_DIR_PATH, count, i, ext)
            i += 1
            try:
                cv2.imwrite(output_image_path, image[y:y+h, x:x+w])
            except cv2.error:
                print file
                continue

    count += 1

Die Verwendung ähnelt "cutout_face.py".

5. Erstellen Sie einen Diskriminator, indem Sie 4. mit Python + Chainer lernen

Ich bezog mich auf Folgendes. Mit der NIN von Chainer können Sie Ihren eigenen Bildsatz gründlich lernen und erkennen - Shi3z 'langes Tagebuch Können die sechs Kinder von Osomatsu-san durch tiefes Lernen identifiziert werden? ~ Implementierung ~ - Bohemia-Tagebuch

Klonen Sie die Quelle.

[work_dir]$ git clone https://github.com/shi3z/chainer_imagenet_tools.git

Die ImageNet-Quelle wird ebenfalls geklont.

[work_dir]$ git clone https://github.com/pfnet/chainer.git
[work_dir]$ cd chainer
[chainer]$ git checkout -b 1.4.1 refs/tags/v1.4.1
[chainer]$ cd ..

Laden Sie Caltech 101 herunter und entpacken Sie es

[work_dir]$ cd chainer_imagenet_tools
[chainer_imagenet_tools]$ wget http://www.vision.caltech.edu/Image_Datasets/Caltech101/101_ObjectCategories.tar.gz
[chainer_imagenet_tools]$ tar xzvf 101_ObjectCategories.tar.gz

Fügen Sie im Verzeichnis 101_ObjectCategories das Verzeichnis mit dem in 4 ausgeschnittenen Bild ein. Wenn es viele Verzeichnisse gibt, dauert das Lernen einige Zeit, sodass einige Verzeichnisse gelöscht wurden. Die Struktur des Verzeichnisses 101_ObjectCategories ist wie folgt. Panda ist süß.

drwxr-xr-x  472 talent_cutout
drwxr-xr-x  438 Faces_easy
drwxr-xr-x  438 Faces
drwxr-xr-x   41 panda

Erstellen Sie train.txt, test.txt, label.txt.

[chainer_imagenet_tools]$ python make_train_data.py 101_ObjectCategories

Stellen Sie die Bildgröße auf 256 x 256 ein.

[chainer_imagenet_tools]$ python crop.py images/ images/

Generiere mean.npy.

[chainer_imagenet_tools]$ python ../chainer/examples/imagenet/compute_mean.py train.txt

Fang an zu lernen!

[chainer_imagenet_tools]$ python ../chainer/examples/imagenet/train_imagenet.py -g -1 -E 20000 train.txt test.txt 2>&1 | tee log

...

train 3315 updates (106080 samples) time: 14:22:12.501801 (2.05054842326 images/sec)epoch 110

Es endet auch nach 14 Stunden nicht (´; ω; `)

nächstes Mal

Das ist alles für diese Zeit. (Ich werde lernen und wieder kommen.) Fahren Sie mit der letzten Folge fort (die später in diesem Jahr veröffentlicht werden soll)! !!

Nachtrag

gelöst! → First Deep Learning ~ Lösung ~ --Qiita

Recommended Posts

Erstes tiefes Lernen ~ Kampf ~
Erstes tiefes Lernen ~ Vorbereitung ~
Erstes tiefes Lernen ~ Lösung ~
Tiefes Lernen
Deep Learning Memorandum
Starten Sie Deep Learning
Python Deep Learning
Deep Learning × Python
Python: Deep Learning-Praxis
Deep Learning / Aktivierungsfunktionen
Deep Learning von Grund auf neu
Deep Learning 1 Übung des Deep Learning
Deep Learning / Cross Entropy
[AI] Deep Metric Learning
Ich habe versucht, tief zu lernen
Python: Deep Learning Tuning
Deep Learning Großtechnologie
Erstes tiefes Lernen in C # - Einführung in Python implementieren-
Deep Learning / Softmax-Funktion
Deep Learning von Grund auf 1-3 Kapitel
Versuchen Sie es mit TensorFlow
Deep Learning Gaiden ~ GPU-Programmierung ~
<Kurs> Tiefes Lernen: Day2 CNN
Deep Learning Bilderkennung 1 Theorie
Deep Running 2 Tuning von Deep Learning
Stärkung des Lernens 6 First Chainer RL
Deep Learning / LSTM Scratch Code
<Kurs> Tiefes Lernen: Tag 1 NN
Deep Kernel Learning mit Pyro
Versuchen Sie Deep Learning mit FPGA
Deep Learning für die Bildung von Verbindungen?
Einführung in Udacity Deep Learning Nanodegree
Themen> Deep Learning: Tag 3 RNN
Einführung in Deep Learning ~ Lernregeln ~
Stärkung des Lernens 4 CartPole erster Schritt
Tiefe Stärkung des Lernens 1 Einführung in die Stärkung des Lernens
Tiefes Lernen der Verstärkung 2 Implementierung des Lernens der Verstärkung
Generiere Pokemon mit Deep Learning
Einführung in Deep Learning ~ Backpropagation ~
Deep Learning Model Lightening Library Distiller
Deep Learning / Deep Learning von Grund auf neu 2 Kapitel 4 Memo
Probieren Sie Deep Learning mit FPGA-Select-Gurken aus
Identifikation der Katzenrasse mit Deep Learning
Deep Learning / Deep Learning von Grund auf neu Kapitel 3 Memo
Machen Sie ASCII-Kunst mit tiefem Lernen
Deep Learning / Deep Learning von Null 2 Kapitel 5 Memo
Implementieren Sie Deep Learning / VAE (Variational Autoencoder)
Einführung in das tiefe Lernen ~ Funktionsnäherung ~
Versuchen Sie es mit TensorFlow Part 2
Tiefes Lernen von Grund auf neu (Kostenberechnung)
Über das Projektmanagement von Deep Learning (DNN)
Tiefes Lernen, um ohne GPU zu beginnen
Einführung in Deep Learning ~ Codierungsvorbereitung ~
Organisation von Plattformen für maschinelles Lernen und tiefes Lernen
Deep Learning durch Implementierung 1 gelernt (Return Edition)
Deep Learning / Deep Learning von Null 2 Kapitel 7 Memo
Deep Learning / Deep Learning von Null 2 Kapitel 8 Memo
Microsoft Deep Learning Library "CNTK" Tutorial