[PYTHON] Premier apprentissage profond ~ Lutte ~

Bonjour à tous. @best_not_best. Cet article est une suite de First Deep Learning ~ Preparation ~. Si vous ne l'avez pas lu, veuillez d'abord le lire.

Mise en garde

Cet article a été créé à partir de désirs personnels et n'est pas le point de vue officiel de l'organisation à laquelle il appartient.

Entraine toi

3. Collectez des images d'apprentissage (animateurs préférés)

Je souhaitais utiliser l'API de recherche d'images Google, mais selon l'article suivant, les restrictions d'utilisation semblent être strictes. Collecte d'images avec la recherche d'images Web - Nodoame

Utilisez l'API Bing Search. Je me suis également référé à l'article ci-dessus pour le code source.

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 = 'Le nom de votre célébrité préférée'
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)

Exécutez-le avec la commande suivante.

$ python get_images.py

MS_ACCTKEY est la clé de compte principale d'Azure Market Place, QUERY est la chaîne de caractères que vous souhaitez rechercher et ʻOUTPUT_DIR_PATH` est le répertoire de stockage du fichier récupéré, alors sélectionnez-le comme il convient. Avec cela, vous pouvez obtenir environ 1000 images pour 50 x 20 pages. Tu l'as fait!

4. Découpez la partie du visage de l'image d'apprentissage

Je voulais utiliser le précédent cutout_face.py tel quel, mais comme certaines des images collectées sur le Web sont irrégulières, j'ai ajouté la gestion des exceptions lors du recadrage. Au fait, je n'ai pas aimé le fait que le nom du fichier image découpé contienne du japonais, alors j'essaie d'utiliser le numéro de série comme nom de fichier.

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

    #Lecture de fichiers
    image = cv2.imread(input_image_path)
    #Conversion de l'échelle de gris
    try:
        image_gray = cv2.cvtColor(image, cv2.cv.CV_BGR2GRAY)
    except cv2.error:
        continue

    #Acquérir la quantité de caractéristiques du classificateur en cascade
    cascade = cv2.CascadeClassifier(CASCADE_PATH)

    #Exécution de la reconnaissance d'objets (reconnaissance faciale)
    facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))

    if len(facerect) > 0:
        #Enregistrer les résultats de la reconnaissance
        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

L'utilisation est similaire à cutout_face.py.

5. Créez un discriminateur en apprenant 4. avec Python + Chainer

J'ai évoqué ce qui suit. Le NIN de Chainer vous permet d'apprendre en profondeur et de reconnaître votre propre jeu d'images --- le long journal de shi3z Les six enfants d'Osomatsu-san peuvent-ils être identifiés par apprentissage profond? ~ Mise en œuvre ~ - Journal de Bohême

Clonez la source.

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

La source ImageNet sera également clonée.

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

Téléchargez et décompressez Caltech 101

[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

Dans le répertoire 101_ObjectCategories, placez le répertoire contenant l'image découpée en 4. De plus, s'il y a de nombreux répertoires, l'apprentissage prendra du temps, donc certains répertoires ont été supprimés. La structure du répertoire 101_ObjectCategories est la suivante. Panda est mignon.

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

Créez train.txt, test.txt, label.txt.

[chainer_imagenet_tools]$ python make_train_data.py 101_ObjectCategories

Réglez la taille de l'image sur 256 x 256.

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

Générez mean.npy.

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

Commencer à apprendre!

[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

Cela ne se termine pas même après 14 heures (´; ω; `)

la prochaine fois

C'est tout pour cette fois. (J'étudierai et reviendrai.) Continuez jusqu'à l'épisode final (qui devrait être publié plus tard cette année)! !!

Postscript

résolu! → Première ~ Solution ~ de Deep Learning ~ --Qiita

Recommended Posts

Premier apprentissage profond ~ Lutte ~
Premier apprentissage profond ~ Préparation ~
Première solution d'apprentissage en profondeur ~
L'apprentissage en profondeur
Mémorandum d'apprentissage profond
Commencer l'apprentissage en profondeur
Apprentissage en profondeur Python
Apprentissage profond × Python
Python: pratique du Deep Learning
Fonctions d'apprentissage en profondeur / d'activation
Apprentissage profond à partir de zéro
Deep learning 1 Pratique du deep learning
Apprentissage profond / entropie croisée
[AI] Apprentissage métrique profond
J'ai essayé le deep learning
Python: réglage du Deep Learning
Technologie d'apprentissage en profondeur à grande échelle
Premier apprentissage profond en C # -Imitation de l'implémentation en Python-
Fonction d'apprentissage profond / softmax
Apprentissage profond à partir de zéro 1 à 3 chapitres
Essayez l'apprentissage en profondeur avec TensorFlow
Deep Learning Gaiden ~ Programmation GPU ~
<Cours> Apprentissage en profondeur: Day2 CNN
Reconnaissance d'image par apprentissage profond 1 théorie
Deep running 2 Réglage de l'apprentissage profond
Renforcer l'apprentissage 6 First Chainer RL
Apprentissage profond / code de travail LSTM
<Cours> Apprentissage en profondeur: Jour 1 NN
Apprentissage profond du noyau avec Pyro
Essayez le Deep Learning avec FPGA
Apprentissage profond pour la formation composée?
Présentation d'Udacity Deep Learning Nanodegree
Sujets> Deep Learning: Day3 RNN
Introduction au Deep Learning ~ Règles d'apprentissage ~
Renforcer l'apprentissage 4 CartPole première étape
Apprentissage par renforcement profond 1 Introduction au renforcement de l'apprentissage
Apprentissage par renforcement profond 2 Mise en œuvre de l'apprentissage par renforcement
Générez des Pokémon avec Deep Learning
Introduction au Deep Learning ~ Rétropropagation ~
Distillateur de bibliothèque d'éclaircissement de modèles d'apprentissage profond
Deep learning / Deep learning from scratch 2 Chapitre 4 Mémo
Essayez le Deep Learning avec les concombres FPGA-Select
Identification de la race de chat avec Deep Learning
Deep learning / Deep learning made from scratch Chapitre 3 Mémo
Faites de l'art ASCII avec l'apprentissage en profondeur
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 5 Mémo
Implémenter le deep learning / VAE (Variational Autoencoder)
Introduction à l'apprentissage en profondeur ~ Approximation des fonctions ~
Essayez l'apprentissage en profondeur avec TensorFlow Partie 2
Apprentissage profond à partir de zéro (calcul des coûts)
À propos de la gestion de projet de deep learning (DNN)
Apprentissage profond pour démarrer sans GPU
Introduction à l'apprentissage profond ~ Préparation au codage ~
Organisez des plateformes d'apprentissage automatique et d'apprentissage en profondeur
Apprentissage profond appris par l'implémentation 1 (édition de retour)
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 7 Mémo
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 8 Mémo
Didacticiel "CNTK" de la bibliothèque d'apprentissage en profondeur de Microsoft