Icon

Partager Envoyer

(Document) machine learning

Apprentissage profond avec DeepDetect (DD) et ElasticSearch (ES) pour la catégorisation automatique d'images

Installer DeepDetect (cpu version), par exemple sur une machine virtuelle avec Docker (l'OS qui sert de référence ici est Ubuntu Server 16.04LTS) :

apt-get install ssh docker docker.io
docker
pull beniz/deepdetect_cpu

docker run -d -h 10.1.1.230 -p 8080:8080 beniz/deepdetect_cpu

Remplacer 10.1.1.230 par l'adresse à laquelle on veut rendre disponible le service DeepDetect sur le réseau.

Note : les images sont disponibles sur https://hub.docker.com/r/beniz/deepdetect_cpu/

Vérifier que le serveur dede fonctionne correctement :

curl http://10.1.1.230:8080/info

Si nécessaire, installer Elasticsearch sur la même machine :

docker pull docker.elastic.co/elasticsearch/elasticsearch:6.6.1 
docker run -h 10.1.1.230 -p 9200:9200 -p 9300:9300 
-e "discovery.type=single-node" 
docker.elastic.co/elasticsearch/elasticsearch:6.6.1

Une fois les services elasticsearch et dede lancés,

—créer le service de classification d'images et de prédiction avec :

curl -X PUT "http://10.1.1.230:8080/services/imageserv" -d "{"mllib":"caffe","description":"image classification service","type":"supervised","parameters":{"input":{"connector":"image"},"mllib":{"nclasses":1000}},
"model":{"repository":"/opt/models/ggnet/"}}"

Attention ! Le JSON doit être correctement échappé (ajouter un antislash devant tous les guillemets de l'exemple founi sauf les trois premiers et le dernier)

Tester le service avec :

curl -X POST "http://localhost:8080/predict" -d "{"service":"imageserv","parameters":{"input":{"width":224,"height":224},"output":{"best":3},"mllib":{"gpu":false}},"data":["http://i.ytimg.com/vi/0vxOhd4qlnA/maxresdefault.jpg"]}"

Attention ! Le JSON doit être correctement échappé (ajouter un antislash devant tous les guillemets de l'exemple founi sauf les trois premiers et le dernier)

La réponse doit être similaire à :

{"status":{"code":200,"msg":"OK"},"head":{"method":"/predict","time":852.0,"service":"imageserv"},"body":{"predictions":{"uri":"http://i.ytimg.com/vi/0vxOhd4qlnA/maxresdefault.jpg","classes":[{"prob":0.2255125343799591,
"cat":"n03868863 oxygen mask"},{"prob":0.20917612314224244,"cat":"n03127747 crash helmet"},
{"last":true,"prob":0.07399296760559082,"cat":"n03379051 football helmet"}]}}}

Ici, on constate que l'image fournie (un astronaute) a été reconnue avec une probabilité de 0,225... comme montrant  un masque à oxygène.

Pour classer et indexer on utilisera :

curl -XPOST "http://10.1.1.230:8080/predict" -d '{"service":"imageserv","parameters":{"mllib":{"gpu":true},
"input":{"width":224,"height":224}, "output":{"best":3,"template":"{ {{#body}}{{#predictions}} "uri":"{{uri}}",
"categories": [ {{#classes}} { "category":"{{cat}}","score":{{prob}} } {{^last}},{{/last}}{{/classes}} ] {{/predictions}}
{{/body}} }","network":{"url":"http://localhost:9200/images/img","http_method":"POST
"}}},"data":["http://i.ytimg.com
/vi/0vxOhd4qlnA/maxresdefault.jpg"]}'

Attention ! Le JSON doit être correctement échappé (ajouter un antislash devant tous les guillemets de l'exemple founi sauf les trois premiers et le dernier)

Dans tous ces exemples :

http://i.ytimg.com/vi/0vxOhd4qlnA/maxresdefault.jpg : URL de l'image à catégoriser

http://10.1.1.230:9200/images/img : adresse de l'index Elasticsearch à mettre à jour.

Accès aux journaux d'ES et DD

root@leng:~# docker ps
CONTAINER ID        IMAGE                                                 COMMAND                  CREATED
       STATUS              PORTS                                            NAMES
d3a5a474fefa        docker.elastic.co/elasticsearch/elasticsearch:6.6.1   "/usr/local/bin/dock…"   4 minutes ago
       Up 4 minutes        0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp   hopeful_mcclintock
32b89a19dd6c        beniz/deepdetect_cpu                                  "/bin/sh -c './dede …"   39 minutes ago      Up 39 minutes       0.0.0.0:8080->8080/tcp                           elastic_tereshkova

Puis :

root@leng:~# docker logs 32b89a19dd6c
DeepDetect [ commit b2dc3f963fbeadff19949c3d2cd974d0a2ad3587 ]
[2019-02-21 14:00:01.561] [api] [info] Running DeepDetect HTTP server on 0.0.0.0:8080
[2019-02-21 14:00:57.699] [api] [info] 10.1.1.230 "GET /info" 200 0
[2019-02-21 14:35:28.923] [api] [info] 10.1.1.230 "GET /info" 200 0

Article de référence : https://www.elastic.co/blog/categorizing-images-with-deep-learning-into-elasticsearch

 


Ce document a été publié le 2019-02-21 14:52:22. (Dernière mise à jour : 2020-07-26 06:46:16.)

À lire ensuite 1




This website uses 'cookies' to enhance user experience and provide authentification. You may change which cookies are set at any time by clicking on more info. Accept
x