(windows) tensorflow-object-detection 모델 훈련하기

훈련전 준비작업:

  1. 모델훈련 들어가기 전에 우선 tensorflow-object-detection-api 에 대해 실행가능한지 테스트를 진행해 보아야 한다.
    https://blog.csdn.net/holidayun/article/details/82378201 참고
  2. github에서 xml_to_csv.py 와 generate_tfrecord.py 를 다운로드 받은뒤,\tensorflow\models\research\object_detection 목록아래에 저장해 둔다.
    다운로드 주소:
    https://github.com/holidayun/Tesorflow-Object-Detection-API-Training-Windows-Tutorial
  3. \tensorflow\models\research\object_detectio 목록아래에 images폴더를 생성한다.
  4. \tensorflow\models\research\object_detectio\imgaes 목록아래에 test폴더와 train폴더를 생성해 둔다.
  5. 모델 다운로드.
    ( 필요에 따라 모델을 다운로드 받으실 수 있습니다.)
    这里写图片描述
    https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/detection_model_zoo.md

    ( SDD-MobileNet 모델은 학습속도는 빠르지만 정확도가 높은편이 아니라
    Faster-RCNN-Inception-V2 모델을 예로 설명해 보도록 하겠습니다. )

    다운로드 주소 :
    http://download.tensorflow.org/models/object_detection/faster_rcnn_inception_v2_coco_2018_01_28.tar.gz
    다운로드 완료후 faster_rcnn_inception_v2_coco_2018_01_28 폴더를 압축해제하여 tensorflow \ models \ research \ object_detection 경로로 저장해 둔다.(ps: 모델일자와 버전번호는 향후에 변화될 가능성이 있지만 사용방법은 여전히 본 문장이 참고가 되겠습니다.)

1.이미지 수집하기

  1. 수집한 이미지에는 인식대상이 포함되어야 한다.
  2. 이미지 파일크기는 200kb 이하이며 해상도는 720*1280을 초과하지 않는것이 좋다.(파일이 클수록 모델이 학습하는데 걸리는 시간이 길어지기 때문)
  3. 수집한 이미지파일을 \tensorflow\models\research\object_detectio\imgaes 목록 아래로 넣어둔다.

2.이미지 라벨 만들기

  1. 이미지를 수집한 뒤 해당 이미지에 인식대상을 표기할수 있다.( 이미지 표기하는 툴로 LabelImg 사용할것을 권장하며 GitHub화면에 설치방법 및 사용방법에 대해 상세하게 설명되어 있습니다. 아래는 LabelImg툴의 GitHub 주소입니다.)
    https://github.com/tzutalin/labelImg

  2. LabelImg를 통해 생성된 xml 파일중 80%는
    \tensorflow\models\research\object_detectio\imgaes\train 목록으로 저장해서 학습하는데 사용하고 나머지 20% 는 \object_detection\imgaes\test 에 저장하여 테스트하는데 사용한다.

3.훈련데이터 생성하기

  1. 생성된 xml데이터를 csv양식의 데이터로 전환시킨 후 에디터로 \object_detection 목록아래 xml_to_csv.py 파일을 열어서 해당 경로를 수정한다
def main():
    #image_path - 테스트폴더 경로
    image_path = r'D:\Image-GPU\tensorflow\models\research\object_detection\images\test'
    xml_df = xml_to_csv(image_path)
    #'test_labels.csv' - 생성된 csv명
    xml_df.to_csv('test_labels.csv', index=None)
    print('Successfully converted xml to csv.')

아래와 같이 실행하게 되면

D:\Image-GPU\tensorflow\models\research\object_detection> python xml_to_csv.py

object_detection 목록에 해당 test_labels.csv 파일이 생성 된다.
동일한 방법으로 train_label.csv 파일도 생성할수 있다.
2. csv 파일을 .record 파일로 전환시키기
에디터에서 generate_tfrecord.py 파일을 열은 후, 31번째 행부터 시작되는 이미지라벨명을 실제상황에 맞추어 아래와 같이 재작성하며 매개 대상마다 해당 ID를 배정하고 나면 그 뒤로 labelmap.pbtxt파일 세팅시 동일한 ID번호로 배정하게 된다.

예를 들어,현재 모델로 사과와 바나나, 오렌지에 대한 인식을 훈련시키는 경우 ,generate_tfrecord.py 에서 아래코드를

if row_label == 'collar':
        return 1

아래와 같은 식으로 변경시킨다

if row_label == 'apple':
        return 1
if row_label == 'banana':
       return 2
if row_label == 'orange':
       return 3

다음으로 \ object_detection 폴더에서 아래와 같은 명령을 넣어 TFRecord 파일을 생성시킨다.

python generate_tfrecord.py --csv_input=train_labels.csv --image_dir=images\train --output_path=train.record
python generate_tfrecord.py --csv_input=test_labels.csv --image_dir=images\test --output_path=test.record

그러면 \ object_detection 에 train.record와 test.record파일이 생성되며 이들은 파일인식에 사용된다.

5.라벨 매핑 생성하기

tensorflow \ models \ research \ object_detection \ training 목록아래에서 labelmap.pbtxt를 생성한다.예를 들어, 인식 대상이 사과나 바나나, 오렌지일 경우 labelmap.pbtxt 의 내용은 아래와 같다.
주의점: 여기서 ID와 name은 3-2번의 generate_tfrecord.py 에서 기록한것과 일치해야 한다.

item {
  id: 1
  name: 'apple'
}

item {
  id: 2
  name: 'banana'
}

item {
  id: 3
  name: 'orange'
}

6.세팅파일 수정하기

인식훈련 터널에 대한 세팅이며 모델 및 학습에 쓰이는 파라미터에 대해 정의되어 있다.이는 훈련에 들어가기 전의 마지막 절차가 된다.配置对象检测训练管道。它定义了哪个模型以及将用于培训的参数。这是运行训练前的最后一步。

tensorflow1 \ models \ research \ object_detection \ samples \ configs 으로 지향하되 faster_rcnn_inception_v2_pets.config 파일을 \ object_detection \ training 목록아래로 복사한 뒤, 에디터로 파일을 열어본다.여기서 .config 에 대해 수정가능하며 주로 종류나 예제수량을 수정하거나 파일경로를 훈련하는 데이터에 추가하는 등 작업을 할수 있다.

faster_rcnn_inception_v2_pets.config 파일에 대해 아래와 같은 수정 진행.
주의점:경로 입력시 반드시 ()가 아닌 (/)와 큰따옴표(“)를 사용하여야 한다.

9번째 줄에서 num_classes는 인식대상종류수로 수정한다.예를들어 상기 예제일 경우 인식대상이 사과,바나나,오렌지이기 때문에 num_classes:3 으로 된다.

106번째 줄에서 fine_tune_checkpoint를 아래와 같이 변경한다.

fine_tune_checkpoint:“D:/Image-GPU/tensorflow/models/research/object_detection/faster_rcnn_inception_v2_coco_2018_01_28/model.ckpt”

123번째,125번째 줄, train_input_reader부분에서 input_path와 label_map_path를 아래와 같이 변경한다.

input_path:“D:/Image-GPU/tensorflow/models/research/object_detection/train.record”
label_map_path:“D:/Image-GPU/tensorflow/models/research/object_detection/training/labelmap.pbtxt”

130번째 줄에서는 num_examples 를 \ images \ test 목록에 이미지개수로 수정한다

135,137줄, eval_input_reader에서 input_path와 label_map_path를 아래와 같이 변경한다.

input_path:“D:/Image-GPU/tensorflow/models/research/object_detection/test.record”
label_map_path:“D:/Image-GPU/tensorflow/models/research/object_detection/training/labelmap.pbtxt”

상기 수정완료된 내용을 저장하고나면 모델의 세팅준비작업이 완료된 상태로 실행이 가능하게 된다.

7.학습기능 실행하기

python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/faster_rcnn_inception_v2_pets.config

object-detection에 train.py파일이 없을 경우 /research/object_detection/legacy 경로에서 train.py파일을 /research/object_detection 로 카피하여 실행하면 된다.
모든 설정이 문제없이 되어있을 경우 TensorFlow 는 초기화하게 되며 실제로 훈련시작되기 전까지 초기화하는데 약 1분간의 시간이 소요될수 있으며 훈련이 시작될 경우 아래와 같이 보여지게 된다.
这里写图片描述

8.추리결과 끌어내기

훈련이 완료되었을 경우 마지막으로 .pb파일을 생성하는 작업이 남아있는데 \ object_detection 목록에서 아래와 같은 명령을 넣어 실행한다. 그중 “model.ckpt-XXXX”의 “XXXX”은 training 폴더에서 가장 큰 ID의 .ckpt 파일을 입력해 넣어야 한다

python export_inference_graph.py --input_type image_tensor --pipeline_config_path training/faster_rcnn_inception_v2_pets.config --trained_checkpoint_prefix training/model.ckpt-XXXX --output_directory inference_graph

상기작업 완료되면 \ object_detection \ inference_graph 폴더에
frozen_inference_graph.pb파일이 생성되며 pb파일에는 인식대상검측분류모델이 포함되어 있다.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值