AI detección de vehículos TensorFlow de identificación del vehículo

1, primero en UIUC de datos de imágenes para el conjunto de datos de formación descarga Detección de coches.

Descargar: http: //cogcomp.org/Data/Car/

Después de la descarga, descomprimir el directorio de archivos como se muestra, aquí que necesitamos es TrainImages esta carpeta carpeta y TestImages.

 

2, la imagen de entrada es una escala de grises 100 * 40 * 1, usando la red CNN, después de varios resultados de convolución obtuvieron y se agruparon 1 * 1 * 1, como se muestra en los siguientes parámetros de cada capa.

Copiar el código

Mi archivo de directorio de organización: 
    -CarDetect 
          --CarDetect.py 
          --datas 
              --- CarData 
          --models

Copiar el código

Copiar el código

entrada: [Ninguno, 40, 100, 1] 
conv-pool1: 
    f: 5 * 5 
    pasos: 1 
    nc: 6 
    padding: VÁLIDO 
    maxpool: 2 

conv-pool2: 
    f: 5 * 5 
    pasos: 1 
    nc: 16 
    padding: VALID 
    maxpool: 2 

CONV3: 
    f: 5 * 5 
    pasos: 1 
    nc: 32 
    padding: VÁLIDO 

conv4: 
    f: 3 * 18 
    pasos: 1 
    nc: 64 
    padding: VÁLIDO 

conv5: 
    f: 1 * 1 
    pasos: 1 
    nc: 1 
    padding: VÁLIDO 

salida: [Ninguno, 1, 1, 1]

Copiar el código

Copiar el código

tensorflow TF AS Importación 
Importación numpy, como NP 
importación matplotlib.pyplot PLT AS 

función, tenga en cuenta la posición de los datos de entrenamiento de almacenamiento de datos de carga #define 
load_carDats DEF (): 
    Importación CV2 
    Importación OS 
    ruta_archivo = './datas/CarData/TrainImages/' 
    Archivos = la os.listdir (FILE_PATH) 
    las muestras = [] 
    para file_name en archivos: 
        datos = cv2.imread (FILE_PATH file_name +, 0) .reshape (-1) / 255 
        etiqueta file_name.split = 0 IF ( '-') [0] == 'NEG' la persona. 1 
        samples.append ((datos, etiqueta)) 
    de regreso las muestras 
de datos # loading 
DATAS load_carDats = () 
# interrumpida datos aleatorios 
np.random.shuffle (DATAS) 
de datos # dividida, xs, ys para la formación red, x_test, y_test utiliza para probar el efecto del entrenamiento de la red
= XS [I [0] para DATAS en I [: 1000]] 
YS = np.reshape ([I [1] para I en DATAS [:. 1000]], = newshape (- 1,1)) 
x_test = [I [0] para DATAS I en [1000:]] 
android.permission.FACTOR = np.reshape ([I [1.] para I en DATAS [1000:]], = newshape (- 1,1)). 

# ------- --------- funciones de red definido utilizan con frecuencia, se reconstituye # ------ 
# variable de ponderación 
weight_variables DEF (forma): 
    pesos = tf.truncated_normal (forma, STDDEV = 0,1, DTYPE = tf.float32) 
    regresan tf.Variable (pesos) 

# compensados variables 
biase_variables DEF (forma): 
    sesgos tf.constant = (valor = 1,0, Forma = Shape) 
    de retorno TF. variable (sesgos) 

# convolución 
DEF conv2d (X, W es): 
    '' 'calcula la convolución, x es la capa de entrada (forma = [- 1, la anchura , la altura, el canal]), 
    W es f * f compartían forma correcta matriz de pesos = [f, f, in_layers_num , out_layers_num], 
    la horizontal y la etapa de dirección vertical son 1 '' ' 
    retorno tf.nn.conv2d (X, W, Strides = [1,1,1,1], = relleno "la VÁLIDO") 

# máximo agrupado 
DEF max_pooling (X): 
    '' 'híbrido cálculo de la máxima, x es la capa de entrada (típicamente resultado de convolución) Forma = [- 1, anchura, altura, canales.] 
    ksize es puesta en común mixto de tamaño del núcleo 2 * 2, y la etapa horizontal en la dirección vertical son ambos 2 '' ' 
    tf.nn.max_pool de retorno (X, ksize = [1,2,2,1], Strides = [1,2,2,1], = relleno "la VÁLIDO") 

# --------------------- red antes de propagar porción ----------------- - # 
DEF deepnn (X, keep_prop): 
    '' 'de la red profunda convolucional está definido, que comprende la convolución dos - tres convolución capa y las capas mixto' '' 
    # Paso 1: para convertir los datos en bruto en un 2-dimensional y tienen dimensión, representa un primer número de muestras, las filas segundos tres, el último es el número de canal 
# tf.reshape X = (X, Forma = [- 1, 40, 100 ,. 1.]) 
    # Paso 2: la definición de una primera de convolución - capa de mezcla 
    con tf.name_scope ( "conv-pooling1" ):
        W_conv1 = weight_variables ([5,5,1,6])
        = Biase_variables b_conv1 ([. 6])
        ret_conv1 = tf.nn.relu (conv2d (x, W_conv1) + b_conv1) # de cálculo de convolución, y de corrección de medios para utilizar el resultado de la convolución se procesa adicionalmente 
        ret_pooling1 = max_pooling (ret_conv1) # realizar mezclando operación 

    # step3: para definir un segundo volumen trama - capa de mezcla 
    con tf.name_scope ( "CONV-pooling2"): 
        W_conv2 weight_variables = ([5,5,6,16]) 
        b_conv2 biase_variables = ([16]) 
        ret_conv2 = tf.nn.relu (conv2d (ret_pooling1, W_conv2) + b_conv2) 
        ret_pooling2 = max_pooling (ret_conv2) 

    # Paso 4: convolución definir una tercera capa 
    con tf.name_scope ( "CONV-pooling3"): 
        W_conv3 weight_variables = ([5,5,16,32]) 
        b_conv3 = biase_variables ([32]) 
        ret_conv3 = tf.nn.relu (conv2d (ret_pooling2, W_conv3) + b_conv3)

    # Paso 5: cuarto convolución definido capas 
    con tf.name_scope ( "CONV4"): 
        W_conv4 weight_variables = ([3,18,32,64]) 
        b_conv4 biase_variables = ([64]) 
        ret_conv4 tf.nn.relu = ( conv2d (ret_conv3, W_conv4) + b_conv4) 

    # Paso 6: quinto convolución capas definidas 
    con tf.name_scope ( "conv5"): 
        W_conv5 weight_variables = ([1,1,64,1]) 
        b_conv5 biase_variables = ([. 1] ) 
        ret_conv5 = conv2d (ret_conv4, W_conv5) + b_conv5 

    retorno ret_conv5 

# --------------------- ---------- listo antes de red de formación ------------- # 
de marcador de posición # indica datos de entrada y etiquetas 
x = tf.placeholder (dtype = tf.float32, forma = [Nada, Nada, ninguno, 1], = nombre "X-INPUT") 
Etiquetas = tf.placeholder (DTYPE = tf.float32, Forma = [Ninguno ,. 1], name = "Y-Output")
 
# afirmada abstuvieron marcador de posición 
keep_prop = tf.placeholder (DTYPE = tf.float32, name = "kprob") 

# crea un modelo de clasificación 
RET = deepnn (X, keep_prop) 
# En este momento el valor de retorno es -1 * 1 * 1 * 1 con el fin de obtener el resultado de la comodidad de cálculo, aquí la RESHAPE 
Y = tf.reshape (RET, Forma = [- 1,1]) 

# función pérdida definida 
con tf.name_scope ( "loss_function"): 
    pérdida = tf.nn .sigmoid_cross_entropy_with_logits (= Y-logit, etiquetas = Etiquetas) 
coste = tf.reduce_mean (Pérdida) 
# define el modelo de formación (modelo de optimización) 
con tf.name_scope ( "optimizor"): 
    tren = tf.train.AdamOptimizer (0,0005) .minimize ( coste) 

# definen la precisión del proceso de validación del modelo 
con tf.name_scope ( "precisión"): 
    y_hat = tf.nn.sigmoid (Y) 
    accuracy_rate = tf.abs (y_hat - Etiquetas) <0,5 
    accuracy_rate = tf.cast (accuracy_rate, DTYPE = tf.float32)
= Precisión tf.reduce_mean (accuracy_rate) 

# -------------- comenzar a entrenar a la red, y guardar los resultados en un archivo --------------- formación # 
Ahorro = tf.train.Saver () 
sess = tf.Session () 
variables de sess.run (tf.global_variables_initializer ()) # Inicializar 

para I en cobertura (10): 
    Skip = 10 
    para K en el rango (0,1000, Saltar): 
        x_train = np.reshape (XS [K: K + Skip], = newshape (- 1, 40, 100 ,. 1.)) 
        sess.run (tren, feed_dict = {X: x_train, Etiquetas: YS [K: k + skip], keep_prop: 0,5 }) # formación modelo 
    # si (i + 1)% 10 == 0:. 
    train_accuracy = sess.run (precisión, feed_dict = {X: np.reshape (XS, (-1,40,100 , 1)), etiquetas:. YS, keep_prop: 1.0}) 
    de impresión ( '% PASO D, G tren% de precisión' % (I, train_accuracy))
    saver.save (sess, "./models/carDetect_model.ckpt", global_step = i) 

Se trata de los resultados de mi formación: 
el paso 0, Tren de Precisión 0,859 
el PASO 1, Tren de Precisión 0,934 
el PASO 2, Tren de Precisión 0,965 
el PASO 3, Tren de Precisión 0.971 
STEP. 4, tren Precisión 0.985 
STEP. 5, tren Precisión 0.991 
STEP. 6, tren Precisión 0.995 
STEP. 7, tren Precisión 0.994 
STEP. 8, tren Precisión 0.995 
STEP. 9, tren Precisión 0.997 

# ----------------------- -------------- ------------------- # comienza con la detección de nuevas imágenes 
de importación CV2 
# importar imágenes 
pic = cv2.imread ( "../../datas/CarData/TestImages/test-100.pgm", 0) 
size = pic.shape 

IMG = np.reshape (PIC, (-1, tamaño [0], tamaño [. 1], 1)) 
# Uso de la red entrenada por encima empieza a detectar nuevas imágenes
= Sess.run Resultado (RET, feed_dict = {X: IMG}) 

# Los resultados del ensayo muestran 
pt1 = np.array ([result.argmax () // result.shape [2], result.argmax () resultado%. Forma [2]]). 4 * 
PT2 + np.array PT1 = ([40, 100]) 

PIC_2 = cv2.rectangle (PIC, (PT1 [. 1], PT1 [0]), (PT2 [. 1], PT2 [ 0]), 0, 2) 

plt.imshow (PIC_2, "gris") 
plt.show ()

Copiar el código

3. resultados

 

modo de adquisición de la fuente, el número total de RaoRao1994 públicas afectadas, en maravillosa de ver - de todos los artículos, puede obtener los recursos del enlace de descarga

Obtener más recursos, por favor preste atención al público el número total de RaoRao1994

Artículos originales puestos en libertad 37 · alabanza ganado 13 · vistas 20000 +

Supongo que te gusta

Origin blog.csdn.net/qq_26078953/article/details/91366676
Recomendado
Clasificación