diff --git a/doc/manual_en_google_translated.docx b/doc/manual_en_google_translated.docx index cd6c76d..f4575e1 100644 Binary files a/doc/manual_en_google_translated.docx and b/doc/manual_en_google_translated.docx differ diff --git a/doc/manual_en_google_translated.pdf b/doc/manual_en_google_translated.pdf index 828349d..e858506 100644 Binary files a/doc/manual_en_google_translated.pdf and b/doc/manual_en_google_translated.pdf differ diff --git a/doc/manual_ru.pdf b/doc/manual_ru.pdf index 6712983..892b04d 100644 Binary files a/doc/manual_ru.pdf and b/doc/manual_ru.pdf differ diff --git a/doc/manual_ru_source.docx b/doc/manual_ru_source.docx index d733115..d9543a6 100644 Binary files a/doc/manual_ru_source.docx and b/doc/manual_ru_source.docx differ diff --git a/facelib/PoseEstimator.py b/facelib/PoseEstimator.py index cc0f694..d74ed3e 100644 --- a/facelib/PoseEstimator.py +++ b/facelib/PoseEstimator.py @@ -23,7 +23,6 @@ class PoseEstimator(object): self.angles = [90, 45, 30, 10, 2] self.alpha_cat_losses = [7,5,3,1,1] self.class_nums = [ angle+1 for angle in self.angles ] - self.model = PoseEstimator.BuildModel(resolution, class_nums=self.class_nums) @@ -57,7 +56,7 @@ class PoseEstimator(object): loss_pitch = [] loss_yaw = [] loss_roll = [] - + for i,class_num in enumerate(self.class_nums): a = self.alpha_cat_losses[i] loss_pitch += [ a*K.categorical_crossentropy( inp_bins_t[i*3+0], bins_t[i*3+0] ) ] @@ -65,7 +64,12 @@ class PoseEstimator(object): loss_roll += [ a*K.categorical_crossentropy( inp_bins_t[i*3+2], bins_t[i*3+2] ) ] idx_tensor = K.constant( np.array([idx for idx in range(self.class_nums[0])], dtype=K.floatx() ) ) - pitch_t, yaw_t, roll_t = K.sum ( bins_t[0] * idx_tensor, 1), K.sum ( bins_t[1] * idx_tensor, 1), K.sum ( bins_t[2] * idx_tensor, 1) + #pitch_t, yaw_t, roll_t = K.sum ( bins_t[0] * idx_tensor, 1), K.sum ( bins_t[1] * idx_tensor, 1), K.sum ( bins_t[2] * idx_tensor, 1) + + pitch_t, yaw_t, roll_t = nnlib.tf.reduce_sum ( bins_t[0] * idx_tensor, 1), nnlib.tf.reduce_sum ( bins_t[1] * idx_tensor, 1), nnlib.tf.reduce_sum ( bins_t[2] * idx_tensor, 1) + + + reg_alpha = 2 reg_pitch_loss = reg_alpha * K.mean(K.square( inp_pitch_t - pitch_t), -1) @@ -75,7 +79,6 @@ class PoseEstimator(object): pitch_loss = reg_pitch_loss + sum(loss_pitch) yaw_loss = reg_yaw_loss + sum(loss_yaw) roll_loss = reg_roll_loss + sum(loss_roll) - opt = Adam(lr=0.000001) if training: diff --git a/models/Model_SAE/Model.py b/models/Model_SAE/Model.py index 067a3d8..760ed47 100644 --- a/models/Model_SAE/Model.py +++ b/models/Model_SAE/Model.py @@ -67,7 +67,7 @@ class SAEModel(ModelBase): self.options['d_ch_dims'] = np.clip ( io.input_int("Decoder dims per channel (10-85 ?:help skip:%d) : " % (default_d_ch_dims) , default_d_ch_dims, help_message="More decoder dims help to get better details, but require more VRAM. You can fine-tune model size to fit your GPU." ), 10, 85 ) #self.options['remove_gray_border'] = io.input_bool ("Remove gray border? (y/n, ?:help skip:n) : ", False, help_message="Removes gray border of predicted face, but requires more computing resources.") self.options['multiscale_decoder'] = io.input_bool ("Use multiscale decoder? (y/n, ?:help skip:n) : ", False, help_message="Multiscale decoder helps to get better details.") - self.options['ca_weights'] = io.input_bool ("Use CA weights? (y/n, ?:help skip: %s ) : " % (yn_str[def_ca_weights]), def_ca_weights, help_message="Initialize network with 'Convolution Aware' weights. This may help to achieve a higher accuracy model, but consumes time at first run.") + self.options['ca_weights'] = io.input_bool ("Use CA weights? (y/n, ?:help skip: %s ) : " % (yn_str[def_ca_weights]), def_ca_weights, help_message="Initialize network with 'Convolution Aware' weights. This may help to achieve a higher accuracy model, but consumes a time at first run.") else: self.options['ae_dims'] = self.options.get('ae_dims', default_ae_dims) self.options['e_ch_dims'] = self.options.get('e_ch_dims', default_e_ch_dims)