使用AutoMM进行图像到图像的语义匹配¶
计算两张图像之间的相似度是计算机视觉中的一项常见任务,具有多种实际应用,例如检测相同或不同的产品等。通常,图像相似度模型会将两张图像作为输入并将其转换为向量,然后使用余弦相似度、点积或欧几里得距离计算的相似度分数来衡量两张图像的相似或不同之处。
import os
import pandas as pd
import warnings
from IPython.display import Image, display
warnings.filterwarnings('ignore')
Prepare your Data¶
在本教程中,我们将演示如何使用AutoMM进行图像到图像的语义匹配,使用简化的斯坦福在线产品数据集(SOP)。
Stanford Online Products 数据集被引入用于度量学习。该数据集中有12类产品:自行车、橱柜、椅子、咖啡机、风扇、水壶、灯、杯子、沙发、订书机、桌子和烤面包机。每个类别都有一些产品,每个产品都有从不同视角拍摄的几张图片。在这里,我们将同一产品的不同视角视为正样本对(标记为1),而将不同产品的图片视为负样本对(标记为0)。
以下代码下载数据集并解压图像和注释文件。
download_dir = './ag_automm_tutorial_img2img'
zip_file = 'https://automl-mm-bench.s3.amazonaws.com/Stanford_Online_Products.zip'
from autogluon.core.utils.loaders import load_zip
load_zip.unzip(zip_file, unzip_dir=download_dir)
Downloading ./ag_automm_tutorial_img2img/file.zip from https://automl-mm-bench.s3.amazonaws.com/Stanford_Online_Products.zip...
0%| | 0.00/3.08G [00:00<?, ?iB/s]
0%| | 7.02M/3.08G [00:00<01:32, 33.2MiB/s]
0%| | 10.3M/3.08G [00:00<01:42, 29.9MiB/s]
0%| | 15.0M/3.08G [00:00<01:28, 34.6MiB/s]
1%| | 18.6M/3.08G [00:00<01:34, 32.6MiB/s]
1%| | 23.8M/3.08G [00:00<01:20, 37.9MiB/s]
1%| | 27.7M/3.08G [00:00<01:51, 27.4MiB/s]
1%| | 32.2M/3.08G [00:01<02:07, 24.0MiB/s]
1%| | 34.9M/3.08G [00:01<02:08, 23.6MiB/s]
1%|▏ | 40.6M/3.08G [00:01<02:08, 23.7MiB/s]
1%|▏ | 43.1M/3.08G [00:01<02:33, 19.8MiB/s]
2%|▏ | 48.4M/3.08G [00:01<01:56, 26.0MiB/s]
2%|▏ | 51.5M/3.08G [00:02<04:16, 11.8MiB/s]
2%|▏ | 57.0M/3.08G [00:02<03:08, 16.1MiB/s]
2%|▏ | 59.8M/3.08G [00:02<02:56, 17.1MiB/s]
2%|▏ | 65.3M/3.08G [00:03<02:36, 19.3MiB/s]
2%|▏ | 67.9M/3.08G [00:03<02:38, 19.0MiB/s]
2%|▏ | 75.5M/3.08G [00:03<01:52, 26.8MiB/s]
3%|▎ | 82.5M/3.08G [00:03<01:31, 32.9MiB/s]
3%|▎ | 86.3M/3.08G [00:03<01:31, 32.8MiB/s]
3%|▎ | 90.5M/3.08G [00:03<01:33, 32.1MiB/s]
3%|▎ | 94.0M/3.08G [00:03<01:32, 32.5MiB/s]
3%|▎ | 99.3M/3.08G [00:03<01:22, 36.3MiB/s]
3%|▎ | 103M/3.08G [00:04<01:37, 30.4MiB/s]
4%|▎ | 109M/3.08G [00:04<01:39, 29.9MiB/s]
4%|▍ | 116M/3.08G [00:04<01:33, 31.8MiB/s]
4%|▍ | 119M/3.08G [00:04<01:41, 29.3MiB/s]
4%|▍ | 125M/3.08G [00:04<01:22, 35.8MiB/s]
4%|▍ | 129M/3.08G [00:04<01:27, 33.8MiB/s]
4%|▍ | 133M/3.08G [00:05<02:13, 22.1MiB/s]
4%|▍ | 135M/3.08G [00:05<02:08, 23.0MiB/s]
5%|▍ | 141M/3.08G [00:05<01:39, 29.4MiB/s]
5%|▍ | 145M/3.08G [00:05<01:54, 25.7MiB/s]
5%|▍ | 149M/3.08G [00:05<01:41, 28.9MiB/s]
5%|▍ | 153M/3.08G [00:05<01:49, 26.8MiB/s]
5%|▌ | 158M/3.08G [00:05<01:29, 32.6MiB/s]
5%|▌ | 162M/3.08G [00:06<01:43, 28.3MiB/s]
5%|▌ | 166M/3.08G [00:06<01:33, 31.4MiB/s]
6%|▌ | 170M/3.08G [00:06<01:42, 28.3MiB/s]
6%|▌ | 176M/3.08G [00:06<01:29, 32.4MiB/s]
6%|▌ | 185M/3.08G [00:06<01:23, 34.7MiB/s]
6%|▌ | 191M/3.08G [00:06<01:17, 37.3MiB/s]
6%|▋ | 195M/3.08G [00:07<01:20, 35.7MiB/s]
6%|▋ | 200M/3.08G [00:07<01:20, 35.9MiB/s]
7%|▋ | 203M/3.08G [00:07<01:19, 36.5MiB/s]
7%|▋ | 208M/3.08G [00:07<01:34, 30.4MiB/s]
7%|▋ | 211M/3.08G [00:07<01:49, 26.2MiB/s]
7%|▋ | 214M/3.08G [00:07<02:20, 20.4MiB/s]
7%|▋ | 218M/3.08G [00:08<02:07, 22.5MiB/s]
7%|▋ | 226M/3.08G [00:08<01:39, 28.8MiB/s]
8%|▊ | 233M/3.08G [00:08<01:38, 28.8MiB/s]
8%|▊ | 236M/3.08G [00:08<01:43, 27.6MiB/s]
8%|▊ | 242M/3.08G [00:08<01:42, 27.8MiB/s]
8%|▊ | 244M/3.08G [00:08<01:47, 26.3MiB/s]
8%|▊ | 251M/3.08G [00:09<01:19, 35.7MiB/s]
8%|▊ | 255M/3.08G [00:09<01:25, 33.0MiB/s]
8%|▊ | 259M/3.08G [00:09<01:23, 33.9MiB/s]
9%|▊ | 263M/3.08G [00:09<01:27, 32.3MiB/s]
9%|▊ | 267M/3.08G [00:09<01:42, 27.5MiB/s]
9%|▊ | 270M/3.08G [00:09<02:02, 22.9MiB/s]
9%|▉ | 275M/3.08G [00:10<02:26, 19.2MiB/s]
9%|▉ | 277M/3.08G [00:10<02:33, 18.3MiB/s]
9%|▉ | 285M/3.08G [00:10<02:04, 22.5MiB/s]
10%|▉ | 293M/3.08G [00:10<01:26, 32.1MiB/s]
10%|▉ | 297M/3.08G [00:10<01:28, 31.5MiB/s]
10%|▉ | 302M/3.08G [00:10<01:27, 31.9MiB/s]
10%|█ | 310M/3.08G [00:11<01:05, 42.2MiB/s]
10%|█ | 315M/3.08G [00:11<01:06, 41.9MiB/s]
10%|█ | 320M/3.08G [00:11<01:14, 37.0MiB/s]
11%|█ | 325M/3.08G [00:11<01:41, 27.3MiB/s]
11%|█ | 330M/3.08G [00:11<01:31, 30.1MiB/s]
11%|█ | 334M/3.08G [00:11<01:29, 30.6MiB/s]
11%|█ | 338M/3.08G [00:12<01:46, 25.8MiB/s]
11%|█ | 342M/3.08G [00:12<02:15, 20.3MiB/s]
11%|█ | 345M/3.08G [00:12<02:12, 20.6MiB/s]
11%|█▏ | 351M/3.08G [00:12<01:41, 27.0MiB/s]
11%|█▏ | 354M/3.08G [00:12<01:42, 26.6MiB/s]
12%|█▏ | 359M/3.08G [00:12<01:26, 31.4MiB/s]
12%|█▏ | 362M/3.08G [00:13<01:40, 27.1MiB/s]
12%|█▏ | 369M/3.08G [00:13<01:22, 32.9MiB/s]
12%|█▏ | 374M/3.08G [00:13<01:15, 36.1MiB/s]
12%|█▏ | 378M/3.08G [00:13<01:19, 34.0MiB/s]
12%|█▏ | 384M/3.08G [00:13<01:05, 41.2MiB/s]
13%|█▎ | 389M/3.08G [00:13<01:18, 34.4MiB/s]
13%|█▎ | 394M/3.08G [00:13<01:08, 39.5MiB/s]
13%|█▎ | 403M/3.08G [00:14<01:03, 42.3MiB/s]
13%|█▎ | 409M/3.08G [00:14<01:07, 39.6MiB/s]
13%|█▎ | 413M/3.08G [00:14<01:10, 37.8MiB/s]
14%|█▎ | 418M/3.08G [00:14<01:26, 31.0MiB/s]
14%|█▎ | 421M/3.08G [00:14<01:24, 31.4MiB/s]
14%|█▍ | 428M/3.08G [00:14<01:23, 31.7MiB/s]
14%|█▍ | 436M/3.08G [00:15<01:10, 37.8MiB/s]
14%|█▍ | 443M/3.08G [00:15<01:16, 34.6MiB/s]
14%|█▍ | 446M/3.08G [00:15<01:46, 24.7MiB/s]
15%|█▍ | 451M/3.08G [00:16<03:14, 13.6MiB/s]
15%|█▍ | 453M/3.08G [00:16<03:15, 13.5MiB/s]
15%|█▍ | 460M/3.08G [00:16<02:10, 20.1MiB/s]
15%|█▌ | 464M/3.08G [00:16<02:00, 21.8MiB/s]
15%|█▌ | 468M/3.08G [00:17<02:09, 20.2MiB/s]
15%|█▌ | 471M/3.08G [00:17<02:10, 20.1MiB/s]
15%|█▌ | 477M/3.08G [00:17<01:34, 27.5MiB/s]
16%|█▌ | 481M/3.08G [00:17<01:40, 25.9MiB/s]
16%|█▌ | 485M/3.08G [00:17<01:29, 29.0MiB/s]
16%|█▌ | 488M/3.08G [00:17<01:36, 26.9MiB/s]
16%|█▌ | 495M/3.08G [00:17<01:36, 26.8MiB/s]
16%|█▋ | 502M/3.08G [00:18<01:18, 33.0MiB/s]
16%|█▋ | 505M/3.08G [00:18<01:23, 30.9MiB/s]
16%|█▋ | 509M/3.08G [00:18<01:28, 29.0MiB/s]
17%|█▋ | 512M/3.08G [00:18<02:24, 17.8MiB/s]
17%|█▋ | 518M/3.08G [00:19<02:26, 17.6MiB/s]
17%|█▋ | 521M/3.08G [00:19<02:34, 16.5MiB/s]
17%|█▋ | 524M/3.08G [00:19<02:15, 18.9MiB/s]
17%|█▋ | 526M/3.08G [00:19<02:16, 18.7MiB/s]
17%|█▋ | 528M/3.08G [00:19<02:14, 18.9MiB/s]
17%|█▋ | 535M/3.08G [00:19<02:01, 21.0MiB/s]
17%|█▋ | 538M/3.08G [00:20<02:17, 18.5MiB/s]
18%|█▊ | 544M/3.08G [00:20<02:03, 20.6MiB/s]
18%|█▊ | 546M/3.08G [00:20<02:04, 20.3MiB/s]
18%|█▊ | 548M/3.08G [00:20<02:54, 14.5MiB/s]
18%|█▊ | 552M/3.08G [00:21<02:50, 14.9MiB/s]
18%|█▊ | 555M/3.08G [00:21<02:22, 17.8MiB/s]
18%|█▊ | 562M/3.08G [00:21<01:37, 25.8MiB/s]
18%|█▊ | 570M/3.08G [00:21<01:11, 34.9MiB/s]
19%|█▊ | 577M/3.08G [00:21<01:04, 38.7MiB/s]
19%|█▉ | 581M/3.08G [00:21<01:18, 32.1MiB/s]
19%|█▉ | 588M/3.08G [00:21<01:02, 39.8MiB/s]
19%|█▉ | 596M/3.08G [00:22<01:06, 37.4MiB/s]
20%|█▉ | 602M/3.08G [00:22<01:06, 37.1MiB/s]
20%|█▉ | 606M/3.08G [00:22<01:15, 33.0MiB/s]
20%|█▉ | 612M/3.08G [00:22<01:17, 31.9MiB/s]
20%|██ | 619M/3.08G [00:22<01:05, 37.4MiB/s]
20%|██ | 623M/3.08G [00:22<01:08, 36.1MiB/s]
20%|██ | 627M/3.08G [00:22<01:06, 37.0MiB/s]
20%|██ | 631M/3.08G [00:23<01:20, 30.4MiB/s]
21%|██ | 636M/3.08G [00:23<01:41, 24.2MiB/s]
21%|██ | 639M/3.08G [00:23<01:43, 23.7MiB/s]
21%|██ | 645M/3.08G [00:23<01:22, 29.6MiB/s]
21%|██ | 648M/3.08G [00:23<01:26, 28.1MiB/s]
21%|██ | 653M/3.08G [00:23<01:19, 30.6MiB/s]
21%|██▏ | 656M/3.08G [00:24<01:33, 25.9MiB/s]
21%|██▏ | 663M/3.08G [00:24<01:15, 32.0MiB/s]
22%|██▏ | 671M/3.08G [00:24<01:04, 37.2MiB/s]
22%|██▏ | 678M/3.08G [00:24<01:01, 39.0MiB/s]
22%|██▏ | 682M/3.08G [00:24<01:07, 35.5MiB/s]
22%|██▏ | 688M/3.08G [00:24<01:03, 37.8MiB/s]
23%|██▎ | 694M/3.08G [00:25<01:04, 37.1MiB/s]
23%|██▎ | 698M/3.08G [00:25<01:07, 35.4MiB/s]
23%|██▎ | 705M/3.08G [00:25<01:06, 35.6MiB/s]
23%|██▎ | 713M/3.08G [00:25<01:05, 36.4MiB/s]
23%|██▎ | 720M/3.08G [00:25<01:05, 36.4MiB/s]
23%|██▎ | 723M/3.08G [00:25<01:06, 35.5MiB/s]
24%|██▎ | 730M/3.08G [00:26<01:08, 34.1MiB/s]
24%|██▍ | 736M/3.08G [00:26<01:05, 35.6MiB/s]
24%|██▍ | 740M/3.08G [00:26<01:09, 33.9MiB/s]
24%|██▍ | 747M/3.08G [00:26<00:57, 40.7MiB/s]
24%|██▍ | 755M/3.08G [00:26<00:49, 47.3MiB/s]
25%|██▍ | 763M/3.08G [00:26<00:41, 55.3MiB/s]
25%|██▍ | 769M/3.08G [00:26<00:46, 49.4MiB/s]
25%|██▌ | 774M/3.08G [00:27<01:03, 36.3MiB/s]
25%|██▌ | 780M/3.08G [00:27<01:02, 36.9MiB/s]
26%|██▌ | 789M/3.08G [00:27<00:56, 40.3MiB/s]
26%|██▌ | 795M/3.08G [00:27<00:52, 44.0MiB/s]
26%|██▌ | 800M/3.08G [00:27<00:56, 40.8MiB/s]
26%|██▌ | 804M/3.08G [00:27<00:59, 38.4MiB/s]
26%|██▌ | 808M/3.08G [00:28<01:08, 33.1MiB/s]
26%|██▋ | 814M/3.08G [00:28<01:16, 29.7MiB/s]
27%|██▋ | 821M/3.08G [00:28<01:04, 35.0MiB/s]
27%|██▋ | 824M/3.08G [00:28<01:05, 34.4MiB/s]
27%|██▋ | 830M/3.08G [00:28<01:15, 29.9MiB/s]
27%|██▋ | 837M/3.08G [00:28<01:04, 34.6MiB/s]
27%|██▋ | 841M/3.08G [00:29<01:07, 33.3MiB/s]
27%|██▋ | 847M/3.08G [00:29<01:06, 33.5MiB/s]
28%|██▊ | 854M/3.08G [00:29<00:57, 39.0MiB/s]
28%|██▊ | 858M/3.08G [00:29<01:01, 36.5MiB/s]
28%|██▊ | 862M/3.08G [00:29<01:27, 25.5MiB/s]
28%|██▊ | 865M/3.08G [00:29<01:26, 25.6MiB/s]
28%|██▊ | 872M/3.08G [00:30<01:17, 28.5MiB/s]
29%|██▊ | 879M/3.08G [00:30<01:28, 25.0MiB/s]
29%|██▊ | 882M/3.08G [00:30<01:31, 24.2MiB/s]
29%|██▉ | 887M/3.08G [00:30<01:14, 29.5MiB/s]
29%|██▉ | 891M/3.08G [00:30<01:19, 27.7MiB/s]
29%|██▉ | 898M/3.08G [00:31<01:13, 29.6MiB/s]
29%|██▉ | 906M/3.08G [00:31<00:54, 39.8MiB/s]
30%|██▉ | 910M/3.08G [00:31<00:58, 37.0MiB/s]
30%|██▉ | 914M/3.08G [00:31<00:59, 36.5MiB/s]
30%|██▉ | 921M/3.08G [00:31<00:53, 40.1MiB/s]
30%|███ | 925M/3.08G [00:31<00:57, 37.4MiB/s]
30%|███ | 931M/3.08G [00:31<00:55, 39.1MiB/s]
30%|███ | 938M/3.08G [00:31<00:47, 44.8MiB/s]
31%|███ | 942M/3.08G [00:32<00:55, 38.6MiB/s]
31%|███ | 947M/3.08G [00:32<01:03, 33.5MiB/s]
31%|███ | 950M/3.08G [00:32<01:03, 33.9MiB/s]
31%|███ | 955M/3.08G [00:32<00:58, 36.3MiB/s]
31%|███ | 958M/3.08G [00:32<01:01, 34.6MiB/s]
31%|███▏ | 965M/3.08G [00:32<00:53, 39.5MiB/s]
32%|███▏ | 973M/3.08G [00:32<00:52, 40.0MiB/s]
32%|███▏ | 980M/3.08G [00:33<00:47, 44.3MiB/s]
32%|███▏ | 984M/3.08G [00:33<00:56, 37.1MiB/s]
32%|███▏ | 988M/3.08G [00:33<01:11, 29.3MiB/s]
32%|███▏ | 991M/3.08G [00:33<01:17, 26.9MiB/s]
32%|███▏ | 994M/3.08G [00:33<01:45, 19.8MiB/s]
32%|███▏ | 998M/3.08G [00:34<01:43, 20.2MiB/s]
33%|███▎ | 1.00G/3.08G [00:34<01:29, 23.2MiB/s]
33%|███▎ | 1.01G/3.08G [00:34<01:25, 24.2MiB/s]
33%|███▎ | 1.01G/3.08G [00:34<01:22, 25.2MiB/s]
33%|███▎ | 1.02G/3.08G [00:34<01:23, 24.8MiB/s]
33%|███▎ | 1.02G/3.08G [00:34<01:09, 29.6MiB/s]
33%|███▎ | 1.02G/3.08G [00:34<01:09, 29.7MiB/s]
33%|███▎ | 1.03G/3.08G [00:35<00:52, 39.5MiB/s]
34%|███▎ | 1.04G/3.08G [00:35<00:49, 41.2MiB/s]
34%|███▍ | 1.04G/3.08G [00:35<01:05, 31.0MiB/s]
34%|███▍ | 1.05G/3.08G [00:35<01:10, 28.9MiB/s]
34%|███▍ | 1.05G/3.08G [00:35<01:09, 29.4MiB/s]
34%|███▍ | 1.06G/3.08G [00:35<00:58, 34.5MiB/s]
34%|███▍ | 1.06G/3.08G [00:35<01:05, 31.0MiB/s]
35%|███▍ | 1.07G/3.08G [00:36<01:03, 31.6MiB/s]
35%|███▍ | 1.07G/3.08G [00:36<00:57, 35.0MiB/s]
35%|███▍ | 1.08G/3.08G [00:36<00:54, 36.9MiB/s]
35%|███▌ | 1.08G/3.08G [00:36<01:15, 26.4MiB/s]
35%|███▌ | 1.09G/3.08G [00:36<01:21, 24.5MiB/s]
35%|███▌ | 1.09G/3.08G [00:37<01:16, 26.0MiB/s]
35%|███▌ | 1.09G/3.08G [00:37<01:12, 27.5MiB/s]
36%|███▌ | 1.10G/3.08G [00:37<01:33, 21.4MiB/s]
36%|███▌ | 1.10G/3.08G [00:37<01:32, 21.3MiB/s]
36%|███▌ | 1.11G/3.08G [00:37<01:11, 27.7MiB/s]
36%|███▌ | 1.12G/3.08G [00:37<00:56, 34.6MiB/s]
36%|███▋ | 1.12G/3.08G [00:38<00:54, 36.2MiB/s]
37%|███▋ | 1.13G/3.08G [00:38<00:58, 33.3MiB/s]
37%|███▋ | 1.13G/3.08G [00:38<00:59, 32.6MiB/s]
37%|███▋ | 1.14G/3.08G [00:38<00:53, 36.5MiB/s]
37%|███▋ | 1.14G/3.08G [00:38<00:59, 32.5MiB/s]
37%|███▋ | 1.15G/3.08G [00:38<01:00, 32.1MiB/s]
37%|███▋ | 1.16G/3.08G [00:39<01:00, 32.0MiB/s]
38%|███▊ | 1.16G/3.08G [00:39<01:04, 29.8MiB/s]
38%|███▊ | 1.17G/3.08G [00:39<00:59, 32.3MiB/s]
38%|███▊ | 1.17G/3.08G [00:39<00:52, 36.4MiB/s]
38%|███▊ | 1.18G/3.08G [00:39<00:54, 35.0MiB/s]
38%|███▊ | 1.18G/3.08G [00:39<00:54, 35.0MiB/s]
38%|███▊ | 1.18G/3.08G [00:39<00:54, 35.2MiB/s]
39%|███▊ | 1.19G/3.08G [00:40<00:54, 35.0MiB/s]
39%|███▉ | 1.20G/3.08G [00:40<01:06, 28.3MiB/s]
39%|███▉ | 1.20G/3.08G [00:40<01:08, 27.6MiB/s]
39%|███▉ | 1.21G/3.08G [00:40<01:04, 29.3MiB/s]
39%|███▉ | 1.21G/3.08G [00:40<01:04, 29.2MiB/s]
39%|███▉ | 1.21G/3.08G [00:41<01:20, 23.2MiB/s]
39%|███▉ | 1.21G/3.08G [00:41<01:56, 16.1MiB/s]
39%|███▉ | 1.22G/3.08G [00:41<01:55, 16.2MiB/s]
40%|███▉ | 1.22G/3.08G [00:41<01:28, 21.1MiB/s]
40%|███▉ | 1.23G/3.08G [00:41<01:42, 18.1MiB/s]
40%|███▉ | 1.23G/3.08G [00:42<01:24, 21.9MiB/s]
40%|████ | 1.23G/3.08G [00:42<01:29, 20.7MiB/s]
40%|████ | 1.24G/3.08G [00:42<01:10, 26.2MiB/s]
40%|████ | 1.24G/3.08G [00:42<01:06, 27.9MiB/s]
40%|████ | 1.25G/3.08G [00:42<01:13, 24.9MiB/s]
41%|████ | 1.25G/3.08G [00:42<01:09, 26.4MiB/s]
41%|████ | 1.26G/3.08G [00:42<00:54, 33.6MiB/s]
41%|████ | 1.26G/3.08G [00:43<00:59, 30.7MiB/s]
41%|████ | 1.27G/3.08G [00:43<00:50, 36.1MiB/s]
41%|████▏ | 1.27G/3.08G [00:43<00:49, 36.9MiB/s]
41%|████▏ | 1.28G/3.08G [00:43<00:54, 33.0MiB/s]
42%|████▏ | 1.28G/3.08G [00:43<00:57, 31.3MiB/s]
42%|████▏ | 1.28G/3.08G [00:43<00:59, 30.1MiB/s]
42%|████▏ | 1.29G/3.08G [00:43<00:49, 36.4MiB/s]
42%|████▏ | 1.30G/3.08G [00:44<00:46, 38.8MiB/s]
42%|████▏ | 1.30G/3.08G [00:44<00:49, 36.2MiB/s]
42%|████▏ | 1.31G/3.08G [00:44<00:53, 33.4MiB/s]
42%|████▏ | 1.31G/3.08G [00:44<00:56, 31.5MiB/s]
43%|████▎ | 1.32G/3.08G [00:44<00:53, 32.8MiB/s]
43%|████▎ | 1.32G/3.08G [00:44<00:56, 31.1MiB/s]
43%|████▎ | 1.33G/3.08G [00:44<00:46, 37.9MiB/s]
43%|████▎ | 1.33G/3.08G [00:45<00:50, 34.5MiB/s]
43%|████▎ | 1.34G/3.08G [00:45<00:57, 30.5MiB/s]
43%|████▎ | 1.34G/3.08G [00:45<00:58, 29.6MiB/s]
44%|████▎ | 1.34G/3.08G [00:45<01:08, 25.3MiB/s]
44%|████▍ | 1.35G/3.08G [00:45<01:04, 26.8MiB/s]
44%|████▍ | 1.36G/3.08G [00:46<00:55, 31.3MiB/s]
44%|████▍ | 1.36G/3.08G [00:46<01:00, 28.4MiB/s]
44%|████▍ | 1.37G/3.08G [00:46<00:54, 31.4MiB/s]
44%|████▍ | 1.37G/3.08G [00:46<01:02, 27.5MiB/s]
45%|████▍ | 1.38G/3.08G [00:46<00:58, 29.1MiB/s]
45%|████▍ | 1.38G/3.08G [00:46<00:49, 34.3MiB/s]
45%|████▌ | 1.39G/3.08G [00:47<00:47, 35.9MiB/s]
45%|████▌ | 1.39G/3.08G [00:47<00:53, 31.6MiB/s]
45%|████▌ | 1.40G/3.08G [00:47<00:52, 32.1MiB/s]
45%|████▌ | 1.40G/3.08G [00:47<01:01, 27.5MiB/s]
46%|████▌ | 1.41G/3.08G [00:47<00:54, 31.0MiB/s]
46%|████▌ | 1.41G/3.08G [00:47<00:56, 29.8MiB/s]
46%|████▌ | 1.42G/3.08G [00:47<00:53, 31.0MiB/s]
46%|████▌ | 1.42G/3.08G [00:48<00:54, 30.5MiB/s]
46%|████▌ | 1.43G/3.08G [00:48<00:41, 40.3MiB/s]
47%|████▋ | 1.43G/3.08G [00:48<00:34, 47.2MiB/s]
47%|████▋ | 1.44G/3.08G [00:48<00:31, 51.3MiB/s]
47%|████▋ | 1.45G/3.08G [00:48<00:38, 42.3MiB/s]
47%|████▋ | 1.45G/3.08G [00:48<00:49, 32.9MiB/s]
47%|████▋ | 1.46G/3.08G [00:49<00:48, 33.2MiB/s]
48%|████▊ | 1.47G/3.08G [00:49<00:45, 35.7MiB/s]
48%|████▊ | 1.47G/3.08G [00:49<00:52, 31.0MiB/s]
48%|████▊ | 1.48G/3.08G [00:49<00:48, 33.3MiB/s]
48%|████▊ | 1.48G/3.08G [00:49<00:42, 37.5MiB/s]
48%|████▊ | 1.49G/3.08G [00:49<00:49, 32.4MiB/s]
48%|████▊ | 1.49G/3.08G [00:50<00:51, 31.1MiB/s]
49%|████▊ | 1.50G/3.08G [00:50<00:43, 36.4MiB/s]
49%|████▉ | 1.50G/3.08G [00:50<00:44, 35.2MiB/s]
49%|████▉ | 1.51G/3.08G [00:50<00:46, 34.0MiB/s]
49%|████▉ | 1.51G/3.08G [00:50<00:47, 32.8MiB/s]
49%|████▉ | 1.52G/3.08G [00:50<00:44, 35.4MiB/s]
49%|████▉ | 1.52G/3.08G [00:50<00:52, 29.6MiB/s]
50%|████▉ | 1.53G/3.08G [00:51<00:45, 33.9MiB/s]
50%|████▉ | 1.54G/3.08G [00:51<00:37, 40.9MiB/s]
50%|████▉ | 1.54G/3.08G [00:51<00:44, 34.3MiB/s]
50%|█████ | 1.54G/3.08G [00:51<00:59, 25.7MiB/s]
50%|█████ | 1.55G/3.08G [00:51<00:54, 28.2MiB/s]
50%|█████ | 1.55G/3.08G [00:51<00:52, 29.3MiB/s]
51%|█████ | 1.56G/3.08G [00:52<00:44, 34.1MiB/s]
51%|█████ | 1.57G/3.08G [00:52<00:39, 38.2MiB/s]
51%|█████ | 1.58G/3.08G [00:52<00:38, 39.0MiB/s]
51%|█████▏ | 1.58G/3.08G [00:52<00:48, 30.9MiB/s]
51%|█████▏ | 1.59G/3.08G [00:52<00:52, 28.7MiB/s]
52%|█████▏ | 1.59G/3.08G [00:53<00:43, 34.7MiB/s]
52%|█████▏ | 1.60G/3.08G [00:53<00:47, 31.1MiB/s]
52%|█████▏ | 1.60G/3.08G [00:53<00:48, 30.6MiB/s]
52%|█████▏ | 1.61G/3.08G [00:53<00:36, 39.9MiB/s]
52%|█████▏ | 1.62G/3.08G [00:53<00:37, 39.1MiB/s]
53%|█████▎ | 1.62G/3.08G [00:53<00:47, 31.1MiB/s]
53%|█████▎ | 1.63G/3.08G [00:54<00:44, 33.1MiB/s]
53%|█████▎ | 1.63G/3.08G [00:54<00:39, 36.9MiB/s]
53%|█████▎ | 1.64G/3.08G [00:54<00:43, 33.3MiB/s]
53%|█████▎ | 1.64G/3.08G [00:54<00:46, 30.9MiB/s]
53%|█████▎ | 1.65G/3.08G [00:54<00:47, 30.2MiB/s]
54%|█████▎ | 1.65G/3.08G [00:54<00:44, 32.4MiB/s]
54%|█████▎ | 1.65G/3.08G [00:54<00:49, 28.6MiB/s]
54%|█████▍ | 1.66G/3.08G [00:55<00:41, 34.1MiB/s]
54%|█████▍ | 1.67G/3.08G [00:55<00:41, 34.4MiB/s]
54%|█████▍ | 1.67G/3.08G [00:55<00:44, 31.8MiB/s]
54%|█████▍ | 1.67G/3.08G [00:55<00:46, 30.0MiB/s]
54%|█████▍ | 1.68G/3.08G [00:55<00:49, 28.3MiB/s]
55%|█████▍ | 1.68G/3.08G [00:55<00:43, 32.2MiB/s]
55%|█████▍ | 1.69G/3.08G [00:56<00:46, 29.8MiB/s]
55%|█████▍ | 1.69G/3.08G [00:56<00:47, 29.5MiB/s]
55%|█████▍ | 1.70G/3.08G [00:56<00:53, 25.9MiB/s]
55%|█████▌ | 1.70G/3.08G [00:56<00:44, 31.1MiB/s]
55%|█████▌ | 1.71G/3.08G [00:56<00:52, 26.1MiB/s]
56%|█████▌ | 1.71G/3.08G [00:57<00:54, 25.0MiB/s]
56%|█████▌ | 1.72G/3.08G [00:57<01:00, 22.4MiB/s]
56%|█████▌ | 1.72G/3.08G [00:57<01:00, 22.6MiB/s]
56%|█████▌ | 1.73G/3.08G [00:57<00:43, 31.3MiB/s]
56%|█████▌ | 1.73G/3.08G [00:57<00:38, 35.0MiB/s]
56%|█████▋ | 1.74G/3.08G [00:57<00:42, 32.0MiB/s]
57%|█████▋ | 1.74G/3.08G [00:57<00:36, 36.7MiB/s]
57%|█████▋ | 1.75G/3.08G [00:58<00:43, 30.5MiB/s]
57%|█████▋ | 1.75G/3.08G [00:58<00:44, 29.6MiB/s]
57%|█████▋ | 1.75G/3.08G [00:58<00:47, 27.9MiB/s]
57%|█████▋ | 1.76G/3.08G [00:58<00:39, 33.4MiB/s]
57%|█████▋ | 1.77G/3.08G [00:58<00:36, 35.8MiB/s]
57%|█████▋ | 1.77G/3.08G [00:58<00:39, 32.9MiB/s]
58%|█████▊ | 1.78G/3.08G [00:59<00:39, 32.8MiB/s]
58%|█████▊ | 1.79G/3.08G [00:59<00:43, 30.2MiB/s]
58%|█████▊ | 1.79G/3.08G [00:59<00:43, 30.1MiB/s]
58%|█████▊ | 1.80G/3.08G [00:59<00:42, 30.4MiB/s]
58%|█████▊ | 1.80G/3.08G [00:59<00:42, 30.5MiB/s]
59%|█████▊ | 1.80G/3.08G [01:00<00:45, 28.3MiB/s]
59%|█████▊ | 1.81G/3.08G [01:00<00:49, 26.0MiB/s]
59%|█████▉ | 1.81G/3.08G [01:00<00:44, 28.4MiB/s]
59%|█████▉ | 1.82G/3.08G [01:00<00:41, 30.7MiB/s]
59%|█████▉ | 1.82G/3.08G [01:00<00:44, 28.1MiB/s]
59%|█████▉ | 1.83G/3.08G [01:00<00:38, 32.2MiB/s]
59%|█████▉ | 1.83G/3.08G [01:00<00:47, 26.5MiB/s]
60%|█████▉ | 1.84G/3.08G [01:01<00:45, 27.6MiB/s]
60%|█████▉ | 1.84G/3.08G [01:01<00:45, 27.5MiB/s]
60%|█████▉ | 1.85G/3.08G [01:01<00:36, 34.1MiB/s]
60%|██████ | 1.85G/3.08G [01:01<00:33, 36.3MiB/s]
60%|██████ | 1.86G/3.08G [01:01<00:38, 31.4MiB/s]
60%|██████ | 1.86G/3.08G [01:01<00:43, 28.3MiB/s]
61%|██████ | 1.87G/3.08G [01:02<00:40, 30.3MiB/s]
61%|██████ | 1.88G/3.08G [01:02<00:37, 32.0MiB/s]
61%|██████ | 1.88G/3.08G [01:02<00:43, 27.9MiB/s]
61%|██████ | 1.89G/3.08G [01:02<00:37, 31.6MiB/s]
61%|██████▏ | 1.89G/3.08G [01:02<00:42, 27.8MiB/s]
61%|██████▏ | 1.89G/3.08G [01:03<00:48, 24.5MiB/s]
61%|██████▏ | 1.90G/3.08G [01:03<00:54, 21.9MiB/s]
62%|██████▏ | 1.90G/3.08G [01:03<00:50, 23.4MiB/s]
62%|██████▏ | 1.91G/3.08G [01:03<00:53, 21.9MiB/s]
62%|██████▏ | 1.91G/3.08G [01:03<00:43, 26.7MiB/s]
62%|██████▏ | 1.92G/3.08G [01:03<00:33, 34.9MiB/s]
62%|██████▏ | 1.92G/3.08G [01:04<00:33, 34.4MiB/s]
63%|██████▎ | 1.93G/3.08G [01:04<00:34, 33.8MiB/s]
63%|██████▎ | 1.94G/3.08G [01:04<00:29, 38.9MiB/s]
63%|██████▎ | 1.94G/3.08G [01:04<00:26, 43.7MiB/s]
63%|██████▎ | 1.95G/3.08G [01:04<00:30, 37.5MiB/s]
63%|██████▎ | 1.95G/3.08G [01:04<00:35, 32.2MiB/s]
63%|██████▎ | 1.96G/3.08G [01:04<00:36, 31.2MiB/s]
64%|██████▎ | 1.96G/3.08G [01:05<00:32, 34.3MiB/s]
64%|██████▎ | 1.96G/3.08G [01:05<00:37, 29.5MiB/s]
64%|██████▍ | 1.97G/3.08G [01:05<00:35, 31.3MiB/s]
64%|██████▍ | 1.97G/3.08G [01:05<00:40, 27.2MiB/s]
64%|██████▍ | 1.98G/3.08G [01:05<00:57, 19.3MiB/s]
64%|██████▍ | 1.98G/3.08G [01:06<00:59, 18.4MiB/s]
64%|██████▍ | 1.99G/3.08G [01:06<00:47, 23.2MiB/s]
64%|██████▍ | 1.99G/3.08G [01:06<00:46, 23.7MiB/s]
65%|██████▍ | 1.99G/3.08G [01:06<00:43, 25.0MiB/s]
65%|██████▍ | 2.00G/3.08G [01:06<00:48, 22.4MiB/s]
65%|██████▍ | 2.00G/3.08G [01:06<00:41, 26.3MiB/s]
65%|██████▌ | 2.01G/3.08G [01:07<00:41, 25.8MiB/s]
65%|██████▌ | 2.01G/3.08G [01:07<00:32, 32.9MiB/s]
65%|██████▌ | 2.02G/3.08G [01:07<00:39, 27.3MiB/s]
66%|██████▌ | 2.02G/3.08G [01:07<00:31, 33.9MiB/s]
66%|██████▌ | 2.02G/3.08G [01:07<00:38, 27.6MiB/s]
66%|██████▌ | 2.03G/3.08G [01:07<00:38, 27.3MiB/s]
66%|██████▌ | 2.03G/3.08G [01:07<00:43, 24.4MiB/s]
66%|██████▌ | 2.04G/3.08G [01:08<00:36, 28.6MiB/s]
66%|██████▋ | 2.05G/3.08G [01:08<00:37, 27.9MiB/s]
66%|██████▋ | 2.05G/3.08G [01:08<00:40, 25.5MiB/s]
67%|██████▋ | 2.05G/3.08G [01:08<00:42, 24.1MiB/s]
67%|██████▋ | 2.06G/3.08G [01:08<00:43, 23.9MiB/s]
67%|██████▋ | 2.06G/3.08G [01:09<00:33, 30.5MiB/s]
67%|██████▋ | 2.07G/3.08G [01:09<00:34, 30.0MiB/s]
67%|██████▋ | 2.07G/3.08G [01:09<00:32, 31.2MiB/s]
67%|██████▋ | 2.07G/3.08G [01:09<00:35, 28.3MiB/s]
67%|██████▋ | 2.08G/3.08G [01:09<00:32, 30.5MiB/s]
68%|██████▊ | 2.08G/3.08G [01:09<00:39, 25.4MiB/s]
68%|██████▊ | 2.09G/3.08G [01:09<00:37, 26.7MiB/s]
68%|██████▊ | 2.09G/3.08G [01:10<00:40, 24.7MiB/s]
68%|██████▊ | 2.10G/3.08G [01:10<00:32, 30.6MiB/s]
68%|██████▊ | 2.10G/3.08G [01:10<00:35, 27.6MiB/s]
68%|██████▊ | 2.10G/3.08G [01:10<00:40, 24.1MiB/s]
68%|██████▊ | 2.11G/3.08G [01:10<00:41, 23.3MiB/s]
68%|██████▊ | 2.11G/3.08G [01:10<00:38, 25.0MiB/s]
69%|██████▊ | 2.11G/3.08G [01:11<00:45, 21.4MiB/s]
69%|██████▉ | 2.12G/3.08G [01:11<00:35, 27.3MiB/s]
69%|██████▉ | 2.12G/3.08G [01:11<00:38, 24.8MiB/s]
69%|██████▉ | 2.13G/3.08G [01:11<00:31, 30.2MiB/s]
69%|██████▉ | 2.13G/3.08G [01:11<00:32, 29.3MiB/s]
69%|██████▉ | 2.14G/3.08G [01:11<00:28, 33.7MiB/s]
70%|██████▉ | 2.15G/3.08G [01:12<00:29, 31.6MiB/s]
70%|██████▉ | 2.15G/3.08G [01:12<00:30, 30.7MiB/s]
70%|██████▉ | 2.15G/3.08G [01:12<00:27, 33.9MiB/s]
70%|██████▉ | 2.16G/3.08G [01:12<00:32, 28.5MiB/s]
70%|███████ | 2.16G/3.08G [01:12<00:27, 33.7MiB/s]
70%|███████ | 2.17G/3.08G [01:12<00:25, 36.0MiB/s]
71%|███████ | 2.17G/3.08G [01:12<00:29, 31.0MiB/s]
71%|███████ | 2.18G/3.08G [01:13<00:27, 33.0MiB/s]
71%|███████ | 2.18G/3.08G [01:13<00:33, 26.6MiB/s]
71%|███████ | 2.19G/3.08G [01:13<00:34, 26.3MiB/s]
71%|███████ | 2.19G/3.08G [01:13<00:39, 22.5MiB/s]
71%|███████▏ | 2.20G/3.08G [01:13<00:35, 25.1MiB/s]
71%|███████▏ | 2.20G/3.08G [01:14<00:27, 32.2MiB/s]
72%|███████▏ | 2.21G/3.08G [01:14<00:29, 29.3MiB/s]
72%|███████▏ | 2.21G/3.08G [01:14<00:55, 15.7MiB/s]
72%|███████▏ | 2.22G/3.08G [01:14<00:56, 15.4MiB/s]
72%|███████▏ | 2.22G/3.08G [01:15<00:39, 21.9MiB/s]
72%|███████▏ | 2.23G/3.08G [01:15<00:29, 28.5MiB/s]
72%|███████▏ | 2.23G/3.08G [01:15<00:27, 30.9MiB/s]
73%|███████▎ | 2.24G/3.08G [01:15<00:28, 29.6MiB/s]
73%|███████▎ | 2.24G/3.08G [01:15<00:30, 28.0MiB/s]
73%|███████▎ | 2.25G/3.08G [01:15<00:33, 25.2MiB/s]
73%|███████▎ | 2.25G/3.08G [01:16<00:34, 24.1MiB/s]
73%|███████▎ | 2.25G/3.08G [01:16<00:31, 26.5MiB/s]
73%|███████▎ | 2.26G/3.08G [01:16<00:33, 24.4MiB/s]
73%|███████▎ | 2.26G/3.08G [01:16<00:26, 30.8MiB/s]
73%|███████▎ | 2.27G/3.08G [01:16<00:29, 27.9MiB/s]
74%|███████▎ | 2.27G/3.08G [01:16<00:38, 21.3MiB/s]
74%|███████▎ | 2.27G/3.08G [01:17<00:37, 21.9MiB/s]
74%|███████▍ | 2.28G/3.08G [01:17<00:31, 25.7MiB/s]
74%|███████▍ | 2.28G/3.08G [01:17<00:31, 25.3MiB/s]
74%|███████▍ | 2.29G/3.08G [01:17<00:25, 31.7MiB/s]
74%|███████▍ | 2.29G/3.08G [01:17<00:25, 31.4MiB/s]
74%|███████▍ | 2.30G/3.08G [01:17<00:24, 31.8MiB/s]
75%|███████▍ | 2.30G/3.08G [01:17<00:29, 26.4MiB/s]
75%|███████▍ | 2.31G/3.08G [01:17<00:23, 33.3MiB/s]
75%|███████▍ | 2.31G/3.08G [01:18<00:24, 32.2MiB/s]
75%|███████▌ | 2.31G/3.08G [01:18<00:26, 29.0MiB/s]
75%|███████▌ | 2.32G/3.08G [01:18<00:27, 28.1MiB/s]
75%|███████▌ | 2.32G/3.08G [01:18<00:29, 25.5MiB/s]
75%|███████▌ | 2.32G/3.08G [01:18<00:32, 23.2MiB/s]
76%|███████▌ | 2.33G/3.08G [01:18<00:26, 28.0MiB/s]
76%|███████▌ | 2.33G/3.08G [01:19<00:28, 26.4MiB/s]
76%|███████▌ | 2.34G/3.08G [01:19<00:22, 32.4MiB/s]
76%|███████▌ | 2.34G/3.08G [01:19<00:24, 29.9MiB/s]
76%|███████▌ | 2.35G/3.08G [01:19<00:24, 30.5MiB/s]
76%|███████▋ | 2.36G/3.08G [01:19<00:23, 30.5MiB/s]
76%|███████▋ | 2.36G/3.08G [01:19<00:24, 30.2MiB/s]
77%|███████▋ | 2.36G/3.08G [01:19<00:19, 36.7MiB/s]
77%|███████▋ | 2.37G/3.08G [01:20<00:22, 32.1MiB/s]
77%|███████▋ | 2.37G/3.08G [01:20<00:24, 29.4MiB/s]
77%|███████▋ | 2.38G/3.08G [01:20<00:25, 27.6MiB/s]
77%|███████▋ | 2.38G/3.08G [01:20<00:23, 30.4MiB/s]
77%|███████▋ | 2.38G/3.08G [01:20<00:24, 28.3MiB/s]
77%|███████▋ | 2.39G/3.08G [01:21<00:30, 22.6MiB/s]
78%|███████▊ | 2.39G/3.08G [01:21<00:31, 21.9MiB/s]
78%|███████▊ | 2.40G/3.08G [01:21<00:18, 36.2MiB/s]
78%|███████▊ | 2.41G/3.08G [01:21<00:19, 34.4MiB/s]
78%|███████▊ | 2.41G/3.08G [01:21<00:19, 35.3MiB/s]
78%|███████▊ | 2.42G/3.08G [01:21<00:20, 32.3MiB/s]
79%|███████▊ | 2.42G/3.08G [01:21<00:20, 32.1MiB/s]
79%|███████▊ | 2.43G/3.08G [01:22<00:21, 30.1MiB/s]
79%|███████▉ | 2.43G/3.08G [01:22<00:20, 32.6MiB/s]
79%|███████▉ | 2.43G/3.08G [01:22<00:20, 32.1MiB/s]
79%|███████▉ | 2.44G/3.08G [01:22<00:18, 35.4MiB/s]
79%|███████▉ | 2.45G/3.08G [01:22<00:18, 34.6MiB/s]
79%|███████▉ | 2.45G/3.08G [01:22<00:19, 31.7MiB/s]
80%|███████▉ | 2.46G/3.08G [01:22<00:17, 36.6MiB/s]
80%|███████▉ | 2.46G/3.08G [01:23<00:21, 29.6MiB/s]
80%|███████▉ | 2.47G/3.08G [01:23<00:21, 29.1MiB/s]
80%|████████ | 2.47G/3.08G [01:23<00:16, 37.6MiB/s]
80%|████████ | 2.48G/3.08G [01:23<00:18, 33.2MiB/s]
81%|████████ | 2.48G/3.08G [01:23<00:16, 35.9MiB/s]
81%|████████ | 2.49G/3.08G [01:23<00:14, 42.3MiB/s]
81%|████████ | 2.49G/3.08G [01:24<00:16, 35.0MiB/s]
81%|████████ | 2.50G/3.08G [01:24<00:16, 35.4MiB/s]
81%|████████▏ | 2.51G/3.08G [01:24<00:13, 41.8MiB/s]
81%|████████▏ | 2.51G/3.08G [01:24<00:14, 38.7MiB/s]
82%|████████▏ | 2.52G/3.08G [01:24<00:14, 38.4MiB/s]
82%|████████▏ | 2.52G/3.08G [01:24<00:15, 37.3MiB/s]
82%|████████▏ | 2.52G/3.08G [01:25<00:23, 23.8MiB/s]
82%|████████▏ | 2.53G/3.08G [01:25<00:23, 23.4MiB/s]
82%|████████▏ | 2.53G/3.08G [01:25<00:22, 24.3MiB/s]
82%|████████▏ | 2.53G/3.08G [01:25<00:22, 24.5MiB/s]
82%|████████▏ | 2.54G/3.08G [01:25<00:25, 21.2MiB/s]
82%|████████▏ | 2.54G/3.08G [01:25<00:25, 21.1MiB/s]
83%|████████▎ | 2.55G/3.08G [01:26<00:18, 29.1MiB/s]
83%|████████▎ | 2.55G/3.08G [01:26<00:22, 24.0MiB/s]
83%|████████▎ | 2.56G/3.08G [01:26<00:19, 26.5MiB/s]
83%|████████▎ | 2.56G/3.08G [01:26<00:22, 23.4MiB/s]
83%|████████▎ | 2.57G/3.08G [01:26<00:20, 25.6MiB/s]
83%|████████▎ | 2.58G/3.08G [01:27<00:17, 28.7MiB/s]
84%|████████▎ | 2.58G/3.08G [01:27<00:17, 28.4MiB/s]
84%|████████▎ | 2.58G/3.08G [01:27<00:20, 24.9MiB/s]
84%|████████▍ | 2.58G/3.08G [01:27<00:21, 23.4MiB/s]
84%|████████▍ | 2.59G/3.08G [01:27<00:17, 28.8MiB/s]
84%|████████▍ | 2.59G/3.08G [01:27<00:18, 26.8MiB/s]
84%|████████▍ | 2.60G/3.08G [01:27<00:15, 31.6MiB/s]
84%|████████▍ | 2.60G/3.08G [01:28<00:18, 26.3MiB/s]
85%|████████▍ | 2.61G/3.08G [01:28<00:18, 26.3MiB/s]
85%|████████▍ | 2.61G/3.08G [01:28<00:20, 22.7MiB/s]
85%|████████▍ | 2.62G/3.08G [01:28<00:19, 23.6MiB/s]
85%|████████▍ | 2.62G/3.08G [01:28<00:20, 23.3MiB/s]
85%|████████▌ | 2.62G/3.08G [01:28<00:14, 31.4MiB/s]
85%|████████▌ | 2.63G/3.08G [01:29<00:15, 29.3MiB/s]
85%|████████▌ | 2.63G/3.08G [01:29<00:15, 28.6MiB/s]
86%|████████▌ | 2.64G/3.08G [01:29<00:11, 39.1MiB/s]
86%|████████▌ | 2.65G/3.08G [01:29<00:11, 38.2MiB/s]
86%|████████▌ | 2.65G/3.08G [01:29<00:16, 26.0MiB/s]
86%|████████▌ | 2.66G/3.08G [01:29<00:15, 28.2MiB/s]
86%|████████▋ | 2.66G/3.08G [01:30<00:18, 22.7MiB/s]
86%|████████▋ | 2.67G/3.08G [01:30<00:14, 28.0MiB/s]
87%|████████▋ | 2.67G/3.08G [01:30<00:14, 29.0MiB/s]
87%|████████▋ | 2.68G/3.08G [01:30<00:14, 28.9MiB/s]
87%|████████▋ | 2.68G/3.08G [01:30<00:17, 23.7MiB/s]
87%|████████▋ | 2.68G/3.08G [01:31<00:17, 22.7MiB/s]
87%|████████▋ | 2.69G/3.08G [01:31<00:17, 22.1MiB/s]
87%|████████▋ | 2.69G/3.08G [01:31<00:18, 20.6MiB/s]
88%|████████▊ | 2.70G/3.08G [01:31<00:15, 25.2MiB/s]
88%|████████▊ | 2.70G/3.08G [01:31<00:15, 25.1MiB/s]
88%|████████▊ | 2.71G/3.08G [01:32<00:12, 29.1MiB/s]
88%|████████▊ | 2.71G/3.08G [01:32<00:13, 27.3MiB/s]
88%|████████▊ | 2.72G/3.08G [01:32<00:12, 28.6MiB/s]
88%|████████▊ | 2.72G/3.08G [01:32<00:11, 30.1MiB/s]
88%|████████▊ | 2.73G/3.08G [01:32<00:13, 25.8MiB/s]
89%|████████▊ | 2.73G/3.08G [01:32<00:11, 31.0MiB/s]
89%|████████▊ | 2.74G/3.08G [01:32<00:11, 29.9MiB/s]
89%|████████▉ | 2.74G/3.08G [01:33<00:10, 33.3MiB/s]
89%|████████▉ | 2.74G/3.08G [01:33<00:10, 32.6MiB/s]
89%|████████▉ | 2.75G/3.08G [01:33<00:11, 30.0MiB/s]
89%|████████▉ | 2.75G/3.08G [01:33<00:11, 30.0MiB/s]
89%|████████▉ | 2.76G/3.08G [01:33<00:08, 37.6MiB/s]
90%|████████▉ | 2.77G/3.08G [01:33<00:06, 46.4MiB/s]
90%|████████▉ | 2.77G/3.08G [01:34<00:10, 30.7MiB/s]
90%|█████████ | 2.78G/3.08G [01:34<00:09, 31.2MiB/s]
90%|█████████ | 2.78G/3.08G [01:34<00:11, 27.0MiB/s]
90%|█████████ | 2.78G/3.08G [01:34<00:11, 25.2MiB/s]
90%|█████████ | 2.79G/3.08G [01:34<00:13, 21.4MiB/s]
91%|█████████ | 2.79G/3.08G [01:34<00:12, 23.8MiB/s]
91%|█████████ | 2.79G/3.08G [01:35<00:13, 21.4MiB/s]
91%|█████████ | 2.80G/3.08G [01:35<00:10, 27.3MiB/s]
91%|█████████ | 2.81G/3.08G [01:35<00:08, 31.0MiB/s]
91%|█████████▏| 2.82G/3.08G [01:35<00:09, 28.4MiB/s]
91%|█████████▏| 2.82G/3.08G [01:35<00:09, 27.1MiB/s]
92%|█████████▏| 2.83G/3.08G [01:36<00:09, 27.5MiB/s]
92%|█████████▏| 2.83G/3.08G [01:36<00:09, 26.0MiB/s]
92%|█████████▏| 2.83G/3.08G [01:36<00:08, 27.9MiB/s]
92%|█████████▏| 2.84G/3.08G [01:36<00:09, 26.1MiB/s]
92%|█████████▏| 2.84G/3.08G [01:36<00:07, 31.6MiB/s]
92%|█████████▏| 2.85G/3.08G [01:36<00:07, 32.6MiB/s]
92%|█████████▏| 2.85G/3.08G [01:36<00:06, 38.3MiB/s]
93%|█████████▎| 2.86G/3.08G [01:36<00:06, 36.8MiB/s]
93%|█████████▎| 2.86G/3.08G [01:37<00:06, 36.6MiB/s]
93%|█████████▎| 2.86G/3.08G [01:37<00:07, 29.5MiB/s]
93%|█████████▎| 2.87G/3.08G [01:37<00:07, 28.4MiB/s]
93%|█████████▎| 2.87G/3.08G [01:37<00:08, 24.1MiB/s]
93%|█████████▎| 2.88G/3.08G [01:37<00:07, 28.8MiB/s]
93%|█████████▎| 2.88G/3.08G [01:37<00:07, 26.5MiB/s]
94%|█████████▎| 2.88G/3.08G [01:38<00:07, 25.4MiB/s]
94%|█████████▎| 2.89G/3.08G [01:38<00:08, 22.7MiB/s]
94%|█████████▍| 2.89G/3.08G [01:38<00:06, 28.8MiB/s]
94%|█████████▍| 2.90G/3.08G [01:38<00:06, 27.5MiB/s]
94%|█████████▍| 2.90G/3.08G [01:38<00:05, 33.7MiB/s]
94%|█████████▍| 2.91G/3.08G [01:38<00:05, 32.6MiB/s]
94%|█████████▍| 2.91G/3.08G [01:38<00:05, 32.0MiB/s]
95%|█████████▍| 2.92G/3.08G [01:39<00:04, 34.5MiB/s]
95%|█████████▍| 2.92G/3.08G [01:39<00:05, 31.8MiB/s]
95%|█████████▍| 2.93G/3.08G [01:39<00:05, 30.2MiB/s]
95%|█████████▍| 2.93G/3.08G [01:39<00:05, 26.6MiB/s]
95%|█████████▌| 2.94G/3.08G [01:39<00:04, 33.8MiB/s]
95%|█████████▌| 2.94G/3.08G [01:39<00:04, 34.2MiB/s]
96%|█████████▌| 2.95G/3.08G [01:40<00:04, 33.2MiB/s]
96%|█████████▌| 2.95G/3.08G [01:40<00:04, 32.1MiB/s]
96%|█████████▌| 2.96G/3.08G [01:40<00:03, 37.6MiB/s]
96%|█████████▋| 2.97G/3.08G [01:40<00:02, 39.4MiB/s]
96%|█████████▋| 2.97G/3.08G [01:40<00:03, 34.0MiB/s]
97%|█████████▋| 2.98G/3.08G [01:40<00:03, 32.0MiB/s]
97%|█████████▋| 2.98G/3.08G [01:41<00:03, 31.4MiB/s]
97%|█████████▋| 2.99G/3.08G [01:41<00:03, 32.3MiB/s]
97%|█████████▋| 2.99G/3.08G [01:41<00:03, 25.5MiB/s]
97%|█████████▋| 3.00G/3.08G [01:41<00:03, 24.8MiB/s]
97%|█████████▋| 3.00G/3.08G [01:41<00:03, 27.1MiB/s]
97%|█████████▋| 3.00G/3.08G [01:42<00:03, 25.7MiB/s]
98%|█████████▊| 3.01G/3.08G [01:42<00:02, 32.1MiB/s]
98%|█████████▊| 3.02G/3.08G [01:42<00:01, 35.2MiB/s]
98%|█████████▊| 3.02G/3.08G [01:42<00:01, 37.3MiB/s]
98%|█████████▊| 3.03G/3.08G [01:42<00:01, 36.0MiB/s]
98%|█████████▊| 3.03G/3.08G [01:42<00:01, 34.3MiB/s]
98%|█████████▊| 3.04G/3.08G [01:42<00:01, 32.3MiB/s]
99%|█████████▊| 3.04G/3.08G [01:43<00:01, 30.0MiB/s]
99%|█████████▊| 3.04G/3.08G [01:43<00:01, 22.5MiB/s]
99%|█████████▉| 3.05G/3.08G [01:43<00:01, 22.1MiB/s]
99%|█████████▉| 3.05G/3.08G [01:43<00:01, 27.7MiB/s]
99%|█████████▉| 3.06G/3.08G [01:43<00:00, 35.7MiB/s]
99%|█████████▉| 3.06G/3.08G [01:43<00:00, 37.7MiB/s]
100%|█████████▉| 3.07G/3.08G [01:44<00:01, 14.0MiB/s]
100%|█████████▉| 3.07G/3.08G [01:44<00:00, 14.3MiB/s]
100%|█████████▉| 3.08G/3.08G [01:45<00:00, 18.9MiB/s]
100%|██████████| 3.08G/3.08G [01:45<00:00, 29.3MiB/s]
然后我们可以将注释加载到数据框中。
dataset_path = os.path.join(download_dir, 'Stanford_Online_Products')
train_data = pd.read_csv(f'{dataset_path}/train.csv', index_col=0)
test_data = pd.read_csv(f'{dataset_path}/test.csv', index_col=0)
image_col_1 = "Image1"
image_col_2 = "Image2"
label_col = "Label"
match_label = 1
在这里,您需要指定match_label
,即表示一对语义匹配的标签类别。在这个演示数据集中,我们使用1,因为我们为来自同一产品的图像对分配了1。您可以根据任务上下文来指定match_label
。
接下来,我们扩展图像路径,因为原始路径是相对的。
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])
for image_col in [image_col_1, image_col_2]:
train_data[image_col] = train_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))
注释仅为图像路径对及其二进制标签(1和0分别表示图像对匹配或不匹配)。
train_data.head()
Image1 | Image2 | Label | |
---|---|---|---|
0 | /home/ci/autogluon/docs/tutorials/multimodal/s... | /home/ci/autogluon/docs/tutorials/multimodal/s... | 0 |
1 | /home/ci/autogluon/docs/tutorials/multimodal/s... | /home/ci/autogluon/docs/tutorials/multimodal/s... | 1 |
2 | /home/ci/autogluon/docs/tutorials/multimodal/s... | /home/ci/autogluon/docs/tutorials/multimodal/s... | 0 |
3 | /home/ci/autogluon/docs/tutorials/multimodal/s... | /home/ci/autogluon/docs/tutorials/multimodal/s... | 1 |
4 | /home/ci/autogluon/docs/tutorials/multimodal/s... | /home/ci/autogluon/docs/tutorials/multimodal/s... | 1 |
让我们可视化一个匹配的图像对。
pil_img = Image(filename=train_data[image_col_1][5])
display(pil_img)

pil_img = Image(filename=train_data[image_col_2][5])
display(pil_img)

这里有两张不匹配的图片。
pil_img = Image(filename=train_data[image_col_1][0])
display(pil_img)

pil_img = Image(filename=train_data[image_col_2][0])
display(pil_img)

Train your Model¶
理想情况下,我们希望获得一个能够为正面/负面图像对返回高/低分的模型。使用AutoMM,我们可以轻松训练一个捕捉图像之间语义关系的模型。基本上,它使用Swin Transformer将每个图像投影到高维向量中,并计算特征向量的余弦相似度。
使用AutoMM,您只需指定query
、response
和label
列名,并在训练数据集上拟合模型,而无需担心实现细节。
from autogluon.multimodal import MultiModalPredictor
predictor = MultiModalPredictor(
problem_type="image_similarity",
query=image_col_1, # the column name of the first image
response=image_col_2, # the column name of the second image
label=label_col, # the label column name
match_label=match_label, # the label indicating that query and response have the same semantic meanings.
eval_metric='auc', # the evaluation metric
)
# Fit the model
predictor.fit(
train_data=train_data,
time_limit=180,
)
/home/ci/opt/venv/lib/python3.11/site-packages/mmengine/optim/optimizer/zero_optimizer.py:11: DeprecationWarning: `TorchScript` support for functional optimizers is deprecated and will be removed in a future PyTorch release. Consider using the `torch.compile` optimizer instead.
from torch.distributed.optim import \
No path specified. Models will be saved in: "AutogluonModels/ag-20241127_095406"
=================== System Info ===================
AutoGluon Version: 1.2b20241127
Python Version: 3.11.9
Operating System: Linux
Platform Machine: x86_64
Platform Version: #1 SMP Tue Sep 24 10:00:37 UTC 2024
CPU Count: 8
Pytorch Version: 2.5.1+cu124
CUDA Version: 12.4
Memory Avail: 28.23 GB / 30.95 GB (91.2%)
Disk Space Avail: 180.93 GB / 255.99 GB (70.7%)
===================================================
AutoGluon infers your prediction problem is: 'binary' (because only two unique label-values observed).
2 unique label values: [0, 1]
If 'binary' is not the correct problem_type, please manually specify the problem_type parameter during Predictor init (You may specify problem_type as one of: ['binary', 'multiclass', 'regression', 'quantile'])
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-20241127_095406
```
INFO: Seed set to 0
WARNING:timm.models._builder:Unexpected keys (head.fc.fc1.bias, head.fc.fc1.weight, head.fc.norm.bias, head.fc.norm.weight) found while loading pretrained weights. This may be expected if model is being adapted.
GPU Count: 1
GPU Count to be Used: 1
GPU 0 Name: Tesla T4
GPU 0 Memory: 0.43GB/15.0GB (Used/Total)
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 | TimmAutoModelForImagePrediction | 93.3 M | train
1 | response_model | TimmAutoModelForImagePrediction | 93.3 M | train
2 | validation_metric | BinaryAUROC | 0 | train
3 | loss_func | ContrastiveLoss | 0 | train
4 | miner_func | PairMarginMiner | 0 | train
------------------------------------------------------------------------------
93.3 M Trainable params
0 Non-trainable params
93.3 M Total params
373.248 Total estimated model params size (MB)
866 Modules in train mode
0 Modules in eval mode
INFO: Epoch 0, global step 15: 'val_roc_auc' reached 0.82784 (best 0.82784), saving model to '/home/ci/autogluon/docs/tutorials/multimodal/semantic_matching/AutogluonModels/ag-20241127_095406/epoch=0-step=15.ckpt' as top 3
INFO: Time limit reached. Elapsed time is 0:03:00. Signaling Trainer to stop.
INFO: Epoch 0, global step 23: 'val_roc_auc' reached 0.89310 (best 0.89310), saving model to '/home/ci/autogluon/docs/tutorials/multimodal/semantic_matching/AutogluonModels/ag-20241127_095406/epoch=0-step=23.ckpt' as top 3
Start to fuse 2 checkpoints via the greedy soup algorithm.
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-20241127_095406")
```
If you are not satisfied with the model, try to increase the training time,
adjust the hyperparameters (https://auto.gluon.ai/stable/tutorials/multimodal/advanced_topics/customization.html),
or post issues on GitHub (https://github.com/autogluon/autogluon/issues).
<autogluon.multimodal.predictor.MultiModalPredictor at 0x7f0c7c392e50>
Evaluate on Test Dataset¶
您可以在测试数据集上评估预测器,以查看其使用 roc_auc 分数的表现:
score = predictor.evaluate(test_data)
print("evaluation score: ", score)
evaluation score: {'roc_auc': 0.8946748085592974}
预测图像对¶
给定新的图像对,我们可以预测它们是否匹配。
pred = predictor.predict(test_data.head(3))
print(pred)
0 1
1 1
2 1
Name: Label, dtype: int64
预测使用了一个简单的概率阈值0.5。也就是说,我们选择概率大于0.5的标签。
预测匹配概率¶
然而,您可以通过获取概率来进行更定制的阈值处理。
proba = predictor.predict_proba(test_data.head(3))
print(proba)
0 1
0 0.322680 0.677320
1 0.051566 0.948434
2 0.073345 0.926655
Extract Embeddings¶
您还可以提取一对图像中每个图像的嵌入。
embeddings_1 = predictor.extract_embedding({image_col_1: test_data[image_col_1][:5].tolist()})
print(embeddings_1.shape)
embeddings_2 = predictor.extract_embedding({image_col_2: test_data[image_col_2][:5].tolist()})
print(embeddings_2.shape)
(5, 768)
(5, 768)
Other Examples¶
You may go to AutoMM Examples to explore other examples about AutoMM.
Customization¶
To learn how to customize AutoMM, please refer to Customize AutoMM.