"docs/vscode:/vscode.git/clone" did not exist on "7d8522a29f3ea07d921fb54e4f4b723fc108ac6d"
Unverified Commit 4f88f1a5 authored by VVsssssk's avatar VVsssssk Committed by GitHub
Browse files

[Fix] replace mmcv's function and modules imported with mmengine's and sync...

[Fix] replace mmcv's function and modules imported with mmengine's and sync the latest mmengine (#1765)

* replace mmcv to mmengine

* fix

* fix comments
parent 0e157c31
......@@ -22,7 +22,6 @@ import shutil
import subprocess
from os import path as osp
import mmcv
import mmengine
import torch
......@@ -143,10 +142,10 @@ def main():
args = parse_args()
models_root = args.root
models_out = args.out
mmcv.mkdir_or_exist(models_out)
mmengine.mkdir_or_exist(models_out)
# find all models in the root directory to be gathered
raw_configs = list(mmcv.scandir('./configs', '.py', recursive=True))
raw_configs = list(mmengine.scandir('./configs', '.py', recursive=True))
# filter configs that is not trained in the experiments dir
used_configs = []
......@@ -189,7 +188,7 @@ def main():
publish_model_infos = []
for model in model_infos:
model_publish_dir = osp.join(models_out, model['config'].rstrip('.py'))
mmcv.mkdir_or_exist(model_publish_dir)
mmengine.mkdir_or_exist(model_publish_dir)
model_name = model['config'].split('/')[-1].rstrip(
'.py') + '_' + model['model_time']
......
import argparse
from os import path as osp
import mmcv
import mmengine
from indoor3d_util import export
parser = argparse.ArgumentParser()
......@@ -23,7 +23,7 @@ anno_paths = [line.rstrip() for line in open(args.ann_file)]
anno_paths = [osp.join(args.data_dir, p) for p in anno_paths]
output_folder = args.output_folder
mmcv.mkdir_or_exist(output_folder)
mmengine.mkdir_or_exist(output_folder)
# Note: there is an extra character in the v1.2 data in Area_5/hallway_6.
# It's fixed manually here.
......
......@@ -6,7 +6,7 @@ from argparse import ArgumentParser
from functools import partial
import imageio
import mmcv
import mmengine
import numpy as np
COMPRESSION_TYPE_COLOR = {-1: 'unknown', 0: 'raw', 1: 'png', 2: 'jpeg'}
......@@ -160,7 +160,7 @@ def process_scene(path, limit, idx):
def process_directory(path, limit, nproc):
print(f'processing {path}')
mmcv.track_parallel_progress(
mmengine.track_parallel_progress(
func=partial(process_scene, path, limit),
tasks=os.listdir(path),
nproc=nproc)
......
......@@ -150,7 +150,7 @@ def process_single_scene(sample_idx):
info['point_cloud'] = pc_info
# save point cloud data in `.bin` format
mmcv.mkdir_or_exist(osp.join(self.root_dir, 'points'))
mmengine.mkdir_or_exist(osp.join(self.root_dir, 'points'))
pc_upright_depth_subsampled.tofile(
osp.join(self.root_dir, 'points', f'{sample_idx:06d}.bin'))
......
......@@ -148,7 +148,7 @@ def process_single_scene(sample_idx):
info['point_cloud'] = pc_info
# 将点云保存为 `.bin` 格式
mmcv.mkdir_or_exist(osp.join(self.root_dir, 'points'))
mmengine.mkdir_or_exist(osp.join(self.root_dir, 'points'))
pc_upright_depth_subsampled.tofile(
osp.join(self.root_dir, 'points', f'{sample_idx:06d}.bin'))
......
......@@ -22,7 +22,7 @@ def convert_SyncBN(config):
"""Convert config's naiveSyncBN to BN.
Args:
config (str or :obj:`mmcv.Config`): Config file path or the config
config (str or :obj:`mmengine.Config`): Config file path or the config
object.
"""
if isinstance(config, dict):
......
# Copyright (c) OpenMMLab. All rights reserved.
from typing import List, Sequence, Union
import mmcv
import mmengine
import numpy as np
import torch
from mmcv import BaseTransform
from mmengine import InstanceData
from mmengine.structures import InstanceData
from numpy import dtype
from mmdet3d.registry import TRANSFORMS
......@@ -35,7 +35,7 @@ def to_tensor(
if data.dtype is dtype('float64'):
data = data.astype(np.float32)
return torch.from_numpy(data)
elif isinstance(data, Sequence) and not mmcv.is_str(data):
elif isinstance(data, Sequence) and not mmengine.is_str(data):
return torch.tensor(data)
elif isinstance(data, int):
return torch.LongTensor([data])
......
......@@ -182,7 +182,7 @@ class LoadPointsFromMultiSweeps(BaseTransform):
pts_bytes = self.file_client.get(pts_filename)
points = np.frombuffer(pts_bytes, dtype=np.float32)
except ConnectionError:
mmcv.check_file_exist(pts_filename)
mmengine.check_file_exist(pts_filename)
if pts_filename.endswith('.npy'):
points = np.load(pts_filename)
else:
......@@ -440,7 +440,7 @@ class LoadPointsFromFile(BaseTransform):
pts_bytes = self.file_client.get(pts_filename)
points = np.frombuffer(pts_bytes, dtype=np.float32)
except ConnectionError:
mmcv.check_file_exist(pts_filename)
mmengine.check_file_exist(pts_filename)
if pts_filename.endswith('.npy'):
points = np.load(pts_filename)
else:
......@@ -696,7 +696,7 @@ class LoadAnnotations3D(LoadAnnotations):
mask_bytes = self.file_client.get(pts_instance_mask_path)
pts_instance_mask = np.frombuffer(mask_bytes, dtype=np.int64)
except ConnectionError:
mmcv.check_file_exist(pts_instance_mask_path)
mmengine.check_file_exist(pts_instance_mask_path)
pts_instance_mask = np.fromfile(
pts_instance_mask_path, dtype=np.int64)
......@@ -725,7 +725,7 @@ class LoadAnnotations3D(LoadAnnotations):
pts_semantic_mask = np.frombuffer(
mask_bytes, dtype=self.seg_3d_dtype).copy()
except ConnectionError:
mmcv.check_file_exist(pts_semantic_mask_path)
mmengine.check_file_exist(pts_semantic_mask_path)
pts_semantic_mask = np.fromfile(
pts_semantic_mask_path, dtype=np.int64)
......
......@@ -3,7 +3,7 @@ import warnings
from copy import deepcopy
from typing import Dict, List, Optional, Tuple, Union
import mmcv
import mmengine
from mmcv import BaseTransform
from mmengine.dataset import Compose
......@@ -48,8 +48,8 @@ class MultiScaleFlipAug3D(BaseTransform):
self.pts_scale_ratio = pts_scale_ratio \
if isinstance(pts_scale_ratio, list) else[float(pts_scale_ratio)]
assert mmcv.is_list_of(self.img_scale, tuple)
assert mmcv.is_list_of(self.pts_scale_ratio, float)
assert mmengine.is_list_of(self.img_scale, tuple)
assert mmengine.is_list_of(self.pts_scale_ratio, float)
self.flip = flip
self.pcd_horizontal_flip = pcd_horizontal_flip
......@@ -57,7 +57,7 @@ class MultiScaleFlipAug3D(BaseTransform):
self.flip_direction = flip_direction if isinstance(
flip_direction, list) else [flip_direction]
assert mmcv.is_list_of(self.flip_direction, str)
assert mmengine.is_list_of(self.flip_direction, str)
if not self.flip and self.flip_direction != ['horizontal']:
warnings.warn(
'flip_direction has no effect when flip is set to False')
......
......@@ -5,8 +5,8 @@ from typing import Dict, List, Optional, Tuple, Union
import cv2
import numpy as np
from mmcv import is_tuple_of
from mmcv.transforms import BaseTransform
from mmengine import is_tuple_of
from mmdet3d.models.task_modules import VoxelGenerator
from mmdet3d.registry import TRANSFORMS
......
# Copyright (c) OpenMMLab. All rights reserved.
import mmcv
import numpy as np
from mmcv.transforms import LoadImageFromFile
from pyquaternion import Quaternion
......@@ -113,33 +112,6 @@ def get_loading_pipeline(pipeline):
return loading_pipeline
def extract_result_dict(results, key):
"""Extract and return the data corresponding to key in result dict.
``results`` is a dict output from `pipeline(input_dict)`, which is the
loaded data from ``Dataset`` class.
The data terms inside may be wrapped in list, tuple and DataContainer, so
this function essentially extracts data from these wrappers.
Args:
results (dict): Data loaded using pipeline.
key (str): Key of the desired data.
Returns:
np.ndarray | torch.Tensor: Data term.
"""
if key not in results.keys():
return None
# results[key] may be data or list[data] or tuple[data]
# data may be wrapped inside DataContainer
data = results[key]
if isinstance(data, (list, tuple)):
data = data[0]
if isinstance(data, mmcv.parallel.DataContainer):
data = data._data
return data
def convert_quaternion_to_matrix(quaternion: list,
translation: list = None) -> list:
"""Compute a transform matrix by given quaternion and translation
......
# Copyright (c) OpenMMLab. All rights reserved.
import numpy as np
import torch
from mmcv.utils import print_log
from mmengine.logging import print_log
from terminaltables import AsciiTable
......
# Copyright (c) OpenMMLab. All rights reserved.
import numpy as np
from mmcv.utils import print_log
from mmengine.logging import print_log
from terminaltables import AsciiTable
from .scannet_utils.evaluate_semantic_instance import scannet_eval
......
# Copyright (c) OpenMMLab. All rights reserved.
from os import path as osp
import mmcv
import mmengine
import numpy as np
from lyft_dataset_sdk.eval.detection.mAP_evaluation import (Box3D, get_ap,
......@@ -9,7 +8,7 @@ from lyft_dataset_sdk.eval.detection.mAP_evaluation import (Box3D, get_ap,
get_ious,
group_by_key,
wrap_in_box)
from mmcv.utils import print_log
from mmengine.logging import print_log
from terminaltables import AsciiTable
......@@ -26,7 +25,7 @@ def load_lyft_gts(lyft, data_root, eval_split, logger=None):
Returns:
list[dict]: List of annotation dictionaries.
"""
split_scenes = mmcv.list_from_file(
split_scenes = mmengine.list_from_file(
osp.join(data_root, f'{eval_split}.txt'))
# Read out all sample_tokens in DB.
......@@ -50,7 +49,7 @@ def load_lyft_gts(lyft, data_root, eval_split, logger=None):
print_log('Loading ground truth annotations...', logger=logger)
# Load annotations and filter predictions and annotations.
for sample_token in mmcv.track_iter_progress(sample_tokens):
for sample_token in mmengine.track_iter_progress(sample_tokens):
sample = lyft.get('sample', sample_token)
sample_annotation_tokens = sample['anns']
for sample_annotation_token in sample_annotation_tokens:
......
# Copyright (c) OpenMMLab. All rights reserved.
import numpy as np
from mmcv.utils import print_log
from mmengine.logging import print_log
from terminaltables import AsciiTable
......
......@@ -13,7 +13,7 @@ except ImportError:
from glob import glob
from os.path import join
import mmcv
import mmengine
import numpy as np
import tensorflow as tf
from waymo_open_dataset import label_pb2
......@@ -101,7 +101,7 @@ class KITTI2Waymo(object):
def create_folder(self):
"""Create folder for data conversion."""
mmcv.mkdir_or_exist(self.waymo_results_save_dir)
mmengine.mkdir_or_exist(self.waymo_results_save_dir)
def parse_objects(self, kitti_result, T_k2w, context_name,
frame_timestamp_micros):
......@@ -228,8 +228,8 @@ class KITTI2Waymo(object):
def convert(self):
"""Convert action."""
print('Start converting ...')
mmcv.track_parallel_progress(self.convert_one, range(len(self)),
self.workers)
mmengine.track_parallel_progress(self.convert_one, range(len(self)),
self.workers)
print('\nFinished ...')
# combine all files into one .bin
......
......@@ -3,14 +3,12 @@ import tempfile
from os import path as osp
from typing import Dict, List, Optional, Sequence, Union
import mmcv
import mmengine
import numpy as np
import torch
from mmcv.utils import print_log
from mmengine import load
from mmengine.evaluator import BaseMetric
from mmengine.logging import MMLogger
from mmengine.logging import MMLogger, print_log
from mmdet3d.evaluation import kitti_eval
from mmdet3d.registry import METRICS
......@@ -328,12 +326,12 @@ class KittiMetric(BaseMetric):
assert len(net_outputs) == len(self.data_infos), \
'invalid list length of network outputs'
if submission_prefix is not None:
mmcv.mkdir_or_exist(submission_prefix)
mmengine.mkdir_or_exist(submission_prefix)
det_annos = []
print('\nConverting prediction to KITTI format')
for idx, pred_dicts in enumerate(
mmcv.track_iter_progress(net_outputs)):
mmengine.track_iter_progress(net_outputs)):
annos = []
sample_idx = sample_id_list[idx]
info = self.data_infos[sample_idx]
......@@ -459,7 +457,7 @@ class KittiMetric(BaseMetric):
det_annos = []
print('\nConverting prediction to KITTI format')
for i, bboxes_per_sample in enumerate(
mmcv.track_iter_progress(net_outputs)):
mmengine.track_iter_progress(net_outputs)):
annos = []
anno = dict(
name=[],
......@@ -523,7 +521,7 @@ class KittiMetric(BaseMetric):
if submission_prefix is not None:
# save file in submission format
mmcv.mkdir_or_exist(submission_prefix)
mmengine.mkdir_or_exist(submission_prefix)
print(f'Saving KITTI submission to {submission_prefix}')
for i, anno in enumerate(det_annos):
sample_idx = self.data_infos[i]['image']['image_idx']
......
......@@ -5,7 +5,6 @@ import tempfile
from os import path as osp
from typing import Dict, List, Optional, Sequence, Tuple, Union
import mmcv
import mmengine
import numpy as np
import pandas as pd
......@@ -220,7 +219,7 @@ class LyftMetric(BaseMetric):
idx = Id_list.index(token)
pred_list[idx] = prediction_str
df = pd.DataFrame({'Id': Id_list, 'PredictionString': pred_list})
mmcv.mkdir_or_exist(os.path.dirname(csv_savepath))
mmengine.mkdir_or_exist(os.path.dirname(csv_savepath))
df.to_csv(csv_savepath, index=False)
def _format_bbox(self,
......@@ -245,7 +244,7 @@ class LyftMetric(BaseMetric):
lyft_annos = {}
print('Start to convert detection format...')
for i, det in enumerate(mmcv.track_iter_progress(results)):
for i, det in enumerate(mmengine.track_iter_progress(results)):
annos = []
boxes = output_to_lyft_box(det)
sample_id = sample_id_list[i]
......@@ -267,7 +266,7 @@ class LyftMetric(BaseMetric):
'results': lyft_annos,
}
mmcv.mkdir_or_exist(jsonfile_prefix)
mmengine.mkdir_or_exist(jsonfile_prefix)
res_path = osp.join(jsonfile_prefix, 'results_lyft.json')
print('Results writes to', res_path)
mmengine.dump(lyft_submissions, res_path)
......
......@@ -4,12 +4,11 @@ import tempfile
from os import path as osp
from typing import Dict, List, Optional, Sequence, Tuple, Union
import mmcv
import mmengine
import numpy as np
import pyquaternion
import torch
from mmengine import load
from mmengine import Config, load
from mmengine.evaluator import BaseMetric
from mmengine.logging import MMLogger
from nuscenes.eval.detection.config import config_factory
......@@ -379,7 +378,7 @@ class NuScenesMetric(BaseMetric):
CAM_NUM = 6
for i, det in enumerate(mmcv.track_iter_progress(results)):
for i, det in enumerate(mmengine.track_iter_progress(results)):
sample_id = sample_id_list[i]
......@@ -417,7 +416,6 @@ class NuScenesMetric(BaseMetric):
score_thr=0.01,
min_bbox_size=0,
max_per_frame=500)
from mmcv import Config
nms_cfg = Config(nms_cfg)
cam_boxes3d_for_nms = xywhr2xyxyr(cam_boxes3d.bev)
boxes3d = cam_boxes3d.tensor
......@@ -462,7 +460,7 @@ class NuScenesMetric(BaseMetric):
'results': nusc_annos,
}
mmcv.mkdir_or_exist(jsonfile_prefix)
mmengine.mkdir_or_exist(jsonfile_prefix)
res_path = osp.join(jsonfile_prefix, 'results_nusc.json')
print('Results writes to', res_path)
mmengine.dump(nusc_submissions, res_path)
......@@ -490,7 +488,7 @@ class NuScenesMetric(BaseMetric):
nusc_annos = {}
print('Start to convert detection format...')
for i, det in enumerate(mmcv.track_iter_progress(results)):
for i, det in enumerate(mmengine.track_iter_progress(results)):
annos = []
boxes = output_to_nusc_box(det)
sample_id = sample_id_list[i]
......@@ -536,7 +534,7 @@ class NuScenesMetric(BaseMetric):
'meta': self.modality,
'results': nusc_annos,
}
mmcv.mkdir_or_exist(jsonfile_prefix)
mmengine.mkdir_or_exist(jsonfile_prefix)
res_path = osp.join(jsonfile_prefix, 'results_nusc.json')
print('Results writes to', res_path)
mmengine.dump(nusc_submissions, res_path)
......
......@@ -3,13 +3,11 @@ import tempfile
from os import path as osp
from typing import Dict, List, Optional, Union
import mmcv
import mmengine
import numpy as np
import torch
from mmcv.utils import print_log
from mmengine import load
from mmengine.logging import MMLogger
from mmengine import Config, load
from mmengine.logging import MMLogger, print_log
from mmdet3d.models.layers import box3d_multiclass_nms
from mmdet3d.registry import METRICS
......@@ -271,7 +269,6 @@ class WaymoMetric(KittiMetric):
score_thr=0.001,
min_bbox_size=0,
max_per_frame=100)
from mmcv import Config
nms_cfg = Config(nms_cfg)
lidar_boxes3d = LiDARInstance3DBoxes(
torch.from_numpy(box_dict['box3d_lidar']).cuda())
......@@ -332,12 +329,12 @@ class WaymoMetric(KittiMetric):
assert len(net_outputs) == len(self.data_infos), \
'invalid list length of network outputs'
if submission_prefix is not None:
mmcv.mkdir_or_exist(submission_prefix)
mmengine.mkdir_or_exist(submission_prefix)
det_annos = []
print('\nConverting prediction to KITTI format')
for idx, pred_dicts in enumerate(
mmcv.track_iter_progress(net_outputs)):
mmengine.track_iter_progress(net_outputs)):
annos = []
sample_idx = sample_id_list[idx]
info = self.data_infos[sample_idx]
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment