簡體   English   中英

當應用於我的數據集時,VOCBboxDataset返回的數據集大小不正確

[英]VOCBboxDataset returns incorrect dataset size when applied to my dataset

我有250個圖像數據集和250個帶有兩個類的注釋文件:ball和player。 該文件夾還具有三個文本文件train.txt,val.txt,test.txt,分別包含訓練,測試和驗證圖像的列表。

bball_labels = ('ball','player')
class BBall_dataset(VOCBboxDataset):
  def _get_annotations(self, i):
    id_ = self.ids[i]
    anno = ET.parse(os.path.join(self.data_dir, 'Annotations', id_ + 
'.xml'))
    bbox = []
    label = []
    difficult = []
    for obj in anno.findall('object'):
      bndbox_anno = obj.find('bndbox')
      bbox.append([int(bndbox_anno.find(tag).text) - 1 for tag in ('ymin', 
'xmin', 'ymax', 'xmax')])
      name = obj.find('name').text.lower().strip()
      label.append(bball_labels.index(name))
    bbox = np.stack(bbox).astype(np.float32)
    label = np.stack(label).astype(np.int32)
    difficult = np.array(difficult, dtype=np.bool)
    return bbox, label, difficult

在250個中,我已將170作為火車,將70作為val,將10作為測試圖像。 但是在打印火車,val和測試數據集的長度時,我總是得到火車+12,火車+3 nad測試。 例如,在這種情況下,對於火車,val和測試,它將顯示為182,73,10。 測試值不變。 每次火車和val值將分別增加12和3。

valid_dataset = BBall_dataset('BasketballDataset', 'val')
test_dataset = BBall_dataset('BasketballDataset', 'test')
train_dataset = BBall_dataset('BasketballDataset', 'train') 

print('Number of images in "train" dataset:', len(train_dataset))
print('Number of images in "valid" dataset:', len(valid_dataset))
print('Number of images in "test" dataset:', len(test_dataset))

“訓練”數據集中的圖像數量:182“有效”數據集中的圖像數量:73“測試”數據集中的圖像數量:10

為什么會發生這種情況以及如何防止這種情況發生。 並且在某種程度上也影響了我的培訓過程嗎?

train.txt鏈接( https://imgur.com/B1Gszfi)val.txt鏈接( https://imgur.com/kOcIZ5h

該問題是由於一個很小的情況而導致的,即在剪切,復制和粘貼圖像列表時,文本文件之間存在間隙。 文本文件在記事本中創建。 在記事本中索引是不可見的,但是一旦您在github中查看文本文件(其中列表已縮小,但仍存在初始索引)並且索引仍然存在,差距就可見了。 例如,首先創建了182張圖像的列表,但隨后縮減為170張。因此,當我們使用“數據集創建”對象時,代碼將讀取文本文件的所有行,即它將讀取182而不是170。我們需要確保索引數和圖像數相同,可以避免此問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM