AutoMM Detection - 在小型 COCO 格式数据集上的快速入门¶
在本节中,我们的目标是在一个小型 COCO 格式数据集上快速微调预训练模型,并在其测试集上进行评估。训练集和测试集都采用 COCO 格式。有关如何将其他数据集转换为 COCO 格式的信息,请参阅将数据转换为 COCO 格式。
设置导入¶
首先,确保已安装 mmcv
和 mmdet
。注意:MMDet 已不再积极维护,仅兼容 MMCV 2.1.0 版本。安装可能因 CUDA 版本兼容性问题而出现问题。为获得最佳结果
使用 CUDA 12.4 和 PyTorch 2.5
安装前,运行
pip install -U pip setuptools wheel sudo apt-get install -y ninja-build gcc g++
这有助于防止 MMCV 在构建轮子时卡住。
在 Jupyter notebook 中安装后,请重启内核以使更改生效。
# Update package tools and install build dependencies
!pip install -U pip setuptools wheel
!sudo apt-get install -y ninja-build gcc g++
# Install MMCV
!python3 -m mim install "mmcv==2.1.0"
# For Google Colab users: If the above fails, use this alternative MMCV installation
# pip install "mmcv==2.1.0" -f https://download.openmmlab.com/mmcv/dist/cu121/torch2.1.0/index.html
# Install MMDet
!python3 -m pip install "mmdet==3.2.0"
# Install MMEngine (version >=0.10.6 for PyTorch 2.5 compatibility)
!python3 -m pip install "mmengine>=0.10.6"
显示代码单元输出
Requirement already satisfied: pip in /home/ci/opt/venv/lib/python3.11/site-packages (25.1.1)
Requirement already satisfied: setuptools in /home/ci/opt/venv/lib/python3.11/site-packages (80.3.1)
Requirement already satisfied: wheel in /home/ci/opt/venv/lib/python3.11/site-packages (0.45.1)
/usr/bin/sh: 1: sudo: not found
Looking in links: https://download.openmmlab.com/mmcv/dist/cu124/torch2.6.0/index.html
Requirement already satisfied: mmcv==2.1.0 in /home/ci/opt/venv/lib/python3.11/site-packages (2.1.0)
Requirement already satisfied: addict in /home/ci/opt/venv/lib/python3.11/site-packages (from mmcv==2.1.0) (2.4.0)
Requirement already satisfied: mmengine>=0.3.0 in /home/ci/opt/venv/lib/python3.11/site-packages (from mmcv==2.1.0) (0.10.7)
Requirement already satisfied: numpy in /home/ci/opt/venv/lib/python3.11/site-packages (from mmcv==2.1.0) (2.1.3)
Requirement already satisfied: packaging in /home/ci/opt/venv/lib/python3.11/site-packages (from mmcv==2.1.0) (24.2)
Requirement already satisfied: Pillow in /home/ci/opt/venv/lib/python3.11/site-packages (from mmcv==2.1.0) (11.2.1)
Requirement already satisfied: pyyaml in /home/ci/opt/venv/lib/python3.11/site-packages (from mmcv==2.1.0) (6.0.2)
Requirement already satisfied: yapf in /home/ci/opt/venv/lib/python3.11/site-packages (from mmcv==2.1.0) (0.43.0)
Requirement already satisfied: matplotlib in /home/ci/opt/venv/lib/python3.11/site-packages (from mmengine>=0.3.0->mmcv==2.1.0) (3.10.3)
Requirement already satisfied: rich in /home/ci/opt/venv/lib/python3.11/site-packages (from mmengine>=0.3.0->mmcv==2.1.0) (14.0.0)
Requirement already satisfied: termcolor in /home/ci/opt/venv/lib/python3.11/site-packages (from mmengine>=0.3.0->mmcv==2.1.0) (3.1.0)
Requirement already satisfied: opencv-python>=3 in /home/ci/opt/venv/lib/python3.11/site-packages (from mmengine>=0.3.0->mmcv==2.1.0) (4.11.0.86)
Requirement already satisfied: contourpy>=1.0.1 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmengine>=0.3.0->mmcv==2.1.0) (1.3.2)
Requirement already satisfied: cycler>=0.10 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmengine>=0.3.0->mmcv==2.1.0) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmengine>=0.3.0->mmcv==2.1.0) (4.57.0)
Requirement already satisfied: kiwisolver>=1.3.1 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmengine>=0.3.0->mmcv==2.1.0) (1.4.8)
Requirement already satisfied: pyparsing>=2.3.1 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmengine>=0.3.0->mmcv==2.1.0) (3.2.3)
Requirement already satisfied: python-dateutil>=2.7 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmengine>=0.3.0->mmcv==2.1.0) (2.9.0.post0)
Requirement already satisfied: six>=1.5 in /home/ci/opt/venv/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->mmengine>=0.3.0->mmcv==2.1.0) (1.17.0)
Requirement already satisfied: markdown-it-py>=2.2.0 in /home/ci/opt/venv/lib/python3.11/site-packages (from rich->mmengine>=0.3.0->mmcv==2.1.0) (3.0.0)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/ci/opt/venv/lib/python3.11/site-packages (from rich->mmengine>=0.3.0->mmcv==2.1.0) (2.19.1)
Requirement already satisfied: mdurl~=0.1 in /home/ci/opt/venv/lib/python3.11/site-packages (from markdown-it-py>=2.2.0->rich->mmengine>=0.3.0->mmcv==2.1.0) (0.1.2)
Requirement already satisfied: platformdirs>=3.5.1 in /home/ci/opt/venv/lib/python3.11/site-packages (from yapf->mmcv==2.1.0) (4.3.8)
Requirement already satisfied: mmdet==3.2.0 in /home/ci/opt/venv/lib/python3.11/site-packages (3.2.0)
Requirement already satisfied: matplotlib in /home/ci/opt/venv/lib/python3.11/site-packages (from mmdet==3.2.0) (3.10.3)
Requirement already satisfied: numpy in /home/ci/opt/venv/lib/python3.11/site-packages (from mmdet==3.2.0) (2.1.3)
Requirement already satisfied: pycocotools in /home/ci/opt/venv/lib/python3.11/site-packages (from mmdet==3.2.0) (2.0.8)
Requirement already satisfied: scipy in /home/ci/opt/venv/lib/python3.11/site-packages (from mmdet==3.2.0) (1.15.3)
Requirement already satisfied: shapely in /home/ci/opt/venv/lib/python3.11/site-packages (from mmdet==3.2.0) (2.1.0)
Requirement already satisfied: six in /home/ci/opt/venv/lib/python3.11/site-packages (from mmdet==3.2.0) (1.17.0)
Requirement already satisfied: terminaltables in /home/ci/opt/venv/lib/python3.11/site-packages (from mmdet==3.2.0) (3.1.10)
Requirement already satisfied: tqdm in /home/ci/opt/venv/lib/python3.11/site-packages (from mmdet==3.2.0) (4.67.1)
Requirement already satisfied: contourpy>=1.0.1 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmdet==3.2.0) (1.3.2)
Requirement already satisfied: cycler>=0.10 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmdet==3.2.0) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmdet==3.2.0) (4.57.0)
Requirement already satisfied: kiwisolver>=1.3.1 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmdet==3.2.0) (1.4.8)
Requirement already satisfied: packaging>=20.0 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmdet==3.2.0) (24.2)
Requirement already satisfied: pillow>=8 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmdet==3.2.0) (11.2.1)
Requirement already satisfied: pyparsing>=2.3.1 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmdet==3.2.0) (3.2.3)
Requirement already satisfied: python-dateutil>=2.7 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmdet==3.2.0) (2.9.0.post0)
Requirement already satisfied: mmengine>=0.10.6 in /home/ci/opt/venv/lib/python3.11/site-packages (0.10.7)
Requirement already satisfied: addict in /home/ci/opt/venv/lib/python3.11/site-packages (from mmengine>=0.10.6) (2.4.0)
Requirement already satisfied: matplotlib in /home/ci/opt/venv/lib/python3.11/site-packages (from mmengine>=0.10.6) (3.10.3)
Requirement already satisfied: numpy in /home/ci/opt/venv/lib/python3.11/site-packages (from mmengine>=0.10.6) (2.1.3)
Requirement already satisfied: pyyaml in /home/ci/opt/venv/lib/python3.11/site-packages (from mmengine>=0.10.6) (6.0.2)
Requirement already satisfied: rich in /home/ci/opt/venv/lib/python3.11/site-packages (from mmengine>=0.10.6) (14.0.0)
Requirement already satisfied: termcolor in /home/ci/opt/venv/lib/python3.11/site-packages (from mmengine>=0.10.6) (3.1.0)
Requirement already satisfied: yapf in /home/ci/opt/venv/lib/python3.11/site-packages (from mmengine>=0.10.6) (0.43.0)
Requirement already satisfied: opencv-python>=3 in /home/ci/opt/venv/lib/python3.11/site-packages (from mmengine>=0.10.6) (4.11.0.86)
Requirement already satisfied: contourpy>=1.0.1 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmengine>=0.10.6) (1.3.2)
Requirement already satisfied: cycler>=0.10 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmengine>=0.10.6) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmengine>=0.10.6) (4.57.0)
Requirement already satisfied: kiwisolver>=1.3.1 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmengine>=0.10.6) (1.4.8)
Requirement already satisfied: packaging>=20.0 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmengine>=0.10.6) (24.2)
Requirement already satisfied: pillow>=8 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmengine>=0.10.6) (11.2.1)
Requirement already satisfied: pyparsing>=2.3.1 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmengine>=0.10.6) (3.2.3)
Requirement already satisfied: python-dateutil>=2.7 in /home/ci/opt/venv/lib/python3.11/site-packages (from matplotlib->mmengine>=0.10.6) (2.9.0.post0)
Requirement already satisfied: six>=1.5 in /home/ci/opt/venv/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->mmengine>=0.10.6) (1.17.0)
Requirement already satisfied: markdown-it-py>=2.2.0 in /home/ci/opt/venv/lib/python3.11/site-packages (from rich->mmengine>=0.10.6) (3.0.0)
Requirement already satisfied: pygments<3.0.0,>=2.13.0 in /home/ci/opt/venv/lib/python3.11/site-packages (from rich->mmengine>=0.10.6) (2.19.1)
Requirement already satisfied: mdurl~=0.1 in /home/ci/opt/venv/lib/python3.11/site-packages (from markdown-it-py>=2.2.0->rich->mmengine>=0.10.6) (0.1.2)
Requirement already satisfied: platformdirs>=3.5.1 in /home/ci/opt/venv/lib/python3.11/site-packages (from yapf->mmengine>=0.10.6) (4.3.8)
首先,让我们导入 MultiModalPredictor
from autogluon.multimodal import MultiModalPredictor
并导入本教程中将使用的其他一些包
import os
import time
from autogluon.core.utils.loaders import load_zip
下载数据¶
我们已在云中准备好了示例数据集。让我们下载它
zip_file = "https://automl-mm-bench.s3.amazonaws.com/object_detection_dataset/tiny_motorbike_coco.zip"
download_dir = "./tiny_motorbike_coco"
load_zip.unzip(zip_file, unzip_dir=download_dir)
data_dir = os.path.join(download_dir, "tiny_motorbike")
train_path = os.path.join(data_dir, "Annotations", "trainval_cocoformat.json")
test_path = os.path.join(data_dir, "Annotations", "test_cocoformat.json")
Downloading ./tiny_motorbike_coco/file.zip from https://automl-mm-bench.s3.amazonaws.com/object_detection_dataset/tiny_motorbike_coco.zip...
0%| | 0.00/21.8M [00:00<?, ?iB/s]
52%|█████▏ | 11.3M/21.8M [00:00<00:00, 113MiB/s]
100%|██████████| 21.8M/21.8M [00:00<00:00, 105MiB/s]
数据集格式¶
对于 COCO 格式数据集,为每个分割提供 JSON 注解文件
trainval_cocoformat.json
: 训练和验证数据test_cocoformat.json
: 测试数据
模型选择¶
我们使用 medium_quality
预设,其特点是
基础模型:YOLOX-large(在 COCO 上预训练)
优点:快速微调、快速推理、易于部署
可用的替代预设
high_quality
: DINO-Resnet50 模型best_quality
: DINO-SwinL 模型
这两种替代方案都能提供更高的性能,但代价是处理速度较慢且 GPU 内存需求较高。
presets = "medium_quality"
创建 MultiModalPredictor 时,指定以下关键参数
problem_type="object_detection"
用于定义任务presets="medium_quality"
用于选择预设sample_data_path
指向任何数据集分割(通常是 train_path)以推断对象类别path
(可选) 用于设置自定义保存位置
如果未指定路径,模型将自动保存到 AutogluonModels/ 下的一个带时间戳的目录中。
# Init predictor
import uuid
model_path = f"./tmp/{uuid.uuid4().hex}-quick_start_tutorial_temp_save"
predictor = MultiModalPredictor(
problem_type="object_detection",
sample_data_path=train_path,
presets=presets,
path=model_path,
)
微调模型¶
模型使用针对学习率、周期和批量大小优化的预设配置。默认情况下,它采用两阶段学习率策略
模型头层使用 100 倍更高的学习率。这种方法加速收敛并通常提高性能,尤其适用于小型数据集(数百到数千张图像)。
下面的计时结果来自在 AWS g4.2xlarge EC2 实例上进行的测试运行
start = time.time()
predictor.fit(train_path) # Fit
train_end = time.time()
loading annotations into memory...
Done (t=0.00s)
creating index...
index created!
Downloading yolox_l_8x8_300e_coco_20211126_140236-d3bd2b23.pth from https://download.openmmlab.com/mmdetection/v2.0/yolox/yolox_l_8x8_300e_coco/yolox_l_8x8_300e_coco_20211126_140236-d3bd2b23.pth...
Loads checkpoint by local backend from path: yolox_l_8x8_300e_coco_20211126_140236-d3bd2b23.pth
The model and loaded state dict do not match exactly
size mismatch for bbox_head.multi_level_conv_cls.0.weight: copying a param with shape torch.Size([80, 256, 1, 1]) from checkpoint, the shape in current model is torch.Size([10, 256, 1, 1]).
size mismatch for bbox_head.multi_level_conv_cls.0.bias: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([10]).
size mismatch for bbox_head.multi_level_conv_cls.1.weight: copying a param with shape torch.Size([80, 256, 1, 1]) from checkpoint, the shape in current model is torch.Size([10, 256, 1, 1]).
size mismatch for bbox_head.multi_level_conv_cls.1.bias: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([10]).
size mismatch for bbox_head.multi_level_conv_cls.2.weight: copying a param with shape torch.Size([80, 256, 1, 1]) from checkpoint, the shape in current model is torch.Size([10, 256, 1, 1]).
size mismatch for bbox_head.multi_level_conv_cls.2.bias: copying a param with shape torch.Size([80]) from checkpoint, the shape in current model is torch.Size([10]).
=================== 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: 28.41 GB / 30.95 GB (91.8%)
Disk Space Avail: WARNING, an exception (FileNotFoundError) occurred while attempting to get available disk space. Consider opening a GitHub Issue.
===================================================
Using default root folder: ./tiny_motorbike_coco/tiny_motorbike/Annotations/... Specify `model.mmdet_image.coco_root=...` in hyperparameters if you think it is wrong.
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/object_detection/quick_start/tmp/d91b34b2af624db583e124c991ea34d8-quick_start_tutorial_temp_save
```
Seed set to 0
0%| | 0.00/217M [00:00<?, ?iB/s]
0%| | 228k/217M [00:00<01:37, 2.23MiB/s]
0%| | 523k/217M [00:00<01:23, 2.58MiB/s]
0%| | 884k/217M [00:00<01:11, 3.04MiB/s]
1%| | 1.33M/217M [00:00<01:00, 3.58MiB/s]
1%| | 1.88M/217M [00:00<00:50, 4.27MiB/s]
1%| | 2.57M/217M [00:00<00:41, 5.13MiB/s]
2%|▏ | 3.44M/217M [00:00<00:34, 6.27MiB/s]
2%|▏ | 4.46M/217M [00:00<00:28, 7.50MiB/s]
3%|▎ | 5.73M/217M [00:00<00:23, 9.14MiB/s]
3%|▎ | 7.26M/217M [00:01<00:19, 11.0MiB/s]
4%|▍ | 8.80M/217M [00:01<00:16, 12.3MiB/s]
5%|▍ | 10.4M/217M [00:01<00:15, 13.3MiB/s]
6%|▌ | 12.0M/217M [00:01<00:14, 14.2MiB/s]
6%|▌ | 13.5M/217M [00:01<00:13, 14.6MiB/s]
7%|▋ | 15.2M/217M [00:01<00:13, 15.1MiB/s]
8%|▊ | 16.8M/217M [00:01<00:12, 15.5MiB/s]
8%|▊ | 18.4M/217M [00:01<00:12, 15.7MiB/s]
9%|▉ | 20.1M/217M [00:01<00:12, 15.9MiB/s]
10%|█ | 21.7M/217M [00:01<00:12, 16.0MiB/s]
11%|█ | 23.4M/217M [00:02<00:12, 16.1MiB/s]
12%|█▏ | 25.1M/217M [00:02<00:11, 16.2MiB/s]
12%|█▏ | 26.8M/217M [00:02<00:11, 16.3MiB/s]
13%|█▎ | 28.4M/217M [00:02<00:11, 16.3MiB/s]
14%|█▍ | 30.1M/217M [00:02<00:11, 16.4MiB/s]
15%|█▍ | 31.7M/217M [00:02<00:11, 16.4MiB/s]
15%|█▌ | 33.4M/217M [00:02<00:11, 16.3MiB/s]
16%|█▌ | 35.0M/217M [00:02<00:11, 16.3MiB/s]
17%|█▋ | 36.6M/217M [00:02<00:11, 16.3MiB/s]
18%|█▊ | 38.3M/217M [00:02<00:10, 16.3MiB/s]
18%|█▊ | 39.9M/217M [00:03<00:11, 16.1MiB/s]
19%|█▉ | 41.5M/217M [00:03<00:10, 16.2MiB/s]
20%|█▉ | 43.2M/217M [00:03<00:10, 16.2MiB/s]
21%|██ | 44.8M/217M [00:03<00:10, 16.0MiB/s]
21%|██▏ | 46.5M/217M [00:03<00:10, 16.2MiB/s]
22%|██▏ | 48.1M/217M [00:03<00:10, 16.1MiB/s]
23%|██▎ | 49.9M/217M [00:03<00:10, 16.2MiB/s]
24%|██▎ | 51.5M/217M [00:03<00:10, 16.2MiB/s]
24%|██▍ | 53.2M/217M [00:03<00:10, 16.2MiB/s]
25%|██▌ | 54.9M/217M [00:03<00:10, 16.2MiB/s]
26%|██▌ | 56.6M/217M [00:04<00:09, 16.3MiB/s]
27%|██▋ | 58.2M/217M [00:04<00:09, 16.3MiB/s]
28%|██▊ | 59.9M/217M [00:04<00:09, 16.4MiB/s]
28%|██▊ | 61.6M/217M [00:04<00:09, 16.3MiB/s]
29%|██▉ | 63.5M/217M [00:04<00:09, 17.1MiB/s]
30%|██▉ | 65.2M/217M [00:04<00:08, 17.0MiB/s]
31%|███ | 66.9M/217M [00:04<00:08, 17.0MiB/s]
32%|███▏ | 68.6M/217M [00:04<00:08, 16.9MiB/s]
32%|███▏ | 70.3M/217M [00:04<00:08, 16.8MiB/s]
33%|███▎ | 71.9M/217M [00:04<00:08, 16.7MiB/s]
34%|███▍ | 73.7M/217M [00:05<00:08, 16.8MiB/s]
35%|███▍ | 75.4M/217M [00:05<00:08, 16.8MiB/s]
36%|███▌ | 77.3M/217M [00:05<00:08, 17.2MiB/s]
36%|███▋ | 79.1M/217M [00:05<00:07, 17.3MiB/s]
37%|███▋ | 80.9M/217M [00:05<00:07, 17.1MiB/s]
38%|███▊ | 82.8M/217M [00:05<00:07, 17.6MiB/s]
39%|███▉ | 84.5M/217M [00:05<00:07, 17.4MiB/s]
40%|███▉ | 86.3M/217M [00:05<00:07, 17.1MiB/s]
41%|████ | 88.2M/217M [00:05<00:07, 17.2MiB/s]
41%|████▏ | 90.1M/217M [00:06<00:07, 17.3MiB/s]
42%|████▏ | 92.0M/217M [00:06<00:07, 17.9MiB/s]
43%|████▎ | 93.8M/217M [00:06<00:06, 17.7MiB/s]
44%|████▍ | 95.6M/217M [00:06<00:06, 17.6MiB/s]
45%|████▍ | 97.4M/217M [00:06<00:06, 17.3MiB/s]
46%|████▌ | 99.1M/217M [00:06<00:06, 17.4MiB/s]
46%|████▋ | 101M/217M [00:06<00:06, 17.2MiB/s]
47%|████▋ | 103M/217M [00:06<00:06, 17.2MiB/s]
48%|████▊ | 104M/217M [00:06<00:06, 17.1MiB/s]
49%|████▉ | 106M/217M [00:06<00:06, 17.5MiB/s]
50%|████▉ | 108M/217M [00:07<00:06, 17.4MiB/s]
50%|█████ | 110M/217M [00:07<00:06, 17.3MiB/s]
51%|█████▏ | 112M/217M [00:07<00:06, 17.6MiB/s]
52%|█████▏ | 113M/217M [00:07<00:05, 17.6MiB/s]
53%|█████▎ | 115M/217M [00:07<00:05, 17.9MiB/s]
54%|█████▍ | 117M/217M [00:07<00:05, 17.9MiB/s]
55%|█████▍ | 119M/217M [00:07<00:05, 17.7MiB/s]
56%|█████▌ | 121M/217M [00:07<00:05, 17.8MiB/s]
56%|█████▋ | 122M/217M [00:07<00:05, 17.7MiB/s]
57%|█████▋ | 124M/217M [00:07<00:05, 17.9MiB/s]
58%|█████▊ | 126M/217M [00:08<00:05, 17.6MiB/s]
59%|█████▉ | 128M/217M [00:08<00:05, 16.2MiB/s]
60%|█████▉ | 130M/217M [00:08<00:05, 16.6MiB/s]
61%|██████ | 132M/217M [00:08<00:04, 17.2MiB/s]
61%|██████▏ | 133M/217M [00:08<00:04, 17.3MiB/s]
62%|██████▏ | 135M/217M [00:08<00:04, 17.2MiB/s]
63%|██████▎ | 137M/217M [00:08<00:04, 17.2MiB/s]
64%|██████▍ | 139M/217M [00:08<00:04, 17.7MiB/s]
65%|██████▍ | 141M/217M [00:08<00:04, 17.7MiB/s]
66%|██████▌ | 142M/217M [00:09<00:04, 17.5MiB/s]
66%|██████▋ | 144M/217M [00:09<00:04, 17.6MiB/s]
67%|██████▋ | 146M/217M [00:09<00:04, 17.7MiB/s]
68%|██████▊ | 148M/217M [00:09<00:03, 17.8MiB/s]
69%|██████▉ | 150M/217M [00:09<00:03, 17.7MiB/s]
70%|██████▉ | 152M/217M [00:09<00:03, 18.1MiB/s]
71%|███████ | 153M/217M [00:09<00:03, 17.8MiB/s]
71%|███████▏ | 155M/217M [00:09<00:03, 17.8MiB/s]
72%|███████▏ | 157M/217M [00:09<00:03, 17.5MiB/s]
73%|███████▎ | 159M/217M [00:09<00:03, 17.4MiB/s]
74%|███████▍ | 161M/217M [00:10<00:03, 17.2MiB/s]
75%|███████▍ | 163M/217M [00:10<00:03, 17.4MiB/s]
76%|███████▌ | 165M/217M [00:10<00:02, 18.1MiB/s]
77%|███████▋ | 166M/217M [00:10<00:02, 17.8MiB/s]
77%|███████▋ | 168M/217M [00:10<00:02, 17.5MiB/s]
78%|███████▊ | 170M/217M [00:10<00:02, 17.4MiB/s]
79%|███████▉ | 172M/217M [00:10<00:02, 17.4MiB/s]
80%|███████▉ | 173M/217M [00:10<00:02, 17.3MiB/s]
81%|████████ | 175M/217M [00:10<00:02, 18.0MiB/s]
82%|████████▏ | 177M/217M [00:10<00:02, 17.8MiB/s]
82%|████████▏ | 179M/217M [00:11<00:02, 17.5MiB/s]
83%|████████▎ | 181M/217M [00:11<00:02, 17.4MiB/s]
84%|████████▍ | 183M/217M [00:11<00:02, 17.3MiB/s]
85%|████████▍ | 184M/217M [00:11<00:01, 17.1MiB/s]
86%|████████▌ | 186M/217M [00:11<00:01, 17.1MiB/s]
86%|████████▋ | 188M/217M [00:11<00:01, 17.0MiB/s]
87%|████████▋ | 189M/217M [00:11<00:01, 17.0MiB/s]
88%|████████▊ | 191M/217M [00:11<00:01, 17.0MiB/s]
89%|████████▉ | 193M/217M [00:11<00:01, 17.6MiB/s]
90%|████████▉ | 195M/217M [00:12<00:01, 17.6MiB/s]
91%|█████████ | 197M/217M [00:12<00:01, 17.4MiB/s]
91%|█████████▏| 199M/217M [00:12<00:01, 17.5MiB/s]
92%|█████████▏| 200M/217M [00:12<00:00, 17.5MiB/s]
93%|█████████▎| 202M/217M [00:12<00:00, 17.4MiB/s]
94%|█████████▍| 204M/217M [00:12<00:00, 17.5MiB/s]
95%|█████████▍| 206M/217M [00:12<00:00, 17.5MiB/s]
96%|█████████▌| 208M/217M [00:12<00:00, 17.1MiB/s]
96%|█████████▋| 210M/217M [00:12<00:00, 17.0MiB/s]
97%|█████████▋| 211M/217M [00:12<00:00, 16.9MiB/s]
98%|█████████▊| 213M/217M [00:13<00:00, 17.7MiB/s]
99%|█████████▉| 215M/217M [00:13<00:00, 17.6MiB/s]
100%|█████████▉| 217M/217M [00:13<00:00, 17.4MiB/s]
GPU Count: 1
GPU Count to be Used: 1
Using 16bit Automatic Mixed Precision (AMP)
GPU available: True (cuda), used: True
TPU available: False, using: 0 TPU cores
HPU available: False, using: 0 HPUs
`Trainer(val_check_interval=1.0)` was configured so validation will run at the end of the training epoch..
LOCAL_RANK: 0 - CUDA_VISIBLE_DEVICES: [0]
| Name | Type | Params | Mode
-------------------------------------------------------------------------------
0 | model | MMDetAutoModelForObjectDetection | 54.2 M | train
1 | validation_metric | MeanAveragePrecision | 0 | train
-------------------------------------------------------------------------------
54.2 M Trainable params
0 Non-trainable params
54.2 M Total params
216.620 Total estimated model params size (MB)
592 Modules in train mode
0 Modules in eval mode
/home/ci/opt/venv/lib/python3.11/site-packages/mmdet/models/backbones/csp_darknet.py:118: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.
with torch.cuda.amp.autocast(enabled=False):
/home/ci/opt/venv/lib/python3.11/site-packages/torch/functional.py:539: UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at /pytorch/aten/src/ATen/native/TensorShape.cpp:3637.)
return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
Cell In[8], line 2
1 start = time.time()
----> 2 predictor.fit(train_path) # Fit
3 train_end = time.time()
File ~/autogluon/multimodal/src/autogluon/multimodal/predictor.py:540, in MultiModalPredictor.fit(self, train_data, presets, tuning_data, max_num_tuning_data, id_mappings, time_limit, save_path, hyperparameters, column_types, holdout_frac, teacher_predictor, seed, standalone, hyperparameter_tune_kwargs, clean_ckpts, predictions, labels, predictors)
537 assert isinstance(predictors, list)
538 learners = [ele if isinstance(ele, str) else ele._learner for ele in predictors]
--> 540 self._learner.fit(
541 train_data=train_data,
542 presets=presets,
543 tuning_data=tuning_data,
544 max_num_tuning_data=max_num_tuning_data,
545 time_limit=time_limit,
546 save_path=save_path,
547 hyperparameters=hyperparameters,
548 column_types=column_types,
549 holdout_frac=holdout_frac,
550 teacher_learner=teacher_learner,
551 seed=seed,
552 standalone=standalone,
553 hyperparameter_tune_kwargs=hyperparameter_tune_kwargs,
554 clean_ckpts=clean_ckpts,
555 id_mappings=id_mappings,
556 predictions=predictions,
557 labels=labels,
558 learners=learners,
559 )
561 return self
File ~/autogluon/multimodal/src/autogluon/multimodal/learners/object_detection.py:243, in ObjectDetectionLearner.fit(self, train_data, presets, tuning_data, max_num_tuning_data, time_limit, save_path, hyperparameters, column_types, holdout_frac, seed, standalone, hyperparameter_tune_kwargs, clean_ckpts, **kwargs)
236 self.fit_sanity_check()
237 self.prepare_fit_args(
238 time_limit=time_limit,
239 seed=seed,
240 standalone=standalone,
241 clean_ckpts=clean_ckpts,
242 )
--> 243 fit_returns = self.execute_fit()
244 self.on_fit_end(
245 training_start=training_start,
246 strategy=fit_returns.get("strategy", None),
(...)
249 clean_ckpts=clean_ckpts,
250 )
252 return self
File ~/autogluon/multimodal/src/autogluon/multimodal/learners/base.py:577, in BaseLearner.execute_fit(self)
575 return dict()
576 else:
--> 577 attributes = self.fit_per_run(**self._fit_args)
578 self.update_attributes(**attributes) # only update attributes for non-HPO mode
579 return attributes
File ~/autogluon/multimodal/src/autogluon/multimodal/learners/object_detection.py:438, in ObjectDetectionLearner.fit_per_run(self, max_time, save_path, ckpt_path, resume, enable_progress_bar, seed, hyperparameters, advanced_hyperparameters, config, df_preprocessor, data_processors, model, standalone, clean_ckpts)
419 config = self.post_update_config_per_run(
420 config=config,
421 num_gpus=num_gpus,
422 precision=precision,
423 strategy=strategy,
424 )
425 trainer = self.init_trainer_per_run(
426 num_gpus=num_gpus,
427 config=config,
(...)
435 enable_progress_bar=enable_progress_bar,
436 )
--> 438 self.run_trainer(
439 trainer=trainer,
440 litmodule=litmodule,
441 datamodule=datamodule,
442 ckpt_path=ckpt_path,
443 resume=resume,
444 )
445 self.on_fit_per_run_end(
446 save_path=save_path,
447 standalone=standalone,
(...)
452 model=model,
453 )
455 return dict(
456 config=config,
457 df_preprocessor=df_preprocessor,
(...)
461 strategy=strategy,
462 )
File ~/autogluon/multimodal/src/autogluon/multimodal/learners/base.py:1211, in BaseLearner.run_trainer(self, trainer, litmodule, datamodule, ckpt_path, resume, pred_writer, is_train)
1209 warnings.filterwarnings("ignore", filter)
1210 if is_train:
-> 1211 trainer.fit(
1212 litmodule,
1213 datamodule=datamodule,
1214 ckpt_path=ckpt_path if resume else None, # this is to resume training that was broken accidentally
1215 )
1216 else:
1217 blacklist_msgs = []
File ~/opt/venv/lib/python3.11/site-packages/lightning/pytorch/trainer/trainer.py:561, in Trainer.fit(self, model, train_dataloaders, val_dataloaders, datamodule, ckpt_path)
559 self.training = True
560 self.should_stop = False
--> 561 call._call_and_handle_interrupt(
562 self, self._fit_impl, model, train_dataloaders, val_dataloaders, datamodule, ckpt_path
563 )
File ~/opt/venv/lib/python3.11/site-packages/lightning/pytorch/trainer/call.py:48, in _call_and_handle_interrupt(trainer, trainer_fn, *args, **kwargs)
46 if trainer.strategy.launcher is not None:
47 return trainer.strategy.launcher.launch(trainer_fn, *args, trainer=trainer, **kwargs)
---> 48 return trainer_fn(*args, **kwargs)
50 except _TunerExitException:
51 _call_teardown_hook(trainer)
File ~/opt/venv/lib/python3.11/site-packages/lightning/pytorch/trainer/trainer.py:599, in Trainer._fit_impl(self, model, train_dataloaders, val_dataloaders, datamodule, ckpt_path)
592 download_model_from_registry(ckpt_path, self)
593 ckpt_path = self._checkpoint_connector._select_ckpt_path(
594 self.state.fn,
595 ckpt_path,
596 model_provided=True,
597 model_connected=self.lightning_module is not None,
598 )
--> 599 self._run(model, ckpt_path=ckpt_path)
601 assert self.state.stopped
602 self.training = False
File ~/opt/venv/lib/python3.11/site-packages/lightning/pytorch/trainer/trainer.py:1012, in Trainer._run(self, model, ckpt_path)
1007 self._signal_connector.register_signal_handlers()
1009 # ----------------------------
1010 # RUN THE TRAINER
1011 # ----------------------------
-> 1012 results = self._run_stage()
1014 # ----------------------------
1015 # POST-Training CLEAN UP
1016 # ----------------------------
1017 log.debug(f"{self.__class__.__name__}: trainer tearing down")
File ~/opt/venv/lib/python3.11/site-packages/lightning/pytorch/trainer/trainer.py:1056, in Trainer._run_stage(self)
1054 self._run_sanity_check()
1055 with torch.autograd.set_detect_anomaly(self._detect_anomaly):
-> 1056 self.fit_loop.run()
1057 return None
1058 raise RuntimeError(f"Unexpected state {self.state}")
File ~/opt/venv/lib/python3.11/site-packages/lightning/pytorch/loops/fit_loop.py:216, in _FitLoop.run(self)
214 try:
215 self.on_advance_start()
--> 216 self.advance()
217 self.on_advance_end()
218 except StopIteration:
File ~/opt/venv/lib/python3.11/site-packages/lightning/pytorch/loops/fit_loop.py:455, in _FitLoop.advance(self)
453 with self.trainer.profiler.profile("run_training_epoch"):
454 assert self._data_fetcher is not None
--> 455 self.epoch_loop.run(self._data_fetcher)
File ~/opt/venv/lib/python3.11/site-packages/lightning/pytorch/loops/training_epoch_loop.py:150, in _TrainingEpochLoop.run(self, data_fetcher)
148 while not self.done:
149 try:
--> 150 self.advance(data_fetcher)
151 self.on_advance_end(data_fetcher)
152 except StopIteration:
File ~/opt/venv/lib/python3.11/site-packages/lightning/pytorch/loops/training_epoch_loop.py:282, in _TrainingEpochLoop.advance(self, data_fetcher)
280 else:
281 dataloader_iter = None
--> 282 batch, _, __ = next(data_fetcher)
283 # TODO: we should instead use the batch_idx returned by the fetcher, however, that will require saving the
284 # fetcher state so that the batch_idx is correct after restarting
285 batch_idx = self.batch_idx + 1
File ~/opt/venv/lib/python3.11/site-packages/lightning/pytorch/loops/fetchers.py:134, in _PrefetchDataFetcher.__next__(self)
131 self.done = not self.batches
132 elif not self.done:
133 # this will run only when no pre-fetching was done.
--> 134 batch = super().__next__()
135 else:
136 # the iterator is empty
137 raise StopIteration
File ~/opt/venv/lib/python3.11/site-packages/lightning/pytorch/loops/fetchers.py:61, in _DataFetcher.__next__(self)
59 self._start_profiler()
60 try:
---> 61 batch = next(self.iterator)
62 except StopIteration:
63 self.done = True
File ~/opt/venv/lib/python3.11/site-packages/lightning/pytorch/utilities/combined_loader.py:341, in CombinedLoader.__next__(self)
339 def __next__(self) -> _ITERATOR_RETURN:
340 assert self._iterator is not None
--> 341 out = next(self._iterator)
342 if isinstance(self._iterator, _Sequential):
343 return out
File ~/opt/venv/lib/python3.11/site-packages/lightning/pytorch/utilities/combined_loader.py:78, in _MaxSizeCycle.__next__(self)
76 for i in range(n):
77 try:
---> 78 out[i] = next(self.iterators[i])
79 except StopIteration:
80 self._consumed[i] = True
File ~/opt/venv/lib/python3.11/site-packages/torch/utils/data/dataloader.py:708, in _BaseDataLoaderIter.__next__(self)
705 if self._sampler_iter is None:
706 # TODO(https://github.com/pytorch/pytorch/issues/76750)
707 self._reset() # type: ignore[call-arg]
--> 708 data = self._next_data()
709 self._num_yielded += 1
710 if (
711 self._dataset_kind == _DatasetKind.Iterable
712 and self._IterableDataset_len_called is not None
713 and self._num_yielded > self._IterableDataset_len_called
714 ):
File ~/opt/venv/lib/python3.11/site-packages/torch/utils/data/dataloader.py:1480, in _MultiProcessingDataLoaderIter._next_data(self)
1478 del self._task_info[idx]
1479 self._rcvd_idx += 1
-> 1480 return self._process_data(data)
File ~/opt/venv/lib/python3.11/site-packages/torch/utils/data/dataloader.py:1505, in _MultiProcessingDataLoaderIter._process_data(self, data)
1503 self._try_put_index()
1504 if isinstance(data, ExceptionWrapper):
-> 1505 data.reraise()
1506 return data
File ~/opt/venv/lib/python3.11/site-packages/torch/_utils.py:733, in ExceptionWrapper.reraise(self)
729 except TypeError:
730 # If the exception takes multiple arguments, don't try to
731 # instantiate since we don't know how to
732 raise RuntimeError(msg) from None
--> 733 raise exception
TypeError: Caught TypeError in DataLoader worker process 0.
Original Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/ci/opt/venv/lib/python3.11/site-packages/torch/utils/data/_utils/worker.py", line 349, in _worker_loop
data = fetcher.fetch(index) # type: ignore[possibly-undefined]
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/opt/venv/lib/python3.11/site-packages/torch/utils/data/_utils/fetch.py", line 52, in fetch
data = [self.dataset[idx] for idx in possibly_batched_index]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/opt/venv/lib/python3.11/site-packages/torch/utils/data/_utils/fetch.py", line 52, in <listcomp>
data = [self.dataset[idx] for idx in possibly_batched_index]
~~~~~~~~~~~~^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 146, in _load_item
return self.__getitem__((idx + 1) % self.__len__())
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 167, in __getitem__
results = copy.deepcopy(self._load_item(idx))
^^^^^^^^^^^^^^^^^^^^
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 148, in _load_item
raise e
File "/home/ci/autogluon/multimodal/src/autogluon/multimodal/data/dataset_mmlab/multi_image_mix_dataset.py", line 134, in _load_item
per_ret = apply_data_processor(
^^^^^^^^^^^^^^^^^^^^^
TypeError: apply_data_processor() got an unexpected keyword argument 'feature_modalities'
请注意,在每个进度条的末尾,如果当前阶段的检查点已保存,它将打印模型的保存路径。在本例中,它是 ./quick_start_tutorial_temp_save
。
打印出时间,我们可以看到它很快!
print("This finetuning takes %.2f seconds." % (train_end - start))
评估¶
要评估我们刚刚训练的模型,运行以下代码。
评估结果会显示在命令行输出中。第一行是 COCO 标准下的 mAP,第二行是 VOC 标准下的 mAP(或 mAP50)。有关这些指标的更多详细信息,请参阅COCO 的评估指南。请注意,为了展示快速微调,我们使用了“medium_quality”预设,您只需使用“high_quality”或“best_quality”预设,或自定义您的模型和超参数设置即可在此数据集上获得更好的结果:自定义,以及快速微调 Coco 或高性能微调 Coco 中的其他一些示例。
predictor.evaluate(test_path)
eval_end = time.time()
打印评估时间
print("The evaluation takes %.2f seconds." % (eval_end - train_end))
我们可以使用先前的保存路径加载新的预测器,如果不是所有设备都可用,我们还可以重置使用的 GPU 数量
# Load and reset num_gpus
new_predictor = MultiModalPredictor.load(model_path)
new_predictor.set_num_gpus(1)
评估新的预测器会得到完全相同的结果
# Evaluate new predictor
new_predictor.evaluate(test_path)
有关如何设置超参数并以更高性能微调模型的信息,请参阅AutoMM Detection - 在 COCO 格式数据集上进行高性能微调。
推理¶
让我们使用微调后的模型执行预测。预测器可以通过单个命令处理整个测试集
pred = predictor.predict(test_path)
print(len(pred)) # Number of predictions
print(pred[:3]) # Sample of first 3 predictions
预测器以 pandas DataFrame 的形式返回预测结果,包含两列
image
: 包含每张输入图像的路径bboxes
: 包含检测到的对象列表,每个对象是一个字典{ "class": "predicted_class_name", "bbox": [x1, y1, x2, y2], # Coordinates of Upper Left and Bottom Right corners "score": confidence_score }
默认情况下,预测结果被返回但不会保存。要保存检测结果,请在 predict 调用中使用 save 参数。
pred = predictor.predict(test_path, save_results=True, as_coco=False)
预测结果可以保存为两种格式
CSV 文件:与包含 image 和 bboxes 列的 DataFrame 结构一致
COCO JSON:标准的 COCO 格式注解文件
这适用于任何预测器配置(预训练或微调的模型)。
结果可视化¶
要运行可视化,请确保已安装 opencv
。如果尚未安装,请通过运行以下命令安装 opencv
!pip install opencv-python
要可视化检测到的边界框,运行以下代码
from autogluon.multimodal.utils import ObjectDetectionVisualizer
conf_threshold = 0.4 # Specify a confidence threshold to filter out unwanted boxes
image_result = pred.iloc[30]
img_path = image_result.image # Select an image to visualize
visualizer = ObjectDetectionVisualizer(img_path) # Initialize the Visualizer
out = visualizer.draw_instance_predictions(image_result, conf_threshold=conf_threshold) # Draw detections
visualized = out.get_image() # Get the visualized image
from PIL import Image
from IPython.display import display
img = Image.fromarray(visualized, 'RGB')
display(img)
在您自己的数据上进行测试¶
您还可以使用各种输入格式在您自己的图像上进行预测。以下是一个示例
下载示例图像
from autogluon.multimodal import download
image_url = "https://raw.githubusercontent.com/dmlc/web-data/master/gluoncv/detection/street_small.jpg"
test_image = download(image_url)
对 COCO 格式的 json 文件中的数据运行推理(有关 COCO 格式的更多详细信息,请参阅将数据转换为 COCO 格式)。请注意,由于根目录默认是注解文件的父文件夹,因此我们将注解文件放在一个文件夹中
import json
# create a input file for demo
data = {"images": [{"id": 0, "width": -1, "height": -1, "file_name": test_image}], "categories": []}
os.mkdir("input_data_for_demo")
input_file = "input_data_for_demo/demo_annotation.json"
with open(input_file, "w+") as f:
json.dump(data, f)
pred_test_image = predictor.predict(input_file)
print(pred_test_image)
对图像文件名列表中的数据运行推理
pred_test_image = predictor.predict([test_image])
print(pred_test_image)
其他示例¶
您可以访问AutoMM 示例来探索 AutoMM 的其他示例。
定制¶
要了解如何定制 AutoMM,请参阅定制 AutoMM。
引用¶
@article{DBLP:journals/corr/abs-2107-08430,
author = {Zheng Ge and
Songtao Liu and
Feng Wang and
Zeming Li and
Jian Sun},
title = {{YOLOX:} Exceeding {YOLO} Series in 2021},
journal = {CoRR},
volume = {abs/2107.08430},
year = {2021},
url = {https://arxiv.org/abs/2107.08430},
eprinttype = {arXiv},
eprint = {2107.08430},
timestamp = {Tue, 05 Apr 2022 14:09:44 +0200},
biburl = {https://dblp.org/rec/journals/corr/abs-2107-08430.bib},
bibsource = {dblp computer science bibliography, https://dblp.org},
}