Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MobilenetV2 量化 save_quantized_model报错 #872

Closed
kismit opened this issue Aug 11, 2021 · 2 comments
Closed

MobilenetV2 量化 save_quantized_model报错 #872

kismit opened this issue Aug 11, 2021 · 2 comments
Assignees

Comments

@kismit
Copy link

kismit commented Aug 11, 2021

网络:

import paddle
import paddle.vision.transforms as T
import paddle.distributed as dist
from paddleslim.dygraph.quant import QAT
from dirty.slim import quant_config, PACT

from dirty.dataset import DirtyDataset, read_corpus, read_labels

# dist.get_world_size()
# dist.init_parallel_env()

# os.environ['CUDA_VISIBLE_DEVICES'] = '3'

net = paddle.vision.models.mobilenetv2.MobileNetV2(scale=0.5, num_classes=2, with_pool=True)

paddle.flops(net, input_size=[1, 3, 224, 224])

quanter = QAT(config=quant_config)
quanter.quantize(net)

# net = paddle.DataParallel(net)

inputs = paddle.static.InputSpec(shape=[-1, 3, 224, 224], dtype="float32", name="inputs")
labels = paddle.static.InputSpec(shape=[-1, 2], dtype="int64", name="labels")
model = paddle.Model(net, inputs, labels)

model.summary()

transforms = T.Compose([
    T.Resize((224, 224)),
    T.RandomHorizontalFlip(0.5),
    T.RandomVerticalFlip(0.5),
    T.Transpose(),  # HWC -> CHW
    T.Normalize(
        mean=0,  # 归一化
        std=1,
        data_format='CHW',
        to_rgb=True)
])


label_list = read_labels("data/corpus/label.txt")

train_corpus = read_corpus("data/corpus/train.csv")
train_dataset = DirtyDataset(train_corpus, label_list, transforms=transforms)
train_loader = paddle.io.DataLoader(train_dataset, batch_size=128, shuffle=True, num_workers=5)

print("train len:", len(train_loader))

valid_corpus = read_corpus("data/corpus/eval.csv")
valid_dataset = DirtyDataset(valid_corpus, label_list, transforms=transforms)
valid_loader = paddle.io.DataLoader(valid_dataset, batch_size=128, shuffle=True, num_workers=5)

optimizer = paddle.optimizer.Adam(learning_rate=0.001, parameters=model.parameters())
loss = paddle.nn.loss.CrossEntropyLoss()
acc = paddle.metric.Accuracy()

early_stop = paddle.callbacks.EarlyStopping(patience=20)
reduce_lr = paddle.callbacks.ReduceLROnPlateau(patience=5)


# model.prepare(optimizer=optimizer, loss=loss, metrics=[acc])

# model.fit(train_loader, valid_loader, epochs=3, save_dir="models", callbacks=[early_stop, reduce_lr],
#           verbose=1, log_freq=1, num_workers=5)

# model.load("models/best_model")

quanter.save_quantized_model(net, "quant_models/quant", input_spec=[paddle.static.InputSpec(
                shape=[None, 3, 224, 224], dtype='float32', name="inputs")])

========================================================》
报错信息:

Traceback (most recent call last):
  File "train.py", line 76, in <module>
    paddle.jit.save(net, "quant_models/quant", input_spec=[paddle.static.InputSpec(shape=[None, 3, 224, 224], dtype='float32')])
  File "<decorator-gen-67>", line 2, in save
  File "/data/home/xuchunguang/.conda/envs/paddle2/lib/python3.6/site-packages/paddle/fluid/wrapped_decorator.py", line 25, in __impl__
    return wrapped_func(*args, **kwargs)
  File "/data/home/xuchunguang/.conda/envs/paddle2/lib/python3.6/site-packages/paddle/fluid/dygraph/base.py", line 40, in __impl__
    return func(*args, **kwargs)
  File "/data/home/xuchunguang/.conda/envs/paddle2/lib/python3.6/site-packages/paddle/fluid/dygraph/jit.py", line 729, in save
    concrete_program = static_forward.concrete_program
  File "/data/home/xuchunguang/.conda/envs/paddle2/lib/python3.6/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 454, in concrete_program
    return self.concrete_program_specify_input_spec(input_spec=None)
  File "/data/home/xuchunguang/.conda/envs/paddle2/lib/python3.6/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 488, in concrete_program_specify_input_spec
    *desired_input_spec)
  File "/data/home/xuchunguang/.conda/envs/paddle2/lib/python3.6/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 402, in get_concrete_program
    concrete_program, partial_program_layer = self._program_cache[cache_key]
  File "/data/home/xuchunguang/.conda/envs/paddle2/lib/python3.6/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 711, in __getitem__
    self._caches[item] = self._build_once(item)
  File "/data/home/xuchunguang/.conda/envs/paddle2/lib/python3.6/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 702, in _build_once
    class_instance=cache_key.class_instance)
  File "<decorator-gen-65>", line 2, in from_func_spec
  File "/data/home/xuchunguang/.conda/envs/paddle2/lib/python3.6/site-packages/paddle/fluid/wrapped_decorator.py", line 25, in __impl__
    return wrapped_func(*args, **kwargs)
  File "/data/home/xuchunguang/.conda/envs/paddle2/lib/python3.6/site-packages/paddle/fluid/dygraph/base.py", line 40, in __impl__
    return func(*args, **kwargs)
  File "/data/home/xuchunguang/.conda/envs/paddle2/lib/python3.6/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 620, in from_func_spec
    static_func = convert_to_static(dygraph_function)
  File "/data/home/xuchunguang/.conda/envs/paddle2/lib/python3.6/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 141, in convert_to_static
    static_func = _FUNCTION_CACHE.convert_with_cache(function)
  File "/data/home/xuchunguang/.conda/envs/paddle2/lib/python3.6/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 78, in convert_with_cache
    static_func = self._convert(func)
  File "/data/home/xuchunguang/.conda/envs/paddle2/lib/python3.6/site-packages/paddle/fluid/dygraph/dygraph_to_static/program_translator.py", line 122, in _convert
    create_and_update_origin_info_map(root_wrapper.node, static_func)
  File "/data/home/xuchunguang/.conda/envs/paddle2/lib/python3.6/site-packages/paddle/fluid/dygraph/dygraph_to_static/origin_info.py", line 163, in create_and_update_origin_info_map
    for t_node, s_node in ast_walk(transformed_node, static_node):
  File "/data/home/xuchunguang/.conda/envs/paddle2/lib/python3.6/site-packages/paddle/fluid/dygraph/dygraph_to_static/origin_info.py", line 241, in ast_walk
    t_node_child = getattr(t_node, field)
AttributeError: 'Assign' object has no attribute 'type_comment'

麻烦帮忙看下该问题,急!

@wanghaoshuang
Copy link
Collaborator

请问您用的PaddleSlim和PaddlePaddle版本分别是?

@kismit
Copy link
Author

kismit commented Aug 12, 2021

PaddleSlim和PaddlePaddle版本都是2.1.1

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants