mmdet train

Published by onesixx on

https://github.com/open-mmlab/mmdetection#overview-of-benchmark-and-model-zoo

ConvNeXt (CVPR’2022)

https://wandb.ai/ayush-thakur/mmdetection/reports/How-to-Use-Weights-Biases-with-MMDetection–VmlldzoyMTM0MDE2

https://comlini8-8.tistory.com/86

DataSet

데이터 준비

기존 데이터셋 다운로드

coco : https://cocodataset.org/#home

pascal voc

신규 데이터셋 구성

1. Image 수집

  • 직접수집
  • 동영상에서 이미지 추출 (ffmpeg 사용)
    ffmpeg -i example.mp4 -vf fps=Afolder/ex_detect_%4d.jpg
  • google에서 수집

2. annotation (CVAT 사용)

  • Bbox
  • Polygon : segmentation
  • Key-point (top-down, down-top)

3. 데이터셋 만들기 (Image와 Annotation을 연결)

  • CoCo 데이터셋 포멧으로 CVAT에서 Export
    (keypoint에 경우, coco형식으로 export가 되지 않아, CVAT(xml)포멧으로 내보내기 한후, datumaru를 통해 coco 데이터셋으로 변환
  • Custom 데이터셋
    mmdetection에서 custom dataset 등록후 사용

데이터셋 준비

train / valid & test 데이터셋 준비

이미지는 그대로 두고 Annotation파일 분리하여 준비 ( coco데이터셋은 새로 annotation후 채번을 다시 해야함)

Config에서

소스의 trn, val, tst 의 디렉토리 구조 결정

커스텀 데이터셋의 경우

MyCustomDataset을 등록 (load_annotations 잘 수정해서)

dataset 생성

  • datasets = [build_dataset(cfg.data.train)] # /tools/train.py에서

cocoset으로 변환

Model

.

모델 선정

Model-zoo

https://github.com/open-mmlab/mmdetection#overview-of-benchmark-and-model-zoo

ConvNeXt (CVPR’2022)

ex) faster_rcrnn

checkpoints 파일 준비

Model Zoo에서 pretrained Model의 네트웍을 받아옴.

Shell

configuration – Config

기존 Config 가져오기

sixxconfigs/makeConfig.py 를 통해 초기 Config 생성

Python
sixxconfigs/makeConfig.py
Shell
sixxconfigs/makeConfig.py

config 대분류 및 주요설정내역

config
대분류
설명
dataset dataset의 type(customdataset, cocodataset 등),
train/val/test dataset 유형,
data_root,
train/val/test dataset의 주요 파라미터 설정(type, ann_file, img_prefix, pipeline 등)
modelobject detection model의 backbone, neck, dense head, roi extractor, roi head(num_classes=4)
주요 영역별로 세부 설정
scheduler optimizer 유형 설정 (sgd, adam, rmsprop 등),
최초 learning 설정
학습중 동적 learning rate 적용 정책 설정(step, cyclic, cosine annealing 등)
train 시 epochs 횟수 : learning rate scheduler
runtime주로 hook(callback)관련 설정
학습 중 checkpoint 파일,
log 파일 생성을 위한 interval epochs 수

config 수정

기존 config가져와서, training에 사용할 config 파일생성
sixxconfigs/faster_rcnn_r50_fpn_1x_coco_sixx.py 그리고 수정

  • num_classes=4, 수정(model아래)
  • dataset_type = ‘CocoDataset’ 확인
  • data_root = ‘data/msc_pilot2/’ 수정
  • classes = [‘TRAY_A_1’, ‘TRAY_A_2’, ‘TRAY_A_3’, ‘TRAY_B_1’] 추가

gpu

  • samples_per_gpu
  • workers_per_gpu

data

  • train / val / test
    – ann_file 수정
    – classes 추가
Python

https://onesixx.com/wandb/

Python
Python
Python

예시2>

Python

runner 의 max_epochs 가 원하는 epoch 46

Batch_size

step 1473/ 46 약 32 …= iteration..

평가 (evaluation, 50번에 한번)

checkpoint 1번에 한번

log_config 1번

Python
Python

model

  • num_class

dataset_type

data_root

classes

data

  • samples_per_gpu
  • workers_per_gpu
  • train / val / test
    – ann_file
    – classes

load_from


evaluation

  • save_best=’auto’, interval=50

checkpoint_config


optimizer의 lr 줄임

lr_config = dict(
    policy='step',      # 어떤 scheduler 를 쓸건지
    warmup='linear',    # warmup을 할건지
    warmup_iters=500,   # warmup iteration 얼마나 줄건지
    warmup_ratio=0.001, 
    step=[8, 11])        # step은 얼마마다 밟은 건지

runner (_1x는 epoch 12번, _2x는 epoch 24번, _20e는 epoch 20번을 의미)

  • max_epochs=10000


auto_resume

gpu_ids

https://onesixx.com/mmdet-log/

Python

GPU사용량 모니터링 (nvidia-smi, nvitop, gpustat)

watch -d -n 0.5 nvidia-smi

Shell

Training 실행

Shell

work_dirs에 작업할 폴더를 만들어짐

수정된 cfg 확인

모델 실험을 위한 config 수정

https://pebpung.github.io/wandb/2021/10/06/WandB-1.html

직관적으로 수정하는 방법은 비효율적이다..

여러 GPU 사용

Shell
Shell

CUDA_VISIBLE_DEVICES로 사용할 GPU를 한정해주고,

Port를 분리한 후,

실행

CUDA_VISIBLE_DEVICES=2,3 python train.py

CUDA_VISIBLE_DEVICES=2,3 python train.py

CUDA_VISIBLE_DEVICES=2,3 python train.py

참고

Shell
sixx/dist_train.sh
Python
Shell

다시 Training work_dirs

sixx/dist_train.sh: line 2: $’\r’: command not found

이런 에러가 날 경우, 전체 줄바꿈(Carriage return과 New Line \r\n)을 newline(\n)으로 바꿔준다.

sed -i -e ‘s/\r$//’ ./sixx/dist_train.sh

https://github.com/open-mmlab/mmdetection/issues/334

Shell

https://github.com/facebookresearch/maskrcnn-benchmark

Shell

https://artiiicy.tistory.com/61

 “CUDA_VISIBLE_DEVICES”를 통해 cuda가 볼 수 있는 GPU 제한하기

항상 cuda는 GPU 0번(torch.cuda.current_device())부터 사용을 하게 되고, CUDA_VISBLE_DEVICES= 2,3 이라면, cuda는 2,3번째만 볼수 있기때문에 GPU 0을 할당하는다는 것이 2를 사용하는것과 같다.

단, multi인 경우, nn.DataParallel()을 작성해주어야 한다.

1-2) Jupyter notebook 등의 python script “~.ipynb” file 내에서 돌리는 경우

“~.ipynb” 와 같이 python script 내에서 돌리는 경우에는 다음과 같이 os.environ[ ] code를 활용하여 environment를 설정하여 실행할 수 있다.

os.environ["CUDA_DEVICE_ORDER"]="PCI_BUS_ID"  # Arrange GPU devices starting from 0
os.environ["CUDA_VISIBLE_DEVICES"]= "2,3"     # Set the GPUs 2 and 3 to use
Shell

$ python sixxtools/train.py sixxconfigs/cascade_rcnn_r50_fpn_1x_coco.py

Categories: vision

onesixx

Blog Owner

guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x