-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathMakefile
132 lines (101 loc) · 4.83 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
SCRIPTS_PATH=scripts
PYTHON_PATH=$$PYTHONPATH:models/research/:models/research/slim
EXPORT_GRAPH_PATH=graphs
# Default model config
CONFIG ?= ssdlite_mobilenet_v2_hornet.config
# If GPU/Cuda acceleration found enable it
CUDA_LIB_PATH=/usr/local/cuda/extras/CUPTI/lib64
ifneq ("$(wildcard $(CUDA_LIB_PATH))","")
$(info "CUDA found")
LD_LIB=$$LD_LIBRARY_PATH:$(CUDA_PATH)
else
LD_LIB=$$LD_LIBRARY_PATH
endif
help:
@echo "Hornet Detector Tensorflow Model Trainer "
@echo ""
@echo "train:\t\tTrain tensorflow model"
@echo "export-graph:\tExport inference graph"
@echo "csv:\t\tCreate images/test_labels.csv & images/train_labels.csv from XML files"
@echo "record:\t\tCreate images/test.record & images/train.record from CSV and image files"
@echo "board:\t\tRun Tensorboard"
@echo "label:\t\tRun labelImg on images/ folder"
# CSV files
images/test_labels.csv: $(wildcard images/test/*.xml)
$(SCRIPTS_PATH)/xml_to_csv.py -i images/test -o $@
images/train_labels.csv: $(wildcard images/train/*.xml)
$(SCRIPTS_PATH)/xml_to_csv.py -i images/train -o $@
csv: images/test_labels.csv images/train_labels.csv
# Tensorflow models submodule
models/research:
git submodule update --init models
models: models/research
# Proto compilation
proto: models
cd models/research && protoc object_detection/protos/*.proto --python_out=.
# Generate Record files
images/test.record: images/test_labels.csv models
PYTHONPATH=$(PYTHON_PATH) ./scripts/generate_tfrecord.py \
--csv_input=$< --output_path=$@ --image_dir=images/test
images/train.record: images/train_labels.csv models
PYTHONPATH=$(PYTHON_PATH) ./scripts/generate_tfrecord.py \
--csv_input=$< --output_path=$@ --image_dir=images/train
record: images/test.record images/train.record
# Detection Model Zoo
faster_%.tar.gz ssd_%.tar.gz ssdlite_%.tar.gz:
wget http://download.tensorflow.org/models/object_detection/$@
# Uncompress model archive on-demand
%_model: %.tar.gz
tar -xf $^ --one-top-level=$@ --strip-components 1
touch $@ # For dependency tree
# Test trainer (do nothing)
train_test: models proto
PYTHONPATH=$(PYTHON_PATH) python3 models/research/object_detection/builders/model_builder_test.py
# Default model to train
train: train_ssdmbnetv2
# Train a model based on ssdlite_mobilenet_v2_coco_2018_05_09
train_ssdmbnetv2: models proto images/test.record images/train.record ssdlite_mobilenet_v2_coco_2018_05_09_model
LD_LIBRARY_PATH=$(LD_LIB) PYTHONPATH=$(PYTHON_PATH) python3 models/research/object_detection/model_main.py \
--pipeline_config_path=training/ssdlite_mobilenet_v2_hornet.config \
--model_dir=training --num_train_steps=50000 \
--sample_1_of_n_eval_examples=1 --alsologtostderr
# Train a model based on ssd_mobilenet_v1_coco_2018_01_28
train_ssdmbnetv1: models proto images/test.record images/train.record ssd_mobilenet_v1_coco_2018_01_28_model
LD_LIBRARY_PATH=$(LD_LIB) PYTHONPATH=$(PYTHON_PATH) python3 models/research/object_detection/model_main.py \
--pipeline_config_path=training/ssd_mobilenet_v1_hornet.config \
--model_dir=training --num_train_steps=50000 \
--sample_1_of_n_eval_examples=1 --alsologtostderr
# Train a model based on faster_rcnn_inception_v2_coco_2018_01_28
train_frcnnv2: models proto images/test.record images/train.record faster_rcnn_inception_v2_coco_2018_01_28_model
LD_LIBRARY_PATH=$(LD_LIB) PYTHONPATH=$(PYTHON_PATH) python3 models/research/object_detection/model_main.py \
--pipeline_config_path=training/faster_rcnn_inception_v2_hornet.config \
--model_dir=training --num_train_steps=50000 \
--sample_1_of_n_eval_examples=1 --alsologtostderr
# Run Tensorboard web server
board:
PYTHONPATH=$(PYTHON_PATH) tensorboard --logdir training
DATE=$(shell date +%Y-%m-%d)
GIT_REF=$(shell git rev-parse --short HEAD)
export-graph: models proto
@echo "Exporting graph for $(CONFIG)"
PYTHONPATH=$(PYTHON_PATH) python3 models/research/object_detection/export_inference_graph.py \
--input_type image_tensor \
--pipeline_config_path training/$(CONFIG) \
--trained_checkpoint_prefix training/model.ckpt-50000 \
--output_directory $(EXPORT_GRAPH_PATH)/$(basename $(CONFIG))_$(DATE)-$(GIT_REF)
@echo "Exporting tflite graph for $(CONFIG)"
PYTHONPATH=$(PYTHON_PATH) python3 models/research/object_detection/export_tflite_ssd_graph.py \
--pipeline_config_path=training/$(CONFIG) \
--trained_checkpoint_prefix=training/model.ckpt-50000 \
--add_postprocessing_op=true \
--output_directory=$(EXPORT_GRAPH_PATH)/$(basename $(CONFIG))_$(DATE)-$(GIT_REF)
# Label images with labelImg
labelImg/labelImg.py:
git submodule update --init labelImg
labelImg: labelImg/labelImg.py
labelImg/libs/resources.py: labelImg
make -C labelImg qt5py3
# Run labeImg
label: labelImg/libs/resources.py
python3 labelImg/labelImg.py images/ training/labels.txt
.PHONY: help csv models proto record train_test train train_ssdmbnetv2 train_ssdmbnetv1 train_frcnnv2 export-graph board label