Maison >développement back-end >Tutoriel Python >Exemple de détection d'objets en Python
Python est un langage de programmation de haut niveau largement utilisé dans les domaines de la vision par ordinateur et de l'apprentissage automatique. Parmi eux, la détection de cibles est un scénario d’application important en vision par ordinateur, utilisé pour détecter et identifier des objets cibles dans des images ou des vidéos. En Python, il existe de nombreuses boîtes à outils et bibliothèques puissantes pour la détection d'objets. Dans cet article, nous présenterons la technologie de détection d'objets en Python à travers un exemple.
Dans cet exemple, nous utiliserons l'algorithme Faster R-CNN (Faster Region-based Convolutional Neural Network), qui est un algorithme de détection de cible basé sur l'apprentissage profond. Il peut détecter avec précision les objets dans les images et marquer leurs emplacements et leurs cadres de délimitation. L'algorithme Faster R-CNN présente les avantages d'une grande précision, d'une grande fiabilité et d'une grande efficacité, il a donc été largement utilisé dans des applications pratiques.
Tout d’abord, nous devons préparer certains outils et ensembles de données nécessaires. Nous utiliserons les bibliothèques TensorFlow et Keras en Python, ainsi que l'ensemble de données COCO (Common Objects in Context), qui est un ensemble de données de détection d'objets largement utilisé. Nous pouvons utiliser la commande suivante pour installer ces outils nécessaires :
pip install tensorflow keras pip install pycocotools
Après avoir installé ces outils, nous pouvons commencer à écrire du code Python. Tout d’abord, nous devons définir certaines variables et paramètres nécessaires. Ces variables et paramètres seront utilisés dans le code ultérieur.
import tensorflow as tf # 定义图像的宽和高 img_height = 800 img_width = 800 # 定义学习率和训练轮数 learning_rate = 0.001 num_epochs = 100 # 加载COCO数据集 train_data = tf.data.TFRecordDataset('coco_train.tfrecord') val_data = tf.data.TFRecordDataset('coco_val.tfrecord') # 定义类别数目和类别标签 num_classes = 80 class_labels = ['airplane', 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'dining', 'dog', 'horse', 'motorcycle', 'person', 'potted', 'sheep', 'sofa', 'train', 'tv']
Ensuite, nous devons définir un modèle. Dans cet exemple, nous utiliserons la bibliothèque Keras dans TensorFlow pour définir un modèle Faster R-CNN.
from tensorflow.keras.applications import ResNet50V2 from tensorflow.keras.layers import Input, Conv2D, Dense, MaxPooling2D, Flatten, Reshape from tensorflow.keras.models import Model # 定义输入层 input_layer = Input(shape=(img_height, img_width, 3)) # 定义ResNet50V2预训练模型 resnet = ResNet50V2(include_top=False, weights='imagenet', input_tensor=input_layer) # 定义RPN网络 rpn_conv = Conv2D(512, (3,3), padding='same', activation='relu', name='rpn_conv')(resnet.output) rpn_cls = Conv2D(num_anchors*num_classes, (1,1), activation='sigmoid', name='rpn_cls')(rpn_conv) rpn_reg = Conv2D(num_anchors*4, (1,1), activation='linear', name='rpn_reg')(rpn_conv) # 定义RoI Pooling层 roi_input = Input(shape=(None, 4)) roi_pool = RoIPooling((7, 7), 1.0/16)([resnet.output, roi_input]) # 定义全连接层 flatten = Flatten()(roi_pool) fc1 = Dense(1024, activation='relu', name='fc1')(flatten) fc2 = Dense(1024, activation='relu', name='fc2')(fc1) output_cls = Dense(num_classes, activation='softmax', name='output_cls')(fc2) output_reg = Dense(num_classes*4, activation='linear', name='output_reg')(fc2) # 组装模型 model = Model(inputs=[input_layer, roi_input], outputs=[rpn_cls, rpn_reg, output_cls, output_reg])
Après avoir défini le modèle, nous pouvons commencer l'entraînement. Voici le code du processus de formation :
from tensorflow.keras.optimizers import Adam from tensorflow.keras.losses import binary_crossentropy, mean_squared_error # 定义优化器和损失函数 optimizer = Adam(lr=learning_rate) loss_rpn_cls = binary_crossentropy loss_rpn_reg = mean_squared_error loss_cls = categorical_crossentropy loss_reg = mean_squared_error # 编译模型 model.compile(optimizer=optimizer, loss=[loss_rpn_cls, loss_rpn_reg, loss_cls, loss_reg], metrics=['accuracy']) # 训练模型 history = model.fit(train_data, epochs=num_epochs, validation_data=val_data)
Une fois la formation terminée, nous pouvons utiliser le modèle pour la détection de cibles. Voici le code de détection de cible :
# 加载测试数据集 test_data = tf.data.TFRecordDataset('coco_test.tfrecord') # 定义预测函数 def predict(image): # 对输入图像进行预处理 image = tf.image.resize(image, (img_height, img_width)) image = tf.expand_dims(image, axis=0) # 对图像进行目标检测 rpn_cls, rpn_reg, output_cls, output_reg = model.predict([image, roi_input]) # 对检测结果进行后处理 detections = post_process(rpn_cls, rpn_reg, output_cls, output_reg) return detections # 对测试数据集中的图像进行目标检测 for image, label in test_data: detections = predict(image) visualize(image, detections)
Une fois la détection de cible terminée, nous pouvons visualiser les résultats de la détection. Voici le code visualisé :
import matplotlib.pyplot as plt def visualize(image, detections): # 在图像上绘制检测结果 for detection in detections: bbox = detection['bbox'] label = detection['label'] plt.imshow(image) plt.gca().add_patch(plt.Rectangle((bbox[0], bbox[1]), bbox[2]-bbox[0], bbox[3]-bbox[1], fill=False, edgecolor='r')) plt.text(bbox[0], bbox[1], class_labels[label], color='r', fontsize=12) plt.show()
Grâce au code ci-dessus, nous pouvons complètement implémenter un exemple de détection de cible Faster R-CNN basé sur Python. Dans des applications pratiques, nous pouvons l'appliquer à de nombreux scénarios, tels que la surveillance de la sécurité, la surveillance du trafic, la conduite sans conducteur, etc. Les fonctions puissantes de Python et ses nombreuses excellentes bibliothèques d'outils nous offrent une multitude d'outils et de technologies pour nous aider à mieux faire face aux scénarios d'application pratiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!