@@ -133,8 +133,8 @@ def setImage(self, imagePath, sharedIdentity = False):
133
133
imagesLandmark = self .landmarksDetector .drawLandmarks (self .inputImage .tensor [i ], self .landmarks [i ])
134
134
cv2 .imwrite (self .outputDir + '/landmarks' + str (i ) + '.png' , cv2 .cvtColor (imagesLandmark , cv2 .COLOR_BGR2RGB ) )
135
135
self .pipeline .initSceneParameters (self .framesNumber , sharedIdentity )
136
- self .enableGrad ()
137
136
self .initCameraPos () #always init the head pose (rotation + translation)
137
+ self .enableGrad ()
138
138
139
139
def initCameraPos (self ):
140
140
print ('init camera pose...' , file = sys .stderr , flush = True )
@@ -224,15 +224,17 @@ def runStep2(self):
224
224
225
225
optimizer = torch .optim .Adam ([
226
226
{'params' : self .pipeline .vShCoeffs , 'lr' : 0.005 },
227
- {'params' : self .pipeline .vShapeCoeff , 'lr' : 0.01 },
228
- {'params' : self .pipeline .vAlbedoCoeff , 'lr' : 0.007 },
229
- {'params' : self .pipeline .vExpCoeff , 'lr' : 0.01 },
230
- {'params' : self .pipeline .vRotation , 'lr' : 0.001 },
231
- {'params' : self .pipeline .vTranslation , 'lr' : 0.001 }
227
+ {'params' : self .pipeline .vAlbedoCoeff , 'lr' : 0.007 }
232
228
])
233
229
losses = []
234
230
235
231
for iter in tqdm .tqdm (range (self .config .iterStep2 + 1 )):
232
+ if iter == 100 :
233
+ optimizer .add_param_group ({'params' : self .pipeline .vShapeCoeff , 'lr' : 0.01 })
234
+ optimizer .add_param_group ({'params' : self .pipeline .vExpCoeff , 'lr' : 0.01 })
235
+ optimizer .add_param_group ({'params' : self .pipeline .vRotation , 'lr' : 0.0001 })
236
+ optimizer .add_param_group ({'params' : self .pipeline .vTranslation , 'lr' : 0.0001 })
237
+
236
238
optimizer .zero_grad ()
237
239
vertices , diffAlbedo , specAlbedo = self .pipeline .morphableModel .computeShapeAlbedo (self .pipeline .vShapeCoeff , self .pipeline .vExpCoeff , self .pipeline .vAlbedoCoeff )
238
240
cameraVerts = self .pipeline .camera .transformVertices (vertices , self .pipeline .vTranslation , self .pipeline .vRotation )
@@ -288,15 +290,17 @@ def runStep3(self):
288
290
vRoughTextures .requires_grad = True
289
291
290
292
optimizer = torch .optim .Adam ([
291
- {'params' : self .pipeline .vShCoeffs , 'lr' : 0.005 * 2. },
292
- {'params' : vDiffTextures , 'lr' : 0.005 },
293
+ {'params' : vDiffTextures , 'lr' : 0.005 },
293
294
{'params' : vSpecTextures , 'lr' : 0.02 },
294
- {'params' : vRoughTextures , 'lr' : 0.02 },
295
- {'params' : self .pipeline .vShapeCoeff , 'lr' : 0.01 },
296
- {'params' : self .pipeline .vExpCoeff , 'lr' : 0.01 },
297
- {'params' : self .pipeline .vRotation , 'lr' : 0.0005 },
298
- {'params' : self .pipeline .vTranslation , 'lr' : 0.0005 }
295
+ {'params' : vRoughTextures , 'lr' : 0.02 }
299
296
])
297
+ ''''
298
+ {'params': self.pipeline.vShCoeffs, 'lr': 0.005 * 2.},
299
+ {'params': self.pipeline.vShapeCoeff, 'lr': 0.01},
300
+ {'params': self.pipeline.vExpCoeff, 'lr': 0.01},
301
+ {'params': self.pipeline.vRotation, 'lr': 0.0005},
302
+ {'params': self.pipeline.vTranslation, 'lr': 0.0005}'''
303
+
300
304
losses = []
301
305
302
306
for iter in tqdm .tqdm (range (self .config .iterStep3 + 1 )):
0 commit comments