it-swarm-es.tech

ADVERTENCIA: flujo de tensor: Ignorar la detección con ID de imagen a pesar de los parámetros de configuración verdaderos

Actualmente estoy tratando de entrenar el modelo V2 RCNN Inception más rápido (pre-entrenado con COCO) con el conjunto de datos GTSDB. Tengo el conjunto de datos FullIJCNN y dividí el conjunto de datos en tres partes como capacitación , validación y prueba . Por último, he creado 3 archivos csv diferentes respectivamente y luego he creado archivos TFRecord para train y validation. Por otro lado, tengo un bloque de código que lee las coordenadas del cuadro de verdad del terreno con respecto a cada imagen y dibuja cuadros alrededor de las señales de tráfico en la imagen. También escribe las etiquetas de clase correctamente. Aquí hay algunos ejemplos. Nuevamente, estos cuadros no son predichos por una red. Dibujaron manualmente por una función.

Cuadros dibujados 1

Cuadros dibujados 2

Luego, creé un archivo de etiqueta usando el archivo README incluido en la carpeta del conjunto de datos y agregué 0 línea de fondo a la primera línea de labels.txt para que funcione con mi código (creo que esto fue algo estúpido) porque arrojaba ¡error de índice. Sin embargo, no hay una clave para "fondo" en mi archivo .pbtxt para que comience desde 1. Por último, configuré el archivo later_rcnn_inception_v2_coco.config , cambiado num_classes: 90 a num_classes: 43 ya que el conjunto de datos tiene 43 clases, num_examples: 5000 a num_examples: 186 ya que he dividido el conjunto de datos para tener 186 ejemplos de prueba. Usado num_steps: 200000 tal como es. Por último, comencé el trabajo de entrenamiento corriendo

python object_detection/model_main.py \
    --pipeline_config_path=${PIPELINE_CONFIG_PATH} \
    --model_dir=${MODEL_DIR} \
    --num_train_steps=50000 \
    --num_eval_steps=2000 \
    --alsologtostderr

comando y este es el rastreo (perdón por el bloque de código, no sé cómo agregar registros específicamente):

import matplotlib; matplotlib.use('Agg')  # pylint: disable=multiple-statements
WARNING:tensorflow:Estimator's model_fn (<function model_fn at 0x7fc4cd6a4938>) includes params argument, but params are not passed to Estimator.
WARNING:tensorflow:num_readers has been reduced to 1 to match input file shards.
WARNING:tensorflow:From /home/models/research/object_detection/core/box_predictor.py:407: calling reduce_mean (from tensorflow.python.ops.math_ops) with keep_dims is deprecated and will be removed in a future version.
Instructions for updating:
keep_dims is deprecated, use keepdims instead
WARNING:tensorflow:From /home/models/research/object_detection/meta_architectures/faster_rcnn_meta_Arch.py:2037: get_or_create_global_step (from tensorflow.contrib.framework.python.ops.variables) is deprecated and will be removed in a future version.
Instructions for updating:
Please switch to tf.train.get_or_create_global_step
WARNING:tensorflow:From /home/models/research/object_detection/core/losses.py:317: softmax_cross_entropy_with_logits (from tensorflow.python.ops.nn_ops) is deprecated and will be removed in a future version.
Instructions for updating:

Future major versions of TensorFlow will allow gradients to flow
into the labels input on backprop by default.

See @{tf.nn.softmax_cross_entropy_with_logits_v2}.

/usr/local/lib/python2.7/dist-packages/tensorflow/python/ops/gradients_impl.py:100: UserWarning: Converting sparse IndexedSlices to a dense Tensor of unknown shape. This may consume a large amount of memory.
  "Converting sparse IndexedSlices to a dense Tensor of unknown shape. "
2018-07-26 09:48:21.785041: I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: SSE4.1 SSE4.2 AVX AVX2 FMA
2018-07-26 09:48:21.923329: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1356] Found device 0 with properties:
name: Tesla K80 major: 3 minor: 7 memoryClockRate(GHz): 0.8235
pciBusID: 9b2f:00:00.0
totalMemory: 11.17GiB freeMemory: 11.10GiB
2018-07-26 09:48:21.923382: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1435] Adding visible gpu devices: 0
2018-07-26 09:48:22.153991: I tensorflow/core/common_runtime/gpu/gpu_device.cc:923] Device interconnect StreamExecutor with strength 1 Edge matrix:
2018-07-26 09:48:22.154053: I tensorflow/core/common_runtime/gpu/gpu_device.cc:929]      0
2018-07-26 09:48:22.154075: I tensorflow/core/common_runtime/gpu/gpu_device.cc:942] 0:   N
2018-07-26 09:48:22.154333: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1053] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 10763 MB memory) -> physical GPU (device: 0, name: Tesla K80, pci bus id: 9b2f:00:00.0, compute capability: 3.7)
2018-07-26 09:58:31.794649: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1435] Adding visible gpu devices: 0
2018-07-26 09:58:31.794723: I tensorflow/core/common_runtime/gpu/gpu_device.cc:923] Device interconnect StreamExecutor with strength 1 Edge matrix:
2018-07-26 09:58:31.794747: I tensorflow/core/common_runtime/gpu/gpu_device.cc:929]      0
2018-07-26 09:58:31.794765: I tensorflow/core/common_runtime/gpu/gpu_device.cc:942] 0:   N
2018-07-26 09:58:31.794884: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1053] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 10763 MB memory) -> physical GPU (device: 0, name: Tesla K80, pci bus id: 9b2f:00:00.0, compute capability: 3.7)
WARNING:tensorflow:Ignoring ground truth with image id 2066941970 since it was previously added
WARNING:tensorflow:Ignoring detection with image id 2066941970 since it was previously added
WARNING:tensorflow:Ignoring ground truth with image id 2013299735 since it was previously added
WARNING:tensorflow:Ignoring detection with image id 2013299735 since it was previously added
WARNING:tensorflow:Ignoring ground truth with image id 1416415107 since it was previously added

Creó muchas advertencias como esta:

WARNING:tensorflow:Ignoring ground truth with image id 2013299735 since it was previously added
WARNING:tensorflow:Ignoring detection with image id 2013299735 since it was previously added

La razón de estos mensajes es num_examples se ha establecido en 2000 a pesar de que mi archivo de configuración original tiene la línea num_examples: 186. No entiendo por qué está creando un nuevo archivo de configuración con diferentes parámetros. Sin embargo, después de todo el registro lleno de esos mensajes, proporciona un informe, pero no puedo estar seguro de qué es exactamente lo que está tratando de decirme. Aquí está el informe:

creating index...
index created!
creating index...
index created!
Running per image evaluation...
Evaluate annotation type *bbox*
DONE (t=0.07s).
Accumulating evaluation results...
DONE (t=0.02s).
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.000
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=100 ] = 0.000
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=100 ] = 0.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=  1 ] = 0.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets= 10 ] = 0.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=100 ] = 0.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = -1.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = -1.000

Por último, revisé Tensorboard para asegurarme de que está entrenando correctamente, pero lo que veo es frustrante. Aquí hay una captura de pantalla de los gráficos de Tensorboard de mi modelo (pérdida):

Pérdida

Pérdida general

Siento que estoy haciendo algo mal. No sé si esta es una pregunta específica o no, pero intenté dar el mayor detalle posible.

Mis preguntas son: ¿Qué cambios debo hacer en estos pasos? ¿Por qué mi función dibuja cuadros verdaderos pero mi modelo no puede entender qué está pasando? ¡Gracias por adelantado!

7
DorukSonmez

La razón por la que recibe las advertencias es porque los elementos de su conjunto de datos se evalúan varias veces. Los valores que especifique para num_train_steps y num_eval_steps deben correlacionarse con su train_config batch_size y el tamaño de su conjunto de datos. Por ejemplo, si el tamaño de su lote es 24 y tiene 24000 registros de entrenamiento, num_train_steps debe establecerse en 1000 e igualmente el mismo método de cálculo para num_eval_steps pero con el número de registros de evaluación. El script model_main.py no parece estar aprovechando los valores que especifique en su archivo pipeline.config si ejecuta el script con esos valores especificados.

7
GuyTraveler

Me encontré con el mismo problema y después de un tiempo, pensé en esta solución que funcionó para mí, pero no debe ser la solución global; Si está utilizando un conjunto de datos distribuido en varias carpetas y está utilizando su propio convertidor tf_record, podría ser un problema en una colisión de cada nombre de trama en todo el conjunto de datos.

Como utilicé la ruta completa como nombre de archivo (colisión evitada), ya no he visto la ADVERTENCIA. Espero que ayude a alguien.

tf_example = tf.train.Example(features=tf.train.Features(feature={
    'image/height': dataset_util.int64_feature(im_height),
    'image/width': dataset_util.int64_feature(im_width),
    'image/filename': dataset_util.bytes_feature(filename),
    'image/source_id': dataset_util.bytes_feature(filename),
    'image/encoded': dataset_util.bytes_feature(encoded_image_data),
    'image/format': dataset_util.bytes_feature(image_format),
    'image/object/bbox/xmin': dataset_util.float_list_feature(xmins),
    'image/object/bbox/xmax': dataset_util.float_list_feature(xmaxs),
    'image/object/bbox/ymin': dataset_util.float_list_feature(ymins),
    'image/object/bbox/ymax': dataset_util.float_list_feature(ymaxs),
    'image/object/class/text': dataset_util.bytes_list_feature(classes_text),
    'image/object/class/label': dataset_util.int64_list_feature(classes),
}))
2

Si las advertencias siguen ahí, entonces verifique nuevamente su archivo generate_tfrecord.py. Había cambiado el archivo tfrecord para mi conveniencia y había algún error en él. Sugeriría simplemente verificar si su archivo de registro muestra correctamente los cuadros de verdad básica. Y luego solo proceda para el entrenamiento.

0
Ps98

Tuve exactamente el problema de muestra y sí, después de cambiar el num_example para que coincida con mis casos de validación, el error se ha ido.

0
lllllllllllll