Voyons la Deep Java Library (DJL), une bibliothèque capable de gérer Deep Learning en Java, publiée par AWS.

Aperçu

2019/12/03 AWS a annoncé la bibliothèque Deep Java pour le développement et le déploiement de modèles d'apprentissage automatique en Java.

DJL - Deep Java Library

C'est juste un peu, mais je l'ai touché alors je vais le présenter. En ce qui concerne les connaissances préalables, j'utilise généralement Java, mais je n'ai presque aucune connaissance de ML / DL.

Deep Java Library の発表: Java で機械学習モデルを開発およびデプロイする

ici,

Annonce de DJL, une bibliothèque open source pour le développement de modèles d'apprentissage profond en Java. DJL fournit une API conviviale pour la formation, les tests et le déploiement de modèles d'apprentissage en profondeur. Si vous êtes un utilisateur Java intéressé par le deep learning, DJL est un excellent point de départ. Pour les développeurs Java travaillant sur des modèles d'apprentissage profond, DJL facilite la formation et l'exécution des prédictions.

J'espère donc y toucher.

La page officielle est ci-dessous, mais les couleurs Amazon / AWS ne sont pas très visibles. https://djl.ai/

Try

Quoi qu'il en soit, déplaçons-le selon le tutoriel.

https://github.com/awslabs/djl.git

Il semble bon de cloner et de déplacer l'exemple et le dessous.

#Exécuter dans un dossier approprié
 git clone https://github.com/awslabs/djl/

Après le clonage, accédez au dossier d'exemple et jetez un œil à README.md.

Il existe différents types d'exemples comme ci-dessous, alors essayons d'abord le premier.

image.png

Faisons un exemple de détection d'objet en un seul coup.

Il vous sera demandé de le configurer en premier, mais comme il n'est utilisé qu'avec Java 11+, les variables d'environnement et IntelliJ en option, il semble que les personnes qui utilisent généralement Java peuvent continuer sans trop lire.

Dans cet exemple, un ZooModel pré-préparé est utilisé, et une image est frappée contre lui pour exprimer le type d'animal qui y est reflété, et une image avec la partie reconnue entourée d'un carré est également créée. Cela devient un exemple.

Du coup, vous pouvez vérifier le fonctionnement ci-dessous. (Cité de object_detection.md)

cd examples ./gradlew run -Dmain=ai.djl.examples.inference.ObjectDetection

Ce qui suit est affiché comme résultat de l'exécution. La première fois, il faut du temps pour télécharger la bibliothèque, etc., mais après la deuxième fois, cela prendra environ 10 secondes.

$ ./gradlew run -Dmain=ai.djl.examples.inference.ObjectDetection

> Task :run
Loading:     100% |████████████████████████████████████████|
[22:02:10] src/nnvm/legacy_json_util.cc:209: Loading symbol saved by previous version v1.5.0. Attempting to upgrade...
[22:02:10] src/nnvm/legacy_json_util.cc:217: Symbol successfully upgraded!
[INFO ] - Detected objects image has been saved in: build/output/detected-dog_bike_car.png
[INFO ] - [
        class: "car", probability: 0.99991, bounds: [x=0.611, y=0.137, width=0.293, height=0.160]
        class: "bicycle", probability: 0.95385, bounds: [x=0.162, y=0.207, width=0.594, height=0.588]
        class: "dog", probability: 0.93752, bounds: [x=0.168, y=0.350, width=0.274, height=0.593]
]

BUILD SUCCESSFUL in 11s
3 actionable tasks: 1 executed, 2 up-to-date

Le résultat est que la voiture, le vélo et le chien sont montrés.

Bien qu'il soit modernisé, [ai.djl.examples.inference.ObjectDetection](https://github.com/awslabs/djl/blob/master/examples/src/main/java/ai/djl/examples/inference/ ObjectDetection.java) En regardant la classe

Path imageFile = Paths.get("src/test/resources/dog_bike_car.jpg ");

Vous pouvez voir que cette image est une entrée. image.png

Après exécution, l'image de sortie est dans `` build / output / found-dog_bike_car.png ''. (Implémenté dans la même classe)

image.png

Vous pouvez le faire correctement.

En remplaçant l'image d'entrée, il semble que la détection d'objet puisse être effectuée avec une autre image.

encore ai.djl.examples.inference.ObjectDetection Si vous le regardez, vous pouvez voir que même moi, qui ne comprend que Java, fait quelque chose. Les paramètres de l'enregistreur sont familiers et vous donnent un sentiment de familiarité.

J'ai lu le flux général comme suit.

C'est comme ça. Il est nécessaire de confirmer en détail ce que signifie chaque paramètre, mais je pensais honnêtement que la détection d'objet à l'aide du modèle préparé est un faible obstacle.

Vérifier les bibliothèques dépendantes

La bibliothèque dépendante du projet qui incluait l'exemple ressemblait à ce qui suit. Il ne semble pas y avoir de duplication avec le système Spring, il semble donc qu'il puisse être utilisé ensemble sans conflits. image.png

Résumé

Pour le moment, je n'ai essayé qu'un seul exemple utilisant DJL.

J'avais l'habitude de penser à toucher Deep Learning 4J, Je trébuchais autour de la construction de l'environnement et de son étagère, mais cette fois, c'était sans heurts.

Tous les systèmes ML / DL en Java! Je ne pouvais pas en avoir l'impression, mais lorsque j'utilisais ML / DL pour une seule fonction d'un système Web général, j'ai pensé qu'il serait peut-être bon d'essayer de l'utiliser avec un petit départ. ..

Recommended Posts

Voyons la Deep Java Library (DJL), une bibliothèque capable de gérer Deep Learning en Java, publiée par AWS.
[JavaScript] Programmeurs Java! Si c'est le cas, la fermeture JavaScript est super facile à comprendre!
Ecrire une classe qui peut être ordonnée en Java Un petit mémo standard
Problèmes facilement confondus avec Java et JavaScript
Voyons la Deep Java Library (DJL), une bibliothèque capable de gérer Deep Learning en Java, publiée par AWS.
[Deep Learning from scratch] dans Java 3. Réseau neuronal
Ecrire une classe qui peut être ordonnée en Java Un petit mémo standard
Une bibliothèque qui réalise des chaînes multilignes en chaîne multiligne Java
Avec [AWS] CodeStar, vous pouvez créer un projet Spring (Java) s'exécutant sur Lambda en seulement 3 minutes! !!
Deep Learning Java from scratch 6.4 Régularisation
J'ai créé une classe qui peut utiliser JUMAN et KNP de Java
Premiers pas pour l'apprentissage profond en Java
Deep Learning Java à partir de zéro Chapitre 1 Introduction
Deep Learning Java from scratch 6.1 Mise à jour des paramètres
Deep Learning Java à partir de zéro Chapitre 2 Perceptron
Deep Learning Java from scratch 6.3 Normalisation par lots
[Java] Créons une bibliothèque d'accès à la base de données!
Créons une bibliothèque d'opérations de stockage de fichiers polyvalente (?) En faisant abstraction du stockage / acquisition de fichiers avec Java
[Deep Learning from scratch] en Java 1. Pour le moment, différenciation et différenciation partielle