actiongeneration.ipynb
32.5 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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Random Seed: 999\n"
]
},
{
"data": {
"text/plain": [
"<torch._C.Generator at 0x7fb6a805d990>"
]
},
"execution_count": 1,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from __future__ import print_function\n",
"#%matplotlib inline\n",
"import argparse\n",
"import os\n",
"import random\n",
"import torch\n",
"import torch.nn as nn\n",
"import torch.nn.parallel\n",
"import torch.backends.cudnn as cudnn\n",
"import torch.optim as optim\n",
"import torch.utils.data\n",
"import torchvision.datasets as dset\n",
"import torchvision.transforms as transforms\n",
"import torchvision.utils as vutils\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import matplotlib.animation as animation\n",
"from IPython.display import HTML\n",
"\n",
"# Set random seed for reproducibility\n",
"manualSeed = 999\n",
"#manualSeed = random.randint(1, 10000) # use if you want new results\n",
"print(\"Random Seed: \", manualSeed)\n",
"random.seed(manualSeed)\n",
"torch.manual_seed(manualSeed)"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"# Root directory for dataset\n",
"dataroot = \"/home/dhk1349/Desktop/Github/Deep-Learning/Pytorch/Action Generation/generated_action.npy\"\n",
"\n",
"# Number of workers for dataloader\n",
"workers = 2\n",
"\n",
"# Batch size during training\n",
"batch_size = 128\n",
"\n",
"# Spatial size of training images. All images will be resized to this\n",
"# size using a transformer.\n",
"image_size = 64\n",
"\n",
"# Number of channels in the training images. For color images this is 3\n",
"nc = 3\n",
"\n",
"# Size of z latent vector (i.e. size of generator input)\n",
"nz = 100\n",
"\n",
"# Size of feature maps in generator\n",
"ngf = 64\n",
"\n",
"# Size of feature maps in discriminator\n",
"ndf = 64\n",
"\n",
"# Number of training epochs\n",
"num_epochs = 200\n",
"\n",
"# Learning rate for optimizers\n",
"lr = 0.0002\n",
"\n",
"# Beta1 hyperparam for Adam optimizers\n",
"beta1 = 0.5\n",
"\n",
"# Number of GPUs available. Use 0 for CPU mode.\n",
"ngpu = 1"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"device = torch.device(\"cuda:0\" if (torch.cuda.is_available() and ngpu > 0) else \"cpu\")"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"# Generator Code\n",
"\n",
"class Generator(nn.Module):\n",
" def __init__(self, ngpu):\n",
" super(Generator, self).__init__()\n",
" self.ngpu = ngpu\n",
" self.main = nn.Sequential(\n",
" # input is Z, going into a convolution\n",
" nn.ConvTranspose2d( nz, ngf * 8, 4, 1, 0, bias=False),\n",
" nn.BatchNorm2d(ngf * 8),\n",
" nn.ReLU(True),\n",
" # state size. (ngf*8) x 4 x 4\n",
" nn.ConvTranspose2d(ngf * 8, ngf * 4, 4, 2, 1, bias=False),\n",
" nn.BatchNorm2d(ngf * 4),\n",
" nn.ReLU(True),\n",
" # state size. (ngf*4) x 8 x 8\n",
" nn.ConvTranspose2d( ngf * 4, ngf * 2, 4, 2, 1, bias=False),\n",
" nn.BatchNorm2d(ngf * 2),\n",
" nn.ReLU(True),\n",
" # state size. (ngf*2) x 16 x 16\n",
" nn.ConvTranspose2d( ngf * 2, ngf, 4, 2, 1, bias=False),\n",
" nn.BatchNorm2d(ngf),\n",
" nn.ReLU(True),\n",
" # state size. (ngf) x 32 x 32\n",
" nn.ConvTranspose2d( ngf, nc, 4, 2, 1, bias=False),\n",
" nn.Tanh()\n",
" # state size. (nc) x 64 x 64\n",
" )\n",
"\n",
" def forward(self, input):\n",
" return self.main(input)"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"model=Generator(ngpu)"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"<All keys matched successfully>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"model.load_state_dict(torch.load(f'./snapshot/generator_998_3.pt'))"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"noise = torch.randn(30, nz, 1, 1)"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([30, 100, 1, 1])"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"noise.size()"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"output50=model(noise)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"torch.Size([30, 3, 64, 64])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"output50.shape"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0\n",
"1\n",
"2\n",
"3\n",
"4\n",
"5\n",
"6\n",
"7\n",
"8\n",
"9\n",
"10\n",
"11\n",
"12\n",
"13\n",
"14\n",
"15\n",
"16\n",
"17\n",
"18\n",
"19\n",
"20\n",
"21\n",
"22\n",
"23\n",
"24\n",
"25\n",
"26\n",
"27\n",
"28\n",
"29\n"
]
}
],
"source": [
"for i in range(len(output50)):\n",
" sample=output50[i,:,:,7:57]\n",
" np.save(f\"./generated_action_with_low_gloss/generated_action_refined{i}.npy\", sample.detach().numpy())\n",
" print(i)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"#참고:좌,우로 0을 7칸씩 padding 한 것.\n",
"# Plot the fake images from the last epoch\n",
"plt.figure(figsize=(15,15))\n",
"plt.axis(\"off\")\n",
"plt.title(\"Fake Images\")\n",
"plt.imshow(sample.transpose(1,2,0))\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"Clipping input data to the valid range for imshow with RGB data ([0..1] for floats or [0..255] for integers).\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 1080x1080 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"#참고:좌,우로 0을 7칸씩 padding 한 것.\n",
"# Plot the fake images from the last epoch\n",
"plt.figure(figsize=(15,15))\n",
"plt.axis(\"off\")\n",
"plt.title(\"Fake Images\")\n",
"plt.imshow(output50[0].cpu().detach().numpy().transpose(1,2,0))\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.5"
}
},
"nbformat": 4,
"nbformat_minor": 4
}