StevenChen16 commited on
Commit
77a62ab
·
verified ·
1 Parent(s): db5b898

Update train.py

Browse files
Files changed (1) hide show
  1. train.py +56 -54
train.py CHANGED
@@ -181,63 +181,65 @@ def train_one_step(model, noise_image, optimizer, target_content_features, targe
181
  def main(content_img, style_img, epochs, step_per_epoch, learning_rate, content_loss_factor, style_loss_factor, img_size, img_width, img_height):
182
  global CONTENT_LOSS_FACTOR, STYLE_LOSS_FACTOR, CONTENT_IMAGE_PATH, STYLE_IMAGE_PATH, OUTPUT_DIR, EPOCHS, LEARNING_RATE, STEPS_PER_EPOCH, M, N, image_mean, image_std, IMG_WIDTH, IMG_HEIGHT
183
 
184
- CONTENT_LOSS_FACTOR = content_loss_factor
185
- STYLE_LOSS_FACTOR = style_loss_factor
186
- CONTENT_IMAGE_PATH = content_img
187
- STYLE_IMAGE_PATH = style_img
188
- EPOCHS = epochs
189
- LEARNING_RATE = learning_rate
190
- STEPS_PER_EPOCH = step_per_epoch
191
-
192
- # 内容特征层及损失加权系数
193
- CONTENT_LAYERS = {"block4_conv2": 0.5, "block5_conv2": 0.5}
194
- # 风格特征层及损失加权系数
195
- STYLE_LAYERS = {
196
- "block1_conv1": 0.2,
197
- "block2_conv1": 0.2,
198
- "block3_conv1": 0.2,
199
- "block4_conv1": 0.2,
200
- "block5_conv1": 0.2,
201
- }
202
-
203
- if img_size == "default size":
204
- IMG_WIDTH = 450
205
- IMG_HEIGHT = 300
206
- else:
207
- IMG_WIDTH = img_width
208
- IMG_HEIGHT = img_height
209
-
210
- print("IMG_WIDTH:", IMG_WIDTH)
211
- print("IMG_HEIGHT:", IMG_HEIGHT)
212
-
213
- # 我们准备使用经典网络在imagenet数据集上的预训练权重,所以归一化时也要使用imagenet的平均值和标准差
214
- image_mean = tf.constant([0.485, 0.456, 0.406])
215
- image_std = tf.constant([0.299, 0.224, 0.225])
216
-
217
- model = NeuralStyleTransferModel(CONTENT_LAYERS, STYLE_LAYERS)
218
-
219
- content_image = load_images_from_list(CONTENT_IMAGE_PATH, IMG_WIDTH, IMG_HEIGHT)
220
- style_image = load_images_from_list(STYLE_IMAGE_PATH, IMG_WIDTH, IMG_HEIGHT)
221
-
222
- target_content_features = model(content_image)["content"]
223
- target_style_features = model(style_image)["style"]
224
-
225
- M = IMG_WIDTH * IMG_HEIGHT
226
- N = 3
227
-
228
- optimizer = tf.keras.optimizers.Adam(LEARNING_RATE)
229
-
230
- noise_image = tf.Variable((content_image[0] + np.random.uniform(-0.2, 0.2, (1, IMG_HEIGHT, IMG_WIDTH, 3))) / 2)
231
-
232
- for epoch in range(EPOCHS):
233
- with tqdm(total=STEPS_PER_EPOCH, desc="Epoch {}/{}".format(epoch + 1, EPOCHS)) as pbar:
234
- for step in range(STEPS_PER_EPOCH):
235
- _loss = train_one_step(model, noise_image, optimizer, target_content_features, target_style_features)
236
- pbar.set_postfix({"loss": "%.4f" % float(_loss)})
237
- pbar.update(1)
 
238
 
239
  return save_image_for_gradio(noise_image)
240
 
241
  if __name__ == "__main__":
 
242
  opt = parse_opt()
243
  main(opt.content_img_path, opt.style_img_path, opt.epochs, opt.step_per_epoch, opt.learning_rate, opt.content_loss_factor, opt.style_loss_factor, opt.img_size, opt.img_width, opt.img_height)
 
181
  def main(content_img, style_img, epochs, step_per_epoch, learning_rate, content_loss_factor, style_loss_factor, img_size, img_width, img_height):
182
  global CONTENT_LOSS_FACTOR, STYLE_LOSS_FACTOR, CONTENT_IMAGE_PATH, STYLE_IMAGE_PATH, OUTPUT_DIR, EPOCHS, LEARNING_RATE, STEPS_PER_EPOCH, M, N, image_mean, image_std, IMG_WIDTH, IMG_HEIGHT
183
 
184
+ with tf.device('/cuda:0'):
185
+ CONTENT_LOSS_FACTOR = content_loss_factor
186
+ STYLE_LOSS_FACTOR = style_loss_factor
187
+ CONTENT_IMAGE_PATH = content_img
188
+ STYLE_IMAGE_PATH = style_img
189
+ EPOCHS = epochs
190
+ LEARNING_RATE = learning_rate
191
+ STEPS_PER_EPOCH = step_per_epoch
192
+
193
+ # 内容特征层及损失加权系数
194
+ CONTENT_LAYERS = {"block4_conv2": 0.5, "block5_conv2": 0.5}
195
+ # 风格特征层及损失加权系数
196
+ STYLE_LAYERS = {
197
+ "block1_conv1": 0.2,
198
+ "block2_conv1": 0.2,
199
+ "block3_conv1": 0.2,
200
+ "block4_conv1": 0.2,
201
+ "block5_conv1": 0.2,
202
+ }
203
+
204
+ if img_size == "default size":
205
+ IMG_WIDTH = 450
206
+ IMG_HEIGHT = 300
207
+ else:
208
+ IMG_WIDTH = img_width
209
+ IMG_HEIGHT = img_height
210
+
211
+ print("IMG_WIDTH:", IMG_WIDTH)
212
+ print("IMG_HEIGHT:", IMG_HEIGHT)
213
+
214
+ # 我们准备使用经典网络在imagenet数据集上的预训练权重,所以归一化时也要使用imagenet的平均值和标准差
215
+ image_mean = tf.constant([0.485, 0.456, 0.406])
216
+ image_std = tf.constant([0.299, 0.224, 0.225])
217
+
218
+ model = NeuralStyleTransferModel(CONTENT_LAYERS, STYLE_LAYERS)
219
+
220
+ content_image = load_images_from_list(CONTENT_IMAGE_PATH, IMG_WIDTH, IMG_HEIGHT)
221
+ style_image = load_images_from_list(STYLE_IMAGE_PATH, IMG_WIDTH, IMG_HEIGHT)
222
+
223
+ target_content_features = model(content_image)["content"]
224
+ target_style_features = model(style_image)["style"]
225
+
226
+ M = IMG_WIDTH * IMG_HEIGHT
227
+ N = 3
228
+
229
+ optimizer = tf.keras.optimizers.Adam(LEARNING_RATE)
230
+
231
+ noise_image = tf.Variable((content_image[0] + np.random.uniform(-0.2, 0.2, (1, IMG_HEIGHT, IMG_WIDTH, 3))) / 2)
232
+
233
+ for epoch in range(EPOCHS):
234
+ with tqdm(total=STEPS_PER_EPOCH, desc="Epoch {}/{}".format(epoch + 1, EPOCHS)) as pbar:
235
+ for step in range(STEPS_PER_EPOCH):
236
+ _loss = train_one_step(model, noise_image, optimizer, target_content_features, target_style_features)
237
+ pbar.set_postfix({"loss": "%.4f" % float(_loss)})
238
+ pbar.update(1)
239
 
240
  return save_image_for_gradio(noise_image)
241
 
242
  if __name__ == "__main__":
243
+ print(tf.config.list_physical_devices('GPU'))
244
  opt = parse_opt()
245
  main(opt.content_img_path, opt.style_img_path, opt.epochs, opt.step_per_epoch, opt.learning_rate, opt.content_loss_factor, opt.style_loss_factor, opt.img_size, opt.img_width, opt.img_height)