class_docstr: 读取解析PASCAL VOC2007/2012数据集
code: def __init__(
      self,
      voc_root,
      year="2012",
      transforms=None,
      txt_name: str = "train.txt",
  ):
      assert year in [
          "2007",
          "2012",
      ], "year must be in ['2007', '2012']"
      # 增加容错能力
      if "VOCdevkit" in voc_root:
          self.root = os.path.join(voc_root, f"VOC{year}")
      else:
          self.root = os.path.join(voc_root, "VOCdevkit", f"VOC{year}")
      self.img_root = os.path.join(self.root, "JPEGImages")
      self.annotations_root = os.path.join(self.root, "Annotations")
  
      # read train.txt or val.txt file
      txt_path = os.path.join(self.root, "ImageSets", "Main", txt_name)
      assert os.path.exists(txt_path), "not found {} file.".format(
          txt_name
      )
  
      with open(txt_path) as read:
          xml_list = [
              os.path.join(self.annotations_root, line.strip() + ".xml")
              for line in read.readlines()
              if len(line.strip()) > 0
          ]
  
      self.xml_list = []
      # check file
      for xml_path in xml_list:
          if os.path.exists(xml_path) is False:
              print(
                  f"Warning: not found '{xml_path}', skip this annotation file."
              )
              continue
  
          # check for targets
          with open(xml_path) as fid:
              xml_str = fid.read()
          xml = etree.fromstring(xml_str)
          data = self.parse_xml_to_dict(xml)["annotation"]
          if "object" not in data:
              print(
                  f"INFO: no objects in {xml_path}, skip this annotation file."
              )
              continue
  
          self.xml_list.append(xml_path)
  
      assert (
          len(self.xml_list) > 0
      ), "in '{}' file does not find any information.".format(txt_path)
  
      # read class_indict
      json_file = "./pascal_voc_classes.json"
      assert os.path.exists(json_file), "{} file not exist.".format(
          json_file
      )
      with open(json_file, "r") as f:
          self.class_dict = json.load(f)
  
      self.transforms = transforms
  
file_path: deep-learning-for-image-processing/pytorch_object_detection/faster_rcnn/my_dataset.py
imports: import numpy
  from torch.utils.data import Dataset
  import os
  import torch
  import json
  from PIL import Image
  from lxml import etree
label_desc: Use image node_id 1 to create a new VOCDataSet object from inherited base classes: Dataset with example: obj = VOCDataSet(voc_root, year, transforms, txt_name)