code: def convert(self):
      env = lmdb.open(self.args.lmdb_path, map_size=1099511627776)
      id_list = []
      all_features = glob.glob(
          os.path.join(self.args.features_folder, "**", "*.npy"),
          recursive=True,
      )
  
      features = []
      for feature in all_features:
          if not feature.endswith("_info.npy"):
              features.append(feature)
  
      with env.begin(write=True) as txn:
          for infile in tqdm.tqdm(features):
              reader = np.load(infile, allow_pickle=True)
              item = {}
              split = os.path.relpath(
                  infile, self.args.features_folder
              ).split(".npy")[0]
              item["feature_path"] = split
              key = split.encode()
              id_list.append(key)
              item["features"] = reader
              info_file = infile.split(".npy")[0] + "_info.npy"
              if not os.path.isfile(info_file):
                  txn.put(key, pickle.dumps(item))
                  continue
  
              reader = np.load(info_file, allow_pickle=True)
              item["image_height"] = reader.item().get("image_height")
              item["image_width"] = reader.item().get("image_width")
              item["num_boxes"] = reader.item().get("num_boxes")
              item["objects"] = reader.item().get("objects")
              item["cls_prob"] = reader.item().get("cls_prob", None)
              item["bbox"] = reader.item().get("bbox")
  
              txn.put(key, pickle.dumps(item))
  
          txn.put(b"keys", pickle.dumps(id_list))
  
file_path: mmf/tools/scripts/features/lmdb_conversion.py
imports: import argparse
  import glob
  import os
  import pickle
  import lmdb
  import numpy
  import tqdm
  from mmf.utils.file_io import PathManager
label_desc: Use image node_id 3 for calling the LMDBConversion obj's underlying member method code with example usage: obj.convert() without return types