PaddleX icon indicating copy to clipboard operation
PaddleX copied to clipboard

paddlex训练ppyolov2报错

Open aiwenzhu opened this issue 4 years ago • 17 comments

问题类型:模型训练

AttributeError: module 'paddlex.cv.transforms' has no attribute 'Compose'

aiwenzhu avatar Jul 13 '21 08:07 aiwenzhu

请问你使用的PaddleX版本是多少?麻烦贴一下训练脚本以便我们复现。

will-jl944 avatar Jul 14 '21 02:07 will-jl944

你好,似乎与版本无关,我使用的是devolop,也测试了release-rc3,只要使用dygraph\tutorials\train下的代码就不行,但是使用tutorials\train下的代码就可以,差别在于tutorials\train下使用的是:from paddlex.det import transforms而dygraph\tutorials\train下使用的是from paddlex import transforms as T,但是tutorials\train下没有ppyolov2啊

aiwenzhu avatar Jul 14 '21 03:07 aiwenzhu

PaddleX2.0升级到动态图后对一些api进行了调整。

PPYOLOV2仅在动态图版本中提供。动态图版本位于develop分支dygraph目录下,安装方法见PaddleX2.0安装。使用教程见PPYOLOV2 tutorial,更详细的文档见PaddleX2.0文档

will-jl944 avatar Jul 14 '21 04:07 will-jl944

你好,我昨天使用了你提供的安装教程重新安装了,还是老样子,很奇怪,不知道问题出在哪,难道是要重新创建conda环境所有都要重装吗,安装rc3的时候还必须指定版本号,不然装的是1.3.11

---原始邮件--- 发件人: @.> 发送时间: 2021年7月14日(周三) 中午12:08 收件人: @.>; 抄送: @.@.>; 主题: Re: [PaddlePaddle/PaddleX] paddlex训练ppyolov2报错 (#947)

PaddleX2.0升级到动态图后对一些api进行了调整。

PPYOLOV2仅在动态图版本中提供。动态图版本位于develop分支dygraph目录下,安装方法见PaddleX2.0安装。使用教程见PPYOLOV2 tutorial,更详细的文档见PaddleX2.0文档。

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

aiwenzhu avatar Jul 14 '21 04:07 aiwenzhu

安装2.0.0rc3需要指定版本号,因为pip会自动安装正式版而不是rc版。

可否贴一下训练脚本或一段可以复现该问题的代码?

will-jl944 avatar Jul 14 '21 05:07 will-jl944

import paddlex as pdx from paddlex import transforms as T

dataset = 'https://bj.bcebos.com/paddlex/datasets/insect_det.tar.gz' pdx.utils.download_and_decompress(dataset, path='./')

train_transforms = T.Compose([ T.MixupImage(mixup_epoch=-1), T.RandomDistort(), T.RandomExpand(im_padding_value=[123.675, 116.28, 103.53]), T.RandomCrop(), T.RandomHorizontalFlip(), T.BatchRandomResize( target_sizes=[ 320, 352, 384, 416, 448, 480, 512, 544, 576, 608, 640, 672, 704, 736, 768 ], interp='RANDOM'), T.Normalize( mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ])

eval_transforms = T.Compose([ T.Resize( target_size=640, interp='CUBIC'), T.Normalize( mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) ])

train_dataset = pdx.datasets.VOCDetection( data_dir='insect_det', file_list='insect_det/train_list.txt', label_list='insect_det/labels.txt', transforms=train_transforms, shuffle=True)

eval_dataset = pdx.datasets.VOCDetection( data_dir='insect_det', file_list='insect_det/val_list.txt', label_list='insect_det/labels.txt', transforms=eval_transforms, shuffle=False)

num_classes = len(train_dataset.labels) model = pdx.det.PPYOLOv2(num_classes=num_classes, backbone='ResNet50_vd_dcn')

model.train( num_epochs=170, train_dataset=train_dataset, train_batch_size=8, eval_dataset=eval_dataset, pretrain_weights='COCO', learning_rate=0.005 / 12, warmup_steps=1000, warmup_start_lr=0.0, lr_decay_epochs=[105, 135, 150], save_interval_epochs=5, save_dir='output/ppyolov2_r50vd_dcn')

你好,我就直接使用的paddle-develop下的dygraph\tutorials\train\object_detection下的ppyolov2.py测试的,用rc3也是一样 报错: C:\Users\87508\anaconda3\envs\paddle\python.exe D:/pycharm_projects/PaddleX-develop/dygraph/tutorials/train/object_detection/ppyolov2.py 2021-07-14 15:19:05 [INFO] Downloading insect_det.tar.gz from https://bj.bcebos.com/paddlex/datasets/insect_det.tar.gz 100%|██████████| 16899/16899 [00:07<00:00, 2190.33KB/s] 2021-07-14 15:19:13 [INFO] Decompressing ./insect_det.tar.gz... Traceback (most recent call last): File "D:/pycharm_projects/PaddleX-develop/dygraph/tutorials/train/object_detection/ppyolov2.py", line 10, in train_transforms = T.Compose([ AttributeError: module 'paddlex.cv.transforms' has no attribute 'Compose'

aiwenzhu avatar Jul 14 '21 07:07 aiwenzhu

我只在静态图版本paddlex(1.3.11)下复现出了该问题,使用paddlex2.0.0rc3是没有问题的,请确认你使用的paddlex版本为2.0.0rc3。 截屏2021-07-14 下午4 07 53 截屏2021-07-14 下午4 09 53

will-jl944 avatar Jul 14 '21 08:07 will-jl944

好的,不过我用develop在重新创建了所有环境还是有该问题 下边是我创建的conda虚拟环境,能看出装的版本是2.0.0rc3,这是我新创建的环境,安装了develop动态图下的requirement.txt (paddlex) C:\Users\87508>pip uninstall paddlex Found existing installation: paddlex 2.0.0rc3 Uninstalling paddlex-2.0.0rc3: Would remove: c:\users\87508\anaconda3\envs\paddlex\lib\site-packages\paddlex-2.0.0rc3-py3.8.egg c:\users\87508\anaconda3\envs\paddlex\scripts\paddlex-script.py c:\users\87508\anaconda3\envs\paddlex\scripts\paddlex.exe Proceed (y/n)?

---原始邮件--- 发件人: @.> 发送时间: 2021年7月14日(周三) 下午4:11 收件人: @.>; 抄送: @.@.>; 主题: Re: [PaddlePaddle/PaddleX] paddlex训练ppyolov2报错 (#947)

我只在静态图版本paddlex(1.3.11)下复现出了该问题,使用paddlex2.0.0rc3是没有问题的,请确认你使用的paddlex版本为2.0.0rc3。

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

aiwenzhu avatar Jul 14 '21 08:07 aiwenzhu

好的,不过我用develop在重新创建了所有环境还是有该问题 下边是我创建的conda虚拟环境,能看出装的版本是2.0.0rc3,这是我新创建的环境,安装了develop动态图下的requirement.txt (paddlex) C:\Users\87508>pip uninstall paddlex Found existing installation: paddlex 2.0.0rc3 Uninstalling paddlex-2.0.0rc3: Would remove: c:\users\87508\anaconda3\envs\paddlex\lib\site-packages\paddlex-2.0.0rc3-py3.8.egg c:\users\87508\anaconda3\envs\paddlex\scripts\paddlex-script.py c:\users\87508\anaconda3\envs\paddlex\scripts\paddlex.exe Proceed (y/n)? ---原始邮件--- 发件人: @.> 发送时间: 2021年7月14日(周三) 下午4:11 收件人: @.>; 抄送: @.@.>; 主题: Re: [PaddlePaddle/PaddleX] paddlex训练ppyolov2报错 (#947) 我只在静态图版本paddlex(1.3.11)下复现出了该问题,使用paddlex2.0.0rc3是没有问题的,请确认你使用的paddlex版本为2.0.0rc3。 — You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

你好,刚刚试了一下,在我上边提到的环境中使用rc3也有该问题,我是用pychram在dygraph\tutorials\train\object_detection打开的,有问题吗?

aiwenzhu avatar Jul 14 '21 08:07 aiwenzhu

这要看你pycharm当前的具体设置。在脚本中import paddlex as pdx之后加上一行print(pdx.__version__)看一下使用的版本。

will-jl944 avatar Jul 14 '21 08:07 will-jl944

print(pdx.version)

的确显示的是1.3.11,在文件夹下用pycharm打开的ppyolov2,直接import paddlex指向的是paddlex下而不是dygraph\paddlex下,改成from dygraph import paddlex as pdx也不行,因为ModuleNotFoundError: No module named 'paddlex.utils.env',我新建了个项目只有ppyolov2.py,已经没有'Compose'的问题了,不过出现如下问题:

2.0.0rc3 2021-07-14 17:12:27 [INFO] Starting to read file list from dataset... 2021-07-14 17:12:29 [INFO] 1103 samples in file Qtai/train_list.txt creating index... index created! 2021-07-14 17:12:29 [INFO] Starting to read file list from dataset... 2021-07-14 17:12:29 [INFO] 315 samples in file Qtai/val_list.txt creating index... index created! W0714 17:12:29.347378 23068 device_context.cc:404] Please NOTE: device: 0, GPU Compute Capability: 8.6, Driver API Version: 11.1, Runtime API Version: 11.0 W0714 17:12:29.351845 23068 device_context.cc:422] device: 0, cuDNN Version: 8.0. WARNING: Detect dataset only contains single fileds, return format changed since Paddle 2.1. In Paddle <= 2.0, DataLoader add a list surround output data(e.g. return [data]), and in Paddle >= 2.1, DataLoader return the single filed directly (e.g. return data). For example, in following code:

import numpy as np from paddle.io import DataLoader, Dataset

class RandomDataset(Dataset): def getitem(self, idx): data = np.random.random((2, 3)).astype('float32')

    return data

def __len__(self):
    return 10

dataset = RandomDataset() loader = DataLoader(dataset, batch_size=1) data = next(loader())

In Paddle <= 2.0, data is in format '[Tensor(shape=(1, 2, 3), dtype=float32)]', and in Paddle >= 2.1, data is in format 'Tensor(shape=(1, 2, 3), dtype=float32)'

C:\Users\87508\anaconda3\envs\paddle\lib\site-packages\paddle\nn\layer\norm.py:640: UserWarning: When training, we now always track global mean and variance. warnings.warn( C:\Users\87508\anaconda3\envs\paddle\lib\site-packages\paddle\fluid\dygraph\math_op_patch.py:237: UserWarning: The dtype of left and right variables are not the same, left dtype is paddle.int64, but right dtype is paddle.float32, the right dtype will convert to paddle.int64 warnings.warn( C:\Users\87508\anaconda3\envs\paddle\lib\site-packages\paddle\fluid\dygraph\math_op_patch.py:237: UserWarning: The dtype of left and right variables are not the same, left dtype is paddle.float32, but right dtype is paddle.int64, the right dtype will convert to paddle.float32 warnings.warn(

Process finished with exit code -1073741819 (0xC0000005)

aiwenzhu avatar Jul 14 '21 09:07 aiwenzhu

Warning信息忽略即可。 其中:

WARNING: Detect dataset only contains single fileds, return format changed since Paddle 2.1. In Paddle <= 2.0, DataLoader add a list surround output data(e.g. return [data]), and in Paddle >= 2.1, DataLoader return the single filed directly (e.g. return data). For example, in following code:

import numpy as np from paddle.io import DataLoader, Dataset

class RandomDataset(Dataset): def getitem(self, idx): data = np.random.random((2, 3)).astype('float32')

    return data

def __len__(self):
    return 10

dataset = RandomDataset() loader = DataLoader(dataset, batch_size=1) data = next(loader())

In Paddle <= 2.0, data is in format '[Tensor(shape=(1, 2, 3), dtype=float32)]', and in Paddle >= 2.1, data is in format 'Tensor(shape=(1, 2, 3), dtype=float32)'

这个warning会重复出现,这个是已知问题,将会在paddle2.1.2中做出修复。

will-jl944 avatar Jul 14 '21 09:07 will-jl944

Warning信息忽略即可。 其中:

WARNING: Detect dataset only contains single fileds, return format changed since Paddle 2.1. In Paddle <= 2.0, DataLoader add a list surround output data(e.g. return [data]), and in Paddle >= 2.1, DataLoader return the single filed directly (e.g. return data). For example, in following code: import numpy as np from paddle.io import DataLoader, Dataset class RandomDataset(Dataset): def getitem(self, idx): data = np.random.random((2, 3)).astype('float32')

    return data

def __len__(self):
    return 10

dataset = RandomDataset() loader = DataLoader(dataset, batch_size=1) data = next(loader()) In Paddle <= 2.0, data is in format '[Tensor(shape=(1, 2, 3), dtype=float32)]', and in Paddle >= 2.1, data is in format 'Tensor(shape=(1, 2, 3), dtype=float32)'

这个warning会重复出现,这个是已知问题,将会在paddle2.1.2中做出修复。

不过没有开启训练蛤

aiwenzhu avatar Jul 14 '21 09:07 aiwenzhu

Warning信息忽略即可。 其中:

WARNING: Detect dataset only contains single fileds, return format changed since Paddle 2.1. In Paddle <= 2.0, DataLoader add a list surround output data(e.g. return [data]), and in Paddle >= 2.1, DataLoader return the single filed directly (e.g. return data). For example, in following code: import numpy as np from paddle.io import DataLoader, Dataset class RandomDataset(Dataset): def getitem(self, idx): data = np.random.random((2, 3)).astype('float32')

    return data

def __len__(self):
    return 10

dataset = RandomDataset() loader = DataLoader(dataset, batch_size=1) data = next(loader()) In Paddle <= 2.0, data is in format '[Tensor(shape=(1, 2, 3), dtype=float32)]', and in Paddle >= 2.1, data is in format 'Tensor(shape=(1, 2, 3), dtype=float32)'

这个warning会重复出现,这个是已知问题,将会在paddle2.1.2中做出修复。

不过没有开启训练蛤

我把pretrain_weights=None了

aiwenzhu avatar Jul 14 '21 09:07 aiwenzhu

贴一下error信息,只有warning不会导致程序中断的。

will-jl944 avatar Jul 14 '21 09:07 will-jl944

我贴的就是所有的😂

---原始邮件--- 发件人: @.> 发送时间: 2021年7月14日(周三) 下午5:41 收件人: @.>; 抄送: @.@.>; 主题: Re: [PaddlePaddle/PaddleX] paddlex训练ppyolov2报错 (#947)

贴一下error信息,只有warning不会导致程序中断的。

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub, or unsubscribe.

aiwenzhu avatar Jul 14 '21 09:07 aiwenzhu

看一下显卡内存占用情况,适当调小batch_size试试。

will-jl944 avatar Jul 14 '21 10:07 will-jl944