Le concepteur 10x – Smart Automation avec Kubric
La métrique la plus importante chez Kubric pour l’équipe Data Science est – « Comment réduire le temps passé par un designer à faire un travail de grognement? ». Nous voulons éliminer le travail de grognement qui va dans la micro-édition et les contrôles de qualité afin que les concepteurs puissent travailler sur ce qui compte vraiment pour eux – concevoir un bon contenu. Autour de cela, nous avons créé un ensemble de micro-outils pour aider les concepteurs à vraiment se débarrasser de ce travail de grognement, et cela permet aujourd’hui à des milliers de créatifs de parcourir différents secteurs verticaux de la nourriture à la mode et plus encore. Dans ce blog, je vais parler d’une telle fonctionnalité – Position automatique.
Décrire le problème
Chez Kubric, nous aidons les équipes de contenu à augmenter leur production. L’année dernière, lorsque nous analysions notre flux de production de contenu, nous avons constaté qu’une partie du contenu produit via Kubric était initialisée comme ceci (notez le modèle sans tête) –
L’utilisateur a dû passer un temps considérable à centrer l’alignement sur l’objet mis au point, puis à trouver la bonne échelle pour l’image. À cette époque, Twitter a présenté son Smart Cropet le problème qu’ils ont résolu était très similaire au nôtre. En nous inspirant du blog, nous avons pu rapidement mettre en œuvre une solution similaire à cela. Les images ont commencé à ressembler à ceci maintenant –
Après avoir publié une version initiale, nous avons reçu des commentaires selon lesquels, bien que cela leur ait fourni une meilleure initialisation pour la création, elle ne s’est concentrée que sur une partie très petite et la plus saillante de l’image et nous a fourni une région saillante très grossière. Ils voulaient plus de contrôle sur l’automatisation. Ils voulaient contrôler –
- la frontière,
- la capacité de contrôler sur quel objet se concentrer et non sur toute la zone saillante
- Spécifiez l’alignement de l’objet d’intérêt
Les commentaires nous ont aidés à mieux comprendre les besoins des utilisateurs et nous sommes arrivés avec une implémentation améliorée.
Détection d’objets saillants –
Pour la version initiale, nous avons utilisé le Modèle SalGAN, mais cela ne nous a fourni qu’une carte de saillance très grossière, et nous avions besoin d’une carte de saillance beaucoup plus fine. Ainsi, nous avons décidé de former notre propre modèle sur les ensembles de données de saillance open source ( msra, DUT-OMRON). Nous avons utilisé un Unet encodeur-décodeur basé mobilenetV2 structure, en utilisant l’incroyable modèle de segmentation bibliothèque. Nous avons utilisé la perte focale pour la formation car le déséquilibre de classe est pertinent dans le contexte de la prédiction de la saillance, pour laquelle la carte de la saillance de la vérité au sol se compose principalement de zéro ou proche de zéro, créant un phénomène similaire. L’approche est similaire à l’entropie croisée binaire pondérée, sauf que le poids est ajusté localement et basé sur une puissance gamma accordable de la saillance prédite. Nous avons suivi l’erreur de pixel en tant que métrique, qui est une métrique standard pour les modèles de saillance. Voilà comment les résultats diffèrent entre SalGAN et notre modèle –
Le nouveau modèle était également beaucoup plus rapide – nous avons réduit le temps de prédiction d’une moyenne de 1,5 seconde à 0,3 seconde sur une seule instance de processeur.
Pour la détection d’objets, la plupart des classes sur lesquelles nous voulions actuellement travailler étaient présentes dans ce modèle tensorflow open source. Par conséquent, nous avons décidé d’utiliser ce modèle.
Un autre problème auquel nous avons été confrontés était d’avoir plusieurs zones / objets saillants dans l’image, et nous devions prendre une décision quant à la combinaison, au rejet des boîtes multiples. Pour cela, nous avons implémenté l’algorithme suivant –
- Voyez la taille de la boîte par rapport à l’image. S’il est inférieur à un seuil, rejetez la case.
- Prenez la plus grande boîte et créez une matrice de distance entre cette boîte et les autres boîtes.
- rejeter les cases qui sont plus loin qu’un seuil et combiner les autres.
C’est ainsi que les résultats ont été obtenus après cela –
Calcul de l’échelle et de la position –
Après avoir obtenu les coordonnées de la plus grande boîte englobante, les valeurs de la demande de suggestion automatique sont utilisées pour –
- Redimensionner l’image en conservant le rapport hauteur / largeur
- Seuilez la carte de saillance et obtenez les coordonnées pour la boîte englobante
- Calculez l’échelle puisque nous connaissons les limites où doit se trouver l’objet ainsi que les coordonnées de la boîte englobante.
- Calculez le décalage requis pour déplacer le cadre de délimitation actuel de l’objet vers le centre de l’image. Après le calcul, la différence doit être mise à l’échelle.
Déploiement
Le sujet des déploiements ML aura son propre blog (abonnez-vous à notre blog pour être averti quand il sera sorti!) Mais pour des raisons d’exhaustivité, nous expliquerons brièvement comment cela fonctionne ici.
Nos modèles ML sont déployés en tant que microservices indépendants. Les modèles sont enveloppés dans une API Flask avec gunicorn fonctionnant comme exécuteur pré-fork. Nous prenons en charge à la fois la synchronisation (l’appelant attend l’inférence de manière synchrone et garde la connexion HTTP ouverte) et les déploiements asynchrones (l’appelant envoie un message demandant l’inférence et l’API du modèle déclenche un événement notifiant l’appelant une fois l’inférence effectuée). Les API synchrones / bloquantes sont essentielles pour les parties utilisateur de l’application telles que la fonction de positionnement automatique dont nous parlons ici. D’un autre côté, pour des choses comme l’enrichissement des actifs, un type de déploiement asynchrone dans un pub est beaucoup plus logique.
Nous dockerons cette API et l’image docker est déployée via notre système CI en tant que microservice à notre cluster Kubernetes. Ce cluster Kubernetes nous offre gratuitement un tas de choses telles que la mise à l’échelle automatique basée sur l’utilisation du processeur, les déploiements continus, les déploiements A / B, etc. À notre avis, un outil d’orchestration de conteneurs tel que Kubernetes est un très partie essentielle de toute charge de travail d’apprentissage machine de production. Bien sûr, cela nécessite que vous disposiez d’une équipe DevOps qui gère votre infrastructure.
Position automatique en action
La demande d’activation de cette fonctionnalité pour un storyboard est assez simple et est directement intégrée à notre éditeur.
Voici à quoi ressemble une demande –
Où –
Toile – Coordonnées de la zone dans laquelle se trouve le héros-img contenue en prise de vue en utilisant contenir: Vrai paramètre. X, Y sont les coordonnées du point en haut à gauche de la boîte et w est la largeur de la boîte et h étant la hauteur.
Limites – Coordonnées de la zone dans laquelle vous souhaitez que l’objet principal se trouve: X, Y sont les coordonnées du point supérieur gauche de la boîte et w est la largeur de la boîte et h étant la hauteur.
Pour vous concentrer sur un objet spécifique, il vous suffit d’ajouter le paramètre classes à la demande ci-dessus. Vous pouvez ajouter plusieurs classes sur lesquelles vous concentrer!
Vous pouvez tester le comportement de l’auto-positionnement lors de la création du storyboard –
Résultat –
Voici une vidéo de ce que l’auto-positionnement peut faire –
Bien que le positionnement automatique en soit encore à ses balbutiements, nous sommes enthousiasmés par les possibilités et la façon dont il peut économiser des heures de rédacteurs en chef. 😁
Rendez-vous sur notre docs pour en savoir plus sur ces fonctionnalités.
Pour plus de nos blogs intéressants, rendez-vous sur Synapse.
Nous recrutons! Ecrivez à careers@kubric.io si vous voulez créer la prochaine génération de technologies créatives.