From 5705dab9f829aa716d1f006ab4a8ffe2c981ae2d Mon Sep 17 00:00:00 2001 From: Lee Seung Hoon Date: Wed, 14 Dec 2022 14:26:10 +0900 Subject: [PATCH] exp : hpe model configs #17 --- .../mmpose/configs/_base_/default_runtime.py | 7 +- .../_base_/default_runtime_cid_mobile.py | 25 ++ .../configs/_base_/default_runtime_hrnet.py | 25 ++ .../_base_/default_runtime_hrnet_lite1.py | 25 ++ .../myconfigs/cid_mobile_coco_512x512.py | 148 +++++++++++ .../myconfigs/hrnet_w32_coco_512x512.py | 175 +++++++++++++ .../hrnet_w32_coco_512x512_custom_dataset.py | 175 +++++++++++++ .../myconfigs/hrnet_w32_coco_512x512_lite1.py | 175 +++++++++++++ .../myconfigs/litehrnet_18_coco_256x192.py | 160 ++++++++++++ .../myconfigs/mobilenetv2_coco_256x192.py | 138 +++++++++++ .../myconfigs/mobilenetv2_coco_384x288.py | 138 +++++++++++ .../myconfigs/mobilenetv2_coco_512x512.py | 158 ++++++++++++ AI/pose-estimation/mmpose/tools/train.py | 16 +- .../mmpose/tools/train_cid_mobile.py | 213 ++++++++++++++++ .../mmpose/tools/train_hrnet_lite1.py | 213 ++++++++++++++++ .../mmpose/tools/train_hrnet_prun.py | 229 ++++++++++++++++++ 16 files changed, 2017 insertions(+), 3 deletions(-) create mode 100644 AI/pose-estimation/mmpose/configs/_base_/default_runtime_cid_mobile.py create mode 100644 AI/pose-estimation/mmpose/configs/_base_/default_runtime_hrnet.py create mode 100644 AI/pose-estimation/mmpose/configs/_base_/default_runtime_hrnet_lite1.py create mode 100644 AI/pose-estimation/mmpose/configs/myconfigs/cid_mobile_coco_512x512.py create mode 100644 AI/pose-estimation/mmpose/configs/myconfigs/hrnet_w32_coco_512x512.py create mode 100644 AI/pose-estimation/mmpose/configs/myconfigs/hrnet_w32_coco_512x512_custom_dataset.py create mode 100644 AI/pose-estimation/mmpose/configs/myconfigs/hrnet_w32_coco_512x512_lite1.py create mode 100644 AI/pose-estimation/mmpose/configs/myconfigs/litehrnet_18_coco_256x192.py create mode 100644 AI/pose-estimation/mmpose/configs/myconfigs/mobilenetv2_coco_256x192.py create mode 100644 AI/pose-estimation/mmpose/configs/myconfigs/mobilenetv2_coco_384x288.py create mode 100644 AI/pose-estimation/mmpose/configs/myconfigs/mobilenetv2_coco_512x512.py create mode 100644 AI/pose-estimation/mmpose/tools/train_cid_mobile.py create mode 100644 AI/pose-estimation/mmpose/tools/train_hrnet_lite1.py create mode 100644 AI/pose-estimation/mmpose/tools/train_hrnet_prun.py diff --git a/AI/pose-estimation/mmpose/configs/_base_/default_runtime.py b/AI/pose-estimation/mmpose/configs/_base_/default_runtime.py index 62b7ff2..4c337a6 100644 --- a/AI/pose-estimation/mmpose/configs/_base_/default_runtime.py +++ b/AI/pose-estimation/mmpose/configs/_base_/default_runtime.py @@ -4,13 +4,18 @@ interval=50, hooks=[ dict(type='TextLoggerHook'), + dict(type='WandbLoggerHook', + init_kwargs={ + 'project': 'HPE modesl', + 'entity' : 'somang', + 'name' : 'mobile_net3_bottom_up'}, + ) # dict(type='TensorboardLoggerHook') # dict(type='PaviLoggerHook') # for internal services ]) log_level = 'INFO' load_from = None -resume_from = None dist_params = dict(backend='nccl') workflow = [('train', 1)] diff --git a/AI/pose-estimation/mmpose/configs/_base_/default_runtime_cid_mobile.py b/AI/pose-estimation/mmpose/configs/_base_/default_runtime_cid_mobile.py new file mode 100644 index 0000000..d97b4e9 --- /dev/null +++ b/AI/pose-estimation/mmpose/configs/_base_/default_runtime_cid_mobile.py @@ -0,0 +1,25 @@ +checkpoint_config = dict(interval=10) + +log_config = dict( + interval=50, + hooks=[ + dict(type='TextLoggerHook'), + dict(type='WandbLoggerHook', + init_kwargs={ + 'project': 'HPE modesl', + 'entity' : 'somang', + 'name' : 'CID_mobile'}, + ) + # dict(type='TensorboardLoggerHook') + # dict(type='PaviLoggerHook') # for internal services + ]) + +log_level = 'INFO' +load_from = None +dist_params = dict(backend='nccl') +workflow = [('train', 1)] + +# disable opencv multithreading to avoid system being overloaded +opencv_num_threads = 0 +# set multi-process start method as `fork` to speed up the training +mp_start_method = 'fork' diff --git a/AI/pose-estimation/mmpose/configs/_base_/default_runtime_hrnet.py b/AI/pose-estimation/mmpose/configs/_base_/default_runtime_hrnet.py new file mode 100644 index 0000000..7a3bb7e --- /dev/null +++ b/AI/pose-estimation/mmpose/configs/_base_/default_runtime_hrnet.py @@ -0,0 +1,25 @@ +checkpoint_config = dict(interval=10) + +log_config = dict( + interval=50, + hooks=[ + dict(type='TextLoggerHook'), + dict(type='WandbLoggerHook', + init_kwargs={ + 'project': 'HPE modesl', + 'entity' : 'somang', + 'name' : 'CID_hrnet_prun'}, + ) + # dict(type='TensorboardLoggerHook') + # dict(type='PaviLoggerHook') # for internal services + ]) + +log_level = 'INFO' +load_from = None +dist_params = dict(backend='nccl') +workflow = [('train', 1)] + +# disable opencv multithreading to avoid system being overloaded +opencv_num_threads = 0 +# set multi-process start method as `fork` to speed up the training +mp_start_method = 'fork' diff --git a/AI/pose-estimation/mmpose/configs/_base_/default_runtime_hrnet_lite1.py b/AI/pose-estimation/mmpose/configs/_base_/default_runtime_hrnet_lite1.py new file mode 100644 index 0000000..e38c33e --- /dev/null +++ b/AI/pose-estimation/mmpose/configs/_base_/default_runtime_hrnet_lite1.py @@ -0,0 +1,25 @@ +checkpoint_config = dict(interval=1) + +log_config = dict( + interval=50, + hooks=[ + dict(type='TextLoggerHook'), + dict(type='WandbLoggerHook', + init_kwargs={ + 'project': 'HPE modesl', + 'entity' : 'somang', + 'name' : 'CID_hrnet_lite1'}, + ) + # dict(type='TensorboardLoggerHook') + # dict(type='PaviLoggerHook') # for internal services + ]) + +log_level = 'INFO' +load_from = None +dist_params = dict(backend='nccl') +workflow = [('train', 1)] + +# disable opencv multithreading to avoid system being overloaded +opencv_num_threads = 0 +# set multi-process start method as `fork` to speed up the training +mp_start_method = 'fork' diff --git a/AI/pose-estimation/mmpose/configs/myconfigs/cid_mobile_coco_512x512.py b/AI/pose-estimation/mmpose/configs/myconfigs/cid_mobile_coco_512x512.py new file mode 100644 index 0000000..1733fa5 --- /dev/null +++ b/AI/pose-estimation/mmpose/configs/myconfigs/cid_mobile_coco_512x512.py @@ -0,0 +1,148 @@ +_base_ = [ + '../_base_/default_runtime_cid_mobile.py', + '../_base_/datasets/coco.py' +] +checkpoint_config = dict(interval=20) +evaluation = dict(interval=20, metric='mAP', save_best='AP') + +optimizer = dict( + type='Adam', + lr=0.001, +) +optimizer_config = dict(grad_clip=None) +# learning policy +lr_config = dict(policy='step', step=[90, 120]) +total_epochs = 140 +channel_cfg = dict( + dataset_joints=17, + dataset_channel=[ + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], + ], + inference_channel=[ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 + ]) + +data_cfg = dict( + image_size=512, + base_size=256, + base_sigma=2, + heatmap_size=[128], + num_joints=channel_cfg['dataset_joints'], + dataset_channel=channel_cfg['dataset_channel'], + inference_channel=channel_cfg['inference_channel'], + num_scales=1, + scale_aware_sigma=False, + with_bbox=True, + use_nms=True, + soft_nms=False, + oks_thr=0.8, +) + +# model settings +model = dict( + type='CID', + pretrained='https://download.openmmlab.com/mmpose/' + 'pretrain_models/hrnet_w32-36af842e.pth', + backbone=dict( + backbone=dict(type='MobileNetV2', widen_factor=1., out_indices=(7, )), + ), + keypoint_head=dict( + type='CIDHead', + in_channels=480, + gfd_channels=32, + num_joints=17, + multi_hm_loss_factor=1.0, + single_hm_loss_factor=4.0, + contrastive_loss_factor=1.0, + max_train_instances=200, + prior_prob=0.01), + train_cfg=dict(), + test_cfg=dict( + num_joints=channel_cfg['dataset_joints'], + flip_test=True, + max_num_people=30, + detection_threshold=0.01, + center_pool_kernel=3)) + +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='BottomUpRandomAffine', + rot_factor=30, + scale_factor=[0.75, 1.5], + scale_type='short', + trans_factor=40), + dict(type='BottomUpRandomFlip', flip_prob=0.5), + dict(type='ToTensor'), + dict( + type='NormalizeTensor', + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]), + dict( + type='CIDGenerateTarget', + max_num_people=30, + ), + dict( + type='Collect', + keys=[ + 'img', 'multi_heatmap', 'multi_mask', 'instance_coord', + 'instance_heatmap', 'instance_mask', 'instance_valid' + ], + meta_keys=[]), +] + +val_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='BottomUpGetImgSize', test_scale_factor=[1]), + dict( + type='BottomUpResizeAlign', + transforms=[ + dict(type='ToTensor'), + dict( + type='NormalizeTensor', + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]), + ]), + dict( + type='Collect', + keys=['img'], + meta_keys=[ + 'image_file', 'aug_data', 'test_scale_factor', 'base_size', + 'center', 'scale', 'flip_index' + ]), +] + +test_pipeline = val_pipeline + +data_root = '/shared/home/navermind/coco' + +data = dict( + workers_per_gpu=2, + train_dataloader=dict(samples_per_gpu=20), + val_dataloader=dict(samples_per_gpu=1), + test_dataloader=dict(samples_per_gpu=1), + train=dict( + type='BottomUpCocoDataset', + ann_file=f'{data_root}/annotations_trainval2017/annotations/person_keypoints_train2017.json', + img_prefix=f'{data_root}/train2017/train2017', + data_cfg=data_cfg, + pipeline=train_pipeline, + dataset_info={{_base_.dataset_info}} + ), + val=dict( + type='BottomUpCocoDataset', + ann_file=f'{data_root}/annotations_trainval2017/annotations/person_keypoints_val2017.json', + img_prefix=f'{data_root}/val2017/val2017', + data_cfg=data_cfg, + pipeline=val_pipeline, + dataset_info={{_base_.dataset_info}} + ), + test=dict( + type='BottomUpCocoDataset', + ann_file=f'{data_root}/annotations_trainval2017/annotations/person_keypoints_val2017.json', + img_prefix=f'{data_root}/val2017/val2017', + data_cfg=data_cfg, + pipeline=test_pipeline, + dataset_info={{_base_.dataset_info}} + ) +) \ No newline at end of file diff --git a/AI/pose-estimation/mmpose/configs/myconfigs/hrnet_w32_coco_512x512.py b/AI/pose-estimation/mmpose/configs/myconfigs/hrnet_w32_coco_512x512.py new file mode 100644 index 0000000..86407a0 --- /dev/null +++ b/AI/pose-estimation/mmpose/configs/myconfigs/hrnet_w32_coco_512x512.py @@ -0,0 +1,175 @@ +_base_ = [ + '../_base_/default_runtime_hrnet.py', + '../_base_/datasets/coco.py' +] +checkpoint_config = dict(interval=20) +evaluation = dict(interval=20, metric='mAP', save_best='AP') + +optimizer = dict( + type='Adam', + lr=0.001, +) +optimizer_config = dict(grad_clip=None) +# learning policy +lr_config = dict(policy='step', step=[90, 120]) +total_epochs = 140 +channel_cfg = dict( + dataset_joints=17, + dataset_channel=[ + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], + ], + inference_channel=[ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 + ]) + +data_cfg = dict( + image_size=512, + base_size=256, + base_sigma=2, + heatmap_size=[128], + num_joints=channel_cfg['dataset_joints'], + dataset_channel=channel_cfg['dataset_channel'], + inference_channel=channel_cfg['inference_channel'], + num_scales=1, + scale_aware_sigma=False, + with_bbox=True, + use_nms=True, + soft_nms=False, + oks_thr=0.8, +) + +# model settings +model = dict( + type='CID', + pretrained='https://download.openmmlab.com/mmpose/' + 'pretrain_models/hrnet_w32-36af842e.pth', + backbone=dict( + type='HRNet', + in_channels=3, + extra=dict( + stage1=dict( + num_modules=1, + num_branches=1, + block='BOTTLENECK', + num_blocks=(4, ), + num_channels=(64, )), + stage2=dict( + num_modules=1, + num_branches=2, + block='BASIC', + num_blocks=(4, 4), + num_channels=(32, 64)), + stage3=dict( + num_modules=4, + num_branches=3, + block='BASIC', + num_blocks=(4, 4, 4), + num_channels=(32, 64, 128)), + stage4=dict( + num_modules=3, + num_branches=4, + block='BASIC', + num_blocks=(4, 4, 4, 4), + num_channels=(32, 64, 128, 256), + multiscale_output=True)), + ), + keypoint_head=dict( + type='CIDHead', + in_channels=480, + gfd_channels=32, + num_joints=17, + multi_hm_loss_factor=1.0, + single_hm_loss_factor=4.0, + contrastive_loss_factor=1.0, + max_train_instances=200, + prior_prob=0.01), + train_cfg=dict(), + test_cfg=dict( + num_joints=channel_cfg['dataset_joints'], + flip_test=True, + max_num_people=30, + detection_threshold=0.01, + center_pool_kernel=3)) + +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='BottomUpRandomAffine', + rot_factor=30, + scale_factor=[0.75, 1.5], + scale_type='short', + trans_factor=40), + dict(type='BottomUpRandomFlip', flip_prob=0.5), + dict(type='ToTensor'), + dict( + type='NormalizeTensor', + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]), + dict( + type='CIDGenerateTarget', + max_num_people=30, + ), + dict( + type='Collect', + keys=[ + 'img', 'multi_heatmap', 'multi_mask', 'instance_coord', + 'instance_heatmap', 'instance_mask', 'instance_valid' + ], + meta_keys=[]), +] + +val_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='BottomUpGetImgSize', test_scale_factor=[1]), + dict( + type='BottomUpResizeAlign', + transforms=[ + dict(type='ToTensor'), + dict( + type='NormalizeTensor', + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]), + ]), + dict( + type='Collect', + keys=['img'], + meta_keys=[ + 'image_file', 'aug_data', 'test_scale_factor', 'base_size', + 'center', 'scale', 'flip_index' + ]), +] + +test_pipeline = val_pipeline + +data_root = '/shared/home/navermind/coco' + +data = dict( + workers_per_gpu=2, + train_dataloader=dict(samples_per_gpu=20), + val_dataloader=dict(samples_per_gpu=1), + test_dataloader=dict(samples_per_gpu=1), + train=dict( + type='BottomUpCocoDataset', + ann_file=f'{data_root}/annotations_trainval2017/annotations/person_keypoints_train2017.json', + img_prefix=f'{data_root}/train2017/train2017', + data_cfg=data_cfg, + pipeline=train_pipeline, + dataset_info={{_base_.dataset_info}} + ), + val=dict( + type='BottomUpCocoDataset', + ann_file=f'{data_root}/annotations_trainval2017/annotations/person_keypoints_val2017.json', + img_prefix=f'{data_root}/val2017/val2017', + data_cfg=data_cfg, + pipeline=val_pipeline, + dataset_info={{_base_.dataset_info}} + ), + test=dict( + type='BottomUpCocoDataset', + ann_file=f'{data_root}/annotations_trainval2017/annotations/person_keypoints_val2017.json', + img_prefix=f'{data_root}/val2017/val2017', + data_cfg=data_cfg, + pipeline=test_pipeline, + dataset_info={{_base_.dataset_info}} + ) +) \ No newline at end of file diff --git a/AI/pose-estimation/mmpose/configs/myconfigs/hrnet_w32_coco_512x512_custom_dataset.py b/AI/pose-estimation/mmpose/configs/myconfigs/hrnet_w32_coco_512x512_custom_dataset.py new file mode 100644 index 0000000..6086013 --- /dev/null +++ b/AI/pose-estimation/mmpose/configs/myconfigs/hrnet_w32_coco_512x512_custom_dataset.py @@ -0,0 +1,175 @@ +_base_ = [ + '../_base_/default_runtime_hrnet_custom_dataset.py', + '../_base_/datasets/coco.py' +] +checkpoint_config = dict(interval=20) +evaluation = dict(interval=20, metric='mAP', save_best='AP') + +optimizer = dict( + type='Adam', + lr=0.001, +) +optimizer_config = dict(grad_clip=None) +# learning policy +lr_config = dict(policy='step', step=[90, 120]) +total_epochs = 140 +channel_cfg = dict( + dataset_joints=17, + dataset_channel=[ + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], + ], + inference_channel=[ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 + ]) + +data_cfg = dict( + image_size=512, + base_size=256, + base_sigma=2, + heatmap_size=[128], + num_joints=channel_cfg['dataset_joints'], + dataset_channel=channel_cfg['dataset_channel'], + inference_channel=channel_cfg['inference_channel'], + num_scales=1, + scale_aware_sigma=False, + with_bbox=False, + use_nms=True, + soft_nms=False, + oks_thr=0.8, +) + +# model settings +model = dict( + type='CID', + pretrained='https://download.openmmlab.com/mmpose/' + 'pretrain_models/hrnet_w32-36af842e.pth', + backbone=dict( + type='HRNet', + in_channels=3, + extra=dict( + stage1=dict( + num_modules=1, + num_branches=1, + block='BOTTLENECK', + num_blocks=(4, ), + num_channels=(64, )), + stage2=dict( + num_modules=1, + num_branches=2, + block='BASIC', + num_blocks=(4, 4), + num_channels=(32, 64)), + stage3=dict( + num_modules=4, + num_branches=3, + block='BASIC', + num_blocks=(4, 4, 4), + num_channels=(32, 64, 128)), + stage4=dict( + num_modules=3, + num_branches=4, + block='BASIC', + num_blocks=(4, 4, 4, 4), + num_channels=(32, 64, 128, 256), + multiscale_output=True)), + ), + keypoint_head=dict( + type='CIDHead', + in_channels=480, + gfd_channels=32, + num_joints=17, + multi_hm_loss_factor=1.0, + single_hm_loss_factor=4.0, + contrastive_loss_factor=1.0, + max_train_instances=200, + prior_prob=0.01), + train_cfg=dict(), + test_cfg=dict( + num_joints=channel_cfg['dataset_joints'], + flip_test=True, + max_num_people=30, + detection_threshold=0.01, + center_pool_kernel=3)) + +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='BottomUpRandomAffine', + rot_factor=30, + scale_factor=[0.75, 1.5], + scale_type='short', + trans_factor=40), + dict(type='BottomUpRandomFlip', flip_prob=0.5), + dict(type='ToTensor'), + dict( + type='NormalizeTensor', + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]), + dict( + type='CIDGenerateTarget', + max_num_people=30, + ), + dict( + type='Collect', + keys=[ + 'img', 'multi_heatmap', 'multi_mask', 'instance_coord', + 'instance_heatmap', 'instance_mask', 'instance_valid' + ], + meta_keys=[]), +] + +val_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='BottomUpGetImgSize', test_scale_factor=[1]), + dict( + type='BottomUpResizeAlign', + transforms=[ + dict(type='ToTensor'), + dict( + type='NormalizeTensor', + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]), + ]), + dict( + type='Collect', + keys=['img'], + meta_keys=[ + 'image_file', 'aug_data', 'test_scale_factor', 'base_size', + 'center', 'scale', 'flip_index' + ]), +] + +test_pipeline = val_pipeline + +data_root = '/shared/home/navermind/Training_data' + +data = dict( + workers_per_gpu=2, + train_dataloader=dict(samples_per_gpu=20), + val_dataloader=dict(samples_per_gpu=1), + test_dataloader=dict(samples_per_gpu=1), + train=dict( + type='BottomUpCocoDataset', + ann_file=f'{data_root}/dataset/train_labels/train_coco_fitness.json', + img_prefix=f'{data_root}', + data_cfg=data_cfg, + pipeline=train_pipeline, + dataset_info={{_base_.dataset_info}} + ), + val=dict( + type='BottomUpCocoDataset', + ann_file=f'{data_root}/dataset/val_labels/val_coco_fitness.json', + img_prefix=f'{data_root}', + data_cfg=data_cfg, + pipeline=val_pipeline, + dataset_info={{_base_.dataset_info}} + ), + test=dict( + type='BottomUpCocoDataset', + ann_file=f'{data_root}/dataset/val_labels/val_coco_fitness.json', + img_prefix=f'{data_root}', + data_cfg=data_cfg, + pipeline=test_pipeline, + dataset_info={{_base_.dataset_info}} + ) +) \ No newline at end of file diff --git a/AI/pose-estimation/mmpose/configs/myconfigs/hrnet_w32_coco_512x512_lite1.py b/AI/pose-estimation/mmpose/configs/myconfigs/hrnet_w32_coco_512x512_lite1.py new file mode 100644 index 0000000..e4a89bc --- /dev/null +++ b/AI/pose-estimation/mmpose/configs/myconfigs/hrnet_w32_coco_512x512_lite1.py @@ -0,0 +1,175 @@ +_base_ = [ + '../_base_/default_runtime_litehrnet.py', + '../_base_/datasets/coco.py' +] +checkpoint_config = dict(interval=1) +evaluation = dict(interval=1, metric='mAP', save_best='AP') + +optimizer = dict( + type='Adam', + lr=0.001, +) +optimizer_config = dict(grad_clip=None) +# learning policy +lr_config = dict(policy='step', step=[90, 120]) +total_epochs = 140 +channel_cfg = dict( + dataset_joints=17, + dataset_channel=[ + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], + ], + inference_channel=[ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 + ]) + +data_cfg = dict( + image_size=[192, 256], + base_size=256, + base_sigma=2, + heatmap_size=[48, 64], + num_joints=channel_cfg['dataset_joints'], + dataset_channel=channel_cfg['dataset_channel'], + inference_channel=channel_cfg['inference_channel'], + num_scales=1, + scale_aware_sigma=False, + with_bbox=True, + use_nms=True, + soft_nms=False, + oks_thr=0.8, +) + +# model settings +model = dict( + type='CID', + pretrained='https://download.openmmlab.com/mmpose/' + 'pretrain_models/hrnet_w32-36af842e.pth', + backbone=dict( + type='HRNet', + in_channels=3, + extra=dict( + stage1=dict( + num_modules=1, + num_branches=1, + block='BOTTLENECK', + num_blocks=(4, ), + num_channels=(64, )), + stage2=dict( + num_modules=1, + num_branches=2, + block='BASIC', + num_blocks=(4, 4), + num_channels=(32, 64)), + stage3=dict( + num_modules=4, + num_branches=3, + block='BASIC', + num_blocks=(4, 4, 4), + num_channels=(32, 64, 128)), + stage4=dict( + num_modules=3, + num_branches=4, + block='BASIC', + num_blocks=(4, 4, 4, 4), + num_channels=(32, 64, 128, 256), + multiscale_output=True)), + ), + keypoint_head=dict( + type='CIDHead', + in_channels=480, + gfd_channels=32, + num_joints=17, + multi_hm_loss_factor=1.0, + single_hm_loss_factor=4.0, + contrastive_loss_factor=1.0, + max_train_instances=200, + prior_prob=0.01), + train_cfg=dict(), + test_cfg=dict( + num_joints=channel_cfg['dataset_joints'], + flip_test=True, + max_num_people=30, + detection_threshold=0.01, + center_pool_kernel=3)) + +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='BottomUpRandomAffine', + rot_factor=30, + scale_factor=[0.75, 1.5], + scale_type='short', + trans_factor=40), + dict(type='BottomUpRandomFlip', flip_prob=0.5), + dict(type='ToTensor'), + dict( + type='NormalizeTensor', + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]), + dict( + type='CIDGenerateTarget', + max_num_people=30, + ), + dict( + type='Collect', + keys=[ + 'img', 'multi_heatmap', 'multi_mask', 'instance_coord', + 'instance_heatmap', 'instance_mask', 'instance_valid' + ], + meta_keys=[]), +] + +val_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='BottomUpGetImgSize', test_scale_factor=[1]), + dict( + type='BottomUpResizeAlign', + transforms=[ + dict(type='ToTensor'), + dict( + type='NormalizeTensor', + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]), + ]), + dict( + type='Collect', + keys=['img'], + meta_keys=[ + 'image_file', 'aug_data', 'test_scale_factor', 'base_size', + 'center', 'scale', 'flip_index' + ]), +] + +test_pipeline = val_pipeline + +data_root = '/shared/home/navermind/coco' + +data = dict( + workers_per_gpu=2, + train_dataloader=dict(samples_per_gpu=20), + val_dataloader=dict(samples_per_gpu=1), + test_dataloader=dict(samples_per_gpu=1), + train=dict( + type='BottomUpCocoDataset', + ann_file=f'{data_root}/annotations_trainval2017/annotations/person_keypoints_train2017.json', + img_prefix=f'{data_root}/train2017/train2017', + data_cfg=data_cfg, + pipeline=train_pipeline, + dataset_info={{_base_.dataset_info}} + ), + val=dict( + type='BottomUpCocoDataset', + ann_file=f'{data_root}/annotations_trainval2017/annotations/person_keypoints_val2017.json', + img_prefix=f'{data_root}/val2017/val2017', + data_cfg=data_cfg, + pipeline=val_pipeline, + dataset_info={{_base_.dataset_info}} + ), + test=dict( + type='BottomUpCocoDataset', + ann_file=f'{data_root}/annotations_trainval2017/annotations/person_keypoints_val2017.json', + img_prefix=f'{data_root}/val2017/val2017', + data_cfg=data_cfg, + pipeline=test_pipeline, + dataset_info={{_base_.dataset_info}} + ) +) \ No newline at end of file diff --git a/AI/pose-estimation/mmpose/configs/myconfigs/litehrnet_18_coco_256x192.py b/AI/pose-estimation/mmpose/configs/myconfigs/litehrnet_18_coco_256x192.py new file mode 100644 index 0000000..5103658 --- /dev/null +++ b/AI/pose-estimation/mmpose/configs/myconfigs/litehrnet_18_coco_256x192.py @@ -0,0 +1,160 @@ +_base_ = [ + '../_base_/default_runtime_hrnet_lite1.py', + '../_base_/datasets/coco.py' +] +evaluation = dict(interval=1, metric='mAP', save_best='AP') + +optimizer = dict( + type='Adam', + lr=5e-4, +) +optimizer_config = dict(grad_clip=None) +# learning policy +lr_config = dict( + policy='step', + warmup='linear', + warmup_iters=500, + warmup_ratio=0.001, + step=[170, 200]) +total_epochs = 210 +channel_cfg = dict( + num_output_channels=17, + dataset_joints=17, + dataset_channel=[ + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], + ], + inference_channel=[ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 + ]) + +# model settings +model = dict( + type='TopDown', + pretrained=None, + backbone=dict( + type='LiteHRNet', + in_channels=3, + extra=dict( + stem=dict(stem_channels=32, out_channels=32, expand_ratio=1), + num_stages=3, + stages_spec=dict( + num_modules=(2, 4, 2), + num_branches=(2, 3, 4), + num_blocks=(2, 2, 2), + module_type=('LITE', 'LITE', 'LITE'), + with_fuse=(True, True, True), + reduce_ratios=(8, 8, 8), + num_channels=( + (40, 80), + (40, 80, 160), + (40, 80, 160, 320), + )), + with_head=True, + )), + keypoint_head=dict( + type='TopdownHeatmapSimpleHead', + in_channels=40, + out_channels=channel_cfg['num_output_channels'], + num_deconv_layers=0, + extra=dict(final_conv_kernel=1, ), + loss_keypoint=dict(type='JointsMSELoss', use_target_weight=True)), + train_cfg=dict(), + test_cfg=dict( + flip_test=True, + post_process='default', + shift_heatmap=True, + modulate_kernel=11)) + +data_cfg = dict( + image_size=[192, 256], + heatmap_size=[48, 64], + num_output_channels=channel_cfg['num_output_channels'], + num_joints=channel_cfg['dataset_joints'], + dataset_channel=channel_cfg['dataset_channel'], + inference_channel=channel_cfg['inference_channel'], + soft_nms=False, + nms_thr=1.0, + oks_thr=0.9, + vis_thr=0.2, + use_gt_bbox=False, + det_bbox_thr=0.0, + bbox_file='/shared/home/navermind/coco/person_detection_results/person_detection_results/' + 'COCO_val2017_detections_AP_H_56_person.json', +) + +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='TopDownGetBboxCenterScale', padding=1.25), + dict(type='TopDownRandomShiftBboxCenter', shift_factor=0.16, prob=0.3), + dict(type='TopDownRandomFlip', flip_prob=0.5), + dict( + type='TopDownHalfBodyTransform', + num_joints_half_body=8, + prob_half_body=0.3), + dict( + type='TopDownGetRandomScaleRotation', rot_factor=30, + scale_factor=0.25), + dict(type='TopDownAffine'), + dict(type='ToTensor'), + dict( + type='NormalizeTensor', + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]), + dict(type='TopDownGenerateTarget', sigma=2), + dict( + type='Collect', + keys=['img', 'target', 'target_weight'], + meta_keys=[ + 'image_file', 'joints_3d', 'joints_3d_visible', 'center', 'scale', + 'rotation', 'bbox_score', 'flip_pairs' + ]), +] + +val_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='TopDownGetBboxCenterScale', padding=1.25), + dict(type='TopDownAffine'), + dict(type='ToTensor'), + dict( + type='NormalizeTensor', + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]), + dict( + type='Collect', + keys=['img'], + meta_keys=[ + 'image_file', 'center', 'scale', 'rotation', 'bbox_score', + 'flip_pairs' + ]), +] + +test_pipeline = val_pipeline + +data_root = '/shared/home/navermind/coco' +data = dict( + samples_per_gpu=64, + workers_per_gpu=2, + val_dataloader=dict(samples_per_gpu=32), + test_dataloader=dict(samples_per_gpu=32), + train=dict( + type='TopDownCocoDataset', + ann_file=f'{data_root}/annotations_trainval2017/annotations/person_keypoints_train2017.json', + img_prefix=f'{data_root}/train2017/train2017', + data_cfg=data_cfg, + pipeline=train_pipeline, + dataset_info={{_base_.dataset_info}}), + val=dict( + type='TopDownCocoDataset', + ann_file=f'{data_root}/annotations_trainval2017/annotations/person_keypoints_val2017.json', + img_prefix=f'{data_root}/val2017/val2017', + data_cfg=data_cfg, + pipeline=val_pipeline, + dataset_info={{_base_.dataset_info}}), + test=dict( + type='TopDownCocoDataset', + ann_file=f'{data_root}/annotations_trainval2017/annotations/person_keypoints_val2017.json', + img_prefix=f'{data_root}/val2017/val2017', + data_cfg=data_cfg, + pipeline=test_pipeline, + dataset_info={{_base_.dataset_info}}), +) \ No newline at end of file diff --git a/AI/pose-estimation/mmpose/configs/myconfigs/mobilenetv2_coco_256x192.py b/AI/pose-estimation/mmpose/configs/myconfigs/mobilenetv2_coco_256x192.py new file mode 100644 index 0000000..4fce100 --- /dev/null +++ b/AI/pose-estimation/mmpose/configs/myconfigs/mobilenetv2_coco_256x192.py @@ -0,0 +1,138 @@ +_base_ = [ + '../_base_/default_runtime.py', + '../_base_/datasets/coco.py' +] +evaluation = dict(interval=10, metric='mAP', save_best='AP') + +optimizer = dict( + type='Adam', + lr=5e-4, +) +optimizer_config = dict(grad_clip=None) +# learning policy +lr_config = dict( + policy='step', + warmup='linear', + warmup_iters=500, + warmup_ratio=0.001, + step=[170, 200]) +total_epochs = 210 +channel_cfg = dict( + num_output_channels=17, + dataset_joints=17, + dataset_channel=[ + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], + ], + inference_channel=[ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 + ]) + +# model settings +model = dict( + type='TopDown', + pretrained='mmcls://mobilenet_v2', + backbone=dict(type='MobileNetV2', widen_factor=1., out_indices=(7, )), + keypoint_head=dict( + type='TopdownHeatmapSimpleHead', + in_channels=1280, + out_channels=channel_cfg['num_output_channels'], + loss_keypoint=dict(type='JointsMSELoss', use_target_weight=True)), + train_cfg=dict(), + test_cfg=dict( + flip_test=True, + post_process='default', + shift_heatmap=True, + modulate_kernel=11)) + +data_cfg = dict( + image_size=[192, 256], + heatmap_size=[48, 64], + num_output_channels=channel_cfg['num_output_channels'], + num_joints=channel_cfg['dataset_joints'], + dataset_channel=channel_cfg['dataset_channel'], + inference_channel=channel_cfg['inference_channel'], + soft_nms=False, + nms_thr=1.0, + oks_thr=0.9, + vis_thr=0.2, + use_gt_bbox=False, + det_bbox_thr=0.0, + bbox_file='/shared/home/navermind/coco/person_detection_results/person_detection_results/' + 'COCO_val2017_detections_AP_H_56_person.json', +) + +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='TopDownGetBboxCenterScale', padding=1.25), + dict(type='TopDownRandomShiftBboxCenter', shift_factor=0.16, prob=0.3), + dict(type='TopDownRandomFlip', flip_prob=0.5), + dict( + type='TopDownHalfBodyTransform', + num_joints_half_body=8, + prob_half_body=0.3), + dict( + type='TopDownGetRandomScaleRotation', rot_factor=40, scale_factor=0.5), + dict(type='TopDownAffine'), + dict(type='ToTensor'), + dict( + type='NormalizeTensor', + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]), + dict(type='TopDownGenerateTarget', sigma=2), + dict( + type='Collect', + keys=['img', 'target', 'target_weight'], + meta_keys=[ + 'image_file', 'joints_3d', 'joints_3d_visible', 'center', 'scale', + 'rotation', 'bbox_score', 'flip_pairs' + ]), +] + +val_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='TopDownGetBboxCenterScale', padding=1.25), + dict(type='TopDownAffine'), + dict(type='ToTensor'), + dict( + type='NormalizeTensor', + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]), + dict( + type='Collect', + keys=['img'], + meta_keys=[ + 'image_file', 'center', 'scale', 'rotation', 'bbox_score', + 'flip_pairs' + ]), +] + +test_pipeline = val_pipeline + +data_root = '/shared/home/navermind/coco' +data = dict( + samples_per_gpu=64, + workers_per_gpu=2, + val_dataloader=dict(samples_per_gpu=32), + test_dataloader=dict(samples_per_gpu=32), + train=dict( + type='TopDownCocoDataset', + ann_file=f'{data_root}/annotations_trainval2017/annotations/person_keypoints_train2017.json', + img_prefix=f'{data_root}/train2017/train2017/', + data_cfg=data_cfg, + pipeline=train_pipeline, + dataset_info={{_base_.dataset_info}}), + val=dict( + type='TopDownCocoDataset', + ann_file=f'{data_root}/annotations_trainval2017/annotations/person_keypoints_val2017.json', + img_prefix=f'{data_root}/val2017/val2017/', + data_cfg=data_cfg, + pipeline=val_pipeline, + dataset_info={{_base_.dataset_info}}), + test=dict( + type='TopDownCocoDataset', + ann_file=f'{data_root}/annotations_trainval2017/annotations/person_keypoints_val2017.json', + img_prefix=f'{data_root}/val2017/val2017/', + data_cfg=data_cfg, + pipeline=test_pipeline, + dataset_info={{_base_.dataset_info}}), +) diff --git a/AI/pose-estimation/mmpose/configs/myconfigs/mobilenetv2_coco_384x288.py b/AI/pose-estimation/mmpose/configs/myconfigs/mobilenetv2_coco_384x288.py new file mode 100644 index 0000000..1fa667e --- /dev/null +++ b/AI/pose-estimation/mmpose/configs/myconfigs/mobilenetv2_coco_384x288.py @@ -0,0 +1,138 @@ +_base_ = [ + '../_base_/default_runtime.py', + '../_base_/datasets/coco.py' +] +evaluation = dict(interval=10, metric='mAP', save_best='AP') + +optimizer = dict( + type='Adam', + lr=5e-4, +) +optimizer_config = dict(grad_clip=None) +# learning policy +lr_config = dict( + policy='step', + warmup='linear', + warmup_iters=500, + warmup_ratio=0.001, + step=[170, 200]) +total_epochs = 210 +channel_cfg = dict( + num_output_channels=17, + dataset_joints=17, + dataset_channel=[ + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], + ], + inference_channel=[ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 + ]) + +# model settings +model = dict( + type='TopDown', + pretrained='mmcls://mobilenet_v2', + backbone=dict(type='MobileNetV2', widen_factor=1., out_indices=(7, )), + keypoint_head=dict( + type='TopdownHeatmapSimpleHead', + in_channels=1280, + out_channels=channel_cfg['num_output_channels'], + loss_keypoint=dict(type='JointsMSELoss', use_target_weight=True)), + train_cfg=dict(), + test_cfg=dict( + flip_test=True, + post_process='default', + shift_heatmap=True, + modulate_kernel=11)) + +data_cfg = dict( + image_size=[288, 384], + heatmap_size=[72, 96], + num_output_channels=channel_cfg['num_output_channels'], + num_joints=channel_cfg['dataset_joints'], + dataset_channel=channel_cfg['dataset_channel'], + inference_channel=channel_cfg['inference_channel'], + soft_nms=False, + nms_thr=1.0, + oks_thr=0.9, + vis_thr=0.2, + use_gt_bbox=False, + det_bbox_thr=0.0, + bbox_file='/shared/home/navermind/coco/person_detection_results/' + 'COCO_val2017_detections_AP_H_56_person.json', +) + +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='TopDownGetBboxCenterScale', padding=1.25), + dict(type='TopDownRandomShiftBboxCenter', shift_factor=0.16, prob=0.3), + dict(type='TopDownRandomFlip', flip_prob=0.5), + dict( + type='TopDownHalfBodyTransform', + num_joints_half_body=8, + prob_half_body=0.3), + dict( + type='TopDownGetRandomScaleRotation', rot_factor=40, scale_factor=0.5), + dict(type='TopDownAffine'), + dict(type='ToTensor'), + dict( + type='NormalizeTensor', + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]), + dict(type='TopDownGenerateTarget', sigma=3), + dict( + type='Collect', + keys=['img', 'target', 'target_weight'], + meta_keys=[ + 'image_file', 'joints_3d', 'joints_3d_visible', 'center', 'scale', + 'rotation', 'bbox_score', 'flip_pairs' + ]), +] + +val_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='TopDownGetBboxCenterScale', padding=1.25), + dict(type='TopDownAffine'), + dict(type='ToTensor'), + dict( + type='NormalizeTensor', + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]), + dict( + type='Collect', + keys=['img'], + meta_keys=[ + 'image_file', 'center', 'scale', 'rotation', 'bbox_score', + 'flip_pairs' + ]), +] + +test_pipeline = val_pipeline + +data_root = '/shared/home/navermind/coco' +data = dict( + samples_per_gpu=64, + workers_per_gpu=2, + val_dataloader=dict(samples_per_gpu=32), + test_dataloader=dict(samples_per_gpu=32), + train=dict( + type='TopDownCocoDataset', + ann_file=f'{data_root}/annotations/person_keypoints_train2017.json', + img_prefix=f'{data_root}/train2017/', + data_cfg=data_cfg, + pipeline=train_pipeline, + dataset_info={{_base_.dataset_info}}), + val=dict( + type='TopDownCocoDataset', + ann_file=f'{data_root}/annotations/person_keypoints_val2017.json', + img_prefix=f'{data_root}/val2017/', + data_cfg=data_cfg, + pipeline=val_pipeline, + dataset_info={{_base_.dataset_info}}), + test=dict( + type='TopDownCocoDataset', + ann_file=f'{data_root}/annotations/person_keypoints_val2017.json', + img_prefix=f'{data_root}/val2017/', + data_cfg=data_cfg, + pipeline=test_pipeline, + dataset_info={{_base_.dataset_info}}), +) diff --git a/AI/pose-estimation/mmpose/configs/myconfigs/mobilenetv2_coco_512x512.py b/AI/pose-estimation/mmpose/configs/myconfigs/mobilenetv2_coco_512x512.py new file mode 100644 index 0000000..f4e94e1 --- /dev/null +++ b/AI/pose-estimation/mmpose/configs/myconfigs/mobilenetv2_coco_512x512.py @@ -0,0 +1,158 @@ +_base_ = [ + '../_base_/default_runtime.py', + '../_base_/datasets/coco.py' +] +checkpoint_config = dict(interval=50) +evaluation = dict(interval=50, metric='mAP', save_best='AP') + +optimizer = dict( + type='Adam', + lr=0.0015, +) +optimizer_config = dict(grad_clip=None) +# learning policy +lr_config = dict( + policy='step', + warmup='linear', + warmup_iters=500, + warmup_ratio=0.001, + step=[200, 260]) +total_epochs = 300 +channel_cfg = dict( + dataset_joints=17, + dataset_channel=[ + [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], + ], + inference_channel=[ + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 + ]) + +data_cfg = dict( + image_size=512, + base_size=256, + base_sigma=2, + heatmap_size=[128], + num_joints=channel_cfg['dataset_joints'], + dataset_channel=channel_cfg['dataset_channel'], + inference_channel=channel_cfg['inference_channel'], + num_scales=1, + scale_aware_sigma=False, +) + +# model settings +model = dict( + type='AssociativeEmbedding', + pretrained='mmcls://mobilenet_v2', + backbone=dict(type='MobileNetV2', widen_factor=1., out_indices=(7, )), + keypoint_head=dict( + type='AESimpleHead', + in_channels=1280, + num_joints=17, + tag_per_joint=True, + with_ae_loss=[True], + loss_keypoint=dict( + type='MultiLossFactory', + num_joints=17, + num_stages=1, + ae_loss_type='exp', + with_ae_loss=[True], + push_loss_factor=[0.001], + pull_loss_factor=[0.001], + with_heatmaps_loss=[True], + heatmaps_loss_factor=[1.0])), + train_cfg=dict(), + test_cfg=dict( + num_joints=channel_cfg['dataset_joints'], + max_num_people=30, + scale_factor=[1], + with_heatmaps=[True], + with_ae=[True], + project2image=True, + align_corners=False, + nms_kernel=5, + nms_padding=2, + tag_per_joint=True, + detection_threshold=0.1, + tag_threshold=1, + use_detection_val=True, + ignore_too_much=False, + adjust=True, + refine=True, + flip_test=False)) + +train_pipeline = [ + dict(type='LoadImageFromFile'), + dict( + type='BottomUpRandomAffine', + rot_factor=30, + scale_factor=[0.75, 1.5], + scale_type='short', + trans_factor=40), + dict(type='BottomUpRandomFlip', flip_prob=0.5), + dict(type='ToTensor'), + dict( + type='NormalizeTensor', + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]), + dict( + type='BottomUpGenerateTarget', + sigma=2, + max_num_people=30, + ), + dict( + type='Collect', + keys=['img', 'joints', 'targets', 'masks'], + meta_keys=[]), +] + +val_pipeline = [ + dict(type='LoadImageFromFile'), + dict(type='BottomUpGetImgSize', test_scale_factor=[1]), + dict( + type='BottomUpResizeAlign', + transforms=[ + dict(type='ToTensor'), + dict( + type='NormalizeTensor', + mean=[0.485, 0.456, 0.406], + std=[0.229, 0.224, 0.225]), + ]), + dict( + type='Collect', + keys=['img'], + meta_keys=[ + 'image_file', 'aug_data', 'test_scale_factor', 'base_size', + 'center', 'scale', 'flip_index' + ]), +] + +test_pipeline = val_pipeline + +data_root = '/shared/home/navermind/coco' +data = dict( + workers_per_gpu=1, + train_dataloader=dict(samples_per_gpu=24), + val_dataloader=dict(samples_per_gpu=1), + test_dataloader=dict(samples_per_gpu=1), + train=dict( + type='BottomUpCocoDataset', + ann_file=f'{data_root}/annotations_trainval2017/annotations/person_keypoints_train2017.json', + img_prefix=f'{data_root}/train2017/train2017/', + data_cfg=data_cfg, + pipeline=train_pipeline, + dataset_info={{_base_.dataset_info}}), + val=dict( + type='BottomUpCocoDataset', + ann_file=f'{data_root}/annotations_trainval2017/annotations/person_keypoints_val2017.json', + img_prefix=f'{data_root}/val2017/val2017/', + data_cfg=data_cfg, + pipeline=val_pipeline, + dataset_info={{_base_.dataset_info}}), + test=dict( + type='BottomUpCocoDataset', + ann_file=f'{data_root}/annotations_trainval2017/annotations/person_keypoints_val2017.json', + img_prefix=f'{data_root}/val2017/val2017/', + data_cfg=data_cfg, + pipeline=test_pipeline, + dataset_info={{_base_.dataset_info}}), +) diff --git a/AI/pose-estimation/mmpose/tools/train.py b/AI/pose-estimation/mmpose/tools/train.py index 423dc93..bfd243f 100644 --- a/AI/pose-estimation/mmpose/tools/train.py +++ b/AI/pose-estimation/mmpose/tools/train.py @@ -83,10 +83,21 @@ def parse_args(): def main(): - args = parse_args() + + import wandb + wandb.login() - cfg = Config.fromfile(args.config) + args = parse_args() + cfg = Config.fromfile('./configs/myconfigs/mobilenetv2_coco_512x512.py') + cfg.work_dir = '/shared/home/navermind/mmpose/mywork/mobilenet3' + cfg.gpu_ids = range(1) + cfg.seed = 0 + cfg.log_config.interval = 10 + cfg.checkpoint_config.interval = 5 + cfg.resume_from = None + #cfg.runner.max_epochs = 10 + if args.cfg_options is not None: cfg.merge_from_dict(args.cfg_options) @@ -170,6 +181,7 @@ def main(): f'deterministic: {args.deterministic}') set_random_seed(seed, deterministic=args.deterministic) cfg.seed = seed + meta['seed'] = seed model = build_posenet(cfg.model) diff --git a/AI/pose-estimation/mmpose/tools/train_cid_mobile.py b/AI/pose-estimation/mmpose/tools/train_cid_mobile.py new file mode 100644 index 0000000..de0099c --- /dev/null +++ b/AI/pose-estimation/mmpose/tools/train_cid_mobile.py @@ -0,0 +1,213 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import argparse +import copy +import os +import os.path as osp +import time +import warnings + +import mmcv +import torch +import torch.distributed as dist +from mmcv import Config, DictAction +from mmcv.runner import get_dist_info, init_dist, set_random_seed +from mmcv.utils import get_git_hash + +from mmpose import __version__ +from mmpose.apis import init_random_seed, train_model +from mmpose.datasets import build_dataset +from mmpose.models import build_posenet +from mmpose.utils import collect_env, get_root_logger, setup_multi_processes + + +def parse_args(): + parser = argparse.ArgumentParser(description='Train a pose model') + parser.add_argument('config', help='train config file path') + parser.add_argument('--work-dir', help='the dir to save logs and models') + parser.add_argument( + '--resume-from', help='the checkpoint file to resume from') + parser.add_argument( + '--no-validate', + action='store_true', + help='whether not to evaluate the checkpoint during training') + group_gpus = parser.add_mutually_exclusive_group() + group_gpus.add_argument( + '--gpus', + type=int, + help='(Deprecated, please use --gpu-id) number of gpus to use ' + '(only applicable to non-distributed training)') + group_gpus.add_argument( + '--gpu-ids', + type=int, + nargs='+', + help='(Deprecated, please use --gpu-id) ids of gpus to use ' + '(only applicable to non-distributed training)') + group_gpus.add_argument( + '--gpu-id', + type=int, + default=0, + help='id of gpu to use ' + '(only applicable to non-distributed training)') + parser.add_argument('--seed', type=int, default=None, help='random seed') + parser.add_argument( + '--diff_seed', + action='store_true', + help='Whether or not set different seeds for different ranks') + parser.add_argument( + '--deterministic', + action='store_true', + help='whether to set deterministic options for CUDNN backend.') + parser.add_argument( + '--cfg-options', + nargs='+', + action=DictAction, + default={}, + help='override some settings in the used config, the key-value pair ' + 'in xxx=yyy format will be merged into config file. For example, ' + "'--cfg-options model.backbone.depth=18 model.backbone.with_cp=True'") + parser.add_argument( + '--launcher', + choices=['none', 'pytorch', 'slurm', 'mpi'], + default='none', + help='job launcher') + parser.add_argument('--local_rank', type=int, default=0) + parser.add_argument( + '--autoscale-lr', + action='store_true', + help='automatically scale lr with the number of gpus') + args = parser.parse_args() + if 'LOCAL_RANK' not in os.environ: + os.environ['LOCAL_RANK'] = str(args.local_rank) + + return args + + +def main(): + + import wandb + wandb.login() + + args = parse_args() + + cfg = Config.fromfile('./configs/myconfigs/cid_mobile_coco_512x512.py') + cfg.work_dir = '/shared/home/navermind/mmpose/mywork/cid_mobile' + cfg.gpu_ids = range(1) + cfg.seed = 0 + cfg.log_config.interval = 10 + cfg.checkpoint_config.interval = 5 + cfg.resume_from = None + #cfg.runner.max_epochs = 10 + + if args.cfg_options is not None: + cfg.merge_from_dict(args.cfg_options) + + # set multi-process settings + setup_multi_processes(cfg) + + # set cudnn_benchmark + if cfg.get('cudnn_benchmark', False): + torch.backends.cudnn.benchmark = True + + # work_dir is determined in this priority: CLI > segment in file > filename + if args.work_dir is not None: + # update configs according to CLI args if args.work_dir is not None + cfg.work_dir = args.work_dir + elif cfg.get('work_dir', None) is None: + # use config filename as default work_dir if cfg.work_dir is None + cfg.work_dir = osp.join('./work_dirs', + osp.splitext(osp.basename(args.config))[0]) + if args.resume_from is not None: + cfg.resume_from = args.resume_from + if args.gpus is not None: + cfg.gpu_ids = range(1) + warnings.warn('`--gpus` is deprecated because we only support ' + 'single GPU mode in non-distributed training. ' + 'Use `gpus=1` now.') + if args.gpu_ids is not None: + cfg.gpu_ids = args.gpu_ids[0:1] + warnings.warn('`--gpu-ids` is deprecated, please use `--gpu-id`. ' + 'Because we only support single GPU mode in ' + 'non-distributed training. Use the first GPU ' + 'in `gpu_ids` now.') + if args.gpus is None and args.gpu_ids is None: + cfg.gpu_ids = [args.gpu_id] + + if args.autoscale_lr: + # apply the linear scaling rule (https://arxiv.org/abs/1706.02677) + cfg.optimizer['lr'] = cfg.optimizer['lr'] * len(cfg.gpu_ids) / 8 + + # init distributed env first, since logger depends on the dist info. + if args.launcher == 'none': + distributed = False + if len(cfg.gpu_ids) > 1: + warnings.warn( + f'We treat {cfg.gpu_ids} as gpu-ids, and reset to ' + f'{cfg.gpu_ids[0:1]} as gpu-ids to avoid potential error in ' + 'non-distribute training time.') + cfg.gpu_ids = cfg.gpu_ids[0:1] + else: + distributed = True + init_dist(args.launcher, **cfg.dist_params) + # re-set gpu_ids with distributed training mode + _, world_size = get_dist_info() + cfg.gpu_ids = range(world_size) + + # create work_dir + mmcv.mkdir_or_exist(osp.abspath(cfg.work_dir)) + # init the logger before other steps + timestamp = time.strftime('%Y%m%d_%H%M%S', time.localtime()) + log_file = osp.join(cfg.work_dir, f'{timestamp}.log') + logger = get_root_logger(log_file=log_file, log_level=cfg.log_level) + + # init the meta dict to record some important information such as + # environment info and seed, which will be logged + meta = dict() + # log env info + env_info_dict = collect_env() + env_info = '\n'.join([(f'{k}: {v}') for k, v in env_info_dict.items()]) + dash_line = '-' * 60 + '\n' + logger.info('Environment info:\n' + dash_line + env_info + '\n' + + dash_line) + meta['env_info'] = env_info + + # log some basic info + logger.info(f'Distributed training: {distributed}') + logger.info(f'Config:\n{cfg.pretty_text}') + + # set random seeds + seed = init_random_seed(args.seed) + seed = seed + dist.get_rank() if args.diff_seed else seed + logger.info(f'Set random seed to {seed}, ' + f'deterministic: {args.deterministic}') + set_random_seed(seed, deterministic=args.deterministic) + cfg.seed = seed + + meta['seed'] = seed + + model = build_posenet(cfg.model) + datasets = [build_dataset(cfg.data.train)] + + if len(cfg.workflow) == 2: + val_dataset = copy.deepcopy(cfg.data.val) + val_dataset.pipeline = cfg.data.train.pipeline + datasets.append(build_dataset(val_dataset)) + + if cfg.checkpoint_config is not None: + # save mmpose version, config file content + # checkpoints as meta data + cfg.checkpoint_config.meta = dict( + mmpose_version=__version__ + get_git_hash(digits=7), + config=cfg.pretty_text, + ) + train_model( + model, + datasets, + cfg, + distributed=distributed, + validate=(not args.no_validate), + timestamp=timestamp, + meta=meta) + + +if __name__ == '__main__': + main() diff --git a/AI/pose-estimation/mmpose/tools/train_hrnet_lite1.py b/AI/pose-estimation/mmpose/tools/train_hrnet_lite1.py new file mode 100644 index 0000000..759c6ab --- /dev/null +++ b/AI/pose-estimation/mmpose/tools/train_hrnet_lite1.py @@ -0,0 +1,213 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import argparse +import copy +import os +import os.path as osp +import time +import warnings + +import mmcv +import torch +import torch.distributed as dist +from mmcv import Config, DictAction +from mmcv.runner import get_dist_info, init_dist, set_random_seed +from mmcv.utils import get_git_hash + +from mmpose import __version__ +from mmpose.apis import init_random_seed, train_model +from mmpose.datasets import build_dataset +from mmpose.models import build_posenet +from mmpose.utils import collect_env, get_root_logger, setup_multi_processes + + +def parse_args(): + parser = argparse.ArgumentParser(description='Train a pose model') + parser.add_argument('config', help='train config file path') + parser.add_argument('--work-dir', help='the dir to save logs and models') + parser.add_argument( + '--resume-from', help='the checkpoint file to resume from') + parser.add_argument( + '--no-validate', + action='store_true', + help='whether not to evaluate the checkpoint during training') + group_gpus = parser.add_mutually_exclusive_group() + group_gpus.add_argument( + '--gpus', + type=int, + help='(Deprecated, please use --gpu-id) number of gpus to use ' + '(only applicable to non-distributed training)') + group_gpus.add_argument( + '--gpu-ids', + type=int, + nargs='+', + help='(Deprecated, please use --gpu-id) ids of gpus to use ' + '(only applicable to non-distributed training)') + group_gpus.add_argument( + '--gpu-id', + type=int, + default=0, + help='id of gpu to use ' + '(only applicable to non-distributed training)') + parser.add_argument('--seed', type=int, default=None, help='random seed') + parser.add_argument( + '--diff_seed', + action='store_true', + help='Whether or not set different seeds for different ranks') + parser.add_argument( + '--deterministic', + action='store_true', + help='whether to set deterministic options for CUDNN backend.') + parser.add_argument( + '--cfg-options', + nargs='+', + action=DictAction, + default={}, + help='override some settings in the used config, the key-value pair ' + 'in xxx=yyy format will be merged into config file. For example, ' + "'--cfg-options model.backbone.depth=18 model.backbone.with_cp=True'") + parser.add_argument( + '--launcher', + choices=['none', 'pytorch', 'slurm', 'mpi'], + default='none', + help='job launcher') + parser.add_argument('--local_rank', type=int, default=0) + parser.add_argument( + '--autoscale-lr', + action='store_true', + help='automatically scale lr with the number of gpus') + args = parser.parse_args() + if 'LOCAL_RANK' not in os.environ: + os.environ['LOCAL_RANK'] = str(args.local_rank) + + return args + + +def main(): + + import wandb + wandb.login() + + args = parse_args() + + cfg = Config.fromfile('./configs/myconfigs/litehrnet_18_coco_256x192.py') + cfg.work_dir = '/shared/home/navermind/mmpose/mywork/hrnet_lite1' + cfg.gpu_ids = range(1) + cfg.seed = 0 + cfg.log_config.interval = 10 + cfg.checkpoint_config.interval = 5 + cfg.resume_from = None + #cfg.runner.max_epochs = 10 + + if args.cfg_options is not None: + cfg.merge_from_dict(args.cfg_options) + + # set multi-process settings + setup_multi_processes(cfg) + + # set cudnn_benchmark + if cfg.get('cudnn_benchmark', False): + torch.backends.cudnn.benchmark = True + + # work_dir is determined in this priority: CLI > segment in file > filename + if args.work_dir is not None: + # update configs according to CLI args if args.work_dir is not None + cfg.work_dir = args.work_dir + elif cfg.get('work_dir', None) is None: + # use config filename as default work_dir if cfg.work_dir is None + cfg.work_dir = osp.join('./work_dirs', + osp.splitext(osp.basename(args.config))[0]) + if args.resume_from is not None: + cfg.resume_from = args.resume_from + if args.gpus is not None: + cfg.gpu_ids = range(1) + warnings.warn('`--gpus` is deprecated because we only support ' + 'single GPU mode in non-distributed training. ' + 'Use `gpus=1` now.') + if args.gpu_ids is not None: + cfg.gpu_ids = args.gpu_ids[0:1] + warnings.warn('`--gpu-ids` is deprecated, please use `--gpu-id`. ' + 'Because we only support single GPU mode in ' + 'non-distributed training. Use the first GPU ' + 'in `gpu_ids` now.') + if args.gpus is None and args.gpu_ids is None: + cfg.gpu_ids = [args.gpu_id] + + if args.autoscale_lr: + # apply the linear scaling rule (https://arxiv.org/abs/1706.02677) + cfg.optimizer['lr'] = cfg.optimizer['lr'] * len(cfg.gpu_ids) / 8 + + # init distributed env first, since logger depends on the dist info. + if args.launcher == 'none': + distributed = False + if len(cfg.gpu_ids) > 1: + warnings.warn( + f'We treat {cfg.gpu_ids} as gpu-ids, and reset to ' + f'{cfg.gpu_ids[0:1]} as gpu-ids to avoid potential error in ' + 'non-distribute training time.') + cfg.gpu_ids = cfg.gpu_ids[0:1] + else: + distributed = True + init_dist(args.launcher, **cfg.dist_params) + # re-set gpu_ids with distributed training mode + _, world_size = get_dist_info() + cfg.gpu_ids = range(world_size) + + # create work_dir + mmcv.mkdir_or_exist(osp.abspath(cfg.work_dir)) + # init the logger before other steps + timestamp = time.strftime('%Y%m%d_%H%M%S', time.localtime()) + log_file = osp.join(cfg.work_dir, f'{timestamp}.log') + logger = get_root_logger(log_file=log_file, log_level=cfg.log_level) + + # init the meta dict to record some important information such as + # environment info and seed, which will be logged + meta = dict() + # log env info + env_info_dict = collect_env() + env_info = '\n'.join([(f'{k}: {v}') for k, v in env_info_dict.items()]) + dash_line = '-' * 60 + '\n' + logger.info('Environment info:\n' + dash_line + env_info + '\n' + + dash_line) + meta['env_info'] = env_info + + # log some basic info + logger.info(f'Distributed training: {distributed}') + logger.info(f'Config:\n{cfg.pretty_text}') + + # set random seeds + seed = init_random_seed(args.seed) + seed = seed + dist.get_rank() if args.diff_seed else seed + logger.info(f'Set random seed to {seed}, ' + f'deterministic: {args.deterministic}') + set_random_seed(seed, deterministic=args.deterministic) + cfg.seed = seed + + meta['seed'] = seed + + model = build_posenet(cfg.model) + datasets = [build_dataset(cfg.data.train)] + + if len(cfg.workflow) == 2: + val_dataset = copy.deepcopy(cfg.data.val) + val_dataset.pipeline = cfg.data.train.pipeline + datasets.append(build_dataset(val_dataset)) + + if cfg.checkpoint_config is not None: + # save mmpose version, config file content + # checkpoints as meta data + cfg.checkpoint_config.meta = dict( + mmpose_version=__version__ + get_git_hash(digits=7), + config=cfg.pretty_text, + ) + train_model( + model, + datasets, + cfg, + distributed=distributed, + validate=(not args.no_validate), + timestamp=timestamp, + meta=meta) + + +if __name__ == '__main__': + main() diff --git a/AI/pose-estimation/mmpose/tools/train_hrnet_prun.py b/AI/pose-estimation/mmpose/tools/train_hrnet_prun.py new file mode 100644 index 0000000..a3b1da9 --- /dev/null +++ b/AI/pose-estimation/mmpose/tools/train_hrnet_prun.py @@ -0,0 +1,229 @@ +# Copyright (c) OpenMMLab. All rights reserved. +import argparse +import copy +import os +import os.path as osp +import time +import warnings + +import mmcv +import torch +import torch.distributed as dist +from mmcv import Config, DictAction +from mmcv.runner import get_dist_info, init_dist, set_random_seed +from mmcv.utils import get_git_hash + +from mmpose import __version__ +from mmpose.apis import init_random_seed, train_model +from mmpose.datasets import build_dataset +from mmpose.models import build_posenet +from mmpose.utils import collect_env, get_root_logger, setup_multi_processes +import torch +from torch import nn +import torch.nn.utils.prune as prune +import torch.nn.functional as F + +def parse_args(): + parser = argparse.ArgumentParser(description='Train a pose model') + parser.add_argument('config', help='train config file path') + parser.add_argument('--work-dir', help='the dir to save logs and models') + parser.add_argument( + '--resume-from', help='the checkpoint file to resume from') + parser.add_argument( + '--no-validate', + action='store_true', + help='whether not to evaluate the checkpoint during training') + group_gpus = parser.add_mutually_exclusive_group() + group_gpus.add_argument( + '--gpus', + type=int, + help='(Deprecated, please use --gpu-id) number of gpus to use ' + '(only applicable to non-distributed training)') + group_gpus.add_argument( + '--gpu-ids', + type=int, + nargs='+', + help='(Deprecated, please use --gpu-id) ids of gpus to use ' + '(only applicable to non-distributed training)') + group_gpus.add_argument( + '--gpu-id', + type=int, + default=0, + help='id of gpu to use ' + '(only applicable to non-distributed training)') + parser.add_argument('--seed', type=int, default=None, help='random seed') + parser.add_argument( + '--diff_seed', + action='store_true', + help='Whether or not set different seeds for different ranks') + parser.add_argument( + '--deterministic', + action='store_true', + help='whether to set deterministic options for CUDNN backend.') + parser.add_argument( + '--cfg-options', + nargs='+', + action=DictAction, + default={}, + help='override some settings in the used config, the key-value pair ' + 'in xxx=yyy format will be merged into config file. For example, ' + "'--cfg-options model.backbone.depth=18 model.backbone.with_cp=True'") + parser.add_argument( + '--launcher', + choices=['none', 'pytorch', 'slurm', 'mpi'], + default='none', + help='job launcher') + parser.add_argument('--local_rank', type=int, default=0) + parser.add_argument( + '--autoscale-lr', + action='store_true', + help='automatically scale lr with the number of gpus') + args = parser.parse_args() + if 'LOCAL_RANK' not in os.environ: + os.environ['LOCAL_RANK'] = str(args.local_rank) + + return args + + +def main(): + + import wandb + wandb.login() + + args = parse_args() + + cfg = Config.fromfile('./configs/myconfigs/hrnet_w32_coco_512x512.py') + cfg.work_dir = '/shared/home/navermind/mmpose/mywork/hrnet_prun' + cfg.gpu_ids = range(1) + cfg.seed = 0 + cfg.log_config.interval = 10 + cfg.checkpoint_config.interval = 5 + cfg.resume_from = None + #cfg.runner.max_epochs = 10 + + if args.cfg_options is not None: + cfg.merge_from_dict(args.cfg_options) + + # set multi-process settings + setup_multi_processes(cfg) + + # set cudnn_benchmark + if cfg.get('cudnn_benchmark', False): + torch.backends.cudnn.benchmark = True + + # work_dir is determined in this priority: CLI > segment in file > filename + if args.work_dir is not None: + # update configs according to CLI args if args.work_dir is not None + cfg.work_dir = args.work_dir + elif cfg.get('work_dir', None) is None: + # use config filename as default work_dir if cfg.work_dir is None + cfg.work_dir = osp.join('./work_dirs', + osp.splitext(osp.basename(args.config))[0]) + if args.resume_from is not None: + cfg.resume_from = args.resume_from + if args.gpus is not None: + cfg.gpu_ids = range(1) + warnings.warn('`--gpus` is deprecated because we only support ' + 'single GPU mode in non-distributed training. ' + 'Use `gpus=1` now.') + if args.gpu_ids is not None: + cfg.gpu_ids = args.gpu_ids[0:1] + warnings.warn('`--gpu-ids` is deprecated, please use `--gpu-id`. ' + 'Because we only support single GPU mode in ' + 'non-distributed training. Use the first GPU ' + 'in `gpu_ids` now.') + if args.gpus is None and args.gpu_ids is None: + cfg.gpu_ids = [args.gpu_id] + + if args.autoscale_lr: + # apply the linear scaling rule (https://arxiv.org/abs/1706.02677) + cfg.optimizer['lr'] = cfg.optimizer['lr'] * len(cfg.gpu_ids) / 8 + + # init distributed env first, since logger depends on the dist info. + if args.launcher == 'none': + distributed = False + if len(cfg.gpu_ids) > 1: + warnings.warn( + f'We treat {cfg.gpu_ids} as gpu-ids, and reset to ' + f'{cfg.gpu_ids[0:1]} as gpu-ids to avoid potential error in ' + 'non-distribute training time.') + cfg.gpu_ids = cfg.gpu_ids[0:1] + else: + distributed = True + init_dist(args.launcher, **cfg.dist_params) + # re-set gpu_ids with distributed training mode + _, world_size = get_dist_info() + cfg.gpu_ids = range(world_size) + + # create work_dir + mmcv.mkdir_or_exist(osp.abspath(cfg.work_dir)) + # init the logger before other steps + timestamp = time.strftime('%Y%m%d_%H%M%S', time.localtime()) + log_file = osp.join(cfg.work_dir, f'{timestamp}.log') + logger = get_root_logger(log_file=log_file, log_level=cfg.log_level) + + # init the meta dict to record some important information such as + # environment info and seed, which will be logged + meta = dict() + # log env info + env_info_dict = collect_env() + env_info = '\n'.join([(f'{k}: {v}') for k, v in env_info_dict.items()]) + dash_line = '-' * 60 + '\n' + logger.info('Environment info:\n' + dash_line + env_info + '\n' + + dash_line) + meta['env_info'] = env_info + + # log some basic info + logger.info(f'Distributed training: {distributed}') + logger.info(f'Config:\n{cfg.pretty_text}') + + # set random seeds + seed = init_random_seed(args.seed) + seed = seed + dist.get_rank() if args.diff_seed else seed + logger.info(f'Set random seed to {seed}, ' + f'deterministic: {args.deterministic}') + set_random_seed(seed, deterministic=args.deterministic) + cfg.seed = seed + + meta['seed'] = seed + + model = build_posenet(cfg.model) + + #module =model.backbone.conv1 + + for name, module in model.backbone.named_modules(): + # 모든 2D-conv 층의 20% 연결에 대해 가지치기 기법을 적용 + if isinstance(module, torch.nn.Conv2d): + prune.l1_unstructured(module, name='weight', amount=0.2) + # 모든 선형 층의 40% 연결에 대해 가지치기 기법을 적용 + elif isinstance(module, torch.nn.Linear): + prune.l1_unstructured(module, name='weight', amount=0.4) + + + + datasets = [build_dataset(cfg.data.train)] + + if len(cfg.workflow) == 2: + val_dataset = copy.deepcopy(cfg.data.val) + val_dataset.pipeline = cfg.data.train.pipeline + datasets.append(build_dataset(val_dataset)) + + if cfg.checkpoint_config is not None: + # save mmpose version, config file content + # checkpoints as meta data + cfg.checkpoint_config.meta = dict( + mmpose_version=__version__ + get_git_hash(digits=7), + config=cfg.pretty_text, + ) + train_model( + model, + datasets, + cfg, + distributed=distributed, + validate=(not args.no_validate), + timestamp=timestamp, + meta=meta) + + +if __name__ == '__main__': + main()