RuntimeError: Subtraction, the `-` operator, with a bool tensor is not supported

Question:

I am using this github repo: https://github.com/vchoutas/smplify-x and I am running a script. I get the following error. How can I fix it? I understand I might have to convert - to ~ however not sure where it exactly is. I don’t want to downgrade my PyTorch.

$ cat fit.sh
export CUDA_VISIBLE_DEVICES=0
python smplifyx/main.py --config cfg_files/fit_smplx.yaml --data_folder ../../data/smplify-x/DATA_FOLDER --output_folder ../../data/smplify-x/RESULTS --visualize="False" --model_folder ../../data/smplify-x/models_smplx_v1_1/models/smplx/SMPLX_NEUTRAL.npz --vposer_ckpt ../../data/smplify-x/vposer_v1_0 --part_segm_fn ../../data/smplify-x/smplx_parts_segm.pkl

--------------------------------------

(smplifyx) mona@ubuntu:~/mona/code/smplify-x$ ./fit.sh 
Processing: ../../data/smplify-x/DATA_FOLDER/images/woman_bike.jpg
Found Trained Model: ../../data/smplify-x/vposer_v1_0/snapshots/TR00_E096.pt
Traceback (most recent call last):
  File "smplifyx/main.py", line 272, in <module>
    main(**args)
  File "smplifyx/main.py", line 262, in main
    **args)
  File "~/mona/code/smplify-x/smplifyx/fit_single_frame.py", line 274, in fit_single_frame
    focal_length=focal_length, dtype=dtype)
  File "/home/mona/venv/smplifyx/lib/python3.6/site-packages/torch/autograd/grad_mode.py", line 26, in decorate_context
    return func(*args, **kwargs)
  File "~/mona/code/smplify-x/smplifyx/fitting.py", line 75, in guess_init
    pose_embedding, output_type='aa').view(1, -1) if use_vposer else None
  File "../../data/smplify-x/vposer_v1_0/vposer_smpl.py", line 114, in decode
    if output_type == 'aa': return VPoser.matrot2aa(Xout)
  File "../../data/smplify-x/vposer_v1_0/vposer_smpl.py", line 152, in matrot2aa
    pose = tgm.rotation_matrix_to_angle_axis(homogen_matrot).view(batch_size, 1, -1, 3).contiguous()
  File "/home/mona/venv/smplifyx/lib/python3.6/site-packages/torchgeometry/core/conversions.py", line 233, in rotation_matrix_to_angle_axis
    quaternion = rotation_matrix_to_quaternion(rotation_matrix)
  File "/home/mona/venv/smplifyx/lib/python3.6/site-packages/torchgeometry/core/conversions.py", line 302, in rotation_matrix_to_quaternion
    mask_c1 = mask_d2 * (1 - mask_d0_d1)
  File "/home/mona/venv/smplifyx/lib/python3.6/site-packages/torch/tensor.py", line 511, in __rsub__
    return _C._VariableFunctions.rsub(self, other)
RuntimeError: Subtraction, the `-` operator, with a bool tensor is not supported. If you are trying to invert a mask, use the `~` or `logical_not()` operator instead.

I also have:

(smplifyx) mona@ubuntu:~/mona/code/smplify-x$ python
Python 3.6.9 (default, Oct  8 2020, 12:12:24) 
[GCC 8.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import torch
>>> torch.__version__
'1.7.1'
>>> import torchgeometry
>>> torchgeometry.__version__
'0.1.2'
Asked By: Mona Jalal

||

Answers:

$ vi /home/mona/venv/smplifyx/lib/python3.6/site-packages/torchgeometry/core/conversions.py

and comment and add lines similarly for mask conversion compatibility in PyTorch 1.7.1

mask_c0 = mask_d2 * mask_d0_d1
#mask_c1 = mask_d2 * (1 - mask_d0_d1)
mask_c1 = mask_d2 * ~(mask_d0_d1)
#mask_c2 = (1 - mask_d2) * mask_d0_nd1
mask_c2 = ~(mask_d2) * mask_d0_nd1
#mask_c3 = (1 - mask_d2) * (1 - mask_d0_nd1)
Answered By: Mona Jalal

I use the torch12, met the same problem when i run the smplx project.

You can use the code to replace the source code, because after torch update, the – operator is not allowed. like 1 – x, you should use ~x.

mask_c0 = mask_d2 * mask_d0_d1
# mask_c1 = mask_d2 * (1 - mask_d0_d1)
mask_c1 = mask_d2 * ~(mask_d0_d1)
# mask_c2 = (1 - mask_d2) * mask_d0_nd1
mask_c2 = ~(mask_d2) * mask_d0_nd1
mask_c3 = ~(mask_d2) * ~(mask_d0_nd1)
Answered By: 翁锦程