Tensorflow Object Detection API no detecta objetos correctamente / no detecta objetos en absoluto

He seguido todos los pasos / el formato de los códigos (cotejados varias veces para estar 100% seguros de que son correctos) y los datos requeridos para entrenar objetos personalizados en la API de detección de objetos Tensorflow. Intenté utilizar los modelos ssd_mobilenet_v1_coco, faster_rcnn_resnet101_coco, así como la versión más rápida_rcnn_inception_v2_coco y todavía no tengo ningún tipo de buen resultado. Todo lo que obtengo es una clasificación errónea de los objetos o ningún cuadro delimitador.

Estoy entrenando para detectar un objeto de una sola clase con un número de imágenes de entrenamiento alrededor de 250 y un número de imágenes de validación 63; y cada imagen de tamaño variable en su mayoría alrededor de 300 x 300 píxeles o menos. Estoy entrenando a los modelos hasta que converjan (no completamente). Lo sé al ver el rendimiento de evaluación que se muestra en los pasos más de 15000, la pérdida disminuye gradualmente (a <0,04) con el tiempo, pero también fluctúa. Detengo mi entrenamiento y exporto el gráfico. Mi pregunta es:

Tengo una duda sólida sobre el video de prueba que me dieron para resolver la detección de objetos. Los cuadros de video son bastante grandes de la dimensión 1370 x 786 píxeles en los que el objeto que necesito detectar es bastante pequeño en comparación con el tamaño del cuadro. ¿Esto es lo que causa el problema? ¿Ya que las imágenes de mi entrenamiento son pequeñas (300 x 300 y más pequeñas), mientras que los marcos de video de mi prueba son tan grandes en comparación con las imágenes de entrenamiento? Intenté entrenar varias veces, pero fallé cada vez con cada modelo y estoy atado a un punto en el que quiero renunciar a esto.

¿Alguien puede poner luz sobre lo que está pasando aquí? ¿Debo entrenar para más pasos? ¿O debería entrenar imágenes de dimensiones similares a las de los marcos de prueba para entrenamiento también? ¿Esto ayudará?

A continuación se muestra el código del archivo de configuración y labelmap.pbtxt que usé.

Archivo de configuración:

fine_tune_checkpoint: ".../ssd_mobilenet_v1_coco_2017_11_17/model.ckpt" from_detection_checkpoint: true num_steps: 200000 data_augmentation_options { random_horizontal_flip { } } data_augmentation_options { ssd_random_crop { } } } train_input_reader: { tf_record_input_reader { input_path: ".../train.record" } label_map_path: ".../labelmap.pbtxt" } eval_config: { num_examples: 63 

labelmap.pbtxt:

 item { id: 1 name: 'tomato' } 

¿O debería entrenar imágenes de dimensiones similares a las de los marcos de prueba para entrenamiento también? ¿Esto ayudará?

Esto es exactamente lo que necesita hacer, dado lo que explicó.

No debe esperar que una red entrenada en imágenes de 300×300 funcione como se espera en imágenes de 1370×786. Especialmente si el objeto ya es pequeño en las imágenes grandes.

Los datos de su tren tienen que ser lo más similares posible a los datos de su evaluación, sin tener que ocuparse de la zona peligrosa en exceso. Al menos las imágenes tienen que ser de tamaño y relación de aspecto similares y del mismo dominio.

Una vez que haya resuelto esto, tenga en cuenta que los objetos pequeños son muy difíciles de detectar, por lo que probablemente necesitará modificar la configuración predeterminada del modelo.

Si no tiene restricciones de tiempo real, le recomendaría que empiece probando un Faster-RCNN configurando el parámetro output_stride en 8 en lugar de 16.