Python dlib learning (6): modelo de entrenamiento

En el prólogo,
todos los blogs anteriores usan el modelo entrenado proporcionado por el dlib oficial para el reconocimiento de objetivos.
-python dlib learning (1): detección de rostros
-python dlib learning (2): calibración de puntos de características faciales
-python dlib learning (3): llamada cnn detección de rostros
-python dlib learning (4): seguimiento de un solo objetivo
-python dlib learning (5): compara la cara
directamente con el sujeto, esta vez tenemos que entrenar un modelo nosotros mismos. Use dlib para entrenar un reconocedor de objetos basado en HOG.

Lo
primero que debe prepararse para un conjunto de datos es el conjunto de datos, aquí hay una herramienta muy práctica imglab.
Esta herramienta se proporciona en el código fuente oficial de dlib, y puede descargarla si lo desea.
1. En el código fuente descargado de github, la ruta del archivo es: dlib / tools / imglab.
2. Aquí proporciono otro enlace de descarga para extraer este kit de herramientas para descargar. http://download.csdn.net/download/hongbin_xu/10103900
(recomendado para descargar desde el sitio web oficial)
Este archivo se ha descargado de forma predeterminada.
Ingrese el directorio e ingrese el siguiente comando:

mkdir build
cd build
cmake ..
cmake --build. --config Release
1
2
3
4

Compílalo de nuevo:

sudo make install
1 Una vez
completada la instalación, puede usar el comando imglab directamente en la consola.

Luego, use imglab para etiquetar el conjunto de datos.
Recolecté algunas fotos de gatos en línea para entrenar. La etiqueta está en la cara del gato, por lo que es equivalente a identificar la cara del gato (risas). El conjunto de datos debe recopilarse con anticipación. El conjunto de datos que uso aquí se adjuntará al final del artículo. Descárguelo si lo necesita.

Use imglab para crear primero el archivo xml que queremos usar para grabar etiquetas.
Ingrese el directorio actual:

imglab -c mydata.xml ./
1
mydata.xml: Este es el nombre del archivo xml, solo elija uno.
/: Este es el directorio de su conjunto de datos, lo creé directamente en la carpeta del conjunto de datos, así que Especifique directamente la carpeta actual

Se generarán dos archivos en la carpeta: un archivo xml y un archivo xsl. Como se muestra a continuación:

A continuación, abra este archivo xml:

imglab mydata.xml
1

El software de la herramienta se iniciará.

Etiquetemos cada imagen una por una.
La operación es muy simple: después de presionar la tecla Mayús, el botón izquierdo del mouse se arrastrará para dibujar un cuadro; primero suelte el botón izquierdo, se grabará el cuadro, si la tecla Mayús se suelta primero, la operación no se grabará.

Finalmente, abra su archivo xml, que ha sido marcado con información de etiqueta:


Programa y resultados
modelo de capacitación
# - * - codificación: utf-8 - * -
import os
import sys
import glob
import dlib
import cv2

# options se usa para establecer parámetros y modos de entrenamiento
options = dlib.simple_object_detector_training_options ()
# Dado que las caras son simétricas izquierda / derecha, podemos decirle al entrenador que entrene un
detector simétrico #. Esto lo ayuda a obtener el mayor valor de los
datos # de entrenamiento .
options.add_left_right_image_flips = Verdadero
# Admite parámetros de la máquina de vectores C, por lo general, el valor predeterminado es 5. Cambie los parámetros usted mismo para lograr las mejores opciones de efecto. C
= 5
# Número de hilos, si su computadora tiene 4 núcleos, complete 4
opciones. num_threads = 4
opciones.be_verbose = True

# 获取 路径
current_path = os.getcwd ()
train_folder = current_path + '/ cats_train /'
test_folder = current_path + '/ cats_test /'
train_xml_path = train_folder + 'cat.xml'
test_xml_path = test_folder + 'cats.xml'

print ("ruta del archivo de entrenamiento:" + train_xml_path)
# print (train_xml_path)
print ("ruta del archivo de prueba:" + test_xml_path)
# print (test_xml_path)

# 开始 训练
print ("inicio de entrenamiento:")
dlib.train_simple_object_detector (train_xml_path, 'detector.svm', opciones)

print ("") # Imprime una línea en blanco para crear un espacio desde la
impresión de salida anterior ("Precisión de entrenamiento: {}". format (
dlib.test_simple_object_detector (train_xml_path, "detector.svm")))

print ("Precisión de prueba: {}". formato (
dlib.test_simple_object_detector (test_xml_path, "detector.svm")))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Ejecute el programa:
comience a entrenar

Luego, espere un poco, el conjunto de datos que utilicé no es grande, solo se ejecuta en mi computadora portátil poco después.

Se puede ver que la tasa de precisión es casi del 70%. El modelo se guarda en detector.svm.

Modelo de prueba
# - * - codificación: utf-8 - * -

import os
import sys
import dlib
import cv2
import glob

detector = dlib.simple_object_detector ("detector.svm")

current_path = os.getcwd ()
test_folder = current_path + '/ cats_test /'

para f en glob.glob (carpeta_test + '*. jpg'):
print ("Archivo de procesamiento: {}". formato (f))
img = cv2.imread (f, cv2.IMREAD_COLOR)
b, g, r = cv2. split (img)
img2 = cv2.merge ([r, g, b])
dets = detector (img2)
print ("Número de caras detectadas: {}". formato (len (dets)))
para índice, cara en enumerar (dets):
print ('face {}; left {}; top {}; right {}; bottom {}'. format (index, face.left (), face.top (), face.right (), face.bottom ()))

left = face.left ()
top = face.top ()
right = face.right ()
bottom = face.bottom ()
cv2.rectangle (img, (left, top), (right, bottom), (0, 255 , 0), 3)
cv2.namedWindow (f, cv2.WINDOW_AUTOSIZE)
cv2.imshow (f, img)

k = cv2.waitKey (0)
cv2.destroyAllWindows ()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 El
código es muy simple, No repetir

Resultados de reconocimiento:

 

Debido a factores como la iluminación, el ángulo, etc., los resultados del entrenamiento aún deben mejorarse. El conjunto de datos que puse es muy pequeño, y aumentar el conjunto de datos puede mejorar este problema hasta cierto punto.

Tucao:
¿No debería llamarse reconocimiento facial "gato"?
( ̄_ ̄)

El enlace de descarga del conjunto de datos que utilicé:
http://download.csdn.net/download/hongbin_xu/10103946

enlace original: https://blog.csdn.net/hongbin_xu/article/details/78443289

Supongo que te gusta

Origin www.cnblogs.com/Ph-one/p/12759153.html
Recomendado
Clasificación