JustAGeek commited on
Commit
c3764b7
·
verified ·
1 Parent(s): 93d2636

Delete duplicate/old file: \/trainer.py

Browse files
Files changed (1) hide show
  1. ///trainer.py +0 -182
///trainer.py DELETED
@@ -1,182 +0,0 @@
1
- '''
2
- Scripts for the training and testing functions
3
- train() function is called for training the network
4
- test() function is called to evaluate the network
5
- Both the function logs and saves the results in the files
6
- as mentioned in the params.py file
7
- '''
8
- import warnings
9
- with warnings.catch_warnings():
10
- warnings.filterwarnings("ignore",category=FutureWarning)
11
- import numpy as np
12
- import os
13
- import time
14
- import hdf5storage
15
- from utils import *
16
- from Generators import *
17
- from params import *
18
-
19
- def train(model, train_loader, test_loader):
20
- """Traning pipeline
21
-
22
- Args:
23
- model (torch.module): pytorch model
24
- train_loader (torch.dataloader): dataloader
25
- test_loader (torch.dataloader): dataloader
26
- """
27
- # set data index
28
- offset_output_index=0
29
- input_index=1
30
- output_index=2
31
-
32
- # initialization
33
- total_steps = 0
34
- print('Training called')
35
- stopping_count = 0
36
-
37
- for epoch in range(model.opt.starting_epoch_count+1, model.opt.n_epochs+1): # opt.niter + opt.niter_decay + 1):
38
- epoch_start_time = time.time()
39
- epoch_loss = 0
40
- epoch_offset_loss = 0
41
- error =[]
42
-
43
- for i, data in enumerate(train_loader):
44
- total_steps += model.opt.batch_size
45
- if opt_exp.n_decoders == 2:
46
- model.set_input(data[input_index], data[output_index], data[offset_output_index], shuffle_channel=False)
47
- elif opt_exp.n_decoders == 1:
48
- model.set_input(data[input_index], data[output_index], shuffle_channel=False)
49
- model.optimize_parameters()
50
- dec_outputs = model.decoder.output
51
- # print(f"dec_outputs size is : {dec_outputs.shape}")
52
- error.extend(localization_error(dec_outputs.data.cpu().numpy(),data[output_index].cpu().numpy(),scale=0.1))
53
-
54
- write_log([str(model.decoder.loss.item())], model.decoder.model_name, log_dir=model.decoder.opt.log_dir, log_type='loss')
55
- if opt_exp.n_decoders == 2:
56
- write_log([str(model.offset_decoder.loss.item())], model.offset_decoder.model_name, log_dir=model.offset_decoder.opt.log_dir, log_type='offset_loss')
57
- if total_steps % model.decoder.opt.save_latest_freq == 0:
58
- print('saving the latest model (epoch %d, total_steps %d)' %
59
- (epoch, total_steps))
60
- model.save_networks('latest')
61
-
62
- epoch_loss += model.decoder.loss.item()
63
- if opt_exp.n_decoders == 2:
64
- epoch_offset_loss += model.offset_decoder.loss.item()
65
-
66
- median_error_tr = np.median(error)
67
- error_90th_tr = np.percentile(error,90)
68
- error_99th_tr = np.percentile(error,99)
69
- nighty_percentile_error_tr = np.percentile(error,90)
70
- epoch_loss /= i
71
- if opt_exp.n_decoders == 2:
72
- epoch_offset_loss /= i
73
- write_log([str(epoch_loss)], model.decoder.model_name, log_dir=model.decoder.opt.log_dir, log_type='epoch_decoder_loss')
74
- if opt_exp.n_decoders == 2:
75
- write_log([str(epoch_offset_loss)], model.offset_decoder.model_name, log_dir=model.offset_decoder.opt.log_dir, log_type='epoch_offset_decoder_loss')
76
- write_log([str(median_error_tr)], model.decoder.model_name, log_dir=model.decoder.opt.log_dir, log_type='train_median_error')
77
- write_log([str(error_90th_tr)], model.decoder.model_name, log_dir=model.decoder.opt.log_dir, log_type='train_90th_error')
78
- write_log([str(error_99th_tr)], model.decoder.model_name, log_dir=model.decoder.opt.log_dir, log_type='train_99th_error')
79
- write_log([str(nighty_percentile_error_tr)], model.decoder.model_name, log_dir=model.decoder.opt.log_dir, log_type='train_90_error')
80
- if (epoch == model.opt.starting_epoch_count + 1):
81
- min_eval_loss, median_error = test(model, test_loader, save_output=False)
82
- else:
83
- new_eval_loss, new_med_error = test(model, test_loader, save_output=False)
84
- if (median_error>=new_med_error):
85
- stopping_count = stopping_count+1
86
- median_error = new_med_error
87
-
88
- # generated_outputs = temp_generator_outputs
89
- if epoch % model.encoder.opt.save_epoch_freq == 0:
90
- print('saving the model at the end of epoch %d, iters %d' %(epoch, total_steps))
91
- model.save_networks('latest')
92
- model.save_networks(epoch)
93
- if (stopping_count==2):
94
- print('Saving best model at %d epoch' %(epoch))
95
- model.save_networks('best')
96
- stopping_count=0
97
-
98
- print('End of epoch %d / %d \t Time Taken: %d sec' %
99
- (epoch, model.decoder.opt.niter + model.decoder.opt.niter_decay, time.time() - epoch_start_time))
100
- model.decoder.update_learning_rate()
101
- model.encoder.update_learning_rate()
102
- if opt_exp.n_decoders == 2:
103
- model.offset_decoder.update_learning_rate()
104
-
105
-
106
- def test(model, test_loader, save_output=True, save_name="decoder_test_result", save_dir="", log=True):
107
- """Test and evaluation pipeline
108
-
109
- Args:
110
- model (torch.module): pytorch model
111
- test_loader (torch.dataloader): dataloader
112
- save_output (bool, optional): whether to save output to mat file. Defaults to True.
113
- save_name (str, optional): name of the mat file. Defaults to "decoder_test_result".
114
- save_dir (str, optional): directory where output mat file is saved. Defaults to "".
115
- log (bool, optional): whether to log output. Defaults to True.
116
-
117
- Returns:
118
- tuple: (total_loss -> float, median_error -> float)
119
- """
120
- print('Evaluation Called')
121
- model.eval()
122
-
123
- # set data index
124
- offset_output_index=0
125
- input_index=1
126
- output_index=2
127
-
128
- # create containers
129
- generated_outputs = []
130
- offset_outputs = []
131
- total_loss = 0
132
- total_offset_loss = 0
133
- error =[]
134
- for i, data in enumerate(test_loader):
135
- if opt_exp.n_decoders == 2:
136
- model.set_input(data[input_index], data[output_index], data[offset_output_index], shuffle_channel=False)
137
- elif opt_exp.n_decoders == 1:
138
- model.set_input(data[input_index], data[output_index], shuffle_channel=False)
139
- model.test()
140
-
141
- # get model outputs
142
- gen_outputs = model.decoder.output # gen_outputs.size = (N,1,H,W)
143
- if opt_exp.n_decoders == 2:
144
- off_outputs = model.offset_decoder.output # off_outputs.size = (N,n_ap,H,W)
145
-
146
- generated_outputs.extend(gen_outputs.data.cpu().numpy())
147
- if opt_exp.n_decoders == 2:
148
- offset_outputs.extend(off_outputs.data.cpu().numpy())
149
- error.extend(localization_error(gen_outputs.data.cpu().numpy(),data[output_index].cpu().numpy(),scale=0.1))
150
- total_loss += model.decoder.loss.item()
151
- if opt_exp.n_decoders == 2:
152
- total_offset_loss += model.offset_decoder.loss.item()
153
- total_loss /= i
154
- if opt_exp.n_decoders == 2:
155
- total_offset_loss /= i
156
- median_error = np.median(error)
157
- nighty_percentile_error = np.percentile(error,90)
158
- error_99th = np.percentile(error,99)
159
-
160
- if log:
161
- write_log([str(median_error)], model.decoder.model_name, log_dir=model.opt.log_dir, log_type='test_median_error')
162
- write_log([str(nighty_percentile_error)], model.decoder.model_name, log_dir=model.opt.log_dir, log_type='test_90_error')
163
- write_log([str(error_99th)], model.decoder.model_name, log_dir=model.opt.log_dir, log_type='test_99_error')
164
- write_log([str(total_loss)], model.decoder.model_name, log_dir=model.opt.log_dir, log_type='test_loss')
165
- if opt_exp.n_decoders == 2:
166
- write_log([str(total_offset_loss)], model.offset_decoder.model_name, log_dir=model.opt.log_dir, log_type='test_offset_loss')
167
-
168
- if save_output:
169
- if not save_dir:
170
- save_dir = model.decoder.results_save_dir # default save directory
171
-
172
- if not os.path.exists(save_dir):
173
- os.makedirs(save_dir, exist_ok=True)
174
-
175
- save_path = f"{save_dir}/{save_name}.mat"
176
- hdf5storage.savemat(save_path,
177
- mdict={"outputs":generated_outputs,"wo_outputs":offset_outputs, "error": error},
178
- appendmat=True,
179
- format='7.3',
180
- truncate_existing=True)
181
- print(f"result saved in {save_path}")
182
- return total_loss, median_error