Source code for gluoncv.data.lst.detection

"""Detection Dataset from LST file."""
from __future__ import absolute_import
import os
import numpy as np
import mxnet as mx
from mxnet.gluon.data import Dataset
from ..recordio.detection import _transform_label


[docs]class LstDetection(Dataset): """Detection dataset loaded from LST file and raw images. LST file is a pure text file but with special label format. Checkout :ref:`lst_record_dataset` for tutorial of how to prepare this file. Parameters ---------- filename : type Description of parameter `filename`. root : str Relative image root folder for filenames in LST file. flag : int, default is 1 Use 1 for color images, and 0 for gray images. coord_normalized : boolean Indicate whether bounding box coordinates haved been normalized to (0, 1) in labels. If so, we will rescale back to absolute coordinates by multiplying width or height. """ def __init__(self, filename, root='', flag=1, coord_normalized=True): self._flag = flag self._coord_normalized = coord_normalized self._items = [] self._labels = [] full_path = os.path.expanduser(filename) with open(full_path) as fin: for line in iter(fin.readline, ''): line = line.strip().split('\t') label = np.array(line[1:-1]).astype('float') im_path = os.path.join(root, line[-1]) self._items.append(im_path) self._labels.append(label) def __len__(self): return len(self._items) def __getitem__(self, idx): im_path = self._items[idx] img = mx.image.imread(im_path, self._flag) h, w, _ = img.shape label = self._labels[idx] if self._coord_normalized: label = _transform_label(label, h, w) else: label = _transform_label(label) return img, label