experimental.linear_quantize_activations with Classifier_config in ct.conver "fails" w/message 'dict' object has no attribute 'flatten'
- Dominant language
- Python
- Stars
- 5.4k
- Forks
- 850
- Avg merge
- 4d 5h
- Merged PRs (30d)
- 10
Description
## 🐞Describing the bug
when coreML model is converted with classifier_config=
activation quantization with linear_quantize_activations
prints error:
Running compression pass linear_quantize_activations: calibrating sample 3/20 fails.
'dict' object has no attribute 'flatten'
It does not affect the actual results, other than slowing down the quantization process
## Stack Trace
- If applicable, please paste the complete stack trace.
## To Reproduce
```python
import torch
import torch.nn as nn
import torch.nn.functional as F
import torchvision.transforms as transforms
import coremltools as ct
import coremltools.optimize as cto
from PIL import Image
import numpy as np
import requests
torch.manual_seed(0)
torch.use_deterministic_algorithms(True)
model = torch.hub.load('pytorch/vision:v0.10.0', 'resnet50', pretrained=True)
model.eval()
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),
])
sample_data = []
for _ in range(20):
# Create a white image
image = Image.new('RGB', (224, 224), (255, 255, 255))
sample_data.append({"x_1": image})
print(f"Total images in sample_data: {len(sample_data)}")
input_tensor = transform(image).unsqueeze(0) # Add batch dimension
with torch.no_grad():
output = model(input_tensor)
scores_pytorch = output.numpy().squeeze()
labels_url = "https://raw.githubusercontent.com/pytorch/hub/master/imagenet_classes.txt"
response = requests.get(labels_url)
class_labels = response.text.splitlines()
class_labels = [label for label in class_labels if label]
image_input = ct.ImageType(shape=(1, 3, 224, 224), bias=[-2.117, -2.035, -1.804], scale=1/255/0.229)
traced_model = torch.jit.trace(model, input_tensor)
coreml_model_iOS17 = ct.convert(
traced_model,
inputs=[image_input],
classifier_config=ct.ClassifierConfig(class_labels=class_labels),
minimum_deployment_target=ct.target.iOS17
)
activation_config_iOS17 = cto.coreml.OptimizationConfig(
global_config=cto.coreml.experimental.OpActivationLinearQuantizerConfig(
mode="linear_symmetric"
)
)
compressed_model_a8_iOS17 = cto.coreml.experimental.linear_quantize_activations(
coreml_model_iOS17, activation_config_iOS17, sample_data
)
weight_config_int8_iOS17 = cto.coreml.OptimizationConfig(
global_config=cto.coreml.OpLinearQuantizerConfig(
mode="linear_symmetric", dtype=ct.converters.mil.mil.types.int8
)
)
compressed_model_w8a8_iOS17 = cto.coreml.linear_quantize_weights(compressed_model_a8_iOS17, weight_config_int8_iOS17)
compressed_model_w8a8_iOS17.save("resnet50-A8-iOS17.mlpackage")
```
Contributor guide
Research direction
Start by running the provided Python reproduction through cto.coreml.experimental.linear_quantize_activations with a ClassifierConfig and the sample_data dictionaries. Inspect how calibration samples are passed when classifier_config is present, and confirm completion without the 'dict' object has no attribute 'flatten' message while preserving the conversion results.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python, pytorch
- Domain
- machine-learning, tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100