Detectando objetos personalizados

Puede descargar el código en la página de GitHub ( enlace )





Bienvenidos al artículo sobre reconocimiento. Dado que paso la mayor parte de mi tiempo de trabajo en un espacio de oficina de espacio abierto, donde cada lugar está numerado, decidí hablarles sobre la visión por computadora usando el ejemplo de una placa regular con un número de lugar de trabajo. Aquí volveremos a entrenar la red neuronal para detectar la placa de nuestra elección.





Estoy usando python3.7 y los nombres de todos los módulos versionados se almacenan en el archivo requirements.txt.





.





:





  • 500 , — 100, 1000 , , 2.





  • / . 80%, - 20%.





  • TF .





  • . config ( , ).





  • .





  • .





  • .





TensorFlow , , 1000 . , , . , , - .





, ().





. , . LabelImg- , GitHub , .





LabelImg GitHub ()





LabelImg ()





LabelImg, GUI. — dir , . create rectbox. , . , ! w, , ctrl+s, . 1 100 , , . , !





LabelImg xml-, . xml- TFRecords, TensorFlow. , , \test \train xml-.





, . , 20% XML- test, train.





, , TFRecords, TensorFlow.





-, image .xml csv-, . , : python xml_to_csv.py.





train_labels.csv test_labels.csv CSGO_images. cmd, .bat xml_to_csv.bat.





generate_tfrecord.py . , . labelmap.pbtxt.





, , generate_tfrecord.py:





# TO-DO    label map
def class_text_to_int(row_label):
    if row_label == 'table':
        return 1
    else:
        return None
      
      



TFRecord, generate_tfrecord.bat.





train.record test.record training. .





, — . , , . labelmap.pbtxt CSGO_training. . , generate_tfrecord.py.





item {
 id: 1
 name: 'table'
}
      
      



, . , . .





TensorFlow research\ object_detection\ samples\ configs faster_rcnn_ inception_v2_ coco.config CSGO_training. . .config , , . 10. num_classes , . :





num_classes : 1
 107.  fine_tune_checkpoint :
fine_tune_checkpoint : "faster_rcnn_inception_v2_coco_2018_01_28 / model.ckpt"
 122  124.   train_input_reader  input_path  label_map_path :
input_path: "CSGO_images / train. record"
label_map_path: "CSGO_training / labelmap.pbtxt"
 128.  num_examples   ,    CSGO_images\test.    113 ,     :
num_examples: 113
(   )
 136  138.   eval_input_reader  input_path  label_map_path :
input_path: "CSGO_images / test. record"
label_map_path: "CSGO_training / labelmap.pbtxt"
      
      



. ! . .





, train.bat.





. . 1.5 . , 0,05, ( , ). , . , , .





.





, , — ( ). graph export_inference_graph.py,   , “XXXX” ” model.ckpt-XXXX » .ckpt :





python export_inference_graph.py --input_type image_tensor --pipeline_config_path CSGO_training/faster_rcnn_inception_v2_coco.config --trained_checkpoint_prefix CSGO_training/model.ckpt-XXXX --output_directory CSGO_inference_graph
      
      



frozen_inference_graph.pb /coco_v3/ CSGO_inference_ graph. .pb . frozen_inference_graph.pb . coco_v3 predict.py 39 .





PATH_TO_FROZEN_GRAPH = 'graph/frozen_inference_graph.pb'
      
      



41 labelmap.





PATH_TO_LABELS = 'graph/labelmap.pbtxt'
      
      



Finalmente, antes de ejecutar los scripts de Python, debe cambiar la variable NUM_CLASSES en el script para igualar el número de clases que queremos detectar. Solo uso 1 clase, así que la cambié a 1:

NUM_CLASSES = 1





En la línea 65, debe configurar la imagen en la que se realizará la detección.





Después de comenzar, verá una ventana y una placa reconocida.





Eso es todo, gracias por su atención.








All Articles