-
Notifications
You must be signed in to change notification settings - Fork 16
Expand file tree
/
Copy pathMakefile
More file actions
163 lines (141 loc) · 6.56 KB
/
Makefile
File metadata and controls
163 lines (141 loc) · 6.56 KB
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
data=$(shell realpath data)
models=$(shell realpath models)
ensure_out_dirs_exists = mkdir -p $(data) $(models)
gt_data_dir = $(shell cat gt_data_dir)
setting = $(shell cat $(setting_dir)/$(2) | shyaml get-value $(1))
gt_data = $(shell cat $(setting_dir)/gt.yaml | shyaml get-value $(1) | xargs -i realpath $(gt_data_dir)/{})
get = $(shell cat $(2) | shyaml get-value $(1))
test_get:
echo '{"hello": "world"}' > /tmp/test_get
test "$(call get,hello,/tmp/test_get)" = "world"
test_gt_data:
echo $(call gt_data,gt_val)
REAL_TAGS_DATASET=$(data)/real_tags.hdf5
# build the real datasets from raw images. Not needed as the real_tags file can
# be download.
real_dataset: $(setting_dir)/real_images.txt
$(ensure_out_dirs_exists)
bb_build_real_tag_dataset --out $(REAL_TAGS_DATASET) \
--force \
$(setting_dir)/real_images.txt
echo '{"path": "$(REAL_TAGS_DATASET)"}' > real_dataset
generate_3d_tags_distribution.json:
bb_default_3d_tags_distribution generate_3d_tags_distribution.json
generated_3d_tags_dir=$(data)/generated_3d_tags/
generate_3d_tag_samples=$(call setting,nb_samples,tag3d_data_set.yaml)
# create the dataset of tags from the simple 3D model
tag3d_data_set: generate_3d_tags_distribution.json $(setting_dir)/tag3d_data_set.yaml
$(ensure_out_dirs_exists)
bb_generate_3d_tags \
--force \
--nb-samples $(generate_3d_tag_samples) \
--dist generate_3d_tags_distribution.json \
$(generated_3d_tags_dir)/generated_3d_tags.hdf5
echo '{"path": "$(generated_3d_tags_dir)/generated_3d_tags.hdf5"}' > tag3d_data_set
network_3d_tag_dir = $(models)/tag3d_network
n3d_units = $(call setting,units,tag3d_network.yaml)
n3d_depth = $(call setting,depth,tag3d_network.yaml)
n3d_epoch = $(call setting,epoch,tag3d_network.yaml)
n3d_nb_dense = $(call setting,nb_dense,tag3d_network.yaml)
n3d_weights =$(network_3d_tag_dir)/network_tags3d_n$(n3d_units)_d$(n3d_depth)_e$(n3d_epoch).hdf5
# trains the neural network to emulate the simple 3D model
tag3d_network: tag3d_data_set $(setting_dir)/tag3d_network.yaml
$(ensure_out_dirs_exists)
bb_train_tag3d_network \
--force \
--3d-tags $(call get,path,tag3d_data_set) \
--units $(n3d_units) \
--depth $(n3d_depth)\
--epoch $(n3d_epoch) \
--nb-dense $(n3d_nb_dense) \
$(network_3d_tag_dir)
test -e $(n3d_weights)
echo '{"weights_path": "$(n3d_weights)"}' > tag3d_network
generator_units = $(call setting,gen-units,rendergan.yaml)
discriminator_units = $(call setting,dis-units,rendergan.yaml)
rendergan_dir = $(models)/rendergan/
# trains the GAN
rendergan: tag3d_network real_dataset $(setting_dir)/rendergan.yaml
$(ensure_out_dirs_exists)
bb_train_rendergan \
--real $(call get,path,real_dataset) \
--nntag3d $(call get,weights_path,tag3d_network) \
--output-dir $(rendergan_dir) \
--force \
--epoch $(call setting,epoch,rendergan.yaml) \
--dis-units $(discriminator_units) \
--gen-units $(generator_units)
echo '{"path": "${rendergan_dir}", "epoch": "300"}' > rendergan
render_gan_models_dir = $(call get,path,rendergan)/models/$(call setting,epoch,artificial_data_set.yaml)/
# creates an artificial dataset by using the GAN
artificial_data_set: rendergan $(setting_dir)/artificial_data_set.yaml
$(ensure_out_dirs_exists)
$(eval artificial_data_set_date := $(shell date -Iseconds))
bb_sample_from_rendergan \
--generator ${render_gan_models_dir}/sample_generator_given_z.hdf5 \
--discriminator ${render_gan_models_dir}/discriminator.hdf5 \
--nb-samples $(call setting,nb_train_samples,artificial_data_set.yaml) \
--selected-outputs "$(call setting,selected_outputs,artificial_data_set.yaml)" \
${data}/artificial_train_set_$(artificial_data_set_date).hdf5
bb_sample_from_rendergan \
--generator ${render_gan_models_dir}/sample_generator_given_z.hdf5 \
--discriminator ${render_gan_models_dir}/discriminator.hdf5 \
--nb-samples $(call setting,nb_test_samples,artificial_data_set.yaml) \
--selected-outputs "$(call setting,selected_outputs,artificial_data_set.yaml)" \
${data}/artificial_test_set_$(artificial_data_set_date).hdf5
echo '{"train_set": "${data}/artificial_train_set_$(artificial_data_set_date).hdf5",\n' \
'"test_set": "${data}/artificial_test_set_$(artificial_data_set_date).hdf5"}' \
> artificial_data_set
decoder_settings=decoder.yaml
# trains a decoder model
decoder_model: artificial_data_set $(setting_dir)/$(decoder_settings) $(setting_dir)/gt.yaml
$(ensure_out_dirs_exists)
mkdir -p $(models)/decoder
bb_train_decoder \
--gt-train $(call gt_data,gt_train,gt.yaml) \
--gt-val $(call gt_data,gt_val,gt.yaml) \
--gt-test $(call gt_data,gt_test,gt.yaml) \
--train-sets $(call get,train_set,artificial_data_set) \
--test-set $(call get,test_set,artificial_data_set) \
--create-output-dir-in $(models)/decoder \
--make-json decoder_model \
$(setting_dir)/$(decoder_settings) \
decoder_evaluation:
bb_evaluate_decoder $(call get,path,decoder_model)
decoder_evaluation_on_real:
bb_evaluate_decoder $(call get,path,decoder_on_real)
decoder: decoder_model decoder_evaluation
decoder_on_real: $(setting_dir)/decoder_on_real.yaml $(setting_dir)/gt.yaml
$(ensure_out_dirs_exists)
mkdir -p $(models)/decoder_on_real
bb_train_decoder \
--gt-val $(call gt_data,gt_train_val,gt.yaml) \
--gt-test $(call gt_data,gt_train_test,gt.yaml) \
--train-sets $(call setting,gt_train,gt.yaml) \
--test-set $(call setting,gt_train,gt.yaml) \
--create-output-dir-in $(models)/decoder_on_real \
--make-json decoder_on_real \
$(setting_dir)/decoder_on_real.yaml \
decoder_combined: $(setting_dir)/decoder_combined.yaml $(setting_dir)/gt.yaml
$(ensure_out_dirs_exists)
mkdir -p $(models)/decoder_combined
bb_train_decoder \
--gt-train $(call gt_data,gt_train,gt.yaml) \
--gt-val $(call gt_data,gt_val,gt.yaml) \
--gt-test $(call gt_data,gt_test,gt.yaml) \
--train-sets $(call get,train_set,artificial_data_set) \
--test-set $(call get,test_set,artificial_data_set) \
--create-output-dir-in $(models)/decoder_combined \
--make-json decoder_combined \
$(setting_dir)/decoder_combined.yaml \
multiple_decoder_data_name = $(call setting,data_name,multiple_decoders.yaml)
multiple_decoders: artificial_data_set $(setting_dir)/multiple_decoders.yaml $(setting_dir)/gt.yaml
bb_train_multiple_decoders \
--gt-val $(call gt_data,gt_val,gt.yaml) \
--gt-test $(call gt_data,gt_test,gt.yaml) \
--train-set $(call get,train_set,artificial_data_set) \
--test-set $(call get,test_set,artificial_data_set) \
--n-jobs $(call setting,n_jobs,multiple_decoders.yaml) \
--n-trails $(call setting,n_trails,multiple_decoders.yaml) \
--data-name "$(multiple_decoder_data_name)" \
$(models)/multi_decoders/$(multiple_decoder_data_name)/