PaddlePaddle / PaddleVideo

Awesome video understanding toolkits based on PaddlePaddle. It supports video data annotation tools, lightweight RGB and skeleton based action recognition model, practical applications for video tagging and sport action detection.
Apache License 2.0
1.54k stars 384 forks source link

单目深度估计模型ADDS-DepthNet模型训练报错 #549

Open yuwen37 opened 2 years ago

yuwen37 commented 2 years ago

BUG描述 bug信息如下:

D:\Program Files\Anaconda3\envs\paddle\lib\site-packages\paddle\fluid\reader.py:485: UserWarning: DataLoader with multi-process mode is not supported on MacOs and Windows currently. Please use signle-process mode with num_workers = 0 instead
  "DataLoader with multi-process mode is not supported on MacOs and Windows currently." \
E:\lyw\2022-8-12Detection\PaddleVideo-release-2.2.0\paddlevideo\solver\optimizer.py:124: DeprecationWarning: inspect.getargspec() is deprecated since Python 3.0, use inspect.signature() or inspect.getfullargspec()
  getattr(paddle.optimizer, opt_name).__init__).args
[10/26 11:00:34] Training in fp32 mode.
D:\Program Files\Anaconda3\envs\paddle\lib\site-packages\paddle\nn\layer\norm.py:654: UserWarning: When training, we now always track global mean and variance.
  "When training, we now always track global mean and variance.")
Traceback (most recent call last):
  File "E:/lyw/2022-8-12Detection/PaddleVideo-release-2.2.0/main.py", line 139, in <module>
    main()
  File "E:/lyw/2022-8-12Detection/PaddleVideo-release-2.2.0/main.py", line 135, in main
    profiler_options=args.profiler_options)
  File "E:\lyw\2022-8-12Detection\PaddleVideo-release-2.2.0\paddlevideo\tasks\train.py", line 227, in train_model
    outputs = model(data, mode='train')
  File "D:\Program Files\Anaconda3\envs\paddle\lib\site-packages\paddle\fluid\dygraph\layers.py", line 930, in __call__
    return self._dygraph_call_func(*inputs, **kwargs)
  File "D:\Program Files\Anaconda3\envs\paddle\lib\site-packages\paddle\fluid\dygraph\layers.py", line 915, in _dygraph_call_func
    outputs = self.forward(*inputs, **kwargs)
  File "E:\lyw\2022-8-12Detection\PaddleVideo-release-2.2.0\paddlevideo\modeling\framework\estimators\base.py", line 53, in forward
    return self.train_step(data_batch)
  File "E:\lyw\2022-8-12Detection\PaddleVideo-release-2.2.0\paddlevideo\modeling\framework\estimators\depth_estimator.py", line 38, in train_step
    outputs = self.forward_net(inputs, day_or_night='day_and_night')
  File "E:\lyw\2022-8-12Detection\PaddleVideo-release-2.2.0\paddlevideo\modeling\framework\estimators\depth_estimator.py", line 29, in forward_net
    outputs = self.backbone(inputs, day_or_night)
  File "D:\Program Files\Anaconda3\envs\paddle\lib\site-packages\paddle\fluid\dygraph\layers.py", line 930, in __call__
    return self._dygraph_call_func(*inputs, **kwargs)
  File "D:\Program Files\Anaconda3\envs\paddle\lib\site-packages\paddle\fluid\dygraph\layers.py", line 915, in _dygraph_call_func
    outputs = self.forward(*inputs, **kwargs)
  File "E:\lyw\2022-8-12Detection\PaddleVideo-release-2.2.0\paddlevideo\modeling\backbones\adds.py", line 1014, in forward
    self.generate_images_pred(inputs, outputs, 'day')
  File "E:\lyw\2022-8-12Detection\PaddleVideo-release-2.2.0\paddlevideo\modeling\backbones\adds.py", line 1114, in generate_images_pred
    depth, inputs[("inv_K", source_scale)])
  File "D:\Program Files\Anaconda3\envs\paddle\lib\site-packages\paddle\fluid\dygraph\layers.py", line 930, in __call__
    return self._dygraph_call_func(*inputs, **kwargs)
  File "D:\Program Files\Anaconda3\envs\paddle\lib\site-packages\paddle\fluid\dygraph\layers.py", line 915, in _dygraph_call_func
    outputs = self.forward(*inputs, **kwargs)
  File "E:\lyw\2022-8-12Detection\PaddleVideo-release-2.2.0\paddlevideo\modeling\backbones\adds.py", line 358, in forward
    cam_points = paddle.matmul(inv_K[:, :3, :3], self.pix_coords)
  File "D:\Program Files\Anaconda3\envs\paddle\lib\site-packages\paddle\tensor\linalg.py", line 145, in matmul
    return op(x, y, 'trans_x', transpose_x, 'trans_y', transpose_y)
ValueError: (InvalidArgument) Input(X) and Input(Y) has error dim.X_broadcast's shape[0] must be equal to Y_broadcast's shape[0],or X_broadcast's shape[0] <= 1, or Y_broadcast's shape[0] <= 1,But received X_broadcast's shape[0] = [2]received Y_broadcast's shape[0] = [6]
  [Hint: Expected x_bd_dims[i] == y_bd_dims[i] || x_bd_dims[i] <= 1 || y_bd_dims[i] <= 1 == true, but received x_bd_dims[i] == y_bd_dims[i] || x_bd_dims[i] <= 1 || y_bd_dims[i] <= 1:0 != true:1.] (at ../paddle/phi/kernels/impl/matmul_kernel_impl.h:54)
  [operator < matmul_v2 > error]

Process finished with exit code 1

产生原因 不理解https://github.com/PaddlePaddle/PaddleVideo/blob/release/2.2.0/docs/zh-CN/dataset/Oxford_RobotCar.md中的数据准备工作。 感觉这里面描述的数据准备有点混乱。 1 首先不理解数据集下载的描述 image 这里面1、2点提到的Bumblebee XB3的左目图像我似乎没有需要下载,是否只需要下载第3点中所给的所有链接数据就行了?似乎这里面包含了训练验证数据。附加的原始数据是不是不用下载。 image 这里给出的9条链接已经是全部的处理后数据了?

2 数据预处理的描述 我的理解是上面9条链接给出的数据已经是预处理后的数据了,所以直接拿来解压生成了最终的数据集。 我准备的数据集格式如下,均来自数据集下载第3条给出的9个链接,不包含“附原始未处理数据下载地址”里面的数据(和数据预处理第4点给出的描述有点不同): data └── oxford ├── splits ├── train_files.txt ├── val_day_files.txt └── val_night_files.txt └── oxford_processing_forADDS ├── day_train_all/ #白天训练图像文件夹 (解压自day_train_all.7z.001) ├── day_train_all_fake_night/ #夜晚训练图像文件夹 (解压自day_train_all_fake_night.7z.001) ├── day_val_451/ #白天验证图像文件夹 (解压自day_val_451.7z) ├── day_val_451_gt/ #白天验证深度真值文件夹 (解压自day_val_451_gt.7z) ├── night_val_411/ #夜晚验证图像文件夹 (解压自night_val_411.7z) └── night_val_411_gt/ #夜晚验证深度真值文件夹 (解压自night_val_411_gt.7z) 我没有用到day_train_all.7z.002和day_train_all_fake_night.7z.002的数据,002的数据解压有问题,似乎001和002的数据是一样的,我也不清楚这里面的区别是什么? 整个数据集的我没有做任何预处理,“1. 图像去畸变”、“2. 动态帧筛选”,因为没有给出具体怎么做的方法。总之,用了上面我给出的数据集格式训练之后,就遇到了BUG,不清楚这个bug产生的原因是不是数据集的问题。也可能是别的问题。

运行程序的命令 python mian.py --validate -c configs/estimation/adds/adds.yaml --seed 20

breknddone commented 1 year ago

我也是遇到了和你一样的问题,操作流程也和你一样,但是在训练时就报错。