Skip to content

Commit 9fdfde3

Browse files
iChizer0dependabot[bot]LynnL4nullptr
authored
refactor: optimize preprocess (#227)
* build(deps-dev): bump vitepress from 1.0.0-rc.40 to 1.0.0-rc.44 Bumps [vitepress](https://github.com/vuejs/vitepress) from 1.0.0-rc.40 to 1.0.0-rc.44. - [Release notes](https://github.com/vuejs/vitepress/releases) - [Changelog](https://github.com/vuejs/vitepress/blob/main/CHANGELOG.md) - [Commits](vuejs/vitepress@v1.0.0-rc.40...v1.0.0-rc.44) --- updated-dependencies: - dependency-name: vitepress dependency-type: direct:development update-type: version-update:semver-patch ... * feat: add support for sensor data classification * build(deps-dev): bump vitepress from 1.0.0-rc.44 to 1.0.1 Bumps [vitepress](https://github.com/vuejs/vitepress) from 1.0.0-rc.44 to 1.0.1. - [Release notes](https://github.com/vuejs/vitepress/releases) - [Changelog](https://github.com/vuejs/vitepress/blob/main/CHANGELOG.md) - [Commits](vuejs/vitepress@v1.0.0-rc.44...v1.0.1) --- updated-dependencies: - dependency-name: vitepress dependency-type: direct:development update-type: version-update:semver-patch ... * build(deps-dev): bump vitepress from 1.0.1 to 1.1.4 Bumps [vitepress](https://github.com/vuejs/vitepress) from 1.0.1 to 1.1.4. - [Release notes](https://github.com/vuejs/vitepress/releases) - [Changelog](https://github.com/vuejs/vitepress/blob/main/CHANGELOG.md) - [Commits](vuejs/vitepress@v1.0.1...v1.1.4) --- updated-dependencies: - dependency-name: vitepress dependency-type: direct:development update-type: version-update:semver-minor ... * refactor: async copy between device and cpu * refactor: async copy in data preprocess * refactor: cached mosaic * refactor: replace transform modules from mmyolo * chore: register modified modules * chore: update configs * fix: epochs --------- Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: LynnL4 <[email protected]> Co-authored-by: nullptr <nullptr@localhost> Co-authored-by: Hongtai Liu <[email protected]>
1 parent f67a9a8 commit 9fdfde3

24 files changed

+2587
-561
lines changed

configs/accelerometer/3axes_accelerometer_62.5Hz_1s_classify.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# Copyright (c) Seeed Technology Co.,Ltd. All rights reserved.
2+
23
_base_ = './base.py'
34

45
default_scope = 'sscma'

configs/accelerometer/base.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
# Copyright (c) Seeed Technology Co.,Ltd. All rights reserved.
2+
23
_base_ = '../_base_/default_runtime_cls.py'
34

45
# defaults input type image

configs/swift_yolo/base_arch.py

Lines changed: 57 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,11 @@
4040
# Number of input data per iteration in the model training phase
4141
batch = 16
4242
# Number of threads used to load data during training, this value should be adjusted accordingly to the training batch
43-
workers = 4
43+
workers = 16
44+
# Whether to use cached data when performing data augmentation
45+
use_cached = True
46+
# The maximum number of cached images
47+
max_cached_images = 4096
4448
# Optimizer weight decay value
4549
weight_decay = 0.0005
4650
# SGD momentum/Adam beta1
@@ -49,6 +53,8 @@
4953
lr_factor = 0.01
5054
# persistent_workers must be False if num_workers is 0
5155
persistent_workers = True
56+
# Disable mosaic augmentation for final 10 epochs (stage 2)
57+
close_mosaic_epochs = 15
5258

5359
# VAL
5460
# Batch size of a single GPU during validation
@@ -116,7 +122,7 @@
116122
model = dict(
117123
type='sscma.YOLODetector',
118124
data_preprocessor=dict(
119-
type='mmdet.DetDataPreprocessor', mean=[0.0, 0.0, 0.0], std=[255.0, 255.0, 255.0], bgr_to_rgb=True
125+
type='sscma.DetDataPreprocessor', mean=[0.0, 0.0, 0.0], std=[255.0, 255.0, 255.0], bgr_to_rgb=True
120126
),
121127
backbone=dict(
122128
type='YOLOv5CSPDarknet',
@@ -183,32 +189,58 @@
183189

184190
pre_transform = [
185191
dict(type='LoadImageFromFile', file_client_args=dict(backend='disk')),
186-
dict(type='LoadAnnotations', with_bbox=True),
192+
dict(type='sscma.YOLOLoadAnnotations', with_bbox=True),
193+
]
194+
195+
last_transform = [
196+
dict(
197+
type='mmdet.Albu',
198+
transforms=albu_train_transforms,
199+
bbox_params=dict(type='BboxParams', format='pascal_voc', label_fields=['gt_bboxes_labels', 'gt_ignore_flags']),
200+
keymap={'img': 'image', 'gt_bboxes': 'bboxes'},
201+
),
202+
dict(type='sscma.YOLOv5HSVRandomAug'),
203+
dict(type='mmdet.RandomFlip', prob=0.5),
204+
dict(
205+
type='mmdet.PackDetInputs', meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', 'flip', 'flip_direction')
206+
),
187207
]
188208

189209
train_pipeline = [
190210
*pre_transform,
191-
dict(type='Mosaic', img_scale=imgsz, pad_val=114.0, pre_transform=pre_transform),
192211
dict(
193-
type='YOLOv5RandomAffine',
212+
type='sscma.Mosaic',
213+
img_scale=imgsz,
214+
pad_val=114.0,
215+
use_cached=use_cached,
216+
max_cached_images=max_cached_images,
217+
),
218+
dict(
219+
type='sscma.YOLOv5RandomAffine',
194220
max_rotate_degree=0.0,
195221
max_shear_degree=0.0,
196222
scaling_ratio_range=(1 - affine_scale, 1 + affine_scale),
197223
# imgsz is (width, height)
198224
border=(-imgsz[0] // 2, -imgsz[1] // 2),
199225
border_val=(114, 114, 114),
200226
),
227+
*last_transform,
228+
]
229+
230+
train_pipeline_stage2 = [
231+
*pre_transform,
232+
dict(type='sscma.YOLOv5KeepRatioResize', scale=imgsz),
233+
dict(type='sscma.LetterResize', scale=imgsz, allow_scale_up=True, pad_val=dict(img=114.0)),
201234
dict(
202-
type='mmdet.Albu',
203-
transforms=albu_train_transforms,
204-
bbox_params=dict(type='BboxParams', format='pascal_voc', label_fields=['gt_bboxes_labels', 'gt_ignore_flags']),
205-
keymap={'img': 'image', 'gt_bboxes': 'bboxes'},
206-
),
207-
dict(type='YOLOv5HSVRandomAug'),
208-
dict(type='mmdet.RandomFlip', prob=0.5),
209-
dict(
210-
type='mmdet.PackDetInputs', meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', 'flip', 'flip_direction')
235+
type='sscma.YOLOv5RandomAffine',
236+
max_rotate_degree=0.0,
237+
max_shear_degree=0.0,
238+
scaling_ratio_range=(1 - affine_scale, 1 + affine_scale),
239+
# imgsz is (width, height)
240+
border=(-imgsz[0] // 2, -imgsz[1] // 2),
241+
border_val=(114, 114, 114),
211242
),
243+
*last_transform,
212244
]
213245

214246
train_dataloader = dict(
@@ -227,11 +259,12 @@
227259
),
228260
)
229261

262+
230263
test_pipeline = [
231-
dict(type='LoadImageFromFile', file_client_args=dict(backend='disk')),
232-
dict(type='YOLOv5KeepRatioResize', scale=imgsz),
233-
dict(type='LetterResize', scale=imgsz, allow_scale_up=False, pad_val=dict(img=114)),
234-
dict(type='LoadAnnotations', with_bbox=True, _scope_='mmdet'),
264+
dict(type='sscma.LoadImageFromFile', file_client_args=dict(backend='disk')),
265+
dict(type='sscma.YOLOv5KeepRatioResize', scale=imgsz),
266+
dict(type='sscma.LetterResize', scale=imgsz, allow_scale_up=False, pad_val=dict(img=114)),
267+
dict(type='sscma.LoadAnnotations', with_bbox=True, _scope_='mmdet'),
235268
dict(
236269
type='mmdet.PackDetInputs',
237270
meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', 'scale_factor', 'pad_param'),
@@ -277,7 +310,12 @@
277310
custom_hooks = [
278311
dict(
279312
type='EMAHook', ema_type='ExpMomentumEMA', momentum=0.0001, update_buffers=True, strict_load=False, priority=49
280-
)
313+
),
314+
dict(
315+
type='mmdet.PipelineSwitchHook',
316+
switch_epoch=epochs - close_mosaic_epochs,
317+
switch_pipeline=train_pipeline_stage2,
318+
),
281319
]
282320

283321
val_evaluator = dict(type='mmdet.CocoMetric', proposal_nums=(100, 1, 10), ann_file=data_root + val_ann, metric='bbox')

configs/swift_yolo/swift_yolo_large_1xb16_300e_coco.py

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
height = 640
2020
width = 640
2121
batch = 16
22-
workers = 2
22+
workers = 16
23+
use_cached = True
24+
max_cached_images = 4096
2325
val_batch = batch
2426
val_workers = workers
2527
imgsz = (width, height)
@@ -83,32 +85,58 @@
8385

8486
pre_transform = [
8587
dict(type='LoadImageFromFile', file_client_args=dict(backend='disk')),
86-
dict(type='LoadAnnotations', with_bbox=True),
88+
dict(type='sscma.YOLOLoadAnnotations', with_bbox=True),
89+
]
90+
91+
last_transform = [
92+
dict(
93+
type='mmdet.Albu',
94+
transforms=albu_train_transforms,
95+
bbox_params=dict(type='BboxParams', format='pascal_voc', label_fields=['gt_bboxes_labels', 'gt_ignore_flags']),
96+
keymap={'img': 'image', 'gt_bboxes': 'bboxes'},
97+
),
98+
dict(type='sscma.YOLOv5HSVRandomAug'),
99+
dict(type='mmdet.RandomFlip', prob=0.5),
100+
dict(
101+
type='mmdet.PackDetInputs', meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', 'flip', 'flip_direction')
102+
),
87103
]
88104

89105
train_pipeline = [
90106
*pre_transform,
91-
dict(type='Mosaic', img_scale=imgsz, pad_val=114.0, pre_transform=pre_transform),
92107
dict(
93-
type='YOLOv5RandomAffine',
108+
type='sscma.Mosaic',
109+
img_scale=imgsz,
110+
pad_val=114.0,
111+
use_cached=use_cached,
112+
max_cached_images=max_cached_images,
113+
),
114+
dict(
115+
type='sscma.YOLOv5RandomAffine',
94116
max_rotate_degree=0.0,
95117
max_shear_degree=0.0,
96118
scaling_ratio_range=(1 - affine_scale, 1 + affine_scale),
97119
# imgsz is (width, height)
98120
border=(-imgsz[0] // 2, -imgsz[1] // 2),
99121
border_val=(114, 114, 114),
100122
),
123+
*last_transform,
124+
]
125+
126+
train_pipeline_stage2 = [
127+
*pre_transform,
128+
dict(type='sscma.YOLOv5KeepRatioResize', scale=imgsz),
129+
dict(type='sscma.LetterResize', scale=imgsz, allow_scale_up=True, pad_val=dict(img=114.0)),
101130
dict(
102-
type='mmdet.Albu',
103-
transforms=albu_train_transforms,
104-
bbox_params=dict(type='BboxParams', format='pascal_voc', label_fields=['gt_bboxes_labels', 'gt_ignore_flags']),
105-
keymap={'img': 'image', 'gt_bboxes': 'bboxes'},
106-
),
107-
dict(type='YOLOv5HSVRandomAug'),
108-
dict(type='mmdet.RandomFlip', prob=0.5),
109-
dict(
110-
type='mmdet.PackDetInputs', meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', 'flip', 'flip_direction')
131+
type='sscma.YOLOv5RandomAffine',
132+
max_rotate_degree=0.0,
133+
max_shear_degree=0.0,
134+
scaling_ratio_range=(1 - affine_scale, 1 + affine_scale),
135+
# imgsz is (width, height)
136+
border=(-imgsz[0] // 2, -imgsz[1] // 2),
137+
border_val=(114, 114, 114),
111138
),
139+
*last_transform,
112140
]
113141

114142
train_dataloader = dict(

configs/swift_yolo/swift_yolo_mb2_1xb16_300e_coco.py

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@
3535
# batch
3636
batch = 8
3737
# workers
38-
workers = 2
38+
workers = 8
39+
use_cached = True
40+
max_cached_images = 4096
3941
# Batch size of a single GPU during validation
4042
val_batch = 1
4143
# Worker to pre-fetch data for each single GPU during validation
@@ -181,32 +183,58 @@
181183

182184
pre_transform = [
183185
dict(type='LoadImageFromFile', file_client_args=dict(backend='disk')),
184-
dict(type='LoadAnnotations', with_bbox=True),
186+
dict(type='sscma.YOLOLoadAnnotations', with_bbox=True),
187+
]
188+
189+
last_transform = [
190+
dict(
191+
type='mmdet.Albu',
192+
transforms=albu_train_transforms,
193+
bbox_params=dict(type='BboxParams', format='pascal_voc', label_fields=['gt_bboxes_labels', 'gt_ignore_flags']),
194+
keymap={'img': 'image', 'gt_bboxes': 'bboxes'},
195+
),
196+
dict(type='sscma.YOLOv5HSVRandomAug'),
197+
dict(type='mmdet.RandomFlip', prob=0.5),
198+
dict(
199+
type='mmdet.PackDetInputs', meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', 'flip', 'flip_direction')
200+
),
185201
]
186202

187203
train_pipeline = [
188204
*pre_transform,
189-
dict(type='Mosaic', img_scale=imgsz, pad_val=114.0, pre_transform=pre_transform),
190205
dict(
191-
type='YOLOv5RandomAffine',
206+
type='sscma.Mosaic',
207+
img_scale=imgsz,
208+
pad_val=114.0,
209+
use_cached=use_cached,
210+
max_cached_images=max_cached_images,
211+
),
212+
dict(
213+
type='sscma.YOLOv5RandomAffine',
192214
max_rotate_degree=0.0,
193215
max_shear_degree=0.0,
194216
scaling_ratio_range=(1 - affine_scale, 1 + affine_scale),
195217
# imgsz is (width, height)
196218
border=(-imgsz[0] // 2, -imgsz[1] // 2),
197219
border_val=(114, 114, 114),
198220
),
221+
*last_transform,
222+
]
223+
224+
train_pipeline_stage2 = [
225+
*pre_transform,
226+
dict(type='sscma.YOLOv5KeepRatioResize', scale=imgsz),
227+
dict(type='sscma.LetterResize', scale=imgsz, allow_scale_up=True, pad_val=dict(img=114.0)),
199228
dict(
200-
type='mmdet.Albu',
201-
transforms=albu_train_transforms,
202-
bbox_params=dict(type='BboxParams', format='pascal_voc', label_fields=['gt_bboxes_labels', 'gt_ignore_flags']),
203-
keymap={'img': 'image', 'gt_bboxes': 'bboxes'},
204-
),
205-
dict(type='YOLOv5HSVRandomAug'),
206-
dict(type='mmdet.RandomFlip', prob=0.5),
207-
dict(
208-
type='mmdet.PackDetInputs', meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', 'flip', 'flip_direction')
229+
type='sscma.YOLOv5RandomAffine',
230+
max_rotate_degree=0.0,
231+
max_shear_degree=0.0,
232+
scaling_ratio_range=(1 - affine_scale, 1 + affine_scale),
233+
# imgsz is (width, height)
234+
border=(-imgsz[0] // 2, -imgsz[1] // 2),
235+
border_val=(114, 114, 114),
209236
),
237+
*last_transform,
210238
]
211239

212240
train_dataloader = dict(

configs/swift_yolo/swift_yolo_medium_1xb16_300e_coco.py

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@
1919
height = 640
2020
width = 640
2121
batch = 16
22-
workers = 2
22+
workers = 16
23+
use_cached = True
24+
max_cached_images = 4096
2325
val_batch = batch
2426
val_workers = workers
2527
imgsz = (width, height)
@@ -83,32 +85,58 @@
8385

8486
pre_transform = [
8587
dict(type='LoadImageFromFile', file_client_args=dict(backend='disk')),
86-
dict(type='LoadAnnotations', with_bbox=True),
88+
dict(type='sscma.YOLOLoadAnnotations', with_bbox=True),
89+
]
90+
91+
last_transform = [
92+
dict(
93+
type='mmdet.Albu',
94+
transforms=albu_train_transforms,
95+
bbox_params=dict(type='BboxParams', format='pascal_voc', label_fields=['gt_bboxes_labels', 'gt_ignore_flags']),
96+
keymap={'img': 'image', 'gt_bboxes': 'bboxes'},
97+
),
98+
dict(type='sscma.YOLOv5HSVRandomAug'),
99+
dict(type='mmdet.RandomFlip', prob=0.5),
100+
dict(
101+
type='mmdet.PackDetInputs', meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', 'flip', 'flip_direction')
102+
),
87103
]
88104

89105
train_pipeline = [
90106
*pre_transform,
91-
dict(type='Mosaic', img_scale=imgsz, pad_val=114.0, pre_transform=pre_transform),
92107
dict(
93-
type='YOLOv5RandomAffine',
108+
type='sscma.Mosaic',
109+
img_scale=imgsz,
110+
pad_val=114.0,
111+
use_cached=use_cached,
112+
max_cached_images=max_cached_images,
113+
),
114+
dict(
115+
type='sscma.YOLOv5RandomAffine',
94116
max_rotate_degree=0.0,
95117
max_shear_degree=0.0,
96118
scaling_ratio_range=(1 - affine_scale, 1 + affine_scale),
97119
# imgsz is (width, height)
98120
border=(-imgsz[0] // 2, -imgsz[1] // 2),
99121
border_val=(114, 114, 114),
100122
),
123+
*last_transform,
124+
]
125+
126+
train_pipeline_stage2 = [
127+
*pre_transform,
128+
dict(type='sscma.YOLOv5KeepRatioResize', scale=imgsz),
129+
dict(type='sscma.LetterResize', scale=imgsz, allow_scale_up=True, pad_val=dict(img=114.0)),
101130
dict(
102-
type='mmdet.Albu',
103-
transforms=albu_train_transforms,
104-
bbox_params=dict(type='BboxParams', format='pascal_voc', label_fields=['gt_bboxes_labels', 'gt_ignore_flags']),
105-
keymap={'img': 'image', 'gt_bboxes': 'bboxes'},
106-
),
107-
dict(type='YOLOv5HSVRandomAug'),
108-
dict(type='mmdet.RandomFlip', prob=0.5),
109-
dict(
110-
type='mmdet.PackDetInputs', meta_keys=('img_id', 'img_path', 'ori_shape', 'img_shape', 'flip', 'flip_direction')
131+
type='sscma.YOLOv5RandomAffine',
132+
max_rotate_degree=0.0,
133+
max_shear_degree=0.0,
134+
scaling_ratio_range=(1 - affine_scale, 1 + affine_scale),
135+
# imgsz is (width, height)
136+
border=(-imgsz[0] // 2, -imgsz[1] // 2),
137+
border_val=(114, 114, 114),
111138
),
139+
*last_transform,
112140
]
113141

114142
train_dataloader = dict(

0 commit comments

Comments
 (0)