Skip to content

Error on Converting 300W dataset in class Landmarks300WConverter with message UFuncTypeError: Cannot cast ufunc 'subtract' output...Β #60

@nunenuh

Description

@nunenuh

Example code

from torchlm.data import LandmarksWFLWConverter, Landmarks300WConverter
# setup your path to the original downloaded dataset from official 
converter = Landmarks300WConverter(
    data_dir="/data/extended/landmark/ibug_300W_dlib/", save_dir="/data/extended/landmark/ibug_300W_dlib/converted",
    extend=0.2, rebuild=True, target_size=256, keep_aspect=False,
    force_normalize=True, force_absolute_path=True
)
converter.convert()
converter.show(count=30)  # show you some converted images with landmarks for debugging

Error Message

Converting 300W Train Annotations:   0%|                                                                                                                                          | 0/3148 [00:00<?, ?it/s]
---------------------------------------------------------------------------
UFuncTypeError                            Traceback (most recent call last)
Input In [1], in <cell line: 8>()
      2 # setup your path to the original downloaded dataset from official 
      3 converter = Landmarks300WConverter(
      4     data_dir="/data/extended/landmark/ibug_300W_dlib//", save_dir="/data/extended/landmark/ibug_300W_dlib/converted",
      5     extend=0.2, rebuild=True, target_size=256, keep_aspect=False,
      6     force_normalize=True, force_absolute_path=True
      7 )
----> 8 converter.convert()
      9 converter.show(count=30)

File /opt/anaconda/envs/facial/lib/python3.9/site-packages/torchlm/data/_converters.py:329, in Landmarks300WConverter.convert(self)
    322 test_anno_file = open(self.save_test_annotation_path, "w")
    324 for annotation in tqdm.tqdm(
    325         self.train_annotations,
    326         colour="GREEN",
    327         desc="Converting 300W Train Annotations"
    328 ):
--> 329     crop, landmarks, new_img_name = self._process_annotation(annotation=annotation)
    330     if crop is None or landmarks is None:
    331         continue

File /opt/anaconda/envs/facial/lib/python3.9/site-packages/torchlm/data/_converters.py:493, in Landmarks300WConverter._process_annotation(self, annotation)
    491 crop = image[int(ymin):int(ymax), int(xmin):int(xmax), :]
    492 # adjust according to left-top corner
--> 493 landmarks[:, 0] -= float(xmin)
    494 landmarks[:, 1] -= float(ymin)
    496 if self.target_size is not None and self.resize_op is not None:

UFuncTypeError: Cannot cast ufunc 'subtract' output from dtype('float64') to dtype('int64') with casting rule 'same_kind'

Solution

Change this line

# adjust according to left-top corner
landmarks[:, 0] -= float(xmin)
landmarks[:, 1] -= float(ymin)

Use this line instead

# adjust according to left-top corner
landmarks[:, 0] = landmarks[:, 0] - float(xmin)
landmarks[:, 1] = landmarks[:, 1] - float(ymin)

Environment

  • conda 4.10.3
  • Python 3.9.12 (main, Jun 1 2022, 11:38:51)
  • numpy version 1.23.1
  • torch version 1.12.1
  • Operating system Ubuntu 20.04.3 LTS

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions