본문 바로가기

tensorflow-machine learning

machine learning pipline config 작성법

우선 필자가 머신러닝에 사용할 모델은

https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf2_detection_zoo.md  

해당 링크의 ssd_resnet50_v1_fpn_640x640_coco17_tpu-8 모델이다 tf version은 2.3을 사용하였다

해당 모델을 사용하기 위해서는 pipeline.config를 사용자가 설정한 뒤 

이 pipeline 및 tf.record들을 이용하여 모델을 구동한다

 

pipeline 작성시에는 기본적으로 작성된 부분에서 몇 가지 부분만 사용자의 모델에 맞게 수정하면 되는데

수정할 부분은 

model , train_config , train_inpout_reader , eval_config , eval_input_reader  이다

대략적인 내용은 

model=학습모델 설저을 위한 하이퍼 파라미터 설정
train_config=학습에 대한 하이퍼 파라미터 설정
train_input_reader=데이터를 읽어오기 위한 경로나 방법 설정
eval_config,eval_input_reader 검증을 위한 경로나 방법 하이퍼 파라미터 설정 이다

 

model

num_classes=분류할 클래스 개수

fixed_shape_resizer=넣어줄 이미지 사이즈-알아서 설정하기
모델에 나머지 부분은 딱히 건드릴 부분 없을듯 차차 공부해 가며 최적화 시키기

train_config
batch_size 크면 클수록 좋음 하지만 메모리 용량이 커야됨 
crop 학습시킬 사진 데이터들을 정해진 사이즈로 잘라 여러부분 학습시키는 부분
area=전체 1중 얼마나 사용할 것인가 0.75이면 전체중 75%가량 사용한다는 뜻임
ratio 원본 가로세로를 1이라 가정하면 총 몇배 할 것인가 만일 3이라 말하면 3배 늘린다는 의미
optimizer 
warmup_steps-설정 스텝동안 직선으로 learning rate를 올려줌
warmup_learning_rate - 시작 learning rate 설정
total_steps-전체 몇 step 할 건지를 설정
learning_rate_base - warmup step에서 learning 상한선 설정
learning_rate=learning rate 방식 설정 여기서는 뒤로 갈수록 세부 설정이 필요하기 때문에
cosine_decay_learning_rate 사용
보통 에폭 배치 스텝 셋중 2개를 알면 다른 하나 유추 가능
배치*스텝=에폭*이미지 수 라 생각

fine_tune_checkpoint 우리는 이미 학습된 모델을 들고와 자신의 모델에 맞게 변형시킨다 
이 경우 구성된 모델의 주요 checkpoint를 가지고 와서 기본 사용해 주어야 시간효율에서 이점을 가질수 있다
따라서 이미 모델 구성시 만든 checkpoint 위치인 checkpoint 디렉토리 안 ckpt-0.data-00000-of-00001 위치를
주어야 사용이 가능하다 
보통 위치에다 ckpt-0까지만 주면 찾는다

fine_tune_checkpoint_type=detection으로 설정 거의 모든 모델에 이와같이 설정해준다 
use_bfloat16:false로 바꾸기 tensorflow 자체 16 float형식은 기존 방식의 16 float형식과 구성이 달라
호환성 문제 발생이 이루어질수 있다 따라서 false로 바꾸어준다


train_input_reader/eval_input_reader 해당 부분에 label_map_path 기존에 넣어둔 class 종류 파일인
label_map위치를 적어준다
input_path tf record 위치를 적어준다 만일 sharding이 이루어져 여러 레코드를 사용시 path/*로 전체 넣어준다

 

이후  기존에 받아 두었던 tensorflow/models/research/object_detection 속의 model_main_tf2.py파일로 

모델을 구동시킬 예정이니 python model_main_tf2.py --help를 주어 해당 옵션들을 확인하자

주요 옵션들로는

 

checkpoint_every_n ---몇개의 step에 한번씩 checkpoint를 남길 것인가
eval_timeout checkpoint가 만들어지면 검증 작업을 진행한다 이 경우 다음 검증까지 기다릴 시간을 지정한다 기본값은 3600초 즉 1시간이다
model_dir  ---checkpoint 저장 경로이다
pipeline_config_path   ---pipeline.config 파일이 들어있는 경로 등이 있다

 

해당 옵션들을 고려하여 작성한 명령어는 

CUDA_VISIBLE_DEVICES=0 python model_main_tf2.py --model_dir /home/user_directory/tensorflow/train/210927_ssd_resnet --pipeline_config_path /home/user_directory/tensorflow/train/210927_ssd_resnet/pipeline.config --checkpoint_every_n=2500

 

이며  필자는 학습을 총 10만회 검증 checkpoint는 2500 학습 step당 1개씩 진행하였다

nvidia-smi 그래픽 카드 사용량을 확인할 수 있는 명령어이며 사용 GPU 확인 후

CUDA_VISIBLE_DEVICES 로 사용 그래픽 카드 를 지정하였다

CUDA_VISIBLE_DEVICES="" 그래픽 카드 아닌 CPU로만 구동한다는 의미이다 현재는 0번 GPU를 사용하였다

위의 과정을 거치면 모델이 학습되어 checkpoint가 기록되는 것을 알 수 있다

tensorflow2의 경우 학습과 검증이 다른 프로세서 안에서 이루어 지기에

해당 내용은 학습에 관한 내용이며 검증을 진행하는 방법에 대해서는 다음 포스팅에 설명하겠습니다