class_docstr: Caltech Birds 2011 dataset.
code: def _split_generators(self, dl_manager):
      download_path = dl_manager.download(
          [
              self._caltech_birds_info.images_url,
          ]
      )
  
      extracted_path = dl_manager.download_and_extract(
          [
              self._caltech_birds_info.images_url,
              self._caltech_birds_info.annotations_url,
          ]
      )
  
      image_names_path = os.path.join(
          extracted_path[0], "CUB_200_2011/images.txt"
      )
      split_path = os.path.join(
          extracted_path[0], "CUB_200_2011/train_test_split.txt"
      )
      bbox_path = os.path.join(
          extracted_path[0], "CUB_200_2011/bounding_boxes.txt"
      )
  
      train_list, test_list = [], []
      attributes = collections.defaultdict(list)
  
      with tf.io.gfile.GFile(split_path) as f, tf.io.gfile.GFile(
          image_names_path
      ) as f1, tf.io.gfile.GFile(bbox_path) as f2:
          for line, line1, line2 in zip(f, f1, f2):
              img_idx, val = line.split()
              idx, img_name = line1.split()
              res = _NAME_RE.match(img_name)
              matches = res.groups()
              attributes[matches[-1].split(".")[0]].append(
                  line2.split()[1:]
              )  # pytype: disable=attribute-error
              if img_idx == idx:
                  if int(val) == 1:
                      train_list.append(img_name)
                  else:
                      test_list.append(img_name)
  
      def process_file(root, fname):
          with tf.io.gfile.GFile(
              os.path.join(root, fname), "rb"
          ) as png_f:
              mask = tfds.core.lazy_imports.cv2.imdecode(
                  np.frombuffer(png_f.read(), dtype=np.uint8), flags=0
              )
          attributes[fname.split(".")[0]].append(mask)
  
      with concurrent.futures.ThreadPoolExecutor(
          max_workers=_WORKERS
      ) as executor:
          futures = []
          for root, _, files in tf.io.gfile.walk(extracted_path[1]):
              for fname in files:
                  if fname.endswith(".png"):
                      future = executor.submit(
                          process_file, root, fname
                      )
                      futures.append(future)
          for future in concurrent.futures.as_completed(futures):
              future.result()
  
      return [
          tfds.core.SplitGenerator(
              name=tfds.Split.TRAIN,
              gen_kwargs={
                  "archive": dl_manager.iter_archive(download_path[0]),
                  "file_names": train_list,
                  "annotations": attributes,
              },
          ),
          tfds.core.SplitGenerator(
              name=tfds.Split.TEST,
              gen_kwargs={
                  "archive": dl_manager.iter_archive(download_path[0]),
                  "file_names": test_list,
                  "annotations": attributes,
              },
          ),
      ]
  
imports: import collections
  import concurrent.futures
  import os
  import re
  from etils import epath
  import numpy
  from tensorflow_datasets.core.utils.lazy_imports_utils import tensorflow
  import tensorflow_datasets.public_api
label_desc: Use image node_id 3 for calling the CaltechBirds2011 obj's underlying member method code with example usage: obj._split_generators(dl_manager) and returns: list