Peering inside Histogram Bins with Spark and Bokeh
A histogram is one of the most effective tools for exploring a new dataset. In one graph, a histogram displays key information about the data's mean, variance, outliers, and periodic features. Histograms are so important than several libraries make histogramming extremely easy:
Histogram plots are often both surprising and boring: some bins have more items than expected, some bins have fewer, and a lot of bins are empty. It's not unreasonable to immediately want to ask: can we peer inside a bin? Which examples from my dataset are actually in there? And, since this histogram only shows one dimension of the data, what might be some other dimensions or factors that are common among most of the things in that bin?
This tutorial will show you how OarphPy's HistogramWithExamplesPlotter
helps you do exactly that! What do you need?
Why HistogramWithExamplesPlotter
?
To run this notebook locally, try using the oarphpy/full
dockerized environment:
docker run -it --rm --net=host oarphpy/full:0.1.1 jupyter notebook --allow-root --ip="*"
If you can't run the notebook locally, find an HTML-rendered copy here.
Google Colab You can also run this notebook in Google Colab. In the Colab environment, this notebook will install oarphpy
, Spark, and Java. Running the cell below will take care of that for you. You might need to restart the runtime (Use the menu option: Runtime > Restart runtime ...) in order for Colab to recognize the new modules.
import os
import sys
if 'google.colab' in sys.modules:
!pip install oarphpy[spark]==0.1.1
!pip install pyspark==3.3.2
!apt-get update && apt-get install -y openjdk-11-jdk
os.environ['JAVA_HOME'] = '/usr/lib/jvm/java-11-openjdk-amd64'
The MNIST dataset is well-studied in Computer Vision and consists of thousands of small pictures of hand-written digits. (New to MNIST? Suppose you're the Post Office and you want to train a Computer Vision model that can read the zipcode digits that people write on their mail. MNIST has a sample of such handwritten digits). Today, it's easy to train a convolutional neural network on MNIST and achieve over 98% accuracy. We're going to do exactly that in the next notebook cell!
But MNIST is a relatively small dataset versus all the digits people have ever written on paper. How robust is a trained MNIST model to new data? What if we don't have labels for that new data? In this tutorial, we're going to use HistogramWithExamplesPlotter
to examine the scores that an MNIST-trained model gives to "corrupted" data never seen at training time.
First, let's train a basic MNIST model using Pytorch:
!pip install -v tqdm torch
Using pip 23.0.1 from /usr/local/lib/python3.10/dist-packages/pip (python 3.10) Collecting tqdm Downloading tqdm-4.65.0-py3-none-any.whl (77 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 77.1/77.1 kB 2.4 MB/s eta 0:00:00 Requirement already satisfied: torch in /usr/lib/python3/dist-packages (1.13.1) Installing collected packages: tqdm changing mode of /usr/local/bin/tqdm to 755 Successfully installed tqdm-4.65.0 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
# Basic MNIST ConvNet c/o Pytorch (with some small modifications noted)
# https://github.com/pytorch/examples/blob/40289773aa4916fad0d50967917b3ae8aa534fd6/mnist/main.py#L1
model_ckpt = '/opt/mnist_cnn.pt'
import os
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
from torchvision import datasets, transforms
from torch.optim.lr_scheduler import StepLR
from tqdm.notebook import tqdm
torch.manual_seed(1337)
if 'google.colab' in sys.modules:
DEVICE = 'cuda'
else:
DEVICE = 'cpu'
# We need this many epochs to get a nice bimodal score distribution for the 7 class
N_EPOCHS = 15
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(1, 32, 3, 1)
self.conv2 = nn.Conv2d(32, 64, 3, 1)
self.dropout1 = nn.Dropout(0.25)
self.dropout2 = nn.Dropout(0.5)
self.fc1 = nn.Linear(9216, 128)
self.fc2 = nn.Linear(128, 10)
def forward(self, x):
x = self.conv1(x)
x = F.relu(x)
x = self.conv2(x)
x = F.relu(x)
x = F.max_pool2d(x, 2)
x = self.dropout1(x)
x = torch.flatten(x, 1)
x = self.fc1(x)
x = F.relu(x)
x = self.dropout2(x)
x = self.fc2(x)
# Use softmax instead for easier interpretation of logits
# output = F.log_softmax(x, dim=1)
output = F.softmax(x, dim=1)
return output
def train(model, train_loader, optimizer, epoch):
model.train()
iter_train = tqdm(enumerate(train_loader), desc='train_batches', total=len(train_loader))
for batch_idx, (data, target) in iter_train:
data, target = data.to(DEVICE), target.to(DEVICE)
optimizer.zero_grad()
output = model(data)
# Push log into the loss instead of net output
#loss = F.nll_loss(output, target)
loss = F.nll_loss(torch.log(output), target)
loss.backward()
optimizer.step()
print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
epoch, batch_idx * len(data), len(train_loader.dataset),
100. * batch_idx / len(train_loader), loss.item()))
def test(model, test_loader):
model.eval()
test_loss = 0
correct = 0
with torch.no_grad():
iter_test = tqdm(test_loader, desc='test_batches', total=len(test_loader))
for data, target in iter_test:
data, target = data.to(DEVICE), target.to(DEVICE)
output = model(data)
test_loss += F.nll_loss(output, target, reduction='sum').item()
pred = output.argmax(dim=1, keepdim=True)
correct += pred.eq(target.view_as(pred)).sum().item()
test_loss /= len(test_loader.dataset)
print('\nTest set: Average loss: {:.4f}, Accuracy: {}/{} ({:.0f}%)\n'.format(
test_loss, correct, len(test_loader.dataset),
100. * correct / len(test_loader.dataset)))
train_kwargs = {'batch_size': 128}
test_kwargs = {'batch_size': 1024}
transform = transforms.Compose([
transforms.ToTensor(),
# transforms.Normalize((0.1307,), (0.3081,))
])
dataset1 = datasets.MNIST('/opt/mnist-data', train=True, download=True, transform=transform)
dataset2 = datasets.MNIST('/opt/mnist-data', train=False, transform=transform)
train_loader = torch.utils.data.DataLoader(dataset1, **train_kwargs)
test_loader = torch.utils.data.DataLoader(dataset2, **test_kwargs)
model = Net().to(DEVICE)
optimizer = optim.Adadelta(model.parameters(), lr=1.0)
scheduler = StepLR(optimizer, step_size=1, gamma=0.7)
if os.path.exists(model_ckpt):
print(f"Resuming from existing checkpoint {model_ckpt}")
print(f"To re-train, delete the checkpoint: $ rm {model_ckpt}")
model.load_state_dict(torch.load(model_ckpt))
else:
print(f"Training and saving to {model_ckpt}")
print("NOTE! If you'd like to skip training, you can download a copy of the model here:")
print("https://drive.google.com/file/d/1rUey6jIW_duT20QNjnUL3i7LYI1u7IJW/view?usp=sharing")
for epoch in tqdm(range(1, N_EPOCHS + 1), desc='epoch'):
train(model, train_loader, optimizer, epoch)
test(model, test_loader)
scheduler.step()
torch.save(model.state_dict(), model_ckpt)
x_test = torch.cat([xx[0] for xx in test_loader])
def model_predict(x):
model.cpu().eval()
with torch.no_grad():
prob = model(x)
pred = prob.argmax(dim=1, keepdim=True)
return prob, pred
Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz to /opt/mnist-data/MNIST/raw/train-images-idx3-ubyte.gz
0%| | 0/9912422 [00:00<?, ?it/s]
Extracting /opt/mnist-data/MNIST/raw/train-images-idx3-ubyte.gz to /opt/mnist-data/MNIST/raw Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz Downloading http://yann.lecun.com/exdb/mnist/train-labels-idx1-ubyte.gz to /opt/mnist-data/MNIST/raw/train-labels-idx1-ubyte.gz
0%| | 0/28881 [00:00<?, ?it/s]
Extracting /opt/mnist-data/MNIST/raw/train-labels-idx1-ubyte.gz to /opt/mnist-data/MNIST/raw Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz Downloading http://yann.lecun.com/exdb/mnist/t10k-images-idx3-ubyte.gz to /opt/mnist-data/MNIST/raw/t10k-images-idx3-ubyte.gz
0%| | 0/1648877 [00:00<?, ?it/s]
Extracting /opt/mnist-data/MNIST/raw/t10k-images-idx3-ubyte.gz to /opt/mnist-data/MNIST/raw Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz Downloading http://yann.lecun.com/exdb/mnist/t10k-labels-idx1-ubyte.gz to /opt/mnist-data/MNIST/raw/t10k-labels-idx1-ubyte.gz
0%| | 0/4542 [00:00<?, ?it/s]
Extracting /opt/mnist-data/MNIST/raw/t10k-labels-idx1-ubyte.gz to /opt/mnist-data/MNIST/raw Training and saving to /opt/mnist_cnn.pt
epoch: 0%| | 0/15 [00:00<?, ?it/s]
train_batches: 0%| | 0/469 [00:00<?, ?it/s]
Train Epoch: 1 [44928/60000 (100%)] Loss: 0.198304
test_batches: 0%| | 0/10 [00:00<?, ?it/s]
Test set: Average loss: -0.9678, Accuracy: 9798/10000 (98%)
train_batches: 0%| | 0/469 [00:00<?, ?it/s]
Train Epoch: 2 [44928/60000 (100%)] Loss: 0.306051
test_batches: 0%| | 0/10 [00:00<?, ?it/s]
Test set: Average loss: -0.9788, Accuracy: 9844/10000 (98%)
train_batches: 0%| | 0/469 [00:00<?, ?it/s]
Train Epoch: 3 [44928/60000 (100%)] Loss: 0.142083
test_batches: 0%| | 0/10 [00:00<?, ?it/s]
Test set: Average loss: -0.9826, Accuracy: 9873/10000 (99%)
train_batches: 0%| | 0/469 [00:00<?, ?it/s]
Train Epoch: 4 [44928/60000 (100%)] Loss: 0.198513
test_batches: 0%| | 0/10 [00:00<?, ?it/s]
Test set: Average loss: -0.9850, Accuracy: 9890/10000 (99%)
train_batches: 0%| | 0/469 [00:00<?, ?it/s]
Train Epoch: 5 [44928/60000 (100%)] Loss: 0.184776
test_batches: 0%| | 0/10 [00:00<?, ?it/s]
Test set: Average loss: -0.9849, Accuracy: 9887/10000 (99%)
train_batches: 0%| | 0/469 [00:00<?, ?it/s]
Train Epoch: 6 [44928/60000 (100%)] Loss: 0.206751
test_batches: 0%| | 0/10 [00:00<?, ?it/s]
Test set: Average loss: -0.9855, Accuracy: 9881/10000 (99%)
train_batches: 0%| | 0/469 [00:00<?, ?it/s]
Train Epoch: 7 [44928/60000 (100%)] Loss: 0.204587
test_batches: 0%| | 0/10 [00:00<?, ?it/s]
Test set: Average loss: -0.9859, Accuracy: 9889/10000 (99%)
train_batches: 0%| | 0/469 [00:00<?, ?it/s]
Train Epoch: 8 [44928/60000 (100%)] Loss: 0.227512
test_batches: 0%| | 0/10 [00:00<?, ?it/s]
Test set: Average loss: -0.9865, Accuracy: 9889/10000 (99%)
train_batches: 0%| | 0/469 [00:00<?, ?it/s]
Train Epoch: 9 [44928/60000 (100%)] Loss: 0.190103
test_batches: 0%| | 0/10 [00:00<?, ?it/s]
Test set: Average loss: -0.9865, Accuracy: 9885/10000 (99%)
train_batches: 0%| | 0/469 [00:00<?, ?it/s]
Train Epoch: 10 [44928/60000 (100%)] Loss: 0.145944
test_batches: 0%| | 0/10 [00:00<?, ?it/s]
Test set: Average loss: -0.9863, Accuracy: 9889/10000 (99%)
train_batches: 0%| | 0/469 [00:00<?, ?it/s]
Train Epoch: 11 [44928/60000 (100%)] Loss: 0.171438
test_batches: 0%| | 0/10 [00:00<?, ?it/s]
Test set: Average loss: -0.9867, Accuracy: 9889/10000 (99%)
train_batches: 0%| | 0/469 [00:00<?, ?it/s]
Train Epoch: 12 [44928/60000 (100%)] Loss: 0.180739
test_batches: 0%| | 0/10 [00:00<?, ?it/s]
Test set: Average loss: -0.9868, Accuracy: 9891/10000 (99%)
train_batches: 0%| | 0/469 [00:00<?, ?it/s]
Train Epoch: 13 [44928/60000 (100%)] Loss: 0.156769
test_batches: 0%| | 0/10 [00:00<?, ?it/s]
Test set: Average loss: -0.9869, Accuracy: 9890/10000 (99%)
train_batches: 0%| | 0/469 [00:00<?, ?it/s]
Train Epoch: 14 [44928/60000 (100%)] Loss: 0.150828
test_batches: 0%| | 0/10 [00:00<?, ?it/s]
Test set: Average loss: -0.9868, Accuracy: 9891/10000 (99%)
train_batches: 0%| | 0/469 [00:00<?, ?it/s]
Train Epoch: 15 [44928/60000 (100%)] Loss: 0.137323
test_batches: 0%| | 0/10 [00:00<?, ?it/s]
Test set: Average loss: -0.9869, Accuracy: 9892/10000 (99%)
Now, let's run the trained model on the test set and pack the predictions into a Pandas DataFrame. For each input, the network outputs a score for each class (the numbers 0 through 9). We'll take a look at the raw network scores for the class "7," which is easy to confused for a "1".
prob, pred = model_predict(x_test)
rows = []
for i, (x_i, score_i, pred_i) in enumerate(zip(x_test, prob, pred)):
row = {}
for classname, score in enumerate(score_i):
row[f'score_{classname}'] = score.item()
row['x_i'] = x_i.squeeze().tolist()
rows.append(row)
import pandas as pd
prediction_df = pd.DataFrame(rows)
prediction_df
score_0 | score_1 | score_2 | score_3 | score_4 | score_5 | score_6 | score_7 | score_8 | score_9 | x_i | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1.666295e-12 | 9.708602e-11 | 1.020098e-08 | 1.268901e-09 | 4.895701e-12 | 1.794280e-12 | 4.720299e-15 | 1.000000e+00 | 9.185045e-12 | 4.956310e-09 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
1 | 6.385335e-08 | 1.281082e-06 | 9.999985e-01 | 4.398146e-10 | 7.451101e-12 | 7.687796e-13 | 1.296026e-07 | 7.235867e-11 | 1.650108e-09 | 9.231881e-14 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
2 | 2.790225e-08 | 9.999918e-01 | 2.045216e-07 | 6.124344e-09 | 3.181621e-06 | 9.231777e-08 | 5.492074e-07 | 4.090763e-06 | 1.358098e-07 | 4.678723e-08 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
3 | 9.999950e-01 | 3.951097e-08 | 1.086515e-06 | 3.036769e-09 | 1.050577e-08 | 1.097534e-08 | 3.404809e-06 | 1.830841e-07 | 6.096547e-08 | 9.567390e-08 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
4 | 2.000482e-08 | 2.379246e-08 | 4.107488e-08 | 1.893190e-10 | 9.999777e-01 | 7.419485e-10 | 4.249667e-08 | 1.387315e-08 | 3.220784e-08 | 2.214572e-05 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
9995 | 9.127882e-12 | 8.512246e-08 | 9.999999e-01 | 5.384519e-09 | 2.463138e-14 | 4.580554e-15 | 2.152786e-13 | 1.736553e-08 | 8.733217e-10 | 3.547919e-15 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
9996 | 6.531591e-10 | 2.936270e-09 | 1.257551e-08 | 9.999963e-01 | 1.990298e-11 | 3.600434e-06 | 3.078520e-11 | 4.383115e-09 | 1.216664e-09 | 6.073076e-08 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
9997 | 1.076957e-14 | 7.316457e-10 | 1.751892e-13 | 6.589362e-14 | 1.000000e+00 | 3.043836e-12 | 1.105804e-11 | 2.092271e-09 | 4.008249e-09 | 1.101974e-08 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
9998 | 7.055724e-13 | 8.388026e-13 | 3.064934e-14 | 2.192952e-09 | 2.058131e-14 | 9.999999e-01 | 2.026460e-09 | 2.115985e-13 | 8.733659e-08 | 2.399424e-11 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
9999 | 4.967735e-08 | 1.283627e-10 | 2.104551e-08 | 9.355691e-11 | 6.125577e-08 | 5.635767e-08 | 9.999999e-01 | 1.621125e-14 | 3.916712e-09 | 6.066733e-11 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
10000 rows × 11 columns
Now let's histogram the network's scores for the 7 class. Note that since the network has high accuracy, the scores are rather cleanly bi-modal. For this stage, we'll use the pandas
built-in hist()
feature, which gives us a histogram (though without examples or other visualization).
%matplotlib inline
prediction_df['score_7'].hist()
<Axes: >
MNIST-C is a benchmark dataset derived from MNIST that has synthetic corruptions. For example, in MNIST-C, digits are rotated, blurred, speckled, etc. We will take the normal MNIST model we trained above, run inference on MNIST-C examples, and examine how well the corruption-unaware network generalizes. This scenario simulates a common situation in production where one has a trained model, lots of unlabeled data, and little tooling for measuring or inspecting error in the wild. We'll see how HistogramWithExamplesPlotter
can be a useful tool for quick exploration.
First, let's get the code for using MNIST-C:
!cd /opt && ((git clone https://github.com/pwais/oarphpy-mirror-mnist-c && \
cd oarphpy-mirror-mnist-c && git checkout bba57e4ccc282f106907c5239958e72298451ea7) || echo "have mnist-c")
import sys
sys.path.append('/opt/oarphpy-mirror-mnist-c')
# These are hard requirements of the package we need from above
!pip3 install scikit-image==0.19.3
!pip3 install wand scipy
!ln -s /opt/oarphpy-mirror-mnist-c/pessimal_noise_matrix ./pessimal_noise_matrix || echo "symlink placed"
!apt-get install -y libmagickwand-dev
Cloning into 'oarphpy-mirror-mnist-c'... remote: Enumerating objects: 22, done. remote: Total 22 (delta 0), reused 0 (delta 0), pack-reused 22 Receiving objects: 100% (22/22), 1.91 MiB | 5.01 MiB/s, done. Resolving deltas: 100% (4/4), done. Note: switching to 'bba57e4ccc282f106907c5239958e72298451ea7'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by switching back to a branch. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -c with the switch command. Example: git switch -c <new-branch-name> Or undo this operation with: git switch - Turn off this advice by setting config variable advice.detachedHead to false HEAD is now at bba57e4 updated readme Collecting scikit-image==0.19.3 Downloading scikit_image-0.19.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (13.9 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.9/13.9 MB 10.5 MB/s eta 0:00:0000:0100:01 Collecting tifffile>=2019.7.26 Downloading tifffile-2023.2.28-py3-none-any.whl (216 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 216.4/216.4 kB 10.2 MB/s eta 0:00:00 Collecting PyWavelets>=1.1.1 Downloading PyWavelets-1.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (6.8 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 6.8/6.8 MB 10.7 MB/s eta 0:00:0000:0100:01 Requirement already satisfied: imageio>=2.4.1 in /usr/local/lib/python3.10/dist-packages (from scikit-image==0.19.3) (2.22.4) Collecting networkx>=2.2 Downloading networkx-3.0-py3-none-any.whl (2.0 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 11.2 MB/s eta 0:00:00a 0:00:01 Requirement already satisfied: numpy>=1.17.0 in /usr/lib/python3/dist-packages (from scikit-image==0.19.3) (1.21.5) Requirement already satisfied: scipy>=1.4.1 in /usr/lib/python3/dist-packages (from scikit-image==0.19.3) (1.8.0) Requirement already satisfied: pillow!=7.1.0,!=7.1.1,!=8.3.0,>=6.1.0 in /usr/lib/python3/dist-packages (from scikit-image==0.19.3) (9.0.1) Requirement already satisfied: packaging>=20.0 in /usr/lib/python3/dist-packages (from scikit-image==0.19.3) (21.3) Installing collected packages: tifffile, PyWavelets, networkx, scikit-image Successfully installed PyWavelets-1.4.1 networkx-3.0 scikit-image-0.19.3 tifffile-2023.2.28 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv Collecting wand Downloading Wand-0.6.11-py2.py3-none-any.whl (143 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 143.6/143.6 kB 3.2 MB/s eta 0:00:0000:01 Requirement already satisfied: scipy in /usr/lib/python3/dist-packages (1.8.0) Installing collected packages: wand Successfully installed wand-0.6.11 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv ln: failed to create symbolic link './pessimal_noise_matrix': File exists symlink placed Reading package lists... Done Building dependency tree... Done Reading state information... Done The following additional packages will be installed: autoconf automake autotools-dev bzip2-doc file fonts-droid-fallback fonts-noto-mono fonts-urw-base35 ghostscript gir1.2-freedesktop gir1.2-gdkpixbuf-2.0 gir1.2-rsvg-2.0 gsfonts icu-devtools imagemagick-6-common libblkid-dev libbrotli-dev libbz2-dev libcairo-script-interpreter2 libcairo2-dev libdeflate-dev libdjvulibre-dev libdjvulibre-text libdjvulibre21 libexif-dev libexif-doc libffi-dev libfftw3-double3 libfontconfig-dev libfontconfig1-dev libfreetype-dev libfreetype6-dev libgdk-pixbuf-2.0-dev libgdk-pixbuf2.0-bin libglib2.0-dev libglib2.0-dev-bin libgs9 libgs9-common libicu-dev libidn12 libijs-0.35 libilmbase-dev libjbig-dev libjbig2dec0 libjpeg-dev libjpeg-turbo8-dev libjpeg8-dev libjxr-tools libjxr0 liblcms2-dev liblqr-1-0 liblqr-1-0-dev libltdl-dev liblzma-dev liblzo2-2 libmagic-mgc libmagic1 libmagickcore-6-arch-config libmagickcore-6-headers libmagickcore-6.q16-6 libmagickcore-6.q16-6-extra libmagickcore-6.q16-dev libmagickwand-6-headers libmagickwand-6.q16-6 libmagickwand-6.q16-dev libmount-dev libopenexr-dev libopenjp2-7-dev libpaper-utils libpaper1 libpcre16-3 libpcre2-16-0 libpcre2-32-0 libpcre2-dev libpcre2-posix3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libpixman-1-dev libpng-dev libpng-tools librsvg2-common librsvg2-dev libselinux1-dev libsepol-dev libsigsegv2 libtiff-dev libtiffxx5 libtool libwmf-0.2-7 libwmf-dev libwmflite-0.2-7 libxcb-render0-dev libxcb-shm0-dev libxext-dev libxml2-dev libxrender-dev m4 pkg-config poppler-data uuid-dev Suggested packages: autoconf-archive gnu-standards autoconf-doc gettext fonts-noto fonts-freefont-otf | fonts-freefont-ttf fonts-texgyre ghostscript-x libcairo2-doc libfftw3-bin libfftw3-dev freetype2-doc libgirepository1.0-dev libglib2.0-doc libxml2-utils icu-doc libtool-doc liblzma-doc inkscape librsvg2-doc gcj-jdk libwmf-0.2-7-gtk libwmf-doc libxext-doc m4-doc poppler-utils fonts-japanese-mincho | fonts-ipafont-mincho fonts-japanese-gothic | fonts-ipafont-gothic fonts-arphic-ukai fonts-arphic-uming fonts-nanum The following NEW packages will be installed: autoconf automake autotools-dev bzip2-doc file fonts-droid-fallback fonts-noto-mono fonts-urw-base35 ghostscript gir1.2-freedesktop gir1.2-gdkpixbuf-2.0 gir1.2-rsvg-2.0 gsfonts icu-devtools imagemagick-6-common libblkid-dev libbrotli-dev libbz2-dev libcairo-script-interpreter2 libcairo2-dev libdeflate-dev libdjvulibre-dev libdjvulibre-text libdjvulibre21 libexif-dev libexif-doc libffi-dev libfftw3-double3 libfontconfig-dev libfontconfig1-dev libfreetype-dev libfreetype6-dev libgdk-pixbuf-2.0-dev libgdk-pixbuf2.0-bin libglib2.0-dev libglib2.0-dev-bin libgs9 libgs9-common libicu-dev libidn12 libijs-0.35 libilmbase-dev libjbig-dev libjbig2dec0 libjpeg-dev libjpeg-turbo8-dev libjpeg8-dev libjxr-tools libjxr0 liblcms2-dev liblqr-1-0 liblqr-1-0-dev libltdl-dev liblzma-dev liblzo2-2 libmagic-mgc libmagic1 libmagickcore-6-arch-config libmagickcore-6-headers libmagickcore-6.q16-6 libmagickcore-6.q16-6-extra libmagickcore-6.q16-dev libmagickwand-6-headers libmagickwand-6.q16-6 libmagickwand-6.q16-dev libmagickwand-dev libmount-dev libopenexr-dev libopenjp2-7-dev libpaper-utils libpaper1 libpcre16-3 libpcre2-16-0 libpcre2-32-0 libpcre2-dev libpcre2-posix3 libpcre3-dev libpcre32-3 libpcrecpp0v5 libpixman-1-dev libpng-dev libpng-tools librsvg2-common librsvg2-dev libselinux1-dev libsepol-dev libsigsegv2 libtiff-dev libtiffxx5 libtool libwmf-0.2-7 libwmf-dev libwmflite-0.2-7 libxcb-render0-dev libxcb-shm0-dev libxext-dev libxml2-dev libxrender-dev m4 pkg-config poppler-data uuid-dev 0 upgraded, 102 newly installed, 0 to remove and 1 not upgraded. Need to get 54.3 MB of archives. After this operation, 208 MB of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 fonts-droid-fallback all 1:6.0.1r16-1.1build1 [1805 kB] Get:2 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 imagemagick-6-common all 8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1 [64.5 kB] Get:3 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 libmagickcore-6-headers all 8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1 [52.8 kB] Get:4 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 libmagickcore-6-arch-config amd64 8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1 [26.5 kB] Get:5 http://archive.ubuntu.com/ubuntu jammy/main amd64 libfftw3-double3 amd64 3.3.8-2ubuntu8 [770 kB] Get:6 http://archive.ubuntu.com/ubuntu jammy/universe amd64 liblqr-1-0 amd64 0.4.2-2.1 [27.7 kB] Get:7 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 libmagickcore-6.q16-6 amd64 8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1 [1789 kB] Get:8 http://archive.ubuntu.com/ubuntu jammy/main amd64 libdjvulibre-text all 3.5.28-2build2 [50.9 kB] Get:9 http://archive.ubuntu.com/ubuntu jammy/main amd64 libdjvulibre21 amd64 3.5.28-2build2 [624 kB] Get:10 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 libmagickwand-6.q16-6 amd64 8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1 [328 kB] Get:11 http://archive.ubuntu.com/ubuntu jammy/main amd64 libwmflite-0.2-7 amd64 0.2.12-5ubuntu1 [68.9 kB] Get:12 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 libmagickcore-6.q16-6-extra amd64 8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1 [70.1 kB] Get:13 http://archive.ubuntu.com/ubuntu jammy/main amd64 libbz2-dev amd64 1.0.8-5build1 [32.5 kB] Get:14 http://archive.ubuntu.com/ubuntu jammy/main amd64 libjpeg-turbo8-dev amd64 2.1.2-0ubuntu1 [257 kB] Get:15 http://archive.ubuntu.com/ubuntu jammy/main amd64 libjpeg8-dev amd64 8c-2ubuntu10 [1476 B] Get:16 http://archive.ubuntu.com/ubuntu jammy/main amd64 libjpeg-dev amd64 8c-2ubuntu10 [1472 B] Get:17 http://archive.ubuntu.com/ubuntu jammy/main amd64 libdjvulibre-dev amd64 3.5.28-2build2 [2463 kB] Get:18 http://archive.ubuntu.com/ubuntu jammy/main amd64 libexif-dev amd64 0.6.24-1build1 [113 kB] Get:19 http://archive.ubuntu.com/ubuntu jammy/main amd64 libbrotli-dev amd64 1.0.9-2build6 [337 kB] Get:20 http://archive.ubuntu.com/ubuntu jammy/main amd64 libpng-dev amd64 1.6.37-3build5 [192 kB] Get:21 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libfreetype-dev amd64 2.11.1+dfsg-1ubuntu0.1 [555 kB] Get:22 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libfreetype6-dev amd64 2.11.1+dfsg-1ubuntu0.1 [8298 B] Get:23 http://archive.ubuntu.com/ubuntu jammy/main amd64 libopenjp2-7-dev amd64 2.4.0-6 [245 kB] Get:24 http://archive.ubuntu.com/ubuntu jammy/main amd64 liblcms2-dev amd64 2.12~rc1-2build2 [1887 kB] Get:25 http://archive.ubuntu.com/ubuntu jammy/universe amd64 liblqr-1-0-dev amd64 0.4.2-2.1 [69.1 kB] Get:26 http://archive.ubuntu.com/ubuntu jammy/main amd64 libsigsegv2 amd64 2.13-1ubuntu3 [14.6 kB] Get:27 http://archive.ubuntu.com/ubuntu jammy/main amd64 m4 amd64 1.4.18-5ubuntu2 [199 kB] Get:28 http://archive.ubuntu.com/ubuntu jammy/main amd64 autoconf all 2.71-2 [338 kB] Get:29 http://archive.ubuntu.com/ubuntu jammy/main amd64 autotools-dev all 20220109.1 [44.9 kB] Get:30 http://archive.ubuntu.com/ubuntu jammy/main amd64 automake all 1:1.16.5-1.3 [558 kB] Get:31 http://archive.ubuntu.com/ubuntu jammy/main amd64 libltdl-dev amd64 2.4.6-15build2 [169 kB] Get:32 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libilmbase-dev amd64 2.5.7-2 [78.4 kB] Get:33 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libopenexr-dev amd64 2.5.7-1 [73.3 kB] Get:34 http://archive.ubuntu.com/ubuntu jammy/main amd64 gir1.2-freedesktop amd64 1.72.0-1 [22.3 kB] Get:35 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 gir1.2-gdkpixbuf-2.0 amd64 2.42.8+dfsg-1ubuntu0.2 [9482 B] Get:36 http://archive.ubuntu.com/ubuntu jammy/main amd64 gir1.2-rsvg-2.0 amd64 2.52.5+dfsg-3 [16.5 kB] Get:37 http://archive.ubuntu.com/ubuntu jammy/main amd64 liblzo2-2 amd64 2.10-2build3 [53.7 kB] Get:38 http://archive.ubuntu.com/ubuntu jammy/main amd64 libcairo-script-interpreter2 amd64 1.16.0-5ubuntu2 [62.0 kB] Get:39 http://archive.ubuntu.com/ubuntu jammy/main amd64 uuid-dev amd64 2.37.2-4ubuntu3 [33.1 kB] Get:40 http://archive.ubuntu.com/ubuntu jammy/main amd64 pkg-config amd64 0.29.2-1ubuntu3 [48.2 kB] Get:41 http://archive.ubuntu.com/ubuntu jammy/main amd64 libfontconfig-dev amd64 2.13.1-4.2ubuntu5 [151 kB] Get:42 http://archive.ubuntu.com/ubuntu jammy/main amd64 libfontconfig1-dev amd64 2.13.1-4.2ubuntu5 [1836 B] Get:43 http://archive.ubuntu.com/ubuntu jammy/main amd64 libxrender-dev amd64 1:0.9.10-1build4 [26.7 kB] Get:44 http://archive.ubuntu.com/ubuntu jammy/main amd64 libxext-dev amd64 2:1.3.4-1build1 [84.7 kB] Get:45 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libpixman-1-dev amd64 0.40.0-1ubuntu0.22.04.1 [280 kB] Get:46 http://archive.ubuntu.com/ubuntu jammy/main amd64 libxcb-render0-dev amd64 1.14-3ubuntu3 [19.6 kB] Get:47 http://archive.ubuntu.com/ubuntu jammy/main amd64 libxcb-shm0-dev amd64 1.14-3ubuntu3 [6848 B] Get:48 http://archive.ubuntu.com/ubuntu jammy/main amd64 libffi-dev amd64 3.4.2-4 [63.7 kB] Get:49 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libglib2.0-dev-bin amd64 2.72.4-0ubuntu1 [117 kB] Get:50 http://archive.ubuntu.com/ubuntu jammy/main amd64 libblkid-dev amd64 2.37.2-4ubuntu3 [185 kB] Get:51 http://archive.ubuntu.com/ubuntu jammy/main amd64 libsepol-dev amd64 3.3-1build1 [378 kB] Get:52 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libpcre2-16-0 amd64 10.39-3ubuntu0.1 [203 kB] Get:53 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libpcre2-32-0 amd64 10.39-3ubuntu0.1 [194 kB] Get:54 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libpcre2-posix3 amd64 10.39-3ubuntu0.1 [6130 B] Get:55 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libpcre2-dev amd64 10.39-3ubuntu0.1 [730 kB] Get:56 http://archive.ubuntu.com/ubuntu jammy/main amd64 libselinux1-dev amd64 3.3-1build2 [158 kB] Get:57 http://archive.ubuntu.com/ubuntu jammy/main amd64 libmount-dev amd64 2.37.2-4ubuntu3 [14.5 kB] Get:58 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libpcre16-3 amd64 2:8.39-13ubuntu0.22.04.1 [164 kB] Get:59 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libpcre32-3 amd64 2:8.39-13ubuntu0.22.04.1 [155 kB] Get:60 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libpcrecpp0v5 amd64 2:8.39-13ubuntu0.22.04.1 [16.5 kB] Get:61 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libpcre3-dev amd64 2:8.39-13ubuntu0.22.04.1 [579 kB] Get:62 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libglib2.0-dev amd64 2.72.4-0ubuntu1 [1735 kB] Get:63 http://archive.ubuntu.com/ubuntu jammy/main amd64 libcairo2-dev amd64 1.16.0-5ubuntu2 [692 kB] Get:64 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgdk-pixbuf2.0-bin amd64 2.42.8+dfsg-1ubuntu0.2 [14.2 kB] Get:65 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libjbig-dev amd64 2.1-3.1ubuntu0.22.04.1 [27.4 kB] Get:66 http://archive.ubuntu.com/ubuntu jammy/main amd64 liblzma-dev amd64 5.2.5-2ubuntu1 [159 kB] Get:67 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libtiffxx5 amd64 4.3.0-6ubuntu0.3 [5738 B] Get:68 http://archive.ubuntu.com/ubuntu jammy/main amd64 libdeflate-dev amd64 1.10-2 [59.2 kB] Get:69 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libtiff-dev amd64 4.3.0-6ubuntu0.3 [314 kB] Get:70 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgdk-pixbuf-2.0-dev amd64 2.42.8+dfsg-1ubuntu0.2 [47.8 kB] Get:71 http://archive.ubuntu.com/ubuntu jammy/main amd64 librsvg2-common amd64 2.52.5+dfsg-3 [17.7 kB] Get:72 http://archive.ubuntu.com/ubuntu jammy/main amd64 librsvg2-dev amd64 2.52.5+dfsg-3 [49.7 kB] Get:73 http://archive.ubuntu.com/ubuntu jammy/main amd64 libwmf-0.2-7 amd64 0.2.12-5ubuntu1 [94.2 kB] Get:74 http://archive.ubuntu.com/ubuntu jammy/main amd64 libwmf-dev amd64 0.2.12-5ubuntu1 [236 kB] Get:75 http://archive.ubuntu.com/ubuntu jammy/main amd64 icu-devtools amd64 70.1-2 [197 kB] Get:76 http://archive.ubuntu.com/ubuntu jammy/main amd64 libicu-dev amd64 70.1-2 [11.6 MB] Get:77 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libxml2-dev amd64 2.9.13+dfsg-1ubuntu0.2 [804 kB] Get:78 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 libmagickcore-6.q16-dev amd64 8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1 [1115 kB] Get:79 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 libmagickwand-6-headers all 8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1 [10.4 kB] Get:80 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 libmagickwand-6.q16-dev amd64 8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1 [357 kB] Get:81 http://archive.ubuntu.com/ubuntu jammy-updates/universe amd64 libmagickwand-dev all 8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1 [1176 B] Get:82 http://archive.ubuntu.com/ubuntu jammy/main amd64 poppler-data all 0.4.11-1 [2171 kB] Get:83 http://archive.ubuntu.com/ubuntu jammy/main amd64 libmagic-mgc amd64 1:5.41-3 [257 kB] Get:84 http://archive.ubuntu.com/ubuntu jammy/main amd64 libmagic1 amd64 1:5.41-3 [87.2 kB] Get:85 http://archive.ubuntu.com/ubuntu jammy/main amd64 file amd64 1:5.41-3 [21.5 kB] Get:86 http://archive.ubuntu.com/ubuntu jammy/main amd64 bzip2-doc all 1.0.8-5build1 [500 kB] Get:87 http://archive.ubuntu.com/ubuntu jammy/main amd64 fonts-noto-mono all 20201225-1build1 [397 kB] Get:88 http://archive.ubuntu.com/ubuntu jammy/main amd64 fonts-urw-base35 all 20200910-1 [6367 kB] Get:89 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgs9-common all 9.55.0~dfsg1-0ubuntu5.1 [751 kB] Get:90 http://archive.ubuntu.com/ubuntu jammy/main amd64 libidn12 amd64 1.38-4build1 [60.6 kB] Get:91 http://archive.ubuntu.com/ubuntu jammy/main amd64 libijs-0.35 amd64 0.35-15build2 [16.5 kB] Get:92 http://archive.ubuntu.com/ubuntu jammy/main amd64 libjbig2dec0 amd64 0.19-3build2 [64.7 kB] Get:93 http://archive.ubuntu.com/ubuntu jammy/main amd64 libpaper1 amd64 1.1.28build2 [13.8 kB] Get:94 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 libgs9 amd64 9.55.0~dfsg1-0ubuntu5.1 [5037 kB] Get:95 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 ghostscript amd64 9.55.0~dfsg1-0ubuntu5.1 [49.5 kB] Get:96 http://archive.ubuntu.com/ubuntu jammy/universe amd64 gsfonts all 1:8.11+urwcyr1.0.7~pre44-4.5 [3120 kB] Get:97 http://archive.ubuntu.com/ubuntu jammy/main amd64 libexif-doc all 0.6.24-1build1 [317 kB] Get:98 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libjxr0 amd64 1.2~git20170615.f752187-5 [174 kB] Get:99 http://archive.ubuntu.com/ubuntu jammy/universe amd64 libjxr-tools amd64 1.2~git20170615.f752187-5 [16.0 kB] Get:100 http://archive.ubuntu.com/ubuntu jammy/main amd64 libpaper-utils amd64 1.1.28build2 [8674 B] Get:101 http://archive.ubuntu.com/ubuntu jammy/main amd64 libpng-tools amd64 1.6.37-3build5 [28.7 kB] Get:102 http://archive.ubuntu.com/ubuntu jammy/main amd64 libtool all 2.4.6-15build2 [164 kB] Fetched 54.3 MB in 18s (3044 kB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package fonts-droid-fallback. (Reading database ... 99724 files and directories currently installed.) Preparing to unpack .../000-fonts-droid-fallback_1%3a6.0.1r16-1.1build1_all.deb ... Unpacking fonts-droid-fallback (1:6.0.1r16-1.1build1) ... Selecting previously unselected package imagemagick-6-common. Preparing to unpack .../001-imagemagick-6-common_8%3a6.9.11.60+dfsg-1.3ubuntu0.22.04.1_all.deb ... Unpacking imagemagick-6-common (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Selecting previously unselected package libmagickcore-6-headers. Preparing to unpack .../002-libmagickcore-6-headers_8%3a6.9.11.60+dfsg-1.3ubuntu0.22.04.1_all.deb ... Unpacking libmagickcore-6-headers (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Selecting previously unselected package libmagickcore-6-arch-config:amd64. Preparing to unpack .../003-libmagickcore-6-arch-config_8%3a6.9.11.60+dfsg-1.3ubuntu0.22.04.1_amd64.deb ... Unpacking libmagickcore-6-arch-config:amd64 (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Selecting previously unselected package libfftw3-double3:amd64. Preparing to unpack .../004-libfftw3-double3_3.3.8-2ubuntu8_amd64.deb ... Unpacking libfftw3-double3:amd64 (3.3.8-2ubuntu8) ... Selecting previously unselected package liblqr-1-0:amd64. Preparing to unpack .../005-liblqr-1-0_0.4.2-2.1_amd64.deb ... Unpacking liblqr-1-0:amd64 (0.4.2-2.1) ... Selecting previously unselected package libmagickcore-6.q16-6:amd64. Preparing to unpack .../006-libmagickcore-6.q16-6_8%3a6.9.11.60+dfsg-1.3ubuntu0.22.04.1_amd64.deb ... Unpacking libmagickcore-6.q16-6:amd64 (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Selecting previously unselected package libdjvulibre-text. Preparing to unpack .../007-libdjvulibre-text_3.5.28-2build2_all.deb ... Unpacking libdjvulibre-text (3.5.28-2build2) ... Selecting previously unselected package libdjvulibre21:amd64. Preparing to unpack .../008-libdjvulibre21_3.5.28-2build2_amd64.deb ... Unpacking libdjvulibre21:amd64 (3.5.28-2build2) ... Selecting previously unselected package libmagickwand-6.q16-6:amd64. Preparing to unpack .../009-libmagickwand-6.q16-6_8%3a6.9.11.60+dfsg-1.3ubuntu0.22.04.1_amd64.deb ... Unpacking libmagickwand-6.q16-6:amd64 (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Selecting previously unselected package libwmflite-0.2-7:amd64. Preparing to unpack .../010-libwmflite-0.2-7_0.2.12-5ubuntu1_amd64.deb ... Unpacking libwmflite-0.2-7:amd64 (0.2.12-5ubuntu1) ... Selecting previously unselected package libmagickcore-6.q16-6-extra:amd64. Preparing to unpack .../011-libmagickcore-6.q16-6-extra_8%3a6.9.11.60+dfsg-1.3ubuntu0.22.04.1_amd64.deb ... Unpacking libmagickcore-6.q16-6-extra:amd64 (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Selecting previously unselected package libbz2-dev:amd64. Preparing to unpack .../012-libbz2-dev_1.0.8-5build1_amd64.deb ... Unpacking libbz2-dev:amd64 (1.0.8-5build1) ... Selecting previously unselected package libjpeg-turbo8-dev:amd64. Preparing to unpack .../013-libjpeg-turbo8-dev_2.1.2-0ubuntu1_amd64.deb ... Unpacking libjpeg-turbo8-dev:amd64 (2.1.2-0ubuntu1) ... Selecting previously unselected package libjpeg8-dev:amd64. Preparing to unpack .../014-libjpeg8-dev_8c-2ubuntu10_amd64.deb ... Unpacking libjpeg8-dev:amd64 (8c-2ubuntu10) ... Selecting previously unselected package libjpeg-dev:amd64. Preparing to unpack .../015-libjpeg-dev_8c-2ubuntu10_amd64.deb ... Unpacking libjpeg-dev:amd64 (8c-2ubuntu10) ... Selecting previously unselected package libdjvulibre-dev:amd64. Preparing to unpack .../016-libdjvulibre-dev_3.5.28-2build2_amd64.deb ... Unpacking libdjvulibre-dev:amd64 (3.5.28-2build2) ... Selecting previously unselected package libexif-dev:amd64. Preparing to unpack .../017-libexif-dev_0.6.24-1build1_amd64.deb ... Unpacking libexif-dev:amd64 (0.6.24-1build1) ... Selecting previously unselected package libbrotli-dev:amd64. Preparing to unpack .../018-libbrotli-dev_1.0.9-2build6_amd64.deb ... Unpacking libbrotli-dev:amd64 (1.0.9-2build6) ... Selecting previously unselected package libpng-dev:amd64. Preparing to unpack .../019-libpng-dev_1.6.37-3build5_amd64.deb ... Unpacking libpng-dev:amd64 (1.6.37-3build5) ... Selecting previously unselected package libfreetype-dev:amd64. Preparing to unpack .../020-libfreetype-dev_2.11.1+dfsg-1ubuntu0.1_amd64.deb ... Unpacking libfreetype-dev:amd64 (2.11.1+dfsg-1ubuntu0.1) ... Selecting previously unselected package libfreetype6-dev:amd64. Preparing to unpack .../021-libfreetype6-dev_2.11.1+dfsg-1ubuntu0.1_amd64.deb ... Unpacking libfreetype6-dev:amd64 (2.11.1+dfsg-1ubuntu0.1) ... Selecting previously unselected package libopenjp2-7-dev:amd64. Preparing to unpack .../022-libopenjp2-7-dev_2.4.0-6_amd64.deb ... Unpacking libopenjp2-7-dev:amd64 (2.4.0-6) ... Selecting previously unselected package liblcms2-dev:amd64. Preparing to unpack .../023-liblcms2-dev_2.12~rc1-2build2_amd64.deb ... Unpacking liblcms2-dev:amd64 (2.12~rc1-2build2) ... Selecting previously unselected package liblqr-1-0-dev:amd64. Preparing to unpack .../024-liblqr-1-0-dev_0.4.2-2.1_amd64.deb ... Unpacking liblqr-1-0-dev:amd64 (0.4.2-2.1) ... Selecting previously unselected package libsigsegv2:amd64. Preparing to unpack .../025-libsigsegv2_2.13-1ubuntu3_amd64.deb ... Unpacking libsigsegv2:amd64 (2.13-1ubuntu3) ... Selecting previously unselected package m4. Preparing to unpack .../026-m4_1.4.18-5ubuntu2_amd64.deb ... Unpacking m4 (1.4.18-5ubuntu2) ... Selecting previously unselected package autoconf. Preparing to unpack .../027-autoconf_2.71-2_all.deb ... Unpacking autoconf (2.71-2) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../028-autotools-dev_20220109.1_all.deb ... Unpacking autotools-dev (20220109.1) ... Selecting previously unselected package automake. Preparing to unpack .../029-automake_1%3a1.16.5-1.3_all.deb ... Unpacking automake (1:1.16.5-1.3) ... Selecting previously unselected package libltdl-dev:amd64. Preparing to unpack .../030-libltdl-dev_2.4.6-15build2_amd64.deb ... Unpacking libltdl-dev:amd64 (2.4.6-15build2) ... Selecting previously unselected package libilmbase-dev:amd64. Preparing to unpack .../031-libilmbase-dev_2.5.7-2_amd64.deb ... Unpacking libilmbase-dev:amd64 (2.5.7-2) ... Selecting previously unselected package libopenexr-dev. Preparing to unpack .../032-libopenexr-dev_2.5.7-1_amd64.deb ... Unpacking libopenexr-dev (2.5.7-1) ... Selecting previously unselected package gir1.2-freedesktop:amd64. Preparing to unpack .../033-gir1.2-freedesktop_1.72.0-1_amd64.deb ... Unpacking gir1.2-freedesktop:amd64 (1.72.0-1) ... Selecting previously unselected package gir1.2-gdkpixbuf-2.0:amd64. Preparing to unpack .../034-gir1.2-gdkpixbuf-2.0_2.42.8+dfsg-1ubuntu0.2_amd64.deb ... Unpacking gir1.2-gdkpixbuf-2.0:amd64 (2.42.8+dfsg-1ubuntu0.2) ... Selecting previously unselected package gir1.2-rsvg-2.0:amd64. Preparing to unpack .../035-gir1.2-rsvg-2.0_2.52.5+dfsg-3_amd64.deb ... Unpacking gir1.2-rsvg-2.0:amd64 (2.52.5+dfsg-3) ... Selecting previously unselected package liblzo2-2:amd64. Preparing to unpack .../036-liblzo2-2_2.10-2build3_amd64.deb ... Unpacking liblzo2-2:amd64 (2.10-2build3) ... Selecting previously unselected package libcairo-script-interpreter2:amd64. Preparing to unpack .../037-libcairo-script-interpreter2_1.16.0-5ubuntu2_amd64.deb ... Unpacking libcairo-script-interpreter2:amd64 (1.16.0-5ubuntu2) ... Selecting previously unselected package uuid-dev:amd64. Preparing to unpack .../038-uuid-dev_2.37.2-4ubuntu3_amd64.deb ... Unpacking uuid-dev:amd64 (2.37.2-4ubuntu3) ... Selecting previously unselected package pkg-config. Preparing to unpack .../039-pkg-config_0.29.2-1ubuntu3_amd64.deb ... Unpacking pkg-config (0.29.2-1ubuntu3) ... Selecting previously unselected package libfontconfig-dev:amd64. Preparing to unpack .../040-libfontconfig-dev_2.13.1-4.2ubuntu5_amd64.deb ... Unpacking libfontconfig-dev:amd64 (2.13.1-4.2ubuntu5) ... Selecting previously unselected package libfontconfig1-dev:amd64. Preparing to unpack .../041-libfontconfig1-dev_2.13.1-4.2ubuntu5_amd64.deb ... Unpacking libfontconfig1-dev:amd64 (2.13.1-4.2ubuntu5) ... Selecting previously unselected package libxrender-dev:amd64. Preparing to unpack .../042-libxrender-dev_1%3a0.9.10-1build4_amd64.deb ... Unpacking libxrender-dev:amd64 (1:0.9.10-1build4) ... Selecting previously unselected package libxext-dev:amd64. Preparing to unpack .../043-libxext-dev_2%3a1.3.4-1build1_amd64.deb ... Unpacking libxext-dev:amd64 (2:1.3.4-1build1) ... Selecting previously unselected package libpixman-1-dev:amd64. Preparing to unpack .../044-libpixman-1-dev_0.40.0-1ubuntu0.22.04.1_amd64.deb ... Unpacking libpixman-1-dev:amd64 (0.40.0-1ubuntu0.22.04.1) ... Selecting previously unselected package libxcb-render0-dev:amd64. Preparing to unpack .../045-libxcb-render0-dev_1.14-3ubuntu3_amd64.deb ... Unpacking libxcb-render0-dev:amd64 (1.14-3ubuntu3) ... Selecting previously unselected package libxcb-shm0-dev:amd64. Preparing to unpack .../046-libxcb-shm0-dev_1.14-3ubuntu3_amd64.deb ... Unpacking libxcb-shm0-dev:amd64 (1.14-3ubuntu3) ... Selecting previously unselected package libffi-dev:amd64. Preparing to unpack .../047-libffi-dev_3.4.2-4_amd64.deb ... Unpacking libffi-dev:amd64 (3.4.2-4) ... Selecting previously unselected package libglib2.0-dev-bin. Preparing to unpack .../048-libglib2.0-dev-bin_2.72.4-0ubuntu1_amd64.deb ... Unpacking libglib2.0-dev-bin (2.72.4-0ubuntu1) ... Selecting previously unselected package libblkid-dev:amd64. Preparing to unpack .../049-libblkid-dev_2.37.2-4ubuntu3_amd64.deb ... Unpacking libblkid-dev:amd64 (2.37.2-4ubuntu3) ... Selecting previously unselected package libsepol-dev:amd64. Preparing to unpack .../050-libsepol-dev_3.3-1build1_amd64.deb ... Unpacking libsepol-dev:amd64 (3.3-1build1) ... Selecting previously unselected package libpcre2-16-0:amd64. Preparing to unpack .../051-libpcre2-16-0_10.39-3ubuntu0.1_amd64.deb ... Unpacking libpcre2-16-0:amd64 (10.39-3ubuntu0.1) ... Selecting previously unselected package libpcre2-32-0:amd64. Preparing to unpack .../052-libpcre2-32-0_10.39-3ubuntu0.1_amd64.deb ... Unpacking libpcre2-32-0:amd64 (10.39-3ubuntu0.1) ... Selecting previously unselected package libpcre2-posix3:amd64. Preparing to unpack .../053-libpcre2-posix3_10.39-3ubuntu0.1_amd64.deb ... Unpacking libpcre2-posix3:amd64 (10.39-3ubuntu0.1) ... Selecting previously unselected package libpcre2-dev:amd64. Preparing to unpack .../054-libpcre2-dev_10.39-3ubuntu0.1_amd64.deb ... Unpacking libpcre2-dev:amd64 (10.39-3ubuntu0.1) ... Selecting previously unselected package libselinux1-dev:amd64. Preparing to unpack .../055-libselinux1-dev_3.3-1build2_amd64.deb ... Unpacking libselinux1-dev:amd64 (3.3-1build2) ... Selecting previously unselected package libmount-dev:amd64. Preparing to unpack .../056-libmount-dev_2.37.2-4ubuntu3_amd64.deb ... Unpacking libmount-dev:amd64 (2.37.2-4ubuntu3) ... Selecting previously unselected package libpcre16-3:amd64. Preparing to unpack .../057-libpcre16-3_2%3a8.39-13ubuntu0.22.04.1_amd64.deb ... Unpacking libpcre16-3:amd64 (2:8.39-13ubuntu0.22.04.1) ... Selecting previously unselected package libpcre32-3:amd64. Preparing to unpack .../058-libpcre32-3_2%3a8.39-13ubuntu0.22.04.1_amd64.deb ... Unpacking libpcre32-3:amd64 (2:8.39-13ubuntu0.22.04.1) ... Selecting previously unselected package libpcrecpp0v5:amd64. Preparing to unpack .../059-libpcrecpp0v5_2%3a8.39-13ubuntu0.22.04.1_amd64.deb ... Unpacking libpcrecpp0v5:amd64 (2:8.39-13ubuntu0.22.04.1) ... Selecting previously unselected package libpcre3-dev:amd64. Preparing to unpack .../060-libpcre3-dev_2%3a8.39-13ubuntu0.22.04.1_amd64.deb ... Unpacking libpcre3-dev:amd64 (2:8.39-13ubuntu0.22.04.1) ... Selecting previously unselected package libglib2.0-dev:amd64. Preparing to unpack .../061-libglib2.0-dev_2.72.4-0ubuntu1_amd64.deb ... Unpacking libglib2.0-dev:amd64 (2.72.4-0ubuntu1) ... Selecting previously unselected package libcairo2-dev:amd64. Preparing to unpack .../062-libcairo2-dev_1.16.0-5ubuntu2_amd64.deb ... Unpacking libcairo2-dev:amd64 (1.16.0-5ubuntu2) ... Selecting previously unselected package libgdk-pixbuf2.0-bin. Preparing to unpack .../063-libgdk-pixbuf2.0-bin_2.42.8+dfsg-1ubuntu0.2_amd64.deb ... Unpacking libgdk-pixbuf2.0-bin (2.42.8+dfsg-1ubuntu0.2) ... Selecting previously unselected package libjbig-dev:amd64. Preparing to unpack .../064-libjbig-dev_2.1-3.1ubuntu0.22.04.1_amd64.deb ... Unpacking libjbig-dev:amd64 (2.1-3.1ubuntu0.22.04.1) ... Selecting previously unselected package liblzma-dev:amd64. Preparing to unpack .../065-liblzma-dev_5.2.5-2ubuntu1_amd64.deb ... Unpacking liblzma-dev:amd64 (5.2.5-2ubuntu1) ... Selecting previously unselected package libtiffxx5:amd64. Preparing to unpack .../066-libtiffxx5_4.3.0-6ubuntu0.3_amd64.deb ... Unpacking libtiffxx5:amd64 (4.3.0-6ubuntu0.3) ... Selecting previously unselected package libdeflate-dev:amd64. Preparing to unpack .../067-libdeflate-dev_1.10-2_amd64.deb ... Unpacking libdeflate-dev:amd64 (1.10-2) ... Selecting previously unselected package libtiff-dev:amd64. Preparing to unpack .../068-libtiff-dev_4.3.0-6ubuntu0.3_amd64.deb ... Unpacking libtiff-dev:amd64 (4.3.0-6ubuntu0.3) ... Selecting previously unselected package libgdk-pixbuf-2.0-dev:amd64. Preparing to unpack .../069-libgdk-pixbuf-2.0-dev_2.42.8+dfsg-1ubuntu0.2_amd64.deb ... Unpacking libgdk-pixbuf-2.0-dev:amd64 (2.42.8+dfsg-1ubuntu0.2) ... Selecting previously unselected package librsvg2-common:amd64. Preparing to unpack .../070-librsvg2-common_2.52.5+dfsg-3_amd64.deb ... Unpacking librsvg2-common:amd64 (2.52.5+dfsg-3) ... Selecting previously unselected package librsvg2-dev:amd64. Preparing to unpack .../071-librsvg2-dev_2.52.5+dfsg-3_amd64.deb ... Unpacking librsvg2-dev:amd64 (2.52.5+dfsg-3) ... Selecting previously unselected package libwmf-0.2-7:amd64. Preparing to unpack .../072-libwmf-0.2-7_0.2.12-5ubuntu1_amd64.deb ... Unpacking libwmf-0.2-7:amd64 (0.2.12-5ubuntu1) ... Selecting previously unselected package libwmf-dev. Preparing to unpack .../073-libwmf-dev_0.2.12-5ubuntu1_amd64.deb ... Unpacking libwmf-dev (0.2.12-5ubuntu1) ... Selecting previously unselected package icu-devtools. Preparing to unpack .../074-icu-devtools_70.1-2_amd64.deb ... Unpacking icu-devtools (70.1-2) ... Selecting previously unselected package libicu-dev:amd64. Preparing to unpack .../075-libicu-dev_70.1-2_amd64.deb ... Unpacking libicu-dev:amd64 (70.1-2) ... Selecting previously unselected package libxml2-dev:amd64. Preparing to unpack .../076-libxml2-dev_2.9.13+dfsg-1ubuntu0.2_amd64.deb ... Unpacking libxml2-dev:amd64 (2.9.13+dfsg-1ubuntu0.2) ... Selecting previously unselected package libmagickcore-6.q16-dev:amd64. Preparing to unpack .../077-libmagickcore-6.q16-dev_8%3a6.9.11.60+dfsg-1.3ubuntu0.22.04.1_amd64.deb ... Unpacking libmagickcore-6.q16-dev:amd64 (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Selecting previously unselected package libmagickwand-6-headers. Preparing to unpack .../078-libmagickwand-6-headers_8%3a6.9.11.60+dfsg-1.3ubuntu0.22.04.1_all.deb ... Unpacking libmagickwand-6-headers (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Selecting previously unselected package libmagickwand-6.q16-dev:amd64. Preparing to unpack .../079-libmagickwand-6.q16-dev_8%3a6.9.11.60+dfsg-1.3ubuntu0.22.04.1_amd64.deb ... Unpacking libmagickwand-6.q16-dev:amd64 (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Selecting previously unselected package libmagickwand-dev. Preparing to unpack .../080-libmagickwand-dev_8%3a6.9.11.60+dfsg-1.3ubuntu0.22.04.1_all.deb ... Unpacking libmagickwand-dev (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Selecting previously unselected package poppler-data. Preparing to unpack .../081-poppler-data_0.4.11-1_all.deb ... Unpacking poppler-data (0.4.11-1) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../082-libmagic-mgc_1%3a5.41-3_amd64.deb ... Unpacking libmagic-mgc (1:5.41-3) ... Selecting previously unselected package libmagic1:amd64. Preparing to unpack .../083-libmagic1_1%3a5.41-3_amd64.deb ... Unpacking libmagic1:amd64 (1:5.41-3) ... Selecting previously unselected package file. Preparing to unpack .../084-file_1%3a5.41-3_amd64.deb ... Unpacking file (1:5.41-3) ... Selecting previously unselected package bzip2-doc. Preparing to unpack .../085-bzip2-doc_1.0.8-5build1_all.deb ... Unpacking bzip2-doc (1.0.8-5build1) ... Selecting previously unselected package fonts-noto-mono. Preparing to unpack .../086-fonts-noto-mono_20201225-1build1_all.deb ... Unpacking fonts-noto-mono (20201225-1build1) ... Selecting previously unselected package fonts-urw-base35. Preparing to unpack .../087-fonts-urw-base35_20200910-1_all.deb ... Unpacking fonts-urw-base35 (20200910-1) ... Selecting previously unselected package libgs9-common. Preparing to unpack .../088-libgs9-common_9.55.0~dfsg1-0ubuntu5.1_all.deb ... Unpacking libgs9-common (9.55.0~dfsg1-0ubuntu5.1) ... Selecting previously unselected package libidn12:amd64. Preparing to unpack .../089-libidn12_1.38-4build1_amd64.deb ... Unpacking libidn12:amd64 (1.38-4build1) ... Selecting previously unselected package libijs-0.35:amd64. Preparing to unpack .../090-libijs-0.35_0.35-15build2_amd64.deb ... Unpacking libijs-0.35:amd64 (0.35-15build2) ... Selecting previously unselected package libjbig2dec0:amd64. Preparing to unpack .../091-libjbig2dec0_0.19-3build2_amd64.deb ... Unpacking libjbig2dec0:amd64 (0.19-3build2) ... Selecting previously unselected package libpaper1:amd64. Preparing to unpack .../092-libpaper1_1.1.28build2_amd64.deb ... Unpacking libpaper1:amd64 (1.1.28build2) ... Selecting previously unselected package libgs9:amd64. Preparing to unpack .../093-libgs9_9.55.0~dfsg1-0ubuntu5.1_amd64.deb ... Unpacking libgs9:amd64 (9.55.0~dfsg1-0ubuntu5.1) ... Selecting previously unselected package ghostscript. Preparing to unpack .../094-ghostscript_9.55.0~dfsg1-0ubuntu5.1_amd64.deb ... Unpacking ghostscript (9.55.0~dfsg1-0ubuntu5.1) ... Selecting previously unselected package gsfonts. Preparing to unpack .../095-gsfonts_1%3a8.11+urwcyr1.0.7~pre44-4.5_all.deb ... Unpacking gsfonts (1:8.11+urwcyr1.0.7~pre44-4.5) ... Selecting previously unselected package libexif-doc. Preparing to unpack .../096-libexif-doc_0.6.24-1build1_all.deb ... Unpacking libexif-doc (0.6.24-1build1) ... Selecting previously unselected package libjxr0:amd64. Preparing to unpack .../097-libjxr0_1.2~git20170615.f752187-5_amd64.deb ... Unpacking libjxr0:amd64 (1.2~git20170615.f752187-5) ... Selecting previously unselected package libjxr-tools. Preparing to unpack .../098-libjxr-tools_1.2~git20170615.f752187-5_amd64.deb ... Unpacking libjxr-tools (1.2~git20170615.f752187-5) ... Selecting previously unselected package libpaper-utils. Preparing to unpack .../099-libpaper-utils_1.1.28build2_amd64.deb ... Unpacking libpaper-utils (1.1.28build2) ... Selecting previously unselected package libpng-tools. Preparing to unpack .../100-libpng-tools_1.6.37-3build5_amd64.deb ... Unpacking libpng-tools (1.6.37-3build5) ... Selecting previously unselected package libtool. Preparing to unpack .../101-libtool_2.4.6-15build2_all.deb ... Unpacking libtool (2.4.6-15build2) ... Setting up libpcrecpp0v5:amd64 (2:8.39-13ubuntu0.22.04.1) ... Setting up libglib2.0-dev-bin (2.72.4-0ubuntu1) ... Setting up bzip2-doc (1.0.8-5build1) ... Setting up libpaper1:amd64 (1.1.28build2) ... debconf: unable to initialize frontend: Dialog debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 78.) debconf: falling back to frontend: Readline Creating config file /etc/papersize with new version Setting up libjpeg-turbo8-dev:amd64 (2.1.2-0ubuntu1) ... Setting up imagemagick-6-common (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Setting up libexif-dev:amd64 (0.6.24-1build1) ... Setting up gir1.2-freedesktop:amd64 (1.72.0-1) ... Setting up libpixman-1-dev:amd64 (0.40.0-1ubuntu0.22.04.1) ... Setting up fonts-noto-mono (20201225-1build1) ... Setting up libpcre16-3:amd64 (2:8.39-13ubuntu0.22.04.1) ... Setting up libwmflite-0.2-7:amd64 (0.2.12-5ubuntu1) ... Setting up gir1.2-gdkpixbuf-2.0:amd64 (2.42.8+dfsg-1ubuntu0.2) ... Setting up libpng-tools (1.6.37-3build5) ... Setting up libmagic-mgc (1:5.41-3) ... Setting up libijs-0.35:amd64 (0.35-15build2) ... Setting up libjxr0:amd64 (1.2~git20170615.f752187-5) ... Setting up libpng-dev:amd64 (1.6.37-3build5) ... Setting up libmagic1:amd64 (1:5.41-3) ... Setting up libjbig-dev:amd64 (2.1-3.1ubuntu0.22.04.1) ... Setting up liblzo2-2:amd64 (2.10-2build3) ... Setting up file (1:5.41-3) ... Setting up libpaper-utils (1.1.28build2) ... Setting up fonts-urw-base35 (20200910-1) ... Setting up libffi-dev:amd64 (3.4.2-4) ... Setting up libpcre2-16-0:amd64 (10.39-3ubuntu0.1) ... Setting up poppler-data (0.4.11-1) ... Setting up libxcb-shm0-dev:amd64 (1.14-3ubuntu3) ... Setting up autotools-dev (20220109.1) ... Setting up libpcre2-32-0:amd64 (10.39-3ubuntu0.1) ... Setting up libwmf-0.2-7:amd64 (0.2.12-5ubuntu1) ... Setting up libopenjp2-7-dev:amd64 (2.4.0-6) ... Setting up libjbig2dec0:amd64 (0.19-3build2) ... Setting up uuid-dev:amd64 (2.37.2-4ubuntu3) ... Setting up gsfonts (1:8.11+urwcyr1.0.7~pre44-4.5) ... Setting up libsigsegv2:amd64 (2.13-1ubuntu3) ... Setting up libpcre32-3:amd64 (2:8.39-13ubuntu0.22.04.1) ... Setting up libidn12:amd64 (1.38-4build1) ... Setting up icu-devtools (70.1-2) ... Setting up pkg-config (0.29.2-1ubuntu3) ... Setting up libsepol-dev:amd64 (3.3-1build1) ... Setting up libxcb-render0-dev:amd64 (1.14-3ubuntu3) ... Setting up librsvg2-common:amd64 (2.52.5+dfsg-3) ... Setting up libfftw3-double3:amd64 (3.3.8-2ubuntu8) ... Setting up libxext-dev:amd64 (2:1.3.4-1build1) ... Setting up liblcms2-dev:amd64 (2.12~rc1-2build2) ... Setting up liblzma-dev:amd64 (5.2.5-2ubuntu1) ... Setting up libpcre2-posix3:amd64 (10.39-3ubuntu0.1) ... Setting up liblqr-1-0:amd64 (0.4.2-2.1) ... Setting up libexif-doc (0.6.24-1build1) ... Setting up libgdk-pixbuf2.0-bin (2.42.8+dfsg-1ubuntu0.2) ... Setting up fonts-droid-fallback (1:6.0.1r16-1.1build1) ... Setting up libmagickcore-6-headers (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Setting up libdjvulibre-text (3.5.28-2build2) ... Setting up libjpeg8-dev:amd64 (8c-2ubuntu10) ... Setting up gir1.2-rsvg-2.0:amd64 (2.52.5+dfsg-3) ... Setting up libdeflate-dev:amd64 (1.10-2) ... Setting up libxrender-dev:amd64 (1:0.9.10-1build4) ... Setting up libicu-dev:amd64 (70.1-2) ... Setting up libbrotli-dev:amd64 (1.0.9-2build6) ... Setting up libilmbase-dev:amd64 (2.5.7-2) ... Setting up libtiffxx5:amd64 (4.3.0-6ubuntu0.3) ... Setting up libbz2-dev:amd64 (1.0.8-5build1) ... Setting up libgs9-common (9.55.0~dfsg1-0ubuntu5.1) ... Setting up libcairo-script-interpreter2:amd64 (1.16.0-5ubuntu2) ... Setting up libblkid-dev:amd64 (2.37.2-4ubuntu3) ... Setting up libmagickcore-6-arch-config:amd64 (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Setting up libjxr-tools (1.2~git20170615.f752187-5) ... Setting up libgs9:amd64 (9.55.0~dfsg1-0ubuntu5.1) ... Setting up libpcre2-dev:amd64 (10.39-3ubuntu0.1) ... Setting up libtool (2.4.6-15build2) ... Setting up libselinux1-dev:amd64 (3.3-1build2) ... Setting up libpcre3-dev:amd64 (2:8.39-13ubuntu0.22.04.1) ... Setting up libmagickwand-6-headers (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Setting up libdjvulibre21:amd64 (3.5.28-2build2) ... Setting up libjpeg-dev:amd64 (8c-2ubuntu10) ... Setting up liblqr-1-0-dev:amd64 (0.4.2-2.1) ... Setting up m4 (1.4.18-5ubuntu2) ... Setting up ghostscript (9.55.0~dfsg1-0ubuntu5.1) ... Setting up libdjvulibre-dev:amd64 (3.5.28-2build2) ... Setting up libfreetype-dev:amd64 (2.11.1+dfsg-1ubuntu0.1) ... Setting up libwmf-dev (0.2.12-5ubuntu1) ... Setting up libmagickcore-6.q16-6:amd64 (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Setting up libxml2-dev:amd64 (2.9.13+dfsg-1ubuntu0.2) ... Setting up libopenexr-dev (2.5.7-1) ... Setting up libtiff-dev:amd64 (4.3.0-6ubuntu0.3) ... Setting up autoconf (2.71-2) ... Setting up libmagickwand-6.q16-6:amd64 (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Setting up libmount-dev:amd64 (2.37.2-4ubuntu3) ... Setting up automake (1:1.16.5-1.3) ... update-alternatives: using /usr/bin/automake-1.16 to provide /usr/bin/automake (automake) in auto mode update-alternatives: warning: skip creation of /usr/share/man/man1/automake.1.gz because associated file /usr/share/man/man1/automake-1.16.1.gz (of link group automake) doesn't exist update-alternatives: warning: skip creation of /usr/share/man/man1/aclocal.1.gz because associated file /usr/share/man/man1/aclocal-1.16.1.gz (of link group automake) doesn't exist Setting up libmagickcore-6.q16-6-extra:amd64 (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Setting up libfontconfig-dev:amd64 (2.13.1-4.2ubuntu5) ... Setting up libfreetype6-dev:amd64 (2.11.1+dfsg-1ubuntu0.1) ... Setting up libltdl-dev:amd64 (2.4.6-15build2) ... Setting up libglib2.0-dev:amd64 (2.72.4-0ubuntu1) ... Setting up libfontconfig1-dev:amd64 (2.13.1-4.2ubuntu5) ... Processing triggers for libgdk-pixbuf-2.0-0:amd64 (2.42.8+dfsg-1ubuntu0.2) ... Processing triggers for install-info (6.8-4build1) ... Processing triggers for fontconfig (2.13.1-4.2ubuntu5) ... Processing triggers for libglib2.0-0:amd64 (2.72.4-0ubuntu1) ... Processing triggers for libc-bin (2.35-0ubuntu3.1) ... Setting up libcairo2-dev:amd64 (1.16.0-5ubuntu2) ... Setting up libgdk-pixbuf-2.0-dev:amd64 (2.42.8+dfsg-1ubuntu0.2) ... Setting up librsvg2-dev:amd64 (2.52.5+dfsg-3) ... Setting up libmagickcore-6.q16-dev:amd64 (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Setting up libmagickwand-6.q16-dev:amd64 (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ... Setting up libmagickwand-dev (8:6.9.11.60+dfsg-1.3ubuntu0.22.04.1) ...
Let's take a look at a single corrupted example:
import corruptions
# See more corruptions here:
# https://github.com/google-research/mnist-c/blob/bba57e4ccc282f106907c5239958e72298451ea7/corruptions.py#L57
x_to_corrupt = x_test[100].squeeze() * 255
# x_corrupted = corruptions.speckle_noise(x_to_corrupt)
# x_corrupted = corruptions.glass_blur(x_to_corrupt, severity=4)
x_corrupted = corruptions.rotate(x_to_corrupt, severity=4)
x_corrupted.shape
(28, 28)
sys.path.append('/opt/oarphpy')
from oarphpy.plotting import img_to_img_tag
img_html = img_to_img_tag(x_to_corrupt)
img_html_c = img_to_img_tag(x_corrupted)
def show_html(html):
from IPython.core.display import display, HTML
display(HTML(html))
show_html('<b>Original:</b>' + img_html)
show_html('<b>Corrupted:</b>' + img_html_c)
Lossy conversion from float32 to uint8. Range [0.0, 255.0]. Convert image to uint8 prior to saving to suppress this warning. Lossy conversion from float32 to uint8. Range [0.0, 233.87545776367188]. Convert image to uint8 prior to saving to suppress this warning.
Now, let's generated corrupted versions for the entire MNIST test set, and run inference of our earlier model on these corrupted examples:
import numpy as np
x_test_c = np.zeros_like(x_test)
for i in tqdm(range(len(x_test_c)), total=len(x_test_c)):
# xform = corruptions.glass_blur
xform = corruptions.rotate
x_test_c[i][0] = (1. / 255) * xform(x_test[i].squeeze() * 255, severity=4)
0%| | 0/10000 [00:00<?, ?it/s]
Let's make sure that worked and also declare a utility function for visualizing digits:
NUM_TO_SHOW = 10
def unit_digit_to_img_tag(x):
img_char = (255 * x).astype('uint8')
return img_to_img_tag(img_char)
for r in x_test_c[:NUM_TO_SHOW, ...]:
x_i = r.squeeze()
show_html(unit_digit_to_img_tag(x_i))
Now let's run inference on the corrupted data!
prob_c, pred_c = model_predict(torch.from_numpy(x_test_c))
# Aggregate inference results into a dataframe
rows = []
for i, (x_i, score_i, pred_i) in enumerate(zip(x_test_c, prob_c, pred_c)):
row = {}
for classname, score in enumerate(score_i):
row[f'score_{classname}'] = score.item()
row['x_i'] = x_i.squeeze().tolist()
rows.append(row)
import pandas as pd
prediction_c_df = pd.DataFrame(rows)
prediction_c_df
score_0 | score_1 | score_2 | score_3 | score_4 | score_5 | score_6 | score_7 | score_8 | score_9 | x_i | |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0.023189 | 3.499873e-02 | 7.924204e-02 | 2.462936e-03 | 7.328708e-01 | 2.511773e-03 | 0.000694 | 5.893948e-02 | 0.004421 | 0.060670 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
1 | 0.136875 | 1.656399e-01 | 1.804453e-02 | 8.661019e-04 | 2.014344e-02 | 1.060956e-02 | 0.185269 | 3.871693e-02 | 0.423418 | 0.000418 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
2 | 0.000057 | 2.777056e-02 | 4.605581e-01 | 4.355606e-02 | 1.046089e-03 | 8.797347e-03 | 0.001094 | 1.946782e-02 | 0.437414 | 0.000240 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
3 | 0.999870 | 4.705473e-07 | 1.019485e-05 | 6.493735e-08 | 1.318491e-06 | 8.314926e-06 | 0.000059 | 3.484946e-05 | 0.000013 | 0.000002 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
4 | 0.002216 | 1.544213e-05 | 2.452351e-03 | 3.282306e-04 | 8.513890e-03 | 5.292688e-01 | 0.022211 | 1.086944e-03 | 0.264774 | 0.169133 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
9995 | 0.000160 | 2.077016e-06 | 9.966429e-01 | 1.492914e-04 | 7.414887e-07 | 9.567250e-07 | 0.000006 | 4.912279e-05 | 0.002986 | 0.000003 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
9996 | 0.002529 | 5.961329e-05 | 8.055447e-04 | 9.899822e-01 | 2.514886e-06 | 6.705057e-04 | 0.000006 | 3.017469e-04 | 0.000128 | 0.005515 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
9997 | 0.001643 | 2.136260e-04 | 8.218874e-01 | 5.305554e-03 | 7.188972e-04 | 1.871666e-02 | 0.063834 | 5.108909e-04 | 0.086146 | 0.001024 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
9998 | 0.000001 | 3.017144e-07 | 2.192112e-08 | 1.729715e-04 | 4.796895e-05 | 3.358821e-01 | 0.663164 | 5.775211e-09 | 0.000685 | 0.000047 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
9999 | 0.000223 | 1.686272e-07 | 4.811619e-07 | 7.268485e-06 | 6.574192e-08 | 9.839876e-01 | 0.001034 | 5.640553e-08 | 0.014691 | 0.000057 | [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,... |
10000 rows × 11 columns
Ok, so how did the network score the 7
class in the corrupted data?
prediction_c_df['score_7'].hist()
<Axes: >
Huh, that score distribution is still bi-modal, but is much more uniform than the plot we saw earlier. Clearly the model is making mistakes due to the corruptions. But what sorts of mistakes? If we needed to select some of these examples to label, which would we choose? Let's use HistogramWithExamplesPlotter
to "peer inside" the histogram buckets of the plot above.
from oarphpy.spark import NBSpark
spark = NBSpark.getOrCreate()
2023-03-06 08:13:58,093 oarph 195 : Using source root /usr/lib/python3/dist-packages/IPython/core 2023-03-06 08:13:58,094 oarph 195 : Using source root /usr/lib/python3/dist-packages/IPython 2023-03-06 08:13:58,127 oarph 195 : Generating egg to /tmp/tmp6gziyi2u_oarphpy_eggbuild ... 2023-03-06 08:13:58,366 oarph 195 : ... done. Egg at /tmp/tmp6gziyi2u_oarphpy_eggbuild/core-0.0.0-py3.10.egg 23/03/06 08:14:00 WARN Utils: Your hostname, mrskylake resolves to a loopback address: 127.0.1.1; using 192.168.0.202 instead (on interface enp59s0) 23/03/06 08:14:00 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address 23/03/06 08:14:01 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable INFO:SparkMonitorKernel:Client Connected ('127.0.0.1', 49758)
from bokeh.plotting import figure
from bokeh.io import output_notebook
from bokeh.io import show as bokeh_show
output_notebook()
prediction_c_sdf = spark.createDataFrame(prediction_c_df)
# To see the text representation of a Spark Dataframe try:
# prediction_c_sdf.show()
from oarphpy import plotting as pl
class MyPlotter(pl.HistogramWithExamplesPlotter):
NUM_BINS = 20
def display_bucket(self, sub_pivot, bucket_id, irows):
MAX_TO_VIZ = 50
from oarphpy.plotting import img_to_img_tag
htmls = []
for row in irows:
htmls.append(unit_digit_to_img_tag(np.array(row['x_i'])))
if len(htmls) > MAX_TO_VIZ:
break
# Make a nice table
N_COLS = 25
from oarphpy.util import ichunked
trs = [
"<tr>%s</tr>" % ''.join("<td>%s</td>" % ihtml for ihtml in row)
for row in ichunked(htmls, n=N_COLS)
]
table_html = "<table>%s</table>" % ''.join(trs)
return bucket_id, table_html
plotter = MyPlotter()
fig = plotter.run(prediction_c_sdf, 'score_7')
bokeh_show(fig)
2023-03-06 08:14:58,873 oarph 195 : Plotting histogram for score_7 of DataFrame[score_0: double, score_1: double, score_2: double, score_3: double, score_4: double, score_5: double, score_6: double, score_7: double, score_8: double, score_9: double, x_i: array<array<double>>] ... 2023-03-06 08:14:58,875 oarph 195 : ... building data source for ALL ... 2023-03-06 08:14:58,876 oarph 195 : ... histogramming ALL ... 2023-03-06 08:15:04,343 oarph 195 : ... display-ifying examples for ALL ...
fig = plotter.run(spark.createDataFrame(prediction_c_df), 'score_1')
bokeh_show(fig)
2023-03-06 08:14:29,657 oarph 195 : Plotting histogram for score_1 of DataFrame[score_0: double, score_1: double, score_2: double, score_3: double, score_4: double, score_5: double, score_6: double, score_7: double, score_8: double, score_9: double, x_i: array<array<double>>] ... 2023-03-06 08:14:29,659 oarph 195 : ... building data source for ALL ... 2023-03-06 08:14:29,660 oarph 195 : ... histogramming ALL ... 2023-03-06 08:14:34,922 oarph 195 : ... display-ifying examples for ALL ...
The two figures above examine the model's inferences on the corrupted dataset. Let's use HistogramWithExamplesPlotter
to visualize the inference results on the original MNIST dataset to compare:
fig = plotter.run(spark.createDataFrame(prediction_df), 'score_7')
bokeh_show(fig)
2023-03-06 08:14:42,200 oarph 195 : Plotting histogram for score_7 of DataFrame[score_0: double, score_1: double, score_2: double, score_3: double, score_4: double, score_5: double, score_6: double, score_7: double, score_8: double, score_9: double, x_i: array<array<double>>] ... 2023-03-06 08:14:42,201 oarph 195 : ... building data source for ALL ... 2023-03-06 08:14:42,202 oarph 195 : ... histogramming ALL ... 2023-03-06 08:14:47,644 oarph 195 : ... display-ifying examples for ALL ...
For more examples of HistogramWithExamplesPlotter
, see these rendered HTML pages: https://drive.google.com/drive/folders/1dOmkPvdFiGBMaYEddx1KK5vmCeYl2CyV?usp=sharing