使用 AutoMM 进行图像-文本语义匹配¶
视觉和语言是人类理解现实世界的两个重要方面。图像-文本语义匹配通过衡量图像和文本之间的视觉-语义相似度,在连接视觉和语言方面起着关键作用。学习一个联合空间,使文本和图像特征向量对齐,是图像-文本匹配的一种典型解决方案。它在各种视觉-语言任务中变得越来越重要,例如跨模态检索、图像字幕、文本到图像合成和多模态神经机器翻译。本教程将介绍如何将 AutoMM 应用于图像-文本匹配任务。
import os
import warnings
from IPython.display import Image, display
import numpy as np
warnings.filterwarnings('ignore')
np.random.seed(123)
数据集¶
在本教程中,我们将使用 Flickr30K 数据集来演示图像-文本匹配。Flickr30k 数据集是一个流行的基于句子的图片描述基准。该数据集包含 31,783 张捕捉人们日常活动和事件的图像。每张图像都有一个描述性标题。我们使用 pandas dataframe 组织了数据集。首先,让我们下载数据集。
from autogluon.core.utils.loaders import load_pd
import pandas as pd
download_dir = './ag_automm_tutorial_imgtxt'
zip_file = 'https://automl-mm-bench.s3.amazonaws.com/flickr30k.zip'
from autogluon.core.utils.loaders import load_zip
load_zip.unzip(zip_file, unzip_dir=download_dir)
Downloading ./ag_automm_tutorial_imgtxt/file.zip from https://automl-mm-bench.s3.amazonaws.com/flickr30k.zip...
0%| | 0.00/4.38G [00:00<?, ?iB/s]
0%| | 7.70M/4.38G [00:00<00:56, 77.0MiB/s]
0%| | 15.4M/4.38G [00:00<01:39, 43.8MiB/s]
0%| | 20.6M/4.38G [00:00<02:02, 35.6MiB/s]
1%| | 24.6M/4.38G [00:00<02:10, 33.5MiB/s]
1%| | 28.2M/4.38G [00:00<02:42, 26.8MiB/s]
1%| | 33.5M/4.38G [00:01<02:43, 26.6MiB/s]
1%| | 41.2M/4.38G [00:01<01:57, 36.8MiB/s]
1%| | 45.6M/4.38G [00:01<02:12, 32.7MiB/s]
1%| | 49.3M/4.38G [00:01<02:42, 26.7MiB/s]
1%| | 52.5M/4.38G [00:01<03:17, 21.9MiB/s]
1%|▏ | 57.0M/4.38G [00:01<03:03, 23.6MiB/s]
1%|▏ | 59.6M/4.38G [00:02<03:05, 23.3MiB/s]
2%|▏ | 67.1M/4.38G [00:02<02:17, 31.4MiB/s]
2%|▏ | 75.5M/4.38G [00:02<01:51, 38.6MiB/s]
2%|▏ | 82.5M/4.38G [00:02<01:39, 43.3MiB/s]
2%|▏ | 87.1M/4.38G [00:02<02:00, 35.5MiB/s]
2%|▏ | 92.3M/4.38G [00:02<02:04, 34.4MiB/s]
2%|▏ | 98.9M/4.38G [00:03<02:01, 35.3MiB/s]
2%|▏ | 103M/4.38G [00:03<02:12, 32.4MiB/s]
2%|▏ | 109M/4.38G [00:03<02:11, 32.4MiB/s]
3%|▎ | 116M/4.38G [00:03<02:16, 31.2MiB/s]
3%|▎ | 119M/4.38G [00:03<02:22, 29.9MiB/s]
3%|▎ | 126M/4.38G [00:04<02:38, 26.8MiB/s]
3%|▎ | 134M/4.38G [00:04<02:18, 30.7MiB/s]
3%|▎ | 141M/4.38G [00:04<02:00, 35.2MiB/s]
3%|▎ | 145M/4.38G [00:04<02:02, 34.6MiB/s]
3%|▎ | 149M/4.38G [00:04<02:13, 31.7MiB/s]
3%|▎ | 153M/4.38G [00:04<02:32, 27.7MiB/s]
4%|▎ | 158M/4.38G [00:04<02:17, 30.6MiB/s]
4%|▎ | 161M/4.38G [00:05<02:45, 25.5MiB/s]
4%|▍ | 166M/4.38G [00:05<02:24, 29.1MiB/s]
4%|▍ | 169M/4.38G [00:05<03:08, 22.4MiB/s]
4%|▍ | 176M/4.38G [00:05<02:28, 28.4MiB/s]
4%|▍ | 183M/4.38G [00:06<02:55, 23.9MiB/s]
4%|▍ | 186M/4.38G [00:06<03:03, 22.8MiB/s]
4%|▍ | 193M/4.38G [00:06<02:18, 30.3MiB/s]
5%|▍ | 200M/4.38G [00:06<02:09, 32.3MiB/s]
5%|▍ | 203M/4.38G [00:06<02:29, 27.9MiB/s]
5%|▍ | 208M/4.38G [00:06<02:31, 27.5MiB/s]
5%|▍ | 211M/4.38G [00:07<02:55, 23.7MiB/s]
5%|▍ | 216M/4.38G [00:07<02:43, 25.4MiB/s]
5%|▍ | 219M/4.38G [00:07<03:04, 22.6MiB/s]
5%|▌ | 225M/4.38G [00:07<02:22, 29.3MiB/s]
5%|▌ | 228M/4.38G [00:07<02:44, 25.3MiB/s]
5%|▌ | 233M/4.38G [00:07<02:16, 30.4MiB/s]
5%|▌ | 237M/4.38G [00:08<02:40, 25.9MiB/s]
6%|▌ | 243M/4.38G [00:08<02:45, 25.0MiB/s]
6%|▌ | 252M/4.38G [00:08<02:08, 32.0MiB/s]
6%|▌ | 260M/4.38G [00:08<01:54, 35.9MiB/s]
6%|▌ | 264M/4.38G [00:08<02:26, 28.1MiB/s]
6%|▌ | 268M/4.38G [00:09<02:56, 23.3MiB/s]
6%|▋ | 276M/4.38G [00:09<02:09, 31.7MiB/s]
6%|▋ | 280M/4.38G [00:09<02:18, 29.6MiB/s]
7%|▋ | 285M/4.38G [00:09<02:19, 29.3MiB/s]
7%|▋ | 294M/4.38G [00:09<02:03, 33.1MiB/s]
7%|▋ | 302M/4.38G [00:09<01:36, 42.2MiB/s]
7%|▋ | 307M/4.38G [00:10<01:45, 38.8MiB/s]
7%|▋ | 311M/4.38G [00:10<02:14, 30.2MiB/s]
7%|▋ | 317M/4.38G [00:10<02:17, 29.5MiB/s]
7%|▋ | 320M/4.38G [00:10<02:35, 26.2MiB/s]
7%|▋ | 325M/4.38G [00:10<02:18, 29.2MiB/s]
8%|▊ | 329M/4.38G [00:11<03:02, 22.2MiB/s]
8%|▊ | 334M/4.38G [00:11<02:31, 26.6MiB/s]
8%|▊ | 337M/4.38G [00:11<03:39, 18.4MiB/s]
8%|▊ | 344M/4.38G [00:11<03:00, 22.4MiB/s]
8%|▊ | 351M/4.38G [00:11<02:18, 29.1MiB/s]
8%|▊ | 354M/4.38G [00:12<02:12, 30.5MiB/s]
8%|▊ | 361M/4.38G [00:12<02:00, 33.3MiB/s]
8%|▊ | 367M/4.38G [00:12<01:51, 36.0MiB/s]
8%|▊ | 371M/4.38G [00:12<01:54, 34.9MiB/s]
9%|▊ | 377M/4.38G [00:12<01:41, 39.6MiB/s]
9%|▊ | 381M/4.38G [00:12<02:01, 33.0MiB/s]
9%|▉ | 385M/4.38G [00:12<02:02, 32.5MiB/s]
9%|▉ | 388M/4.38G [00:13<02:15, 29.4MiB/s]
9%|▉ | 393M/4.38G [00:13<02:01, 32.8MiB/s]
9%|▉ | 396M/4.38G [00:13<02:02, 32.5MiB/s]
9%|▉ | 403M/4.38G [00:13<02:01, 32.8MiB/s]
9%|▉ | 409M/4.38G [00:13<01:54, 34.8MiB/s]
9%|▉ | 413M/4.38G [00:13<02:12, 29.9MiB/s]
10%|▉ | 419M/4.38G [00:14<02:05, 31.5MiB/s]
10%|▉ | 426M/4.38G [00:14<01:43, 38.1MiB/s]
10%|▉ | 430M/4.38G [00:14<02:34, 25.6MiB/s]
10%|▉ | 435M/4.38G [00:14<02:10, 30.3MiB/s]
10%|█ | 439M/4.38G [00:14<02:19, 28.3MiB/s]
10%|█ | 443M/4.38G [00:14<02:16, 28.8MiB/s]
10%|█ | 446M/4.38G [00:14<02:27, 26.7MiB/s]
10%|█ | 451M/4.38G [00:15<02:18, 28.4MiB/s]
10%|█ | 454M/4.38G [00:15<02:28, 26.5MiB/s]
11%|█ | 461M/4.38G [00:15<02:12, 29.6MiB/s]
11%|█ | 470M/4.38G [00:15<01:44, 37.6MiB/s]
11%|█ | 478M/4.38G [00:15<01:29, 43.7MiB/s]
11%|█ | 485M/4.38G [00:15<01:20, 48.3MiB/s]
11%|█ | 490M/4.38G [00:16<01:30, 43.1MiB/s]
11%|█▏ | 495M/4.38G [00:16<01:54, 34.0MiB/s]
11%|█▏ | 503M/4.38G [00:16<01:46, 36.4MiB/s]
12%|█▏ | 512M/4.38G [00:16<01:32, 41.7MiB/s]
12%|█▏ | 520M/4.38G [00:16<01:46, 36.3MiB/s]
12%|█▏ | 527M/4.38G [00:17<01:40, 38.4MiB/s]
12%|█▏ | 531M/4.38G [00:17<02:05, 30.6MiB/s]
12%|█▏ | 537M/4.38G [00:17<02:02, 31.3MiB/s]
12%|█▏ | 545M/4.38G [00:17<01:34, 40.4MiB/s]
13%|█▎ | 550M/4.38G [00:17<01:49, 35.0MiB/s]
13%|█▎ | 554M/4.38G [00:18<03:04, 20.8MiB/s]
13%|█▎ | 562M/4.38G [00:18<02:27, 25.8MiB/s]
13%|█▎ | 570M/4.38G [00:18<02:09, 29.3MiB/s]
13%|█▎ | 579M/4.38G [00:18<02:06, 30.2MiB/s]
13%|█▎ | 587M/4.38G [00:19<01:53, 33.5MiB/s]
14%|█▎ | 594M/4.38G [00:19<02:28, 25.5MiB/s]
14%|█▎ | 597M/4.38G [00:19<02:29, 25.3MiB/s]
14%|█▍ | 604M/4.38G [00:19<02:00, 31.2MiB/s]
14%|█▍ | 612M/4.38G [00:19<01:45, 35.7MiB/s]
14%|█▍ | 621M/4.38G [00:20<01:45, 35.5MiB/s]
14%|█▍ | 628M/4.38G [00:20<01:28, 42.4MiB/s]
14%|█▍ | 633M/4.38G [00:20<01:32, 40.3MiB/s]
15%|█▍ | 638M/4.38G [00:20<02:24, 25.9MiB/s]
15%|█▍ | 644M/4.38G [00:20<02:04, 30.1MiB/s]
15%|█▍ | 648M/4.38G [00:21<02:11, 28.4MiB/s]
15%|█▍ | 653M/4.38G [00:21<01:59, 31.2MiB/s]
15%|█▍ | 656M/4.38G [00:21<02:03, 30.2MiB/s]
15%|█▌ | 661M/4.38G [00:21<02:45, 22.4MiB/s]
15%|█▌ | 664M/4.38G [00:21<03:19, 18.6MiB/s]
15%|█▌ | 669M/4.38G [00:22<02:37, 23.5MiB/s]
15%|█▌ | 673M/4.38G [00:22<02:22, 26.0MiB/s]
15%|█▌ | 676M/4.38G [00:22<02:30, 24.6MiB/s]
16%|█▌ | 679M/4.38G [00:22<02:56, 21.0MiB/s]
16%|█▌ | 686M/4.38G [00:22<02:43, 22.6MiB/s]
16%|█▌ | 689M/4.38G [00:22<02:49, 21.7MiB/s]
16%|█▌ | 696M/4.38G [00:23<02:13, 27.5MiB/s]
16%|█▌ | 703M/4.38G [00:23<02:01, 30.3MiB/s]
16%|█▌ | 706M/4.38G [00:23<02:20, 26.2MiB/s]
16%|█▌ | 711M/4.38G [00:23<02:16, 26.9MiB/s]
16%|█▋ | 714M/4.38G [00:23<02:26, 25.1MiB/s]
16%|█▋ | 720M/4.38G [00:24<02:38, 23.0MiB/s]
16%|█▋ | 722M/4.38G [00:24<02:40, 22.8MiB/s]
17%|█▋ | 730M/4.38G [00:24<02:05, 29.2MiB/s]
17%|█▋ | 736M/4.38G [00:24<01:47, 34.0MiB/s]
17%|█▋ | 740M/4.38G [00:24<01:48, 33.5MiB/s]
17%|█▋ | 745M/4.38G [00:24<02:11, 27.8MiB/s]
17%|█▋ | 748M/4.38G [00:25<02:18, 26.2MiB/s]
17%|█▋ | 753M/4.38G [00:25<02:03, 29.5MiB/s]
17%|█▋ | 756M/4.38G [00:25<02:11, 27.6MiB/s]
17%|█▋ | 763M/4.38G [00:25<01:39, 36.4MiB/s]
18%|█▊ | 767M/4.38G [00:25<01:53, 31.9MiB/s]
18%|█▊ | 772M/4.38G [00:25<02:17, 26.2MiB/s]
18%|█▊ | 778M/4.38G [00:26<02:38, 22.8MiB/s]
18%|█▊ | 781M/4.38G [00:26<02:47, 21.5MiB/s]
18%|█▊ | 787M/4.38G [00:26<02:32, 23.6MiB/s]
18%|█▊ | 789M/4.38G [00:26<02:53, 20.7MiB/s]
18%|█▊ | 795M/4.38G [00:26<02:26, 24.5MiB/s]
18%|█▊ | 798M/4.38G [00:27<02:35, 23.1MiB/s]
18%|█▊ | 804M/4.38G [00:27<02:14, 26.5MiB/s]
18%|█▊ | 806M/4.38G [00:27<02:24, 24.8MiB/s]
19%|█▊ | 812M/4.38G [00:27<01:51, 32.1MiB/s]
19%|█▊ | 816M/4.38G [00:27<01:59, 29.9MiB/s]
19%|█▊ | 821M/4.38G [00:27<02:10, 27.4MiB/s]
19%|█▉ | 824M/4.38G [00:27<02:13, 26.7MiB/s]
19%|█▉ | 829M/4.38G [00:28<01:53, 31.2MiB/s]
19%|█▉ | 832M/4.38G [00:28<02:09, 27.3MiB/s]
19%|█▉ | 837M/4.38G [00:28<02:03, 28.7MiB/s]
19%|█▉ | 840M/4.38G [00:28<02:36, 22.6MiB/s]
19%|█▉ | 845M/4.38G [00:28<02:06, 28.0MiB/s]
19%|█▉ | 849M/4.38G [00:28<02:03, 28.7MiB/s]
20%|█▉ | 856M/4.38G [00:29<02:00, 29.2MiB/s]
20%|█▉ | 863M/4.38G [00:29<01:36, 36.5MiB/s]
20%|█▉ | 867M/4.38G [00:29<01:44, 33.5MiB/s]
20%|█▉ | 871M/4.38G [00:29<01:36, 36.2MiB/s]
20%|█▉ | 875M/4.38G [00:29<02:34, 22.7MiB/s]
20%|██ | 881M/4.38G [00:29<02:04, 28.2MiB/s]
20%|██ | 884M/4.38G [00:30<02:07, 27.5MiB/s]
20%|██ | 888M/4.38G [00:30<01:57, 29.7MiB/s]
20%|██ | 892M/4.38G [00:30<02:26, 23.9MiB/s]
20%|██ | 898M/4.38G [00:30<02:16, 25.5MiB/s]
21%|██ | 904M/4.38G [00:30<01:45, 33.1MiB/s]
21%|██ | 908M/4.38G [00:30<01:45, 32.8MiB/s]
21%|██ | 914M/4.38G [00:30<01:32, 37.5MiB/s]
21%|██ | 918M/4.38G [00:31<01:52, 30.7MiB/s]
21%|██ | 922M/4.38G [00:31<01:44, 33.2MiB/s]
21%|██ | 926M/4.38G [00:31<01:57, 29.4MiB/s]
21%|██ | 929M/4.38G [00:31<01:56, 29.5MiB/s]
21%|██▏ | 933M/4.38G [00:31<02:20, 24.5MiB/s]
21%|██▏ | 938M/4.38G [00:31<01:56, 29.6MiB/s]
21%|██▏ | 941M/4.38G [00:31<02:09, 26.5MiB/s]
22%|██▏ | 946M/4.38G [00:32<01:55, 29.6MiB/s]
22%|██▏ | 949M/4.38G [00:32<02:15, 25.4MiB/s]
22%|██▏ | 957M/4.38G [00:32<01:33, 36.8MiB/s]
22%|██▏ | 965M/4.38G [00:32<01:18, 43.3MiB/s]
22%|██▏ | 973M/4.38G [00:32<01:14, 45.9MiB/s]
22%|██▏ | 980M/4.38G [00:32<01:09, 48.9MiB/s]
22%|██▏ | 985M/4.38G [00:32<01:20, 42.0MiB/s]
23%|██▎ | 990M/4.38G [00:33<01:39, 34.1MiB/s]
23%|██▎ | 996M/4.38G [00:33<01:42, 33.0MiB/s]
23%|██▎ | 1.00G/4.38G [00:33<01:56, 29.1MiB/s]
23%|██▎ | 1.01G/4.38G [00:33<01:41, 33.4MiB/s]
23%|██▎ | 1.01G/4.38G [00:33<01:57, 28.8MiB/s]
23%|██▎ | 1.01G/4.38G [00:33<01:52, 30.0MiB/s]
23%|██▎ | 1.02G/4.38G [00:34<02:40, 20.9MiB/s]
23%|██▎ | 1.02G/4.38G [00:34<02:16, 24.6MiB/s]
24%|██▎ | 1.03G/4.38G [00:34<01:56, 28.7MiB/s]
24%|██▎ | 1.03G/4.38G [00:34<01:59, 28.0MiB/s]
24%|██▎ | 1.04G/4.38G [00:34<02:07, 26.2MiB/s]
24%|██▎ | 1.04G/4.38G [00:35<02:17, 24.2MiB/s]
24%|██▍ | 1.04G/4.38G [00:35<02:34, 21.6MiB/s]
24%|██▍ | 1.05G/4.38G [00:35<02:08, 26.0MiB/s]
24%|██▍ | 1.05G/4.38G [00:35<02:26, 22.8MiB/s]
24%|██▍ | 1.06G/4.38G [00:35<01:46, 31.3MiB/s]
24%|██▍ | 1.06G/4.38G [00:35<01:53, 29.2MiB/s]
24%|██▍ | 1.06G/4.38G [00:35<01:45, 31.3MiB/s]
24%|██▍ | 1.07G/4.38G [00:36<01:55, 28.7MiB/s]
25%|██▍ | 1.07G/4.38G [00:36<01:49, 30.2MiB/s]
25%|██▍ | 1.08G/4.38G [00:36<01:21, 40.4MiB/s]
25%|██▍ | 1.09G/4.38G [00:36<01:32, 35.5MiB/s]
25%|██▍ | 1.09G/4.38G [00:36<01:31, 36.0MiB/s]
25%|██▌ | 1.10G/4.38G [00:36<01:30, 36.2MiB/s]
25%|██▌ | 1.11G/4.38G [00:37<01:18, 41.5MiB/s]
25%|██▌ | 1.12G/4.38G [00:37<01:16, 42.8MiB/s]
26%|██▌ | 1.12G/4.38G [00:37<01:24, 38.5MiB/s]
26%|██▌ | 1.12G/4.38G [00:37<01:50, 29.6MiB/s]
26%|██▌ | 1.13G/4.38G [00:37<01:32, 35.1MiB/s]
26%|██▌ | 1.14G/4.38G [00:38<01:30, 35.7MiB/s]
26%|██▌ | 1.15G/4.38G [00:38<01:20, 40.1MiB/s]
26%|██▋ | 1.15G/4.38G [00:38<01:30, 35.7MiB/s]
26%|██▋ | 1.16G/4.38G [00:38<01:37, 33.0MiB/s]
26%|██▋ | 1.16G/4.38G [00:38<01:48, 29.7MiB/s]
27%|██▋ | 1.17G/4.38G [00:38<01:44, 30.8MiB/s]
27%|██▋ | 1.17G/4.38G [00:39<01:31, 35.2MiB/s]
27%|██▋ | 1.18G/4.38G [00:39<01:19, 40.4MiB/s]
27%|██▋ | 1.19G/4.38G [00:39<01:28, 36.0MiB/s]
27%|██▋ | 1.19G/4.38G [00:39<01:36, 33.0MiB/s]
27%|██▋ | 1.19G/4.38G [00:39<01:35, 33.4MiB/s]
27%|██▋ | 1.20G/4.38G [00:39<01:33, 34.2MiB/s]
27%|██▋ | 1.20G/4.38G [00:39<01:41, 31.4MiB/s]
28%|██▊ | 1.21G/4.38G [00:39<01:31, 34.8MiB/s]
28%|██▊ | 1.21G/4.38G [00:40<01:50, 28.6MiB/s]
28%|██▊ | 1.22G/4.38G [00:40<01:29, 35.3MiB/s]
28%|██▊ | 1.22G/4.38G [00:40<01:34, 33.6MiB/s]
28%|██▊ | 1.22G/4.38G [00:40<01:42, 30.8MiB/s]
28%|██▊ | 1.23G/4.38G [00:40<01:16, 41.0MiB/s]
28%|██▊ | 1.24G/4.38G [00:40<01:22, 38.1MiB/s]
28%|██▊ | 1.24G/4.38G [00:41<02:06, 24.7MiB/s]
28%|██▊ | 1.25G/4.38G [00:41<01:57, 26.7MiB/s]
29%|██▊ | 1.25G/4.38G [00:41<02:05, 25.0MiB/s]
29%|██▊ | 1.26G/4.38G [00:41<01:58, 26.5MiB/s]
29%|██▊ | 1.26G/4.38G [00:41<02:03, 25.2MiB/s]
29%|██▉ | 1.27G/4.38G [00:42<01:42, 30.2MiB/s]
29%|██▉ | 1.27G/4.38G [00:42<01:30, 34.3MiB/s]
29%|██▉ | 1.28G/4.38G [00:42<01:42, 30.1MiB/s]
29%|██▉ | 1.28G/4.38G [00:42<01:39, 31.1MiB/s]
29%|██▉ | 1.29G/4.38G [00:42<01:30, 34.3MiB/s]
30%|██▉ | 1.30G/4.38G [00:42<01:26, 35.4MiB/s]
30%|██▉ | 1.31G/4.38G [00:43<01:29, 34.4MiB/s]
30%|██▉ | 1.31G/4.38G [00:43<01:37, 31.6MiB/s]
30%|███ | 1.32G/4.38G [00:43<01:30, 34.0MiB/s]
30%|███ | 1.32G/4.38G [00:43<01:43, 29.5MiB/s]
30%|███ | 1.32G/4.38G [00:43<01:43, 29.5MiB/s]
30%|███ | 1.33G/4.38G [00:43<01:45, 28.8MiB/s]
30%|███ | 1.33G/4.38G [00:44<01:36, 31.5MiB/s]
31%|███ | 1.34G/4.38G [00:44<01:18, 38.7MiB/s]
31%|███ | 1.34G/4.38G [00:44<01:46, 28.5MiB/s]
31%|███ | 1.35G/4.38G [00:44<01:39, 30.6MiB/s]
31%|███ | 1.35G/4.38G [00:44<01:54, 26.4MiB/s]
31%|███ | 1.36G/4.38G [00:44<01:45, 28.7MiB/s]
31%|███ | 1.37G/4.38G [00:45<01:38, 30.5MiB/s]
31%|███ | 1.37G/4.38G [00:45<01:51, 26.9MiB/s]
31%|███▏ | 1.38G/4.38G [00:45<01:36, 31.1MiB/s]
32%|███▏ | 1.38G/4.38G [00:45<01:17, 38.7MiB/s]
32%|███▏ | 1.39G/4.38G [00:46<03:03, 16.3MiB/s]
32%|███▏ | 1.39G/4.38G [00:46<02:32, 19.5MiB/s]
32%|███▏ | 1.40G/4.38G [00:46<01:55, 25.8MiB/s]
32%|███▏ | 1.40G/4.38G [00:46<01:56, 25.6MiB/s]
32%|███▏ | 1.41G/4.38G [00:46<01:38, 30.1MiB/s]
32%|███▏ | 1.41G/4.38G [00:47<01:58, 25.1MiB/s]
32%|███▏ | 1.42G/4.38G [00:47<01:47, 27.4MiB/s]
33%|███▎ | 1.42G/4.38G [00:47<01:32, 32.0MiB/s]
33%|███▎ | 1.43G/4.38G [00:47<01:40, 29.4MiB/s]
33%|███▎ | 1.43G/4.38G [00:47<01:27, 33.5MiB/s]
33%|███▎ | 1.44G/4.38G [00:47<01:27, 33.4MiB/s]
33%|███▎ | 1.45G/4.38G [00:48<01:27, 33.7MiB/s]
33%|███▎ | 1.45G/4.38G [00:48<01:35, 30.6MiB/s]
33%|███▎ | 1.46G/4.38G [00:48<01:28, 33.0MiB/s]
33%|███▎ | 1.46G/4.38G [00:48<01:37, 29.9MiB/s]
33%|███▎ | 1.47G/4.38G [00:48<01:43, 28.2MiB/s]
34%|███▎ | 1.47G/4.38G [00:48<01:49, 26.5MiB/s]
34%|███▎ | 1.48G/4.38G [00:49<01:21, 35.6MiB/s]
34%|███▍ | 1.48G/4.38G [00:49<01:23, 34.6MiB/s]
34%|███▍ | 1.48G/4.38G [00:49<01:39, 29.1MiB/s]
34%|███▍ | 1.49G/4.38G [00:49<01:31, 31.5MiB/s]
34%|███▍ | 1.49G/4.38G [00:49<01:36, 30.0MiB/s]
34%|███▍ | 1.50G/4.38G [00:49<01:26, 33.2MiB/s]
34%|███▍ | 1.51G/4.38G [00:49<01:07, 42.8MiB/s]
35%|███▍ | 1.52G/4.38G [00:50<01:07, 42.3MiB/s]
35%|███▍ | 1.52G/4.38G [00:50<01:33, 30.5MiB/s]
35%|███▍ | 1.53G/4.38G [00:50<01:40, 28.5MiB/s]
35%|███▌ | 1.54G/4.38G [00:50<01:28, 32.3MiB/s]
35%|███▌ | 1.54G/4.38G [00:50<01:13, 38.4MiB/s]
35%|███▌ | 1.55G/4.38G [00:51<01:17, 36.5MiB/s]
36%|███▌ | 1.56G/4.38G [00:51<01:18, 35.9MiB/s]
36%|███▌ | 1.56G/4.38G [00:51<01:23, 33.8MiB/s]
36%|███▌ | 1.57G/4.38G [00:51<01:22, 34.0MiB/s]
36%|███▌ | 1.57G/4.38G [00:51<01:35, 29.3MiB/s]
36%|███▌ | 1.58G/4.38G [00:52<01:34, 29.7MiB/s]
36%|███▌ | 1.58G/4.38G [00:52<01:53, 24.8MiB/s]
36%|███▌ | 1.59G/4.38G [00:52<01:49, 25.6MiB/s]
36%|███▋ | 1.59G/4.38G [00:52<01:25, 32.8MiB/s]
36%|███▋ | 1.60G/4.38G [00:52<01:38, 28.2MiB/s]
37%|███▋ | 1.60G/4.38G [00:52<01:32, 29.9MiB/s]
37%|███▋ | 1.60G/4.38G [00:53<01:38, 28.2MiB/s]
37%|███▋ | 1.61G/4.38G [00:53<01:35, 29.0MiB/s]
37%|███▋ | 1.62G/4.38G [00:53<01:15, 36.5MiB/s]
37%|███▋ | 1.62G/4.38G [00:53<01:50, 25.0MiB/s]
37%|███▋ | 1.63G/4.38G [00:53<01:45, 26.0MiB/s]
37%|███▋ | 1.64G/4.38G [00:54<01:23, 32.7MiB/s]
38%|███▊ | 1.64G/4.38G [00:54<01:09, 39.1MiB/s]
38%|███▊ | 1.65G/4.38G [00:54<01:00, 45.0MiB/s]
38%|███▊ | 1.66G/4.38G [00:54<01:00, 44.6MiB/s]
38%|███▊ | 1.67G/4.38G [00:54<01:05, 41.4MiB/s]
38%|███▊ | 1.67G/4.38G [00:54<01:18, 34.5MiB/s]
38%|███▊ | 1.68G/4.38G [00:55<01:20, 33.8MiB/s]
38%|███▊ | 1.68G/4.38G [00:55<01:15, 35.8MiB/s]
39%|███▊ | 1.69G/4.38G [00:55<01:21, 33.1MiB/s]
39%|███▊ | 1.69G/4.38G [00:55<01:25, 31.5MiB/s]
39%|███▉ | 1.70G/4.38G [00:55<01:24, 31.9MiB/s]
39%|███▉ | 1.70G/4.38G [00:55<01:20, 33.3MiB/s]
39%|███▉ | 1.71G/4.38G [00:56<01:01, 43.4MiB/s]
39%|███▉ | 1.72G/4.38G [00:56<01:08, 39.0MiB/s]
39%|███▉ | 1.72G/4.38G [00:56<01:47, 24.9MiB/s]
39%|███▉ | 1.73G/4.38G [00:56<01:34, 28.0MiB/s]
40%|███▉ | 1.74G/4.38G [00:56<01:14, 35.3MiB/s]
40%|███▉ | 1.74G/4.38G [00:57<01:09, 37.7MiB/s]
40%|███▉ | 1.75G/4.38G [00:57<01:13, 35.8MiB/s]
40%|████ | 1.75G/4.38G [00:57<01:13, 36.0MiB/s]
40%|████ | 1.76G/4.38G [00:57<01:06, 39.4MiB/s]
40%|████ | 1.77G/4.38G [00:57<01:07, 38.9MiB/s]
41%|████ | 1.78G/4.38G [00:57<01:06, 39.0MiB/s]
41%|████ | 1.79G/4.38G [00:58<01:01, 42.2MiB/s]
41%|████ | 1.80G/4.38G [00:58<00:59, 43.8MiB/s]
41%|████ | 1.80G/4.38G [00:58<01:00, 42.6MiB/s]
41%|████ | 1.81G/4.38G [00:58<01:11, 35.8MiB/s]
41%|████▏ | 1.81G/4.38G [00:58<00:58, 44.1MiB/s]
42%|████▏ | 1.82G/4.38G [00:58<01:07, 38.1MiB/s]
42%|████▏ | 1.82G/4.38G [00:59<01:13, 34.8MiB/s]
42%|████▏ | 1.83G/4.38G [00:59<01:52, 22.7MiB/s]
42%|████▏ | 1.84G/4.38G [00:59<01:31, 27.9MiB/s]
42%|████▏ | 1.85G/4.38G [00:59<01:14, 34.2MiB/s]
42%|████▏ | 1.85G/4.38G [01:00<01:04, 39.0MiB/s]
42%|████▏ | 1.86G/4.38G [01:00<01:08, 36.9MiB/s]
43%|████▎ | 1.86G/4.38G [01:00<01:05, 38.3MiB/s]
43%|████▎ | 1.87G/4.38G [01:00<00:52, 47.8MiB/s]
43%|████▎ | 1.88G/4.38G [01:00<00:59, 42.4MiB/s]
43%|████▎ | 1.88G/4.38G [01:00<01:08, 36.3MiB/s]
43%|████▎ | 1.88G/4.38G [01:01<01:41, 24.7MiB/s]
43%|████▎ | 1.89G/4.38G [01:01<01:40, 24.9MiB/s]
43%|████▎ | 1.90G/4.38G [01:01<01:15, 32.8MiB/s]
43%|████▎ | 1.90G/4.38G [01:01<01:16, 32.2MiB/s]
44%|████▎ | 1.91G/4.38G [01:01<01:13, 33.7MiB/s]
44%|████▍ | 1.92G/4.38G [01:01<01:09, 35.2MiB/s]
44%|████▍ | 1.92G/4.38G [01:02<01:21, 30.1MiB/s]
44%|████▍ | 1.92G/4.38G [01:02<01:36, 25.3MiB/s]
44%|████▍ | 1.93G/4.38G [01:02<01:43, 23.8MiB/s]
44%|████▍ | 1.93G/4.38G [01:02<01:56, 21.1MiB/s]
44%|████▍ | 1.94G/4.38G [01:02<01:26, 28.3MiB/s]
44%|████▍ | 1.95G/4.38G [01:03<01:17, 31.3MiB/s]
45%|████▍ | 1.95G/4.38G [01:03<01:11, 33.8MiB/s]
45%|████▍ | 1.96G/4.38G [01:03<01:20, 30.1MiB/s]
45%|████▍ | 1.96G/4.38G [01:03<01:04, 37.2MiB/s]
45%|████▍ | 1.97G/4.38G [01:03<01:21, 29.7MiB/s]
45%|████▌ | 1.97G/4.38G [01:04<01:31, 26.4MiB/s]
45%|████▌ | 1.98G/4.38G [01:04<01:26, 27.7MiB/s]
45%|████▌ | 1.99G/4.38G [01:04<01:43, 23.1MiB/s]
45%|████▌ | 1.99G/4.38G [01:04<01:51, 21.5MiB/s]
46%|████▌ | 2.00G/4.38G [01:04<01:27, 27.2MiB/s]
46%|████▌ | 2.00G/4.38G [01:05<01:27, 27.3MiB/s]
46%|████▌ | 2.00G/4.38G [01:05<01:11, 33.2MiB/s]
46%|████▌ | 2.01G/4.38G [01:05<01:16, 30.9MiB/s]
46%|████▌ | 2.01G/4.38G [01:05<01:24, 28.2MiB/s]
46%|████▌ | 2.01G/4.38G [01:05<01:36, 24.6MiB/s]
46%|████▌ | 2.02G/4.38G [01:05<01:33, 25.2MiB/s]
46%|████▌ | 2.02G/4.38G [01:06<01:47, 21.9MiB/s]
46%|████▋ | 2.03G/4.38G [01:06<01:28, 26.4MiB/s]
46%|████▋ | 2.04G/4.38G [01:06<01:10, 33.4MiB/s]
47%|████▋ | 2.04G/4.38G [01:06<01:25, 27.4MiB/s]
47%|████▋ | 2.05G/4.38G [01:06<01:20, 28.9MiB/s]
47%|████▋ | 2.05G/4.38G [01:06<01:38, 23.8MiB/s]
47%|████▋ | 2.06G/4.38G [01:07<01:27, 26.7MiB/s]
47%|████▋ | 2.06G/4.38G [01:07<01:07, 34.6MiB/s]
47%|████▋ | 2.07G/4.38G [01:07<01:11, 32.2MiB/s]
47%|████▋ | 2.07G/4.38G [01:07<01:01, 37.3MiB/s]
47%|████▋ | 2.08G/4.38G [01:07<01:13, 31.2MiB/s]
47%|████▋ | 2.08G/4.38G [01:07<01:18, 29.4MiB/s]
48%|████▊ | 2.09G/4.38G [01:08<01:08, 33.6MiB/s]
48%|████▊ | 2.09G/4.38G [01:08<01:07, 33.9MiB/s]
48%|████▊ | 2.10G/4.38G [01:08<01:07, 33.7MiB/s]
48%|████▊ | 2.10G/4.38G [01:08<01:11, 31.7MiB/s]
48%|████▊ | 2.11G/4.38G [01:08<01:06, 34.1MiB/s]
48%|████▊ | 2.11G/4.38G [01:08<00:54, 41.4MiB/s]
48%|████▊ | 2.12G/4.38G [01:08<00:59, 38.1MiB/s]
48%|████▊ | 2.12G/4.38G [01:09<01:08, 33.0MiB/s]
49%|████▊ | 2.13G/4.38G [01:09<00:59, 37.9MiB/s]
49%|████▉ | 2.14G/4.38G [01:09<01:01, 36.3MiB/s]
49%|████▉ | 2.14G/4.38G [01:09<01:12, 31.1MiB/s]
49%|████▉ | 2.15G/4.38G [01:09<01:12, 30.9MiB/s]
49%|████▉ | 2.15G/4.38G [01:09<00:59, 37.6MiB/s]
49%|████▉ | 2.16G/4.38G [01:10<01:03, 34.9MiB/s]
49%|████▉ | 2.16G/4.38G [01:10<01:04, 34.4MiB/s]
49%|████▉ | 2.17G/4.38G [01:10<01:13, 30.0MiB/s]
50%|████▉ | 2.17G/4.38G [01:10<01:05, 33.5MiB/s]
50%|████▉ | 2.18G/4.38G [01:10<00:51, 42.5MiB/s]
50%|████▉ | 2.19G/4.38G [01:10<00:59, 37.0MiB/s]
50%|█████ | 2.19G/4.38G [01:11<01:08, 31.8MiB/s]
50%|█████ | 2.20G/4.38G [01:11<01:08, 31.8MiB/s]
50%|█████ | 2.20G/4.38G [01:11<01:25, 25.4MiB/s]
50%|█████ | 2.21G/4.38G [01:11<01:20, 27.1MiB/s]
51%|█████ | 2.21G/4.38G [01:11<01:14, 28.9MiB/s]
51%|█████ | 2.22G/4.38G [01:11<01:23, 26.1MiB/s]
51%|█████ | 2.22G/4.38G [01:12<01:15, 28.7MiB/s]
51%|█████ | 2.23G/4.38G [01:12<01:04, 33.1MiB/s]
51%|█████ | 2.23G/4.38G [01:12<01:09, 31.1MiB/s]
51%|█████ | 2.24G/4.38G [01:12<01:09, 30.8MiB/s]
51%|█████▏ | 2.25G/4.38G [01:12<00:54, 39.4MiB/s]
51%|█████▏ | 2.25G/4.38G [01:13<01:28, 24.1MiB/s]
52%|█████▏ | 2.26G/4.38G [01:13<01:26, 24.5MiB/s]
52%|█████▏ | 2.26G/4.38G [01:13<01:12, 29.1MiB/s]
52%|█████▏ | 2.27G/4.38G [01:13<01:12, 29.1MiB/s]
52%|█████▏ | 2.27G/4.38G [01:13<01:14, 28.2MiB/s]
52%|█████▏ | 2.28G/4.38G [01:14<00:56, 37.1MiB/s]
52%|█████▏ | 2.29G/4.38G [01:14<00:53, 39.1MiB/s]
52%|█████▏ | 2.30G/4.38G [01:14<00:54, 37.9MiB/s]
53%|█████▎ | 2.31G/4.38G [01:14<00:56, 36.5MiB/s]
53%|█████▎ | 2.31G/4.38G [01:14<01:01, 34.0MiB/s]
53%|█████▎ | 2.31G/4.38G [01:14<01:00, 34.2MiB/s]
53%|█████▎ | 2.32G/4.38G [01:15<01:07, 30.7MiB/s]
53%|█████▎ | 2.32G/4.38G [01:15<01:08, 30.1MiB/s]
53%|█████▎ | 2.33G/4.38G [01:15<01:05, 31.4MiB/s]
53%|█████▎ | 2.34G/4.38G [01:15<01:05, 31.0MiB/s]
54%|█████▎ | 2.35G/4.38G [01:16<01:01, 33.3MiB/s]
54%|█████▍ | 2.36G/4.38G [01:16<00:55, 36.6MiB/s]
54%|█████▍ | 2.36G/4.38G [01:16<00:53, 37.9MiB/s]
54%|█████▍ | 2.37G/4.38G [01:16<00:56, 35.4MiB/s]
54%|█████▍ | 2.37G/4.38G [01:16<01:02, 32.3MiB/s]
54%|█████▍ | 2.38G/4.38G [01:16<01:05, 30.6MiB/s]
54%|█████▍ | 2.38G/4.38G [01:16<00:56, 35.6MiB/s]
54%|█████▍ | 2.38G/4.38G [01:17<01:01, 32.6MiB/s]
55%|█████▍ | 2.39G/4.38G [01:17<01:04, 30.9MiB/s]
55%|█████▍ | 2.40G/4.38G [01:17<01:07, 29.2MiB/s]
55%|█████▍ | 2.40G/4.38G [01:17<01:21, 24.3MiB/s]
55%|█████▍ | 2.41G/4.38G [01:17<01:10, 28.0MiB/s]
55%|█████▌ | 2.41G/4.38G [01:18<01:06, 29.7MiB/s]
55%|█████▌ | 2.42G/4.38G [01:18<01:09, 28.1MiB/s]
55%|█████▌ | 2.42G/4.38G [01:18<01:02, 31.3MiB/s]
55%|█████▌ | 2.43G/4.38G [01:18<01:04, 30.2MiB/s]
56%|█████▌ | 2.43G/4.38G [01:18<01:11, 27.4MiB/s]
56%|█████▌ | 2.44G/4.38G [01:19<00:59, 32.8MiB/s]
56%|█████▌ | 2.45G/4.38G [01:19<00:45, 42.0MiB/s]
56%|█████▌ | 2.46G/4.38G [01:19<00:41, 46.0MiB/s]
56%|█████▌ | 2.46G/4.38G [01:19<00:47, 40.8MiB/s]
56%|█████▋ | 2.47G/4.38G [01:19<00:46, 41.0MiB/s]
56%|█████▋ | 2.47G/4.38G [01:19<00:57, 33.0MiB/s]
56%|█████▋ | 2.47G/4.38G [01:19<00:56, 33.5MiB/s]
57%|█████▋ | 2.48G/4.38G [01:19<01:02, 30.4MiB/s]
57%|█████▋ | 2.48G/4.38G [01:20<01:02, 30.2MiB/s]
57%|█████▋ | 2.48G/4.38G [01:20<01:12, 26.2MiB/s]
57%|█████▋ | 2.49G/4.38G [01:20<01:02, 30.3MiB/s]
57%|█████▋ | 2.50G/4.38G [01:20<00:49, 38.3MiB/s]
57%|█████▋ | 2.50G/4.38G [01:20<00:51, 36.6MiB/s]
57%|█████▋ | 2.51G/4.38G [01:20<00:53, 35.2MiB/s]
57%|█████▋ | 2.51G/4.38G [01:20<01:00, 30.7MiB/s]
57%|█████▋ | 2.52G/4.38G [01:21<00:51, 36.1MiB/s]
58%|█████▊ | 2.52G/4.38G [01:21<00:47, 38.9MiB/s]
58%|█████▊ | 2.53G/4.38G [01:21<00:44, 41.1MiB/s]
58%|█████▊ | 2.54G/4.38G [01:21<00:41, 43.9MiB/s]
58%|█████▊ | 2.54G/4.38G [01:21<00:44, 41.2MiB/s]
58%|█████▊ | 2.55G/4.38G [01:21<00:45, 40.6MiB/s]
58%|█████▊ | 2.55G/4.38G [01:22<00:48, 37.8MiB/s]
58%|█████▊ | 2.56G/4.38G [01:22<00:53, 34.0MiB/s]
59%|█████▊ | 2.57G/4.38G [01:22<00:43, 41.8MiB/s]
59%|█████▊ | 2.57G/4.38G [01:22<00:49, 36.9MiB/s]
59%|█████▊ | 2.57G/4.38G [01:22<00:58, 31.0MiB/s]
59%|█████▉ | 2.58G/4.38G [01:22<01:11, 25.1MiB/s]
59%|█████▉ | 2.58G/4.38G [01:23<01:05, 27.4MiB/s]
59%|█████▉ | 2.58G/4.38G [01:23<01:09, 25.8MiB/s]
59%|█████▉ | 2.59G/4.38G [01:23<00:53, 33.6MiB/s]
59%|█████▉ | 2.60G/4.38G [01:23<00:41, 42.4MiB/s]
59%|█████▉ | 2.60G/4.38G [01:23<00:58, 30.2MiB/s]
60%|█████▉ | 2.61G/4.38G [01:23<00:55, 32.1MiB/s]
60%|█████▉ | 2.62G/4.38G [01:23<00:45, 38.5MiB/s]
60%|█████▉ | 2.62G/4.38G [01:24<00:50, 35.0MiB/s]
60%|█████▉ | 2.62G/4.38G [01:24<01:16, 22.9MiB/s]
60%|█████▉ | 2.63G/4.38G [01:24<01:15, 23.1MiB/s]
60%|██████ | 2.63G/4.38G [01:24<01:10, 24.8MiB/s]
60%|██████ | 2.64G/4.38G [01:24<01:17, 22.5MiB/s]
60%|██████ | 2.64G/4.38G [01:25<01:12, 24.1MiB/s]
60%|██████ | 2.64G/4.38G [01:25<01:14, 23.3MiB/s]
60%|██████ | 2.65G/4.38G [01:25<00:57, 30.2MiB/s]
61%|██████ | 2.65G/4.38G [01:25<00:57, 30.1MiB/s]
61%|██████ | 2.66G/4.38G [01:25<00:59, 29.2MiB/s]
61%|██████ | 2.66G/4.38G [01:25<01:04, 26.9MiB/s]
61%|██████ | 2.67G/4.38G [01:25<00:54, 31.5MiB/s]
61%|██████ | 2.67G/4.38G [01:26<00:43, 38.9MiB/s]
61%|██████ | 2.68G/4.38G [01:26<00:53, 31.9MiB/s]
61%|██████ | 2.68G/4.38G [01:26<00:52, 32.6MiB/s]
61%|██████▏ | 2.69G/4.38G [01:26<00:53, 31.4MiB/s]
61%|██████▏ | 2.69G/4.38G [01:26<00:59, 28.2MiB/s]
61%|██████▏ | 2.69G/4.38G [01:26<01:00, 28.1MiB/s]
62%|██████▏ | 2.70G/4.38G [01:27<00:59, 28.5MiB/s]
62%|██████▏ | 2.71G/4.38G [01:27<00:45, 36.8MiB/s]
62%|██████▏ | 2.71G/4.38G [01:27<00:47, 35.2MiB/s]
62%|██████▏ | 2.72G/4.38G [01:27<00:40, 40.6MiB/s]
62%|██████▏ | 2.72G/4.38G [01:27<00:36, 45.1MiB/s]
62%|██████▏ | 2.73G/4.38G [01:27<00:40, 40.4MiB/s]
62%|██████▏ | 2.73G/4.38G [01:27<00:48, 33.7MiB/s]
62%|██████▏ | 2.74G/4.38G [01:28<00:57, 28.6MiB/s]
63%|██████▎ | 2.74G/4.38G [01:28<00:59, 27.4MiB/s]
63%|██████▎ | 2.75G/4.38G [01:28<00:59, 27.3MiB/s]
63%|██████▎ | 2.75G/4.38G [01:28<01:01, 26.4MiB/s]
63%|██████▎ | 2.76G/4.38G [01:28<01:15, 21.6MiB/s]
63%|██████▎ | 2.76G/4.38G [01:28<01:06, 24.3MiB/s]
63%|██████▎ | 2.76G/4.38G [01:29<01:01, 26.4MiB/s]
63%|██████▎ | 2.77G/4.38G [01:29<00:58, 27.7MiB/s]
63%|██████▎ | 2.77G/4.38G [01:29<01:14, 21.5MiB/s]
63%|██████▎ | 2.78G/4.38G [01:29<01:01, 26.3MiB/s]
64%|██████▎ | 2.79G/4.38G [01:29<00:46, 34.7MiB/s]
64%|██████▎ | 2.79G/4.38G [01:29<00:43, 36.5MiB/s]
64%|██████▍ | 2.80G/4.38G [01:30<00:45, 34.7MiB/s]
64%|██████▍ | 2.80G/4.38G [01:30<00:45, 35.0MiB/s]
64%|██████▍ | 2.81G/4.38G [01:30<00:38, 40.3MiB/s]
64%|██████▍ | 2.82G/4.38G [01:30<00:35, 44.5MiB/s]
64%|██████▍ | 2.82G/4.38G [01:30<00:38, 40.7MiB/s]
65%|██████▍ | 2.83G/4.38G [01:30<00:38, 40.3MiB/s]
65%|██████▍ | 2.83G/4.38G [01:30<00:42, 36.4MiB/s]
65%|██████▍ | 2.84G/4.38G [01:31<01:02, 24.9MiB/s]
65%|██████▍ | 2.84G/4.38G [01:31<00:52, 29.3MiB/s]
65%|██████▍ | 2.85G/4.38G [01:31<00:53, 28.7MiB/s]
65%|██████▌ | 2.85G/4.38G [01:31<00:55, 27.7MiB/s]
65%|██████▌ | 2.86G/4.38G [01:31<00:48, 31.2MiB/s]
65%|██████▌ | 2.86G/4.38G [01:32<00:49, 30.6MiB/s]
65%|██████▌ | 2.86G/4.38G [01:32<00:51, 29.4MiB/s]
65%|██████▌ | 2.87G/4.38G [01:32<00:44, 33.6MiB/s]
66%|██████▌ | 2.88G/4.38G [01:32<00:33, 44.4MiB/s]
66%|██████▌ | 2.88G/4.38G [01:32<00:40, 37.2MiB/s]
66%|██████▌ | 2.89G/4.38G [01:32<01:00, 24.9MiB/s]
66%|██████▌ | 2.89G/4.38G [01:33<00:55, 26.9MiB/s]
66%|██████▌ | 2.90G/4.38G [01:33<00:54, 27.0MiB/s]
66%|██████▌ | 2.90G/4.38G [01:33<00:51, 28.8MiB/s]
66%|██████▋ | 2.91G/4.38G [01:33<00:43, 33.7MiB/s]
66%|██████▋ | 2.91G/4.38G [01:33<00:47, 31.0MiB/s]
67%|██████▋ | 2.92G/4.38G [01:33<00:54, 27.1MiB/s]
67%|██████▋ | 2.92G/4.38G [01:34<00:59, 24.6MiB/s]
67%|██████▋ | 2.93G/4.38G [01:34<00:54, 26.6MiB/s]
67%|██████▋ | 2.93G/4.38G [01:34<00:45, 31.8MiB/s]
67%|██████▋ | 2.94G/4.38G [01:34<00:46, 31.3MiB/s]
67%|██████▋ | 2.94G/4.38G [01:34<00:36, 39.4MiB/s]
67%|██████▋ | 2.95G/4.38G [01:34<00:43, 32.8MiB/s]
67%|██████▋ | 2.95G/4.38G [01:34<00:41, 34.6MiB/s]
67%|██████▋ | 2.96G/4.38G [01:35<00:46, 30.6MiB/s]
68%|██████▊ | 2.96G/4.38G [01:35<00:52, 26.9MiB/s]
68%|██████▊ | 2.97G/4.38G [01:35<00:42, 32.9MiB/s]
68%|██████▊ | 2.98G/4.38G [01:35<00:43, 32.0MiB/s]
68%|██████▊ | 2.98G/4.38G [01:35<00:54, 25.9MiB/s]
68%|██████▊ | 2.98G/4.38G [01:36<00:53, 26.2MiB/s]
68%|██████▊ | 2.99G/4.38G [01:36<00:56, 24.7MiB/s]
68%|██████▊ | 2.99G/4.38G [01:36<00:48, 28.4MiB/s]
68%|██████▊ | 3.00G/4.38G [01:36<00:51, 27.2MiB/s]
69%|██████▊ | 3.00G/4.38G [01:36<00:39, 35.2MiB/s]
69%|██████▊ | 3.01G/4.38G [01:36<00:32, 42.0MiB/s]
69%|██████▉ | 3.02G/4.38G [01:37<00:38, 35.4MiB/s]
69%|██████▉ | 3.02G/4.38G [01:37<00:44, 30.8MiB/s]
69%|██████▉ | 3.03G/4.38G [01:37<00:43, 31.0MiB/s]
69%|██████▉ | 3.03G/4.38G [01:37<00:47, 28.5MiB/s]
69%|██████▉ | 3.04G/4.38G [01:37<00:41, 32.2MiB/s]
69%|██████▉ | 3.04G/4.38G [01:37<00:34, 38.3MiB/s]
70%|██████▉ | 3.05G/4.38G [01:38<00:39, 34.1MiB/s]
70%|██████▉ | 3.05G/4.38G [01:38<00:38, 34.3MiB/s]
70%|██████▉ | 3.06G/4.38G [01:38<00:37, 35.2MiB/s]
70%|███████ | 3.07G/4.38G [01:38<00:33, 38.8MiB/s]
70%|███████ | 3.08G/4.38G [01:38<00:33, 39.3MiB/s]
70%|███████ | 3.08G/4.38G [01:38<00:36, 35.8MiB/s]
70%|███████ | 3.09G/4.38G [01:39<00:32, 39.5MiB/s]
71%|███████ | 3.09G/4.38G [01:39<00:40, 32.0MiB/s]
71%|███████ | 3.09G/4.38G [01:39<00:37, 34.0MiB/s]
71%|███████ | 3.10G/4.38G [01:39<00:39, 32.8MiB/s]
71%|███████ | 3.10G/4.38G [01:39<00:39, 32.6MiB/s]
71%|███████ | 3.11G/4.38G [01:39<00:51, 25.0MiB/s]
71%|███████ | 3.11G/4.38G [01:39<00:40, 31.0MiB/s]
71%|███████ | 3.12G/4.38G [01:40<00:37, 34.0MiB/s]
71%|███████▏ | 3.13G/4.38G [01:40<00:30, 40.5MiB/s]
71%|███████▏ | 3.13G/4.38G [01:40<00:31, 39.3MiB/s]
72%|███████▏ | 3.14G/4.38G [01:40<00:30, 41.0MiB/s]
72%|███████▏ | 3.14G/4.38G [01:40<00:32, 38.6MiB/s]
72%|███████▏ | 3.15G/4.38G [01:40<00:30, 41.1MiB/s]
72%|███████▏ | 3.15G/4.38G [01:40<00:34, 35.7MiB/s]
72%|███████▏ | 3.15G/4.38G [01:40<00:34, 35.2MiB/s]
72%|███████▏ | 3.16G/4.38G [01:41<00:37, 32.9MiB/s]
72%|███████▏ | 3.16G/4.38G [01:41<00:39, 30.9MiB/s]
72%|███████▏ | 3.17G/4.38G [01:41<00:37, 32.4MiB/s]
72%|███████▏ | 3.17G/4.38G [01:41<00:42, 28.6MiB/s]
73%|███████▎ | 3.18G/4.38G [01:41<00:44, 27.2MiB/s]
73%|███████▎ | 3.18G/4.38G [01:42<00:39, 30.5MiB/s]
73%|███████▎ | 3.19G/4.38G [01:42<00:43, 27.5MiB/s]
73%|███████▎ | 3.20G/4.38G [01:42<00:31, 37.8MiB/s]
73%|███████▎ | 3.20G/4.38G [01:42<00:28, 40.7MiB/s]
73%|███████▎ | 3.21G/4.38G [01:42<00:23, 48.9MiB/s]
73%|███████▎ | 3.22G/4.38G [01:42<00:23, 49.3MiB/s]
74%|███████▎ | 3.22G/4.38G [01:42<00:25, 46.1MiB/s]
74%|███████▎ | 3.23G/4.38G [01:43<00:28, 39.9MiB/s]
74%|███████▍ | 3.24G/4.38G [01:43<00:28, 40.8MiB/s]
74%|███████▍ | 3.25G/4.38G [01:43<00:26, 42.6MiB/s]
74%|███████▍ | 3.25G/4.38G [01:43<00:28, 39.9MiB/s]
74%|███████▍ | 3.26G/4.38G [01:43<00:24, 46.3MiB/s]
75%|███████▍ | 3.27G/4.38G [01:44<00:24, 44.8MiB/s]
75%|███████▍ | 3.28G/4.38G [01:44<00:24, 45.9MiB/s]
75%|███████▍ | 3.28G/4.38G [01:44<00:28, 38.9MiB/s]
75%|███████▌ | 3.29G/4.38G [01:44<00:33, 32.9MiB/s]
75%|███████▌ | 3.29G/4.38G [01:44<00:36, 29.8MiB/s]
75%|███████▌ | 3.30G/4.38G [01:44<00:32, 33.3MiB/s]
75%|███████▌ | 3.30G/4.38G [01:45<00:32, 32.8MiB/s]
75%|███████▌ | 3.31G/4.38G [01:45<00:38, 27.6MiB/s]
76%|███████▌ | 3.31G/4.38G [01:45<00:36, 29.5MiB/s]
76%|███████▌ | 3.31G/4.38G [01:45<00:40, 26.7MiB/s]
76%|███████▌ | 3.32G/4.38G [01:45<00:36, 29.0MiB/s]
76%|███████▌ | 3.32G/4.38G [01:45<00:37, 28.3MiB/s]
76%|███████▌ | 3.33G/4.38G [01:45<00:30, 34.6MiB/s]
76%|███████▌ | 3.34G/4.38G [01:46<00:27, 37.8MiB/s]
76%|███████▋ | 3.35G/4.38G [01:46<00:29, 34.7MiB/s]
76%|███████▋ | 3.35G/4.38G [01:46<00:31, 33.2MiB/s]
77%|███████▋ | 3.36G/4.38G [01:46<00:31, 32.8MiB/s]
77%|███████▋ | 3.36G/4.38G [01:46<00:35, 29.0MiB/s]
77%|███████▋ | 3.36G/4.38G [01:47<00:33, 30.6MiB/s]
77%|███████▋ | 3.37G/4.38G [01:47<00:26, 37.5MiB/s]
77%|███████▋ | 3.37G/4.38G [01:47<00:30, 33.1MiB/s]
77%|███████▋ | 3.38G/4.38G [01:47<00:30, 32.4MiB/s]
77%|███████▋ | 3.39G/4.38G [01:47<00:25, 38.8MiB/s]
77%|███████▋ | 3.39G/4.38G [01:47<00:30, 32.9MiB/s]
78%|███████▊ | 3.40G/4.38G [01:47<00:25, 38.2MiB/s]
78%|███████▊ | 3.40G/4.38G [01:48<00:26, 37.1MiB/s]
78%|███████▊ | 3.41G/4.38G [01:48<00:27, 35.4MiB/s]
78%|███████▊ | 3.41G/4.38G [01:48<00:23, 41.7MiB/s]
78%|███████▊ | 3.42G/4.38G [01:48<00:23, 40.4MiB/s]
78%|███████▊ | 3.42G/4.38G [01:48<00:21, 44.2MiB/s]
78%|███████▊ | 3.43G/4.38G [01:48<00:25, 37.9MiB/s]
78%|███████▊ | 3.43G/4.38G [01:48<00:34, 27.2MiB/s]
78%|███████▊ | 3.44G/4.38G [01:49<00:33, 28.0MiB/s]
79%|███████▊ | 3.44G/4.38G [01:49<00:35, 26.2MiB/s]
79%|███████▊ | 3.45G/4.38G [01:49<00:31, 29.2MiB/s]
79%|███████▉ | 3.46G/4.38G [01:49<00:27, 33.6MiB/s]
79%|███████▉ | 3.46G/4.38G [01:49<00:25, 35.8MiB/s]
79%|███████▉ | 3.47G/4.38G [01:49<00:28, 32.6MiB/s]
79%|███████▉ | 3.47G/4.38G [01:50<00:26, 34.3MiB/s]
79%|███████▉ | 3.48G/4.38G [01:50<00:28, 31.9MiB/s]
79%|███████▉ | 3.48G/4.38G [01:50<00:29, 30.7MiB/s]
80%|███████▉ | 3.49G/4.38G [01:50<00:25, 34.7MiB/s]
80%|███████▉ | 3.50G/4.38G [01:50<00:21, 40.7MiB/s]
80%|███████▉ | 3.50G/4.38G [01:50<00:23, 37.5MiB/s]
80%|████████ | 3.51G/4.38G [01:51<00:23, 36.6MiB/s]
80%|████████ | 3.51G/4.38G [01:51<00:21, 41.1MiB/s]
80%|████████ | 3.52G/4.38G [01:51<00:19, 43.8MiB/s]
80%|████████ | 3.53G/4.38G [01:51<00:21, 39.1MiB/s]
81%|████████ | 3.53G/4.38G [01:51<00:24, 35.2MiB/s]
81%|████████ | 3.54G/4.38G [01:51<00:21, 38.4MiB/s]
81%|████████ | 3.54G/4.38G [01:52<00:24, 33.7MiB/s]
81%|████████ | 3.55G/4.38G [01:52<00:30, 27.6MiB/s]
81%|████████ | 3.55G/4.38G [01:52<00:30, 27.5MiB/s]
81%|████████ | 3.56G/4.38G [01:52<00:29, 28.1MiB/s]
81%|████████ | 3.56G/4.38G [01:52<00:32, 25.2MiB/s]
81%|████████▏ | 3.56G/4.38G [01:52<00:33, 24.7MiB/s]
81%|████████▏ | 3.57G/4.38G [01:52<00:29, 28.0MiB/s]
82%|████████▏ | 3.57G/4.38G [01:53<00:24, 33.3MiB/s]
82%|████████▏ | 3.58G/4.38G [01:53<00:20, 38.5MiB/s]
82%|████████▏ | 3.58G/4.38G [01:53<00:20, 38.5MiB/s]
82%|████████▏ | 3.59G/4.38G [01:53<00:21, 36.5MiB/s]
82%|████████▏ | 3.60G/4.38G [01:53<00:16, 46.2MiB/s]
82%|████████▏ | 3.60G/4.38G [01:53<00:17, 44.1MiB/s]
82%|████████▏ | 3.61G/4.38G [01:54<00:23, 33.0MiB/s]
82%|████████▏ | 3.61G/4.38G [01:54<00:21, 35.1MiB/s]
83%|████████▎ | 3.62G/4.38G [01:54<00:25, 30.1MiB/s]
83%|████████▎ | 3.62G/4.38G [01:54<00:23, 31.8MiB/s]
83%|████████▎ | 3.63G/4.38G [01:54<00:24, 30.5MiB/s]
83%|████████▎ | 3.63G/4.38G [01:54<00:22, 32.8MiB/s]
83%|████████▎ | 3.63G/4.38G [01:54<00:26, 27.8MiB/s]
83%|████████▎ | 3.64G/4.38G [01:55<00:18, 40.8MiB/s]
83%|████████▎ | 3.65G/4.38G [01:55<00:20, 35.7MiB/s]
83%|████████▎ | 3.66G/4.38G [01:55<00:16, 42.8MiB/s]
84%|████████▎ | 3.66G/4.38G [01:55<00:18, 38.9MiB/s]
84%|████████▎ | 3.67G/4.38G [01:55<00:18, 38.3MiB/s]
84%|████████▍ | 3.67G/4.38G [01:55<00:18, 38.0MiB/s]
84%|████████▍ | 3.68G/4.38G [01:55<00:18, 38.2MiB/s]
84%|████████▍ | 3.68G/4.38G [01:56<00:16, 41.8MiB/s]
84%|████████▍ | 3.69G/4.38G [01:56<00:14, 46.2MiB/s]
84%|████████▍ | 3.70G/4.38G [01:56<00:17, 38.4MiB/s]
85%|████████▍ | 3.71G/4.38G [01:56<00:20, 32.4MiB/s]
85%|████████▍ | 3.71G/4.38G [01:56<00:21, 31.1MiB/s]
85%|████████▍ | 3.72G/4.38G [01:57<00:17, 38.4MiB/s]
85%|████████▍ | 3.72G/4.38G [01:57<00:14, 45.4MiB/s]
85%|████████▌ | 3.73G/4.38G [01:57<00:25, 25.4MiB/s]
85%|████████▌ | 3.73G/4.38G [01:57<00:29, 22.2MiB/s]
85%|████████▌ | 3.74G/4.38G [01:58<00:22, 28.3MiB/s]
86%|████████▌ | 3.75G/4.38G [01:58<00:17, 36.4MiB/s]
86%|████████▌ | 3.75G/4.38G [01:58<00:18, 34.1MiB/s]
86%|████████▌ | 3.76G/4.38G [01:58<00:23, 26.4MiB/s]
86%|████████▌ | 3.77G/4.38G [01:58<00:20, 30.7MiB/s]
86%|████████▌ | 3.77G/4.38G [01:58<00:16, 36.8MiB/s]
86%|████████▋ | 3.78G/4.38G [01:59<00:15, 39.9MiB/s]
86%|████████▋ | 3.79G/4.38G [01:59<00:16, 36.8MiB/s]
87%|████████▋ | 3.79G/4.38G [01:59<00:15, 37.0MiB/s]
87%|████████▋ | 3.79G/4.38G [01:59<00:17, 34.5MiB/s]
87%|████████▋ | 3.80G/4.38G [01:59<00:17, 33.7MiB/s]
87%|████████▋ | 3.80G/4.38G [01:59<00:20, 28.1MiB/s]
87%|████████▋ | 3.81G/4.38G [02:00<00:22, 26.0MiB/s]
87%|████████▋ | 3.81G/4.38G [02:00<00:22, 25.8MiB/s]
87%|████████▋ | 3.82G/4.38G [02:00<00:20, 28.0MiB/s]
87%|████████▋ | 3.83G/4.38G [02:00<00:16, 33.7MiB/s]
87%|████████▋ | 3.83G/4.38G [02:00<00:13, 39.9MiB/s]
88%|████████▊ | 3.84G/4.38G [02:00<00:14, 38.6MiB/s]
88%|████████▊ | 3.84G/4.38G [02:00<00:14, 37.6MiB/s]
88%|████████▊ | 3.84G/4.38G [02:01<00:15, 34.1MiB/s]
88%|████████▊ | 3.85G/4.38G [02:01<00:16, 32.0MiB/s]
88%|████████▊ | 3.85G/4.38G [02:01<00:18, 28.4MiB/s]
88%|████████▊ | 3.86G/4.38G [02:01<00:15, 32.7MiB/s]
88%|████████▊ | 3.86G/4.38G [02:01<00:19, 27.2MiB/s]
88%|████████▊ | 3.87G/4.38G [02:01<00:17, 28.8MiB/s]
88%|████████▊ | 3.87G/4.38G [02:01<00:16, 31.1MiB/s]
88%|████████▊ | 3.88G/4.38G [02:02<00:15, 33.3MiB/s]
89%|████████▊ | 3.88G/4.38G [02:02<00:13, 36.4MiB/s]
89%|████████▊ | 3.89G/4.38G [02:02<00:14, 34.0MiB/s]
89%|████████▉ | 3.89G/4.38G [02:02<00:14, 33.6MiB/s]
89%|████████▉ | 3.90G/4.38G [02:02<00:13, 35.3MiB/s]
89%|████████▉ | 3.91G/4.38G [02:02<00:14, 32.9MiB/s]
89%|████████▉ | 3.91G/4.38G [02:03<00:15, 30.0MiB/s]
89%|████████▉ | 3.92G/4.38G [02:03<00:14, 31.2MiB/s]
89%|████████▉ | 3.92G/4.38G [02:03<00:16, 28.2MiB/s]
90%|████████▉ | 3.92G/4.38G [02:03<00:15, 30.0MiB/s]
90%|████████▉ | 3.93G/4.38G [02:03<00:15, 28.7MiB/s]
90%|████████▉ | 3.93G/4.38G [02:03<00:13, 32.5MiB/s]
90%|████████▉ | 3.94G/4.38G [02:03<00:14, 29.7MiB/s]
90%|████████▉ | 3.94G/4.38G [02:04<00:12, 34.1MiB/s]
90%|█████████ | 3.95G/4.38G [02:04<00:10, 40.0MiB/s]
90%|█████████ | 3.96G/4.38G [02:04<00:09, 46.7MiB/s]
91%|█████████ | 3.97G/4.38G [02:04<00:08, 51.6MiB/s]
91%|█████████ | 3.97G/4.38G [02:04<00:09, 45.2MiB/s]
91%|█████████ | 3.98G/4.38G [02:05<00:13, 29.6MiB/s]
91%|█████████ | 3.98G/4.38G [02:05<00:13, 29.5MiB/s]
91%|█████████ | 3.98G/4.38G [02:05<00:15, 26.3MiB/s]
91%|█████████ | 3.99G/4.38G [02:05<00:14, 26.7MiB/s]
91%|█████████ | 3.99G/4.38G [02:05<00:13, 28.4MiB/s]
91%|█████████▏| 4.00G/4.38G [02:05<00:11, 31.7MiB/s]
91%|█████████▏| 4.00G/4.38G [02:06<00:14, 26.8MiB/s]
92%|█████████▏| 4.01G/4.38G [02:06<00:11, 31.9MiB/s]
92%|█████████▏| 4.02G/4.38G [02:06<00:09, 37.8MiB/s]
92%|█████████▏| 4.02G/4.38G [02:06<00:10, 35.9MiB/s]
92%|█████████▏| 4.03G/4.38G [02:06<00:10, 34.5MiB/s]
92%|█████████▏| 4.03G/4.38G [02:06<00:08, 39.1MiB/s]
92%|█████████▏| 4.04G/4.38G [02:06<00:09, 36.0MiB/s]
92%|█████████▏| 4.04G/4.38G [02:07<00:10, 33.1MiB/s]
92%|█████████▏| 4.05G/4.38G [02:07<00:12, 26.2MiB/s]
92%|█████████▏| 4.05G/4.38G [02:07<00:11, 28.9MiB/s]
93%|█████████▎| 4.05G/4.38G [02:07<00:12, 25.7MiB/s]
93%|█████████▎| 4.06G/4.38G [02:07<00:10, 30.9MiB/s]
93%|█████████▎| 4.06G/4.38G [02:07<00:11, 28.5MiB/s]
93%|█████████▎| 4.07G/4.38G [02:07<00:09, 32.9MiB/s]
93%|█████████▎| 4.07G/4.38G [02:08<00:09, 31.5MiB/s]
93%|█████████▎| 4.08G/4.38G [02:08<00:10, 29.3MiB/s]
93%|█████████▎| 4.08G/4.38G [02:08<00:10, 28.3MiB/s]
93%|█████████▎| 4.08G/4.38G [02:08<00:08, 35.5MiB/s]
93%|█████████▎| 4.09G/4.38G [02:08<00:09, 32.3MiB/s]
93%|█████████▎| 4.09G/4.38G [02:08<00:08, 34.1MiB/s]
94%|█████████▎| 4.10G/4.38G [02:08<00:07, 36.3MiB/s]
94%|█████████▍| 4.11G/4.38G [02:09<00:05, 45.3MiB/s]
94%|█████████▍| 4.12G/4.38G [02:09<00:05, 47.8MiB/s]
94%|█████████▍| 4.12G/4.38G [02:09<00:06, 40.1MiB/s]
94%|█████████▍| 4.13G/4.38G [02:09<00:06, 40.5MiB/s]
94%|█████████▍| 4.13G/4.38G [02:09<00:06, 38.5MiB/s]
94%|█████████▍| 4.14G/4.38G [02:09<00:06, 36.6MiB/s]
95%|█████████▍| 4.14G/4.38G [02:09<00:05, 41.3MiB/s]
95%|█████████▍| 4.15G/4.38G [02:10<00:06, 35.1MiB/s]
95%|█████████▍| 4.15G/4.38G [02:10<00:08, 28.2MiB/s]
95%|█████████▍| 4.16G/4.38G [02:10<00:07, 31.5MiB/s]
95%|█████████▌| 4.16G/4.38G [02:10<00:06, 31.5MiB/s]
95%|█████████▌| 4.17G/4.38G [02:10<00:06, 32.3MiB/s]
95%|█████████▌| 4.18G/4.38G [02:11<00:06, 32.4MiB/s]
95%|█████████▌| 4.18G/4.38G [02:11<00:06, 30.1MiB/s]
96%|█████████▌| 4.19G/4.38G [02:11<00:05, 36.5MiB/s]
96%|█████████▌| 4.19G/4.38G [02:11<00:06, 29.7MiB/s]
96%|█████████▌| 4.19G/4.38G [02:11<00:06, 27.9MiB/s]
96%|█████████▌| 4.20G/4.38G [02:11<00:05, 34.1MiB/s]
96%|█████████▌| 4.21G/4.38G [02:11<00:05, 31.6MiB/s]
96%|█████████▌| 4.21G/4.38G [02:12<00:05, 33.3MiB/s]
96%|█████████▋| 4.22G/4.38G [02:12<00:04, 39.8MiB/s]
96%|█████████▋| 4.22G/4.38G [02:12<00:04, 37.2MiB/s]
96%|█████████▋| 4.23G/4.38G [02:12<00:05, 30.3MiB/s]
97%|█████████▋| 4.23G/4.38G [02:12<00:05, 26.1MiB/s]
97%|█████████▋| 4.23G/4.38G [02:12<00:04, 31.5MiB/s]
97%|█████████▋| 4.24G/4.38G [02:13<00:04, 30.8MiB/s]
97%|█████████▋| 4.24G/4.38G [02:13<00:04, 31.3MiB/s]
97%|█████████▋| 4.25G/4.38G [02:13<00:04, 28.0MiB/s]
97%|█████████▋| 4.25G/4.38G [02:13<00:04, 31.6MiB/s]
97%|█████████▋| 4.26G/4.38G [02:13<00:03, 34.5MiB/s]
97%|█████████▋| 4.26G/4.38G [02:13<00:03, 31.2MiB/s]
97%|█████████▋| 4.27G/4.38G [02:13<00:03, 34.8MiB/s]
98%|█████████▊| 4.28G/4.38G [02:14<00:02, 38.4MiB/s]
98%|█████████▊| 4.28G/4.38G [02:14<00:03, 32.7MiB/s]
98%|█████████▊| 4.28G/4.38G [02:14<00:02, 33.8MiB/s]
98%|█████████▊| 4.29G/4.38G [02:14<00:03, 27.2MiB/s]
98%|█████████▊| 4.29G/4.38G [02:14<00:03, 27.6MiB/s]
98%|█████████▊| 4.29G/4.38G [02:14<00:03, 27.3MiB/s]
98%|█████████▊| 4.30G/4.38G [02:14<00:02, 35.1MiB/s]
98%|█████████▊| 4.31G/4.38G [02:15<00:03, 23.4MiB/s]
98%|█████████▊| 4.31G/4.38G [02:15<00:02, 27.1MiB/s]
99%|█████████▊| 4.32G/4.38G [02:15<00:01, 35.2MiB/s]
99%|█████████▉| 4.33G/4.38G [02:15<00:01, 36.2MiB/s]
99%|█████████▉| 4.34G/4.38G [02:15<00:01, 40.8MiB/s]
99%|█████████▉| 4.35G/4.38G [02:16<00:00, 46.6MiB/s]
99%|█████████▉| 4.35G/4.38G [02:16<00:00, 48.7MiB/s]
100%|█████████▉| 4.36G/4.38G [02:16<00:00, 48.7MiB/s]
100%|█████████▉| 4.37G/4.38G [02:16<00:00, 46.3MiB/s]
100%|█████████▉| 4.37G/4.38G [02:16<00:00, 41.6MiB/s]
100%|█████████▉| 4.37G/4.38G [02:16<00:00, 38.4MiB/s]
100%|█████████▉| 4.38G/4.38G [02:17<00:00, 29.9MiB/s]
100%|██████████| 4.38G/4.38G [02:17<00:00, 31.9MiB/s]
然后我们将加载 csv 文件。
dataset_path = os.path.join(download_dir, 'flickr30k_processed')
train_data = pd.read_csv(f'{dataset_path}/train.csv', index_col=0)
val_data = pd.read_csv(f'{dataset_path}/val.csv', index_col=0)
test_data = pd.read_csv(f'{dataset_path}/test.csv', index_col=0)
image_col = "image"
text_col = "caption"
我们还需要展开相对图像路径,以使用它们的绝对本地路径。
def path_expander(path, base_folder):
path_l = path.split(';')
return ';'.join([os.path.abspath(os.path.join(base_folder, path)) for path in path_l])
train_data[image_col] = train_data[image_col].apply(lambda ele: path_expander(ele, base_folder=dataset_path))
val_data[image_col] = val_data[image_col].apply(lambda ele: path_expander(ele, base_folder=dataset_path))
test_data[image_col] = test_data[image_col].apply(lambda ele: path_expander(ele, base_folder=dataset_path))
以 train_data
为例,让我们看看数据在 dataframe 中是什么样的。
train_data.head()
描述 | 图像 | |
---|---|---|
0 | 两个留着蓬乱头发的年轻人看着他们的... | /home/ci/autogluon/docs/tutorials/multimodal/s... |
1 | 两名年轻的白人男性在许多建筑物附近... | /home/ci/autogluon/docs/tutorials/multimodal/s... |
2 | 两名穿着绿色衬衫的男子站在院子里 | /home/ci/autogluon/docs/tutorials/multimodal/s... |
3 | 一名穿着蓝色衬衫的男子站在花园里 | /home/ci/autogluon/docs/tutorials/multimodal/s... |
4 | 两位朋友在一起享受时光 | /home/ci/autogluon/docs/tutorials/multimodal/s... |
每一行都是一个图像和文本对,表示它们相互匹配。由于数据集中的每张图像对应五个描述文字,我们将每个图像路径复制五次以构建对应关系。我们可以可视化一个图像-文本对。
train_data[text_col][0]
'Two young guys with shaggy hair look at their hands while hanging out in the yard'
pil_img = Image(filename=train_data[image_col][0])
display(pil_img)

为了执行评估或语义搜索,我们需要从 text_data
中提取唯一的图像和文本项,并在 test_data
中添加一个标签列。
test_image_data = pd.DataFrame({image_col: test_data[image_col].unique().tolist()})
test_text_data = pd.DataFrame({text_col: test_data[text_col].unique().tolist()})
test_data_with_label = test_data.copy()
test_label_col = "relevance"
test_data_with_label[test_label_col] = [1] * len(test_data)
初始化预测器¶
要初始化用于图像-文本匹配的预测器,我们需要将 problem_type
设置为 image_text_similarity
。 query
和 response
指的是 dataframe 中的两列,同一行的两项应该相互匹配。您可以设置 query=text_col
和 response=image_col
,或者设置 query=image_col
和 response=text_col
。在图像-文本匹配中,query
和 response
是等效的。
from autogluon.multimodal import MultiModalPredictor
predictor = MultiModalPredictor(
query=text_col,
response=image_col,
problem_type="image_text_similarity",
eval_metric="recall",
)
通过初始化用于 image_text_similarity
的预测器,您已经加载了预训练的 CLIP 主干模型 openai/clip-vit-base-patch32
。
直接在测试数据集上评估(零样本)¶
您可能对获取预训练模型在您的数据上的性能感兴趣。让我们计算文本到图像和图像到文本的检索分数。
txt_to_img_scores = predictor.evaluate(
data=test_data_with_label,
query_data=test_text_data,
response_data=test_image_data,
label=test_label_col,
cutoffs=[1, 5, 10],
)
img_to_txt_scores = predictor.evaluate(
data=test_data_with_label,
query_data=test_image_data,
response_data=test_text_data,
label=test_label_col,
cutoffs=[1, 5, 10],
)
print(f"txt_to_img_scores: {txt_to_img_scores}")
print(f"img_to_txt_scores: {img_to_txt_scores}")
txt_to_img_scores: {'recall@1': np.float64(0.58964), 'recall@5': np.float64(0.83513), 'recall@10': np.float64(0.90156)}
img_to_txt_scores: {'recall@1': np.float64(0.15505), 'recall@5': np.float64(0.5708), 'recall@10': np.float64(0.7172)}
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
这里我们报告 recall
,它是在上面初始化预测器时的 eval_metric
。一个 cutoff
值意味着使用前 k 个检索项来计算分数。您可能会发现文本到图像的召回率远高于图像到文本的召回率。这是因为每张图像都配对有五段文本。在图像到文本检索中,recall@1
的上限是 20%,这意味着排名前 1 的文本是正确的,但总共有五段文本可以检索。
微调预测器¶
在衡量预训练性能后,我们可以在数据集上微调模型,看看能否获得改进。为了快速演示,这里我们将时间限制设置为 180 秒。
predictor.fit(
train_data=train_data,
tuning_data=val_data,
time_limit=180,
)
No path specified. Models will be saved in: "AutogluonModels/ag-20250508_210610"
=================== System Info ===================
AutoGluon Version: 1.3.1b20250508
Python Version: 3.11.9
Operating System: Linux
Platform Machine: x86_64
Platform Version: #1 SMP Wed Mar 12 14:53:59 UTC 2025
CPU Count: 8
Pytorch Version: 2.6.0+cu124
CUDA Version: 12.4
Memory Avail: 26.80 GB / 30.95 GB (86.6%)
Disk Space Avail: 169.12 GB / 255.99 GB (66.1%)
===================================================
AutoMM starts to create your model. ✨✨✨
To track the learning progress, you can open a terminal and launch Tensorboard:
```shell
# Assume you have installed tensorboard
tensorboard --logdir /home/ci/autogluon/docs/tutorials/multimodal/semantic_matching/AutogluonModels/ag-20250508_210610
```
INFO: Seed set to 0
GPU Count: 1
GPU Count to be Used: 1
INFO: Using 16bit Automatic Mixed Precision (AMP)
INFO: GPU available: True (cuda), used: True
INFO: TPU available: False, using: 0 TPU cores
INFO: HPU available: False, using: 0 HPUs
INFO: LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]
INFO:
| Name | Type | Params | Mode
------------------------------------------------------------------------
0 | query_model | CLIPForImageText | 151 M | train
1 | response_model | CLIPForImageText | 151 M | train
2 | validation_metric | CustomHitRate | 0 | train
3 | loss_func | MultiNegativesSoftmaxLoss | 0 | train
------------------------------------------------------------------------
151 M Trainable params
0 Non-trainable params
151 M Total params
605.109 Total estimated model params size (MB)
311 Modules in train mode
0 Modules in eval mode
INFO: Time limit reached. Elapsed time is 0:03:00. Signaling Trainer to stop.
INFO: Epoch 0, global step 399: 'val_recall' reached 0.56351 (best 0.56351), saving model to '/home/ci/autogluon/docs/tutorials/multimodal/semantic_matching/AutogluonModels/ag-20250508_210610/epoch=0-step=399.ckpt' as top 3
Start to fuse 1 checkpoints via the greedy soup algorithm.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
AutoMM has created your model. 🎉🎉🎉
To load the model, use the code below:
```python
from autogluon.multimodal import MultiModalPredictor
predictor = MultiModalPredictor.load("/home/ci/autogluon/docs/tutorials/multimodal/semantic_matching/AutogluonModels/ag-20250508_210610")
```
If you are not satisfied with the model, try to increase the training time,
adjust the hyperparameters (https://autogluon.cn/stable/tutorials/multimodal/advanced_topics/customization.html),
or post issues on GitHub (https://github.com/autogluon/autogluon/issues).
<autogluon.multimodal.predictor.MultiModalPredictor at 0x7f96b2f73050>
在测试数据集上评估微调后的模型¶
现在,让我们评估微调后的模型。类似地,我们也计算文本到图像和图像到文本检索的召回率。
txt_to_img_scores = predictor.evaluate(
data=test_data_with_label,
query_data=test_text_data,
response_data=test_image_data,
label=test_label_col,
cutoffs=[1, 5, 10],
)
img_to_txt_scores = predictor.evaluate(
data=test_data_with_label,
query_data=test_image_data,
response_data=test_text_data,
label=test_label_col,
cutoffs=[1, 5, 10],
)
print(f"txt_to_img_scores: {txt_to_img_scores}")
print(f"img_to_txt_scores: {img_to_txt_scores}")
txt_to_img_scores: {'recall@1': np.float64(0.70328), 'recall@5': np.float64(0.90936), 'recall@10': np.float64(0.95498)}
img_to_txt_scores: {'recall@1': np.float64(0.16965), 'recall@5': np.float64(0.6702), 'recall@10': np.float64(0.8196)}
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
我们可以观察到相对于零样本预测器有很大的改进。这意味着在我们的定制数据上微调 CLIP 可能有助于实现更好的性能。
预测图像和文本是否匹配¶
无论是否经过微调,预测器都可以预测图像和文本对是否匹配。
pred = predictor.predict(test_data.head(5))
print(pred)
0 1
1 1
2 1
3 1
4 1
dtype: int64
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
预测匹配概率¶
预测器还可以返回匹配概率。
proba = predictor.predict_proba(test_data.head(5))
print(proba)
0 1
0 0.342004 0.657996
1 0.325806 0.674194
2 0.347383 0.652617
3 0.343256 0.656744
4 0.329154 0.670846
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
第二列是匹配的概率。
提取嵌入¶
另一个常见的用例是提取图像和文本嵌入。
image_embeddings = predictor.extract_embedding({image_col: test_image_data[image_col][:5].tolist()})
print(image_embeddings.shape)
(5, 512)
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
text_embeddings = predictor.extract_embedding({text_col: test_text_data[text_col][:5].tolist()})
print(text_embeddings.shape)
(5, 512)
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
语义搜索¶
我们还提供了一个高级的实用函数来执行语义搜索。首先,给定一个或多个文本,我们可以从图像数据库中搜索语义相似的图像。
from autogluon.multimodal.utils import semantic_search
text_to_image_hits = semantic_search(
matcher=predictor,
query_data=test_text_data.iloc[[3]],
response_data=test_image_data,
top_k=5,
)
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
让我们可视化文本查询和排名前 1 的图像响应。
test_text_data.iloc[[3]]
描述 | |
---|---|
3 | 一个戴着橙色帽子的人凝视着什么 |
pil_img = Image(filename=test_image_data[image_col][text_to_image_hits[0][0]['response_id']])
display(pil_img)

类似地,给定一个或多个图像,我们可以检索语义相似的文本。
image_to_text_hits = semantic_search(
matcher=predictor,
query_data=test_image_data.iloc[[6]],
response_data=test_text_data,
top_k=5,
)
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
INFO: Using default `ModelCheckpoint`. Consider installing `litmodels` package to enable `LitModelCheckpoint` for automatic upload to the Lightning model registry.
让我们可视化图像查询和排名前 1 的文本响应。
pil_img = Image(filename=test_image_data[image_col][6])
display(pil_img)

test_text_data[text_col][image_to_text_hits[0][1]['response_id']]
'Several students waiting outside an igloo'
其他示例¶
您可以访问 AutoMM 示例 来探索关于 AutoMM 的其他示例。
定制¶
要了解如何定制 AutoMM,请参考 定制 AutoMM。