Few Shot Object Detection - 마스크 인식기 만들어보기

kjyggg·2020년 7월 13일
7

TIL

목록 보기
2/2
post-thumbnail

작성중인 게시물입니다.

tensorflow 의 object detection api를 이용해서 custom 객체 감지 모델을 만들어 보자

코로나가 종식되려면 최소 2년은 더 걸린다는 뉴스 기사를 봤다. 마스크 착용 또한 대중교통을 이용하거나 공공기관에서 착용이 필수가 되고 있다.

버스를 타거나 지하철을 탈 때 사람들이 마스크를 끼고 있는지 확인하기 어렵고, 일일히 검사한다면 시간적으로나 비용적으로 자원이 많이 투입될 것이라 생각했다.

그래서 자동으로 마스크를 끼고 있는지 검사할 수 있는 마스크 감지기를 만들어보았습니다.

기존에 나와있는 모델은 마스크 객체를 인식하지 못함

뭔가 패션 아이템, 의류쪽인건 아는데 마스크는 학습이 안되서 인식하지 못함

나를 사람으로 생각해줘서 고마워 

이것도 다 마스크라고 생각하겠지만 아직 faster r cnn 은 모름

마스크 학습 후 인식 예제 (파인튜닝 후)

기존 감지 모델의 라벨을 오버라이딩 하여 마스크 만 인식하는 모델로 만들엇음. 이전에 인식하지 못했던 마스크를 인식

manual

🧗‍♀️환경 설정

tensorflow api를 보면 colab 환경에서 few_shot 돌리는 게 있는데 colab 이 1시간 자리비우면 팅기고 session 유지 기간도 정해져 있기 때문에 local 에서 jupyter notebook 으로 실행하는 법을 공유하고자 합니다.

jupyter notebook 실행시 먼저 terminal 에서 tensorflow 의 object_detection_api 설치를 완료하셔야 합니다.

  1. 콘다 가상환경 만들어주기
$conda create --name 'YOUR_ENV_NAME' python=3.7
$conda activate 'YOUR_ENV_NAME'
(YOUR ENV)$pip install -U --pre tensorflow=="2.2.0"
  1. tensorflow object detection api 설치
(가상환경 실행상태)
$mkdir tesnorflow
$cd tensorflow
$tensorflow>> git clone https://github.com/tensorflow/models.git
$tensorlfow>> protoc object_detection/protos/*.proto --python_out=.
$tensorflow>> cd models/research
$tensorflow/models/research>> cd object_detection/packages/tf2/setup.py .
$python -m pip install .
  1. 콘다 가상환경 kernel 에 등록해주기
$pip install ipykernel
$python -m ipykernel install --user --name YOUR_ENV_NAME
  1. 터미널에서 쥬피터 노트북 실행
$jupyter notebook
  1. 쥬피터에서 노트북 파일 생성 후 kernel을 해당 conda 환경으로 설정

  1. 이후에
    Eager Few Shot Object Detection
    에서 Utilities 부터 따라하기

✨프로세스 설명

1. 학습 이미지 numpy 형태로 변환하기

##numpy shape : (img_height, img_width, 3)
현재 사용하고 있는 모델은 img_height, img_width = 640, 640 으로 통일
ex) 실제 이미지를 표현하는 numpy 형태: 

numpy 로 변환할 학습 이미지

위 배열은 첫번째 사진을 numpy 형태로 변환한 값. 
3차원 배열로 이루어져 있음. 
길이가 3인 1차원 리스트가 640 개 있고 
그 리스트를 담는 이차원 배열이 640개 존재하여 640x640x3 의 3차원 배열 형태를 이루고 있다.

2. 학습 이미지에서 bounding_box 좌표 만들기(annotating)

object detection 에서 학습 데이터셋을 만들기 위해 이미지에서 object 에 대한 boudding box 를 만드는 작업
data 형태 :
[ymin, xmin, ymax, xmax]
ymax = ymin + height
xmax = xmin + width

ex)

3. numpy 타입을 tensor 타입으로 변환

앞에서 image 와 box 에 대한 값을 구했음. 이 값은 numpy 형태이므로 훈련시키기 위해 tensor 형태로 변환해줘야함 이때 detection model 은 input 을 (N,heigt, width, 3) 형태로 받기 때문에 train image (height, width, 3) 를 tensorflow 의 expand_dims 메소드를 이용하여 4차원으로 차원 확장해준다.

4. 해당 이미지 셋과 gt_box (bbox 좌표)에 대한 tensor data 를 input data 로 이용하여 fine tuning 진행

config 파일 설명

config 파일은 총 5로 구성되어 있음 -아직 까지 각 attribute 에 대해 정확하게 이해하지 못함 어떠한 모델을 사용하고

추측

  • model : 어떤 모델을 사용할지 정하는 곳인가?
  • train config : 학습률,스텦 ,체크포인트 ,배치 정하는곳?
  • train_input_reader : input 데이터(.tfrecord) 와 label_map.txt 의 위치 지정
  • eval_config
  • eval_input_reader

모델 저장 배포하기
eager execution 에서 모델 저장하는법
저장한 모델 배포 어플리케이션에 적용하기

2개의 댓글

comment-user-thumbnail
2020년 7월 27일

👍

1개의 답글