Détection du sommeil des enfants basée sur YOLOv5

Remarque : Le CPU du microserveur SOPHGO SE5 étant basé sur l'architecture ARM, certaines étapes seront réalisées dans l'environnement de développement basé sur l'architecture CPU x86 : 1. Initialiser l'environnement de développement (réalisé
dans l'environnement de développement basé sur
l'architecture x86 CPU)
3. Test de déploiement du modèle YOLOv5 (réalisé sur le microserveur SOPHGO SE5 )

Le code expérimental et le modèle peuvent être téléchargés sur Connecting...

1. Initialiser l'environnement de développement (réalisé dans l'environnement de développement basé sur l'architecture CPU x86)

1.1 Initialiser l'environnement de développement

1.2 Configurer l'environnement de développement du conteneur Docker

Les étapes suivantes sont effectuées dans le conteneur Docker :
1. Installez nntc et configurez les variables d'environnement
# Basculez vers l'autorité racine
sudo -i
# Téléchargez l'image Docker
wget https://sophon-file.sophon.cn/sophon-prod-s3/drive / 22/07/19/10/x86_sophonsdk
_ubuntu18.04_py37_dev_22.06_docker.zip
# Assurez-vous que l'environnement installe unzip puis décompressez-le phonsdk3_ubuntu18.04_py37_dev_22.06_docker docker
load -i x86_sophonsdk3_ubuntu18 .04 _py37_dev_22.06.docker # Télécharger SOPHON SDK3.0.0 wget https://sophon-file.sophon.cn/sophon-prod-s3/drive/22/07/18/11/ sophonsdk_v3.0.0_20220716.zip unzip sophonsdk_v3.0.0_20220716.zip cd sophonsdk_v3.0.0 # Créer et saisir le conteneur Docker via le fichier de script









# Si vous n'avez pas effectué les opérations de configuration mentionnées ci-dessus concernant l'exécution de la commande docker sans racine, vous devez ajouter
sudo avant la commande . source envsetup_pcie.sh # Définir les variables d'environnement - [Pas de carte accélératrice PCIe ]





Les variables d'environnement exportées ne sont valides que pour le terminal actuel et doivent être exécutées à nouveau chaque fois que vous entrez dans le conteneur, ou vous pouvez écrire ces variables d'environnement dans
~/.bashrc , afin que les variables d'environnement soient automatiquement définies chaque fois connexion

2. Conversion de modèle ( réalisée dans l'environnement de développement basé sur une architecture CPU x86 )


Étant donné que BMNETP, l' outil de compilation de modèles PyTorch dans BMNNSDK , n'accepte que le modèle JIT de PyTorch ( modèle TorchScript ) , les utilisateurs doivent convertir eux-mêmes le modèle Pytorch formé . JIT ( Just-In-Time ) est un ensemble d'outils de compilation utilisés pour combler le fossé entre la recherche et la production PyTorch . Il permet la création de modèles qui peuvent s'exécuter sans s'appuyer l'interpréteur Python et peuvent être optimisés de manière plus agressive. Dans le cas d' un modèle Python PyTorch existant (la classe de base est torch.nn.Module ), le modèle JIT peut être obtenu via torch.jit.trace , tel que torch.jit.trace(python_model,torch.rand(input_shape) ) .save('jit_model') . BMNETP ne prend temporairement pas en charge les opérations avec flux de contrôle (comme si instruction ou boucle) , donc au lieu de torch.jit.script , utilisez torch.jit.trace , qui trace et enregistre uniquement les opérations sur les tenseurs, et n'enregistre aucune opération de flux de contrôle

2.1 Convertir le modèle Pytorch formé en modèle JIT
 

2.1.1 Obtenir directement le modèle JIT converti 

Modèle JIT converti dans sleep/sleep-aug-640.yolov5pytorch/yolov5s6/weights/best.trace.pt

2.1.2 Convertissez vous-même le modèle Pytorch formé en modèle JIT

Téléchargez le code source officiel YOLOv5 d'ultralytics #Dans le conteneur , prenez le docker python3.7 comme exemple cd ${YOLOv5} #Téléchargez le code source yolov5 git clone https://github.com/ultralytics/yolov5.git yolov5_github #Passez au projet yolov5 répertoire cd yolov5_github #Utiliser la balise pour créer une branche v6.1 locale à partir de la branche git distante v6.1 v6.1 git checkout -v6.1 #Importer le sommeil téléchargé dans yolov5_github









Modifiez la dernière instruction de retour de la fonction forward de la classe Detect dans models/yolo.py pour obtenir différentes sorties

#Ce modèle est une sortie unique
def forward(self, x):
    return x if self.training else (torch.cat(z, 1)) # 1 sortie

#return x if self.training else x # 3 sorties
# return x if self.training else (torch.cat(z, 1), x) # 4 sorties

Exporter le modèle JIT

cd répertoire ${yolov5}/yolov5_github

#Créer un environnement virtuel python virtualenv pip3 install virtualenv #Passer à l'environnement virtuel virtualenv -p python3 --system-site-packages env_yolov5 source env_yolov5/bin/activate # L'installation dépend de pip3 install -r requirements.txt #Ce processus rencontre un conflit de dépendance ou L' erreur est normale . _ _ _ _ _ _ _ _ Copiez le modèle best.torchscript dans ${YOLOv5}/build dossier mkdir ../build













cp best.torchscript ../build/sleep_best_1output.trace.pt
#copiez une copie dans le dossier ${YOLOv5}/data/models mkdir ../data/models cp best.torchscript ../data/models/sleep_best_1output.trace. pt

2.2 Conversion de modèle : générer le BModel FP32
 

Commande Python pour générer FP32 BModel

BMNETP est un compilateur de modèle pour pytorch , qui peut compiler directement le modèle pytorch dans les instructions d'exécution requises par BMRuntime . La génération directe du modèle FP32 BModel peut être réalisée par la commande suivante (assurez-vous que le modèle JIT généré est copié dans le chemin ${YOLOv5}/data/models ) :

cd ${YOLOv5}/data/models/
python3 -m bmnetp --mode="compile" \
--model=sleep_best_1output.trace.pt \
--outdir=sleep_best_1output \
--target="BM1684" \
--shapes= [[1,3,640,640]] \
--net_name=yolov5s_fp32_b1 \
--opt= 2 \
--dyn=Faux \
--cmp=Vrai \
--enable_profile=Vrai

Le script ci-dessus générera le fichier compilation.bmodel sous ${YOLOv5}/data/models/sleep_best_1output

Utilisez la commande suivante pour afficher les informations spécifiques au modèle :
bm_model.bin –info compilation .bmodel


bmrt_test --bmodel compilation .bmodel

3. Test de déploiement du modèle YOLOv5 (réalisé sur la plate-forme de développement cloud de l'énergie informatique)

3.1 Préparer l'exemple de programme
 

Les étapes suivantes sont réalisées dans l'environnement de développement basé sur l' architecture x86 CPU 1. Initialiser l'environnement de développement

https://cloud.sophgo.com/developer

Reportez-vous au manuel de la plateforme de développement cloud pour savoir comment l'utiliser

Le système de fichiers de l'espace cloud correspond au répertoire /tmp de la ligne de commande

2. Copiez le fichier de projet YOLOv5 traité sur la plateforme de développement cloud :

Copiez le modèle de fichier de veille sur la plate-forme de développement cloud.

3.2 Test BModel ( routine Python)

cd ${sleep}/bmodel/python
# Les noms de chemin de BModel et d'image sont pour référence seulement, modifiez selon leurs chemins respectifs

python3 yolov5_opencv.py --bmodel
../bmodels/sleep_best_1output/compilation.bmodel --input../. ./sleep-aug-640.yolov5pytorch/test/images/ _

python3 yolov5_bmcv.py --bmodel
../bmodels/sleep_best_1output/compilation.bmodel --input../../ sleep-aug-640.yolov5pytorch/test/images/

résultat de sortie

Je suppose que tu aimes

Origine blog.csdn.net/lily_19861986/article/details/130503446
conseillé
Classement