code: def _validate_structure(self):
      if not tf.gfile.Exists(self._data_dir):
          raise InvalidDataDirectory(
              '"{}" does not exist.'.format(self._data_dir)
          )
  
      if not tf.gfile.Exists(self._labels_path):
          raise InvalidDataDirectory("Labels path is missing")
  
      if not tf.gfile.Exists(self._images_path):
          raise InvalidDataDirectory("Images path is missing")
  
      if not tf.gfile.Exists(self._annots_path):
          raise InvalidDataDirectory("Annotations path is missing")
  
file_path: luminoth/luminoth/tools/dataset/readers/object_detection/pascalvoc.py
imports: import os
  import tensorflow
  from luminoth.tools.dataset.readers import InvalidDataDirectory
  from luminoth.tools.dataset.readers.object_detection import ObjectDetectionReader
  from luminoth.utils.dataset import read_xml, read_image
label_desc: Use image node_id 4 for calling the PascalVOCReader obj's underlying member method code with example usage: obj._validate_structure() without return types