Esempio n. 1
0
def from_folders(job, form):
    """
    Add tasks for creating a dataset by parsing folders of images
    """
    job.labels_file = utils.constants.LABELS_FILE

    ### Add ParseFolderTask

    percent_val = form.folder_pct_val.data
    val_parents = []
    if form.has_val_folder.data:
        percent_val = 0

    percent_test = form.folder_pct_test.data
    test_parents = []
    if form.has_test_folder.data:
        percent_test = 0

    parse_train_task = tasks.ParseFolderTask(
        job_dir=job.dir(),
        folder=form.folder_train.data,
        percent_val=percent_val,
        percent_test=percent_test,
    )
    job.tasks.append(parse_train_task)

    # set parents
    if not form.has_val_folder.data:
        val_parents = [parse_train_task]
    if not form.has_test_folder.data:
        test_parents = [parse_train_task]

    if form.has_val_folder.data:
        parse_val_task = tasks.ParseFolderTask(
            job_dir=job.dir(),
            parents=parse_train_task,
            folder=form.folder_val.data,
            percent_val=100,
            percent_test=0,
        )
        job.tasks.append(parse_val_task)
        val_parents = [parse_val_task]

    if form.has_test_folder.data:
        parse_test_task = tasks.ParseFolderTask(
            job_dir=job.dir(),
            parents=parse_train_task,
            folder=form.folder_test.data,
            percent_val=0,
            percent_test=100,
        )
        job.tasks.append(parse_test_task)
        test_parents = [parse_test_task]

    ### Add CreateDbTasks

    encode = form.encode_images.data

    job.tasks.append(
        tasks.CreateDbTask(
            job_dir=job.dir(),
            parents=parse_train_task,
            input_file=utils.constants.TRAIN_FILE,
            db_name=utils.constants.TRAIN_DB,
            image_dims=job.image_dims,
            resize_mode=job.resize_mode,
            encode=encode,
            mean_file=utils.constants.MEAN_FILE_CAFFE,
            labels_file=job.labels_file,
        ))

    if percent_val > 0 or form.has_val_folder.data:
        job.tasks.append(
            tasks.CreateDbTask(
                job_dir=job.dir(),
                parents=val_parents,
                input_file=utils.constants.VAL_FILE,
                db_name=utils.constants.VAL_DB,
                image_dims=job.image_dims,
                resize_mode=job.resize_mode,
                encode=encode,
                labels_file=job.labels_file,
            ))

    if percent_test > 0 or form.has_test_folder.data:
        job.tasks.append(
            tasks.CreateDbTask(
                job_dir=job.dir(),
                parents=test_parents,
                input_file=utils.constants.TEST_FILE,
                db_name=utils.constants.TEST_DB,
                image_dims=job.image_dims,
                resize_mode=job.resize_mode,
                encode=encode,
                labels_file=job.labels_file,
            ))
Esempio n. 2
0
def from_folders(job, form):
    """
    Add tasks for creating a dataset by parsing folders of images
    """
    job.labels_file = utils.constants.LABELS_FILE

    # Add ParseFolderTask

    percent_val = form.folder_pct_val.data
    val_parents = []
    if form.has_val_folder.data:
        percent_val = 0

    percent_test = form.folder_pct_test.data
    test_parents = []
    if form.has_test_folder.data:
        percent_test = 0

    min_per_class = form.folder_train_min_per_class.data
    max_per_class = form.folder_train_max_per_class.data

    if max_per_class is None:
        max_per_class = 0
    parse_train_task = tasks.ParseFolderTask(
        job_dir=job.dir(),
        folder=form.folder_train.data,
        percent_val=percent_val,
        percent_test=percent_test,
        min_per_category=min_per_class if min_per_class > 0 else 1,
        max_per_category=max_per_class if max_per_class > 0 else None)
    job.tasks.append(parse_train_task)

    # set parents
    if not form.has_val_folder.data:
        val_parents = [parse_train_task]
    if not form.has_test_folder.data:
        test_parents = [parse_train_task]

    if form.has_val_folder.data:
        min_per_class = form.folder_val_min_per_class.data
        max_per_class = form.folder_val_max_per_class.data

        if max_per_class is None:
            max_per_class = 0
        parse_val_task = tasks.ParseFolderTask(
            job_dir=job.dir(),
            parents=parse_train_task,
            folder=form.folder_val.data,
            percent_val=100,
            percent_test=0,
            min_per_category=min_per_class if min_per_class > 0 else 1,
            max_per_category=max_per_class if max_per_class > 0 else None)
        job.tasks.append(parse_val_task)
        val_parents = [parse_val_task]

    if form.has_test_folder.data:
        min_per_class = form.folder_test_min_per_class.data
        max_per_class = form.folder_test_max_per_class.data

        if max_per_class is None:
            max_per_class = 0
        parse_test_task = tasks.ParseFolderTask(
            job_dir=job.dir(),
            parents=parse_train_task,
            folder=form.folder_test.data,
            percent_val=0,
            percent_test=100,
            min_per_category=min_per_class if min_per_class > 0 else 1,
            max_per_category=max_per_class if max_per_class > 0 else None)
        job.tasks.append(parse_test_task)
        test_parents = [parse_test_task]

    # Add CreateDbTasks

    backend = form.backend.data
    encoding = form.encoding.data
    compression = form.compression.data

    job.tasks.append(
        tasks.CreateDbTask(
            job_dir=job.dir(),
            parents=parse_train_task,
            input_file=utils.constants.TRAIN_FILE,
            db_name=utils.constants.TRAIN_DB,
            backend=backend,
            image_dims=job.image_dims,
            resize_mode=job.resize_mode,
            encoding=encoding,
            compression=compression,
            mean_file=utils.constants.MEAN_FILE_CAFFE,
            labels_file=job.labels_file,
        ))

    if percent_val > 0 or form.has_val_folder.data:
        job.tasks.append(
            tasks.CreateDbTask(
                job_dir=job.dir(),
                parents=val_parents,
                input_file=utils.constants.VAL_FILE,
                db_name=utils.constants.VAL_DB,
                backend=backend,
                image_dims=job.image_dims,
                resize_mode=job.resize_mode,
                encoding=encoding,
                compression=compression,
                labels_file=job.labels_file,
            ))

    if percent_test > 0 or form.has_test_folder.data:
        job.tasks.append(
            tasks.CreateDbTask(
                job_dir=job.dir(),
                parents=test_parents,
                input_file=utils.constants.TEST_FILE,
                db_name=utils.constants.TEST_DB,
                backend=backend,
                image_dims=job.image_dims,
                resize_mode=job.resize_mode,
                encoding=encoding,
                compression=compression,
                labels_file=job.labels_file,
            ))
Esempio n. 3
0
    def from_folder(
        self,
        folder,
        percent_val=None,
        percent_test=None,
        min_per_category=None,
        max_per_category=None,
    ):
        """
        Add tasks for creating a dataset by parsing a folder of images

        Arguments:
        folder -- the folder to parse

        Keyword arguments:
        percent_val -- percent of images to use for validation
        percent_test -- percent of images to use for testing
        min_per_category -- minimum images per category
        max_per_category -- maximum images per category
        """
        assert len(self.tasks) == 0

        self.labels_file = utils.constants.LABELS_FILE

        ### Add ParseFolderTask

        task = tasks.ParseFolderTask(job_dir=self.dir(),
                                     folder=folder,
                                     percent_val=percent_val,
                                     percent_test=percent_test)
        self.tasks.append(task)

        ### Add CreateDbTasks

        self.tasks.append(
            tasks.CreateDbTask(
                job_dir=self.dir(),
                parents=task,
                input_file=utils.constants.TRAIN_FILE,
                db_name=utils.constants.TRAIN_DB,
                image_dims=self.image_dims,
                resize_mode=self.resize_mode,
                mean_file=utils.constants.MEAN_FILE_CAFFE,
                labels_file=self.labels_file,
            ))

        if task.percent_val > 0:
            self.tasks.append(
                tasks.CreateDbTask(
                    job_dir=self.dir(),
                    parents=task,
                    input_file=utils.constants.VAL_FILE,
                    db_name=utils.constants.VAL_DB,
                    image_dims=self.image_dims,
                    resize_mode=self.resize_mode,
                    labels_file=self.labels_file,
                ))

        if task.percent_test > 0:
            self.tasks.append(
                tasks.CreateDbTask(
                    job_dir=self.dir(),
                    parents=task,
                    input_file=utils.constants.TEST_FILE,
                    db_name=utils.constants.TEST_DB,
                    image_dims=self.image_dims,
                    resize_mode=self.resize_mode,
                    labels_file=self.labels_file,
                ))