├── .DS_Store
├── .idea
├── lstm_pm_pytorch.iml
├── misc.xml
├── modules.xml
├── vcs.xml
└── workspace.xml
├── README.md
├── ckpt
├── .ipynb_checkpoints
│ └── draw_loss-checkpoint.ipynb
└── draw_loss.ipynb
├── data
├── __init__.py
├── handpose_data2.py
├── penn_data.py
└── penn_data_pre.py
├── dataset
├── .DS_Store
├── train_data
│ ├── .DS_Store
│ └── 001L0
│ │ ├── L0455.jpg
│ │ ├── L0461.jpg
│ │ ├── L0467.jpg
│ │ ├── L0473.jpg
│ │ ├── L0479.jpg
│ │ ├── L0485.jpg
│ │ ├── L0491.jpg
│ │ ├── L0497.jpg
│ │ ├── L0503.jpg
│ │ ├── L0509.jpg
│ │ ├── L0515.jpg
│ │ ├── L0521.jpg
│ │ ├── L0527.jpg
│ │ ├── L0533.jpg
│ │ ├── L0539.jpg
│ │ ├── L0545.jpg
│ │ ├── L0551.jpg
│ │ ├── L0557.jpg
│ │ ├── L0563.jpg
│ │ ├── L0569.jpg
│ │ ├── L0575.jpg
│ │ ├── L0581.jpg
│ │ ├── L0587.jpg
│ │ ├── L0599.jpg
│ │ ├── L0605.jpg
│ │ ├── L0611.jpg
│ │ ├── L0617.jpg
│ │ ├── L0623.jpg
│ │ ├── L0629.jpg
│ │ ├── L0635.jpg
│ │ ├── L0641.jpg
│ │ ├── L0647.jpg
│ │ ├── L0653.jpg
│ │ ├── L0659.jpg
│ │ ├── L0665.jpg
│ │ ├── L0671.jpg
│ │ └── L0677.jpg
├── train_full_data
│ └── 001L0
│ │ ├── L0455.jpg
│ │ ├── L0456.jpg
│ │ ├── L0457.jpg
│ │ ├── L0458.jpg
│ │ ├── L0459.jpg
│ │ ├── L0460.jpg
│ │ ├── L0461.jpg
│ │ ├── L0462.jpg
│ │ ├── L0463.jpg
│ │ ├── L0464.jpg
│ │ ├── L0465.jpg
│ │ ├── L0466.jpg
│ │ ├── L0467.jpg
│ │ ├── L0468.jpg
│ │ ├── L0469.jpg
│ │ ├── L0470.jpg
│ │ ├── L0471.jpg
│ │ ├── L0472.jpg
│ │ ├── L0473.jpg
│ │ ├── L0474.jpg
│ │ ├── L0475.jpg
│ │ ├── L0476.jpg
│ │ ├── L0477.jpg
│ │ ├── L0478.jpg
│ │ ├── L0479.jpg
│ │ ├── L0480.jpg
│ │ ├── L0481.jpg
│ │ ├── L0482.jpg
│ │ ├── L0483.jpg
│ │ ├── L0484.jpg
│ │ ├── L0485.jpg
│ │ ├── L0486.jpg
│ │ ├── L0487.jpg
│ │ ├── L0488.jpg
│ │ ├── L0489.jpg
│ │ ├── L0490.jpg
│ │ ├── L0491.jpg
│ │ ├── L0492.jpg
│ │ ├── L0493.jpg
│ │ ├── L0494.jpg
│ │ ├── L0495.jpg
│ │ ├── L0496.jpg
│ │ ├── L0497.jpg
│ │ ├── L0498.jpg
│ │ ├── L0499.jpg
│ │ ├── L0500.jpg
│ │ ├── L0501.jpg
│ │ ├── L0502.jpg
│ │ ├── L0503.jpg
│ │ ├── L0504.jpg
│ │ ├── L0505.jpg
│ │ ├── L0506.jpg
│ │ ├── L0507.jpg
│ │ ├── L0508.jpg
│ │ ├── L0509.jpg
│ │ ├── L0510.jpg
│ │ ├── L0511.jpg
│ │ ├── L0512.jpg
│ │ ├── L0513.jpg
│ │ ├── L0514.jpg
│ │ ├── L0515.jpg
│ │ ├── L0516.jpg
│ │ ├── L0517.jpg
│ │ ├── L0518.jpg
│ │ ├── L0519.jpg
│ │ ├── L0520.jpg
│ │ ├── L0521.jpg
│ │ ├── L0522.jpg
│ │ ├── L0523.jpg
│ │ ├── L0524.jpg
│ │ ├── L0525.jpg
│ │ ├── L0526.jpg
│ │ ├── L0527.jpg
│ │ ├── L0528.jpg
│ │ ├── L0529.jpg
│ │ ├── L0530.jpg
│ │ ├── L0531.jpg
│ │ ├── L0532.jpg
│ │ ├── L0533.jpg
│ │ ├── L0534.jpg
│ │ ├── L0535.jpg
│ │ ├── L0536.jpg
│ │ ├── L0537.jpg
│ │ ├── L0538.jpg
│ │ ├── L0539.jpg
│ │ ├── L0540.jpg
│ │ ├── L0541.jpg
│ │ ├── L0542.jpg
│ │ ├── L0543.jpg
│ │ ├── L0544.jpg
│ │ ├── L0545.jpg
│ │ ├── L0546.jpg
│ │ ├── L0547.jpg
│ │ ├── L0548.jpg
│ │ ├── L0549.jpg
│ │ ├── L0550.jpg
│ │ ├── L0551.jpg
│ │ ├── L0552.jpg
│ │ ├── L0553.jpg
│ │ ├── L0554.jpg
│ │ ├── L0555.jpg
│ │ ├── L0556.jpg
│ │ ├── L0557.jpg
│ │ ├── L0558.jpg
│ │ ├── L0559.jpg
│ │ ├── L0560.jpg
│ │ ├── L0561.jpg
│ │ ├── L0562.jpg
│ │ ├── L0563.jpg
│ │ ├── L0564.jpg
│ │ ├── L0565.jpg
│ │ ├── L0566.jpg
│ │ ├── L0567.jpg
│ │ ├── L0568.jpg
│ │ ├── L0569.jpg
│ │ ├── L0570.jpg
│ │ ├── L0571.jpg
│ │ ├── L0572.jpg
│ │ ├── L0573.jpg
│ │ ├── L0574.jpg
│ │ ├── L0575.jpg
│ │ ├── L0576.jpg
│ │ ├── L0577.jpg
│ │ ├── L0578.jpg
│ │ ├── L0579.jpg
│ │ ├── L0580.jpg
│ │ ├── L0581.jpg
│ │ ├── L0582.jpg
│ │ ├── L0583.jpg
│ │ ├── L0584.jpg
│ │ ├── L0585.jpg
│ │ ├── L0586.jpg
│ │ ├── L0587.jpg
│ │ ├── L0588.jpg
│ │ ├── L0589.jpg
│ │ ├── L0590.jpg
│ │ ├── L0591.jpg
│ │ ├── L0592.jpg
│ │ ├── L0593.jpg
│ │ ├── L0594.jpg
│ │ ├── L0595.jpg
│ │ ├── L0596.jpg
│ │ ├── L0597.jpg
│ │ ├── L0598.jpg
│ │ ├── L0599.jpg
│ │ ├── L0600.jpg
│ │ ├── L0601.jpg
│ │ ├── L0602.jpg
│ │ ├── L0603.jpg
│ │ ├── L0604.jpg
│ │ ├── L0605.jpg
│ │ ├── L0606.jpg
│ │ ├── L0607.jpg
│ │ ├── L0608.jpg
│ │ ├── L0609.jpg
│ │ ├── L0610.jpg
│ │ ├── L0611.jpg
│ │ ├── L0612.jpg
│ │ ├── L0613.jpg
│ │ ├── L0614.jpg
│ │ ├── L0615.jpg
│ │ ├── L0616.jpg
│ │ ├── L0617.jpg
│ │ ├── L0618.jpg
│ │ ├── L0619.jpg
│ │ ├── L0620.jpg
│ │ ├── L0621.jpg
│ │ ├── L0622.jpg
│ │ ├── L0623.jpg
│ │ ├── L0624.jpg
│ │ ├── L0625.jpg
│ │ ├── L0626.jpg
│ │ ├── L0627.jpg
│ │ ├── L0628.jpg
│ │ ├── L0629.jpg
│ │ ├── L0630.jpg
│ │ ├── L0631.jpg
│ │ ├── L0632.jpg
│ │ ├── L0633.jpg
│ │ ├── L0634.jpg
│ │ ├── L0635.jpg
│ │ ├── L0636.jpg
│ │ ├── L0637.jpg
│ │ ├── L0638.jpg
│ │ ├── L0639.jpg
│ │ ├── L0640.jpg
│ │ ├── L0641.jpg
│ │ ├── L0642.jpg
│ │ ├── L0643.jpg
│ │ ├── L0644.jpg
│ │ ├── L0645.jpg
│ │ ├── L0646.jpg
│ │ ├── L0647.jpg
│ │ ├── L0648.jpg
│ │ ├── L0649.jpg
│ │ ├── L0650.jpg
│ │ ├── L0651.jpg
│ │ ├── L0652.jpg
│ │ ├── L0653.jpg
│ │ ├── L0654.jpg
│ │ ├── L0655.jpg
│ │ ├── L0656.jpg
│ │ ├── L0657.jpg
│ │ ├── L0658.jpg
│ │ ├── L0659.jpg
│ │ ├── L0660.jpg
│ │ ├── L0661.jpg
│ │ ├── L0662.jpg
│ │ ├── L0663.jpg
│ │ ├── L0664.jpg
│ │ ├── L0665.jpg
│ │ ├── L0666.jpg
│ │ ├── L0667.jpg
│ │ ├── L0668.jpg
│ │ ├── L0669.jpg
│ │ ├── L0670.jpg
│ │ ├── L0671.jpg
│ │ ├── L0672.jpg
│ │ ├── L0673.jpg
│ │ ├── L0674.jpg
│ │ ├── L0675.jpg
│ │ ├── L0676.jpg
│ │ └── L0677.jpg
└── train_label
│ └── 001L0.json
├── lstm_pm_train.py
├── model
├── __init__.py
└── lstm_pm.py
├── src
├── __init__.py
├── __init__.pyc
├── utils.py
└── utils.pyc
└── test_lstm_pm.py
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/.DS_Store
--------------------------------------------------------------------------------
/.idea/lstm_pm_pytorch.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/workspace.xml:
--------------------------------------------------------------------------------
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 |
139 |
140 |
141 |
142 | 21
143 | amsgrad
144 | imsave
145 | temporal
146 | data_dir
147 | torch.zero
148 | rea
149 | real
150 | save_dir
151 | model_epo
152 | result
153 | label_dict
154 | empty
155 | 368
156 | height
157 | sigma
158 | dump
159 | pool_center_lower
160 | self._middle
161 | conv1_stage6
162 | args.
163 | initial
164 | self.out_c
165 | Mconv1_stage2
166 | conv1_stage4
167 | Mconv1_stage3
168 | conv1_stage1
169 | lstm0
170 | stage2
171 | outclass
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 |
362 |
363 |
364 |
365 |
366 |
367 |
368 |
369 |
370 |
371 |
372 |
373 |
374 |
375 |
376 |
377 | 1533614022480
378 |
379 |
380 | 1533614022480
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
391 |
392 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 |
421 |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
429 |
430 |
431 |
432 |
433 |
434 |
435 |
436 |
437 |
438 |
439 |
440 |
441 |
442 |
443 |
444 |
445 |
446 |
447 |
448 |
449 |
450 |
451 |
452 |
453 |
454 |
455 |
456 |
457 |
458 |
459 |
460 |
461 |
462 |
463 |
464 |
465 |
466 |
467 |
468 |
469 |
470 |
471 |
472 |
473 |
474 |
475 |
476 |
477 |
478 |
479 |
480 |
481 |
482 |
483 |
484 |
485 |
486 |
487 |
488 |
489 |
490 |
491 |
492 |
493 |
494 |
495 |
496 |
497 |
498 |
499 |
500 |
501 |
502 |
503 |
504 |
505 |
506 |
507 |
508 |
509 |
510 |
511 |
512 |
513 |
514 |
515 |
516 |
517 |
518 |
519 |
520 |
521 |
522 |
523 |
524 |
525 |
526 |
527 |
528 |
529 |
530 |
531 |
532 |
533 |
534 |
535 |
536 |
537 |
538 |
539 |
540 |
541 |
542 |
543 |
544 |
545 |
546 |
547 |
548 |
549 |
550 |
551 |
552 |
553 |
554 |
555 |
556 |
557 |
558 |
559 |
560 |
561 |
562 |
563 |
564 |
565 |
566 |
567 |
568 |
569 |
570 |
571 |
572 |
573 |
574 |
575 |
576 |
577 |
578 |
579 |
580 |
581 |
582 |
583 |
584 |
585 |
586 |
587 |
588 |
589 |
590 |
591 |
592 |
593 |
594 |
595 |
596 |
597 |
598 |
599 |
600 |
601 |
602 |
603 |
604 |
605 |
606 |
607 |
608 |
609 |
610 |
611 |
612 |
613 |
614 |
615 |
616 |
617 |
618 |
619 |
620 |
621 |
622 |
623 |
624 |
625 |
626 |
627 |
628 |
629 |
630 |
631 |
632 |
633 |
634 |
635 |
636 |
637 |
638 |
639 |
640 |
641 |
642 |
643 |
644 |
645 |
646 |
647 |
648 |
649 |
650 |
651 |
652 |
653 |
654 |
655 |
656 |
657 |
658 |
659 |
660 |
661 |
662 |
663 |
664 |
665 |
666 |
667 |
668 |
669 |
670 |
671 |
672 |
673 |
674 |
675 |
676 |
677 |
678 |
679 |
680 |
681 |
682 |
683 |
684 |
685 |
686 |
687 |
688 |
689 |
690 |
691 |
692 |
693 |
694 |
695 |
696 |
697 |
698 |
699 |
700 |
701 |
702 |
703 |
704 |
705 |
706 |
707 |
708 |
709 |
710 |
711 |
712 |
713 |
714 |
715 |
716 |
717 |
718 |
719 |
720 |
721 |
722 |
723 |
724 |
725 |
726 |
727 |
728 |
729 |
730 |
731 |
732 |
733 |
734 |
735 |
736 |
737 |
738 |
739 |
740 |
741 |
742 |
743 |
744 |
745 |
746 |
747 |
748 |
749 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # lstm_pm_pytorch
2 | implementation of LSTM Pose Machines with Pytorch
3 |
4 | This is pytorch implement of [LSTM Pose Machines](https://arxiv.org/pdf/1712.06316.pdf)
5 |
6 | Please note that this model is used for my own datasets. But the architecture and training are very close to the original model, please feel free to use it for your own project.
7 |
8 |
9 |
10 | ## Prerequisites
11 | * Python 2.7
12 | * scipy
13 | * sklearn
14 | * pillow
15 | * PyTorch 0.3
16 | * torchvision 0.1.9
17 | * pandas
18 | * numpy
19 |
20 |
21 | ## Train
22 | python lstm_pm_train.py
23 |
24 |
25 | ## Test
26 | python test_lstm_pm.py
27 |
28 |
29 | ## References
30 | [LSTM Pose Machines](https://arxiv.org/pdf/1712.06316.pdf)
31 |
32 | [lawy623/LSTM_Pose_Machines](https://github.com/lawy623/LSTM_Pose_Machines)
33 |
34 |
--------------------------------------------------------------------------------
/ckpt/.ipynb_checkpoints/draw_loss-checkpoint.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": 20,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "import json\n",
10 | "import os\n",
11 | "import sys\n"
12 | ]
13 | },
14 | {
15 | "cell_type": "code",
16 | "execution_count": 23,
17 | "metadata": {},
18 | "outputs": [],
19 | "source": [
20 | "losses = os.listdir(os.getcwd())"
21 | ]
22 | },
23 | {
24 | "cell_type": "code",
25 | "execution_count": 26,
26 | "metadata": {},
27 | "outputs": [],
28 | "source": [
29 | "for l in losses:\n",
30 | " if l == '.ipynb_checkpoints':\n",
31 | " continue \n",
32 | " lossj = json.load(open(os.getcwd() + '/' + l))\n",
33 | " \n",
34 | " "
35 | ]
36 | },
37 | {
38 | "cell_type": "code",
39 | "execution_count": null,
40 | "metadata": {},
41 | "outputs": [],
42 | "source": []
43 | },
44 | {
45 | "cell_type": "code",
46 | "execution_count": null,
47 | "metadata": {},
48 | "outputs": [],
49 | "source": []
50 | }
51 | ],
52 | "metadata": {
53 | "kernelspec": {
54 | "display_name": "Python 2",
55 | "language": "python",
56 | "name": "python2"
57 | },
58 | "language_info": {
59 | "codemirror_mode": {
60 | "name": "ipython",
61 | "version": 2
62 | },
63 | "file_extension": ".py",
64 | "mimetype": "text/x-python",
65 | "name": "python",
66 | "nbconvert_exporter": "python",
67 | "pygments_lexer": "ipython2",
68 | "version": "2.7.15"
69 | }
70 | },
71 | "nbformat": 4,
72 | "nbformat_minor": 2
73 | }
74 |
--------------------------------------------------------------------------------
/ckpt/draw_loss.ipynb:
--------------------------------------------------------------------------------
1 | {
2 | "cells": [
3 | {
4 | "cell_type": "code",
5 | "execution_count": null,
6 | "metadata": {},
7 | "outputs": [],
8 | "source": [
9 | "import json\n",
10 | "import os\n",
11 | "import matplotlib.pyplot as plt\n"
12 | ]
13 | },
14 | {
15 | "cell_type": "code",
16 | "execution_count": 4,
17 | "metadata": {},
18 | "outputs": [
19 | {
20 | "data": {
21 | "text/plain": [
22 | "[]"
23 | ]
24 | },
25 | "execution_count": 4,
26 | "metadata": {},
27 | "output_type": "execute_result"
28 | },
29 | {
30 | "data": {
31 | "image/png": "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\n",
32 | "text/plain": [
33 | ""
34 | ]
35 | },
36 | "metadata": {},
37 | "output_type": "display_data"
38 | }
39 | ],
40 | "source": [
41 | "aa=[]\n",
42 | "\n",
43 | "for epoch in range(0, 50):\n",
44 | " losses = os.listdir('loss_epoch'+str(epoch))\n",
45 | " losses.sort()\n",
46 | "\n",
47 | " loss=[]\n",
48 | " for l in losses:\n",
49 | " if l == '.DS_Store':\n",
50 | " continue \n",
51 | "\n",
52 | " lossj = json.load(open('loss_epoch'+str(epoch) + '/' + l))\n",
53 | "\n",
54 | " n = l.split('.')[0][1:]\n",
55 | " a = lossj['total']\n",
56 | " loss.append([int(n), a])\n",
57 | "\n",
58 | " loss.sort()\n",
59 | "\n",
60 | " for l in loss:\n",
61 | " aa.append(l[1])\n",
62 | "\n",
63 | "plt.plot(aa)\n"
64 | ]
65 | },
66 | {
67 | "cell_type": "code",
68 | "execution_count": 91,
69 | "metadata": {},
70 | "outputs": [],
71 | "source": []
72 | },
73 | {
74 | "cell_type": "code",
75 | "execution_count": null,
76 | "metadata": {},
77 | "outputs": [],
78 | "source": []
79 | },
80 | {
81 | "cell_type": "code",
82 | "execution_count": null,
83 | "metadata": {},
84 | "outputs": [],
85 | "source": []
86 | },
87 | {
88 | "cell_type": "code",
89 | "execution_count": null,
90 | "metadata": {},
91 | "outputs": [],
92 | "source": []
93 | },
94 | {
95 | "cell_type": "code",
96 | "execution_count": null,
97 | "metadata": {},
98 | "outputs": [],
99 | "source": []
100 | }
101 | ],
102 | "metadata": {
103 | "kernelspec": {
104 | "display_name": "Python 2",
105 | "language": "python",
106 | "name": "python2"
107 | },
108 | "language_info": {
109 | "codemirror_mode": {
110 | "name": "ipython",
111 | "version": 2
112 | },
113 | "file_extension": ".py",
114 | "mimetype": "text/x-python",
115 | "name": "python",
116 | "nbconvert_exporter": "python",
117 | "pygments_lexer": "ipython2",
118 | "version": "2.7.15"
119 | }
120 | },
121 | "nbformat": 4,
122 | "nbformat_minor": 2
123 | }
124 |
--------------------------------------------------------------------------------
/data/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/data/__init__.py
--------------------------------------------------------------------------------
/data/handpose_data2.py:
--------------------------------------------------------------------------------
1 | import os
2 | import torchvision.transforms as transforms
3 | import torch
4 | from torch.utils.data import Dataset
5 | import numpy as np
6 | import json
7 | from PIL import Image
8 |
9 |
10 | class UCIHandPoseDataset(Dataset):
11 |
12 | def __init__(self, data_dir, label_dir, train, temporal=5, joints=21, transform=None, sigma=1):
13 | self.height = 368
14 | self.width = 368
15 |
16 | self.seqs = os.listdir(data_dir) # 001L00, 001L01, L02,... 151L08, R01, R02, R03,...
17 | self.data_dir = data_dir
18 | self.label_dir = label_dir
19 |
20 | self.temporal = temporal
21 | self.transform = transform
22 | self.joints = joints # 21 heat maps
23 | self.sigma = sigma # gaussian center heat map sigma
24 |
25 | self.temporal_dir = []
26 |
27 | self.train = train
28 | if self.train is True:
29 | self.gen_temporal_dir(1)
30 | else:
31 | self.gen_temporal_dir(temporal)
32 |
33 | def gen_temporal_dir(self, step):
34 | """
35 | build temporal directory in order to guarantee get all images has equal chance to be trained
36 | for train dataset, make each image has the same possibility to be trained
37 |
38 | :param step: for training set, step = 1, for test set, step = temporal
39 | :return:
40 | """
41 |
42 | for seq in self.seqs:
43 | if seq == '.DS_Store':
44 | continue
45 | image_path = os.path.join(self.data_dir, seq) #
46 | imgs = os.listdir(image_path) # [0005.jpg, 0011.jpg......]
47 | imgs.sort()
48 |
49 | img_num = len(imgs)
50 | if img_num < self.temporal:
51 | continue # ignore sequences whose length is less than temporal
52 |
53 | for i in range(0, img_num - self.temporal + 1, step):
54 | tmp = []
55 | for k in range(i, i + self.temporal):
56 | tmp.append(os.path.join(image_path, imgs[k]))
57 | self.temporal_dir.append(tmp) #
58 |
59 | self.temporal_dir.sort()
60 | print 'total numbers of image sequence is ' + str(len(self.temporal_dir))
61 |
62 | def __len__(self):
63 | if self.train is True:
64 | length = len(self.temporal_dir)/self.temporal
65 | else:
66 | length = len(self.temporal_dir)
67 | return length
68 |
69 | def __getitem__(self, idx):
70 | """
71 | :param idx:
72 | :return:
73 | images 3D Tensor (temporal * 3) * height(368) * weight(368)
74 | label_map 4D Tensor temporal * joints * label_size(45) * label_size(45)
75 | center_map 3D Tensor 1 * height(368) * weight(368)
76 | imgs list of image directory
77 | """
78 | label_size = self.width / 8 - 1 # 45
79 |
80 | imgs = self.temporal_dir[idx] # ['.../001L0/L0005.jpg', '.../001L0/L0011.jpg', ... ]
81 | imgs.sort()
82 | seq = imgs[0].split('/')[-2] # 001L0
83 | label_path = os.path.join(self.label_dir, seq)
84 | labels = json.load(open(label_path + '.json'))
85 |
86 | # initialize
87 | images = torch.zeros(self.temporal * 3, self.width, self.height)
88 | label_maps = torch.zeros(self.temporal, self.joints, label_size, label_size)
89 |
90 | for i in range(self.temporal): # get temporal images
91 | img = imgs[i] # '.../001L0/L0005.jpg'
92 |
93 | # get image
94 | im = Image.open(img) # read image
95 | w, h, c = np.asarray(im).shape # weight 256 * height 256 * 3
96 | ratio_x = self.width / float(w)
97 | ratio_y = self.height / float(h) # 368 / 256 = 1.4375
98 |
99 | im = im.resize((self.width, self.height)) # unit8 weight 368 * height 368 * 3
100 | images[(i * 3):(i * 3 + 3), :, :] = transforms.ToTensor()(im) # 3D Tensor 3 * height 368 * weight 368
101 | # ToTensor function will normalize data
102 |
103 | # get label map
104 | img_num = img.split('/')[-1][1:5]
105 |
106 | if img_num in labels: # for images without label, set label to zero
107 | label = labels[img_num] # 0005 list 21 * 2
108 | lbl = self.genLabelMap(label, label_size=label_size, joints=self.joints, ratio_x=ratio_x, ratio_y=ratio_y)
109 | label_maps[i, :, :, :] = torch.from_numpy(lbl)
110 |
111 | # generate the Gaussian heat map
112 | center_map = self.genCenterMap(x=self.width / 2.0, y=self.height / 2.0, sigma=21,
113 | size_w=self.width, size_h=self.height)
114 | center_map = torch.from_numpy(center_map)
115 | center_map = center_map.unsqueeze_(0)
116 |
117 | return images.float(), label_maps.float(), center_map.float(), imgs
118 |
119 | def genCenterMap(self, x, y, sigma, size_w, size_h):
120 | """
121 | generate Gaussian heat map
122 | :param x: center point
123 | :param y: center point
124 | :param sigma:
125 | :param size_w: image width
126 | :param size_h: image height
127 | :return: numpy w * h
128 | """
129 | gridy, gridx = np.mgrid[0:size_h, 0:size_w]
130 | D2 = (gridx - x) ** 2 + (gridy - y) ** 2
131 | return np.exp(-D2 / 2.0 / sigma / sigma) # numpy 2d
132 |
133 | def genLabelMap(self, label, label_size, joints, ratio_x, ratio_y):
134 | """
135 | generate label heat map
136 | :param label: list 21 * 2
137 | :param label_size: int 45
138 | :param joints: int 21
139 | :param ratio_x: float 1.4375
140 | :param ratio_y: float 1.4375
141 | :return: heatmap numpy joints * boxsize/stride * boxsize/stride
142 | """
143 | # initialize
144 | label_maps = np.zeros((joints, label_size, label_size))
145 | background = np.zeros((label_size, label_size))
146 |
147 | # each joint
148 | for i in range(len(label)):
149 | lbl = label[i] # [x, y]
150 | x = lbl[0] * ratio_x / 8.0 # modify the label
151 | y = lbl[1] * ratio_y / 8.0
152 | heatmap = self.genCenterMap(y, x, sigma=self.sigma, size_w=label_size, size_h=label_size) # numpy
153 | background += heatmap # numpy
154 | label_maps[i, :, :] = np.transpose(heatmap)
155 |
156 | return label_maps # numpy label_size * label_size * joints
157 |
158 |
159 | # test case
160 |
161 | if __name__ == '__main__':
162 | temporal = 5
163 | data_dir = '../dataset/frames/001'
164 | label_dir = '../dataset/label/001'
165 |
166 | dataset = UCIHandPoseDataset(data_dir=data_dir, label_dir=label_dir, temporal=temporal,train=True)
167 |
168 | a = dataset.temporal_dir
169 | images, label_maps,center_map = dataset[2]
170 | print images.shape # (5*3) * 368 * 368
171 | print label_maps.shape # 5 21 45 45
172 |
173 |
--------------------------------------------------------------------------------
/data/penn_data.py:
--------------------------------------------------------------------------------
1 | '''
2 | only used for penn_action datasets
3 | '''
4 |
5 | import os
6 | import cv2
7 | import torch
8 | import numpy as np
9 | from torch.utils.data import Dataset
10 | from torchvision import transforms
11 | from PIL import Image
12 |
13 |
14 | class Penn_Data(Dataset):
15 | def __init__(self, data_dir='Penn_Action/', train=True, transform=None):
16 |
17 | self.input_h = 368
18 | self.input_w = 368
19 | self.map_h = 45
20 | self.map_w = 45
21 |
22 | self.parts_num = 13
23 | self.seqTrain = 5
24 |
25 | self.gaussian_sigma = 21
26 |
27 | self.transform = transform
28 |
29 | self.train = train
30 | if self.train is True:
31 | self.data_dir = data_dir + 'train/'
32 | else:
33 | self.data_dir = data_dir + 'test/'
34 |
35 | self.frames_data = os.listdir(self.data_dir)
36 |
37 | def __len__(self):
38 | return len(self.frames_data) # number of videos in train or test
39 |
40 | def __getitem__(self, idx): # get a video sequence
41 | '''
42 |
43 | :param idx:
44 | :return:
45 | images: Tensor seqtrain * 3 * width * height
46 | label_map: Tensor 46 * 46 * (class+1) * seqtrain
47 | center_map: Tensor 1 * 368 * 368
48 | '''
49 | frames = self.frames_data[idx]
50 | data = np.load(os.path.join(self.data_dir, frames)).item()
51 |
52 | images, label_map, center_map = self.transformation_penn(data, boxsize=self.input_w, parts_num=13,
53 | train=self.train)
54 |
55 |
56 | center_map = center_map.unsqueeze_(0)
57 |
58 | return images, label_map, center_map
59 |
60 | def transformation_penn(self, data, boxsize=368, parts_num=13, train=True):
61 | '''
62 | :param data:
63 | :param boxsize:
64 | :param parts_num:
65 | :param seqTrain:
66 | :param train:
67 | :return:
68 | images tensor seq
69 | '''
70 | nframes = data['nframes'] # 151
71 | framespath = data['framepath']
72 | dim = data['dimensions'] # [360, 480]
73 | x = data['x'] # 151 * 13
74 | y = data['y'] # 151 * 13
75 | visibility = data['visibility'] # 151 * 13
76 |
77 | start_index = np.random.randint(0, nframes - 1 - self.seqTrain + 1) #
78 |
79 | images = torch.zeros(self.seqTrain, 3, dim[0], dim[1]) # tensor seqTrain * 3 * 368 * 368
80 | label = np.zeros((3, parts_num + 1, self.seqTrain)) # numpy 3
81 | bbox = np.zeros((self.seqTrain, 4)) # seqTrain * () # numpy
82 |
83 | for i in range(self.seqTrain):
84 | # read image
85 | img_path = os.path.join(framespath,'%06d' % (start_index + i + 1) + '.jpg')
86 | img = Image.open(img_path) # Image
87 | images[i, :, :, :] = transforms.ToTensor()(img) # store image
88 |
89 | # read label
90 | label[0, :-1, i] = x[start_index + i]
91 | label[1, :-1, i] = y[start_index + i]
92 | label[2, :-1, i] = visibility[start_index + i] # 1 * 13
93 | bbox[i, :] = data['bbox'][start_index + 1] #
94 |
95 | # adjust label----------
96 | if train is True:
97 | # create label for neck to keep consistence of model. But it will be ignored during testing.
98 | # We interpolate the pos by head(1) and shoulders(2 & 3).
99 | label[0, -1, :] = 0.5 * label[0, 0, :] + 0.25 * (label[0, 1, :] + label[0, 2, :])
100 | label[1, -1, :] = 0.5 * label[1, 0, :] + 0.25 * (label[1, 1, :] + label[1, 2, :])
101 | label[2, -1, :] = np.floor((label[2, 0, :] + label[2, 1, :] + label[2, 2, :]) / 3.0)
102 |
103 | # make the joints not in the figure vis=-1(Do not produce label)
104 | for i in range(self.seqTrain): # for each image
105 | for part in range(0, parts_num + 1): # for each part
106 | if self.isNotOnPlane(label[0, part, i], label[1, part, i], dim[1], dim[0]):
107 | label[2, part, i] = -1
108 |
109 | # build data set--------
110 | label_map = self.genLabelMap(label, boxsize=368, stride=8, sigma=7) # 46 * 46 * (13 + 1) * seq
111 |
112 | center_map = self.genCenterMap(size_w=boxsize, size_h=boxsize, sigma=21, x=boxsize / 2.0, y=boxsize / 2.0)
113 | center_map = torch.from_numpy(center_map)
114 | return images, label_map, center_map
115 |
116 | def genCenterMap(self, x, y, sigma, size_w, size_h):
117 | '''
118 | generate Gaussian heat map
119 | :param x: center point
120 | :param y: center point
121 | :param sigma:
122 | :param size_w:
123 | :param size_h:
124 | :return: numpy w * h
125 | '''
126 | gridy, gridx = np.mgrid[0:size_h, 0:size_w]
127 | D2 = (gridx - x) ** 2 + (gridy - y) ** 2
128 | return np.exp(-D2 / 2.0 / sigma / sigma) # numpy 2d
129 |
130 | def isNotOnPlane(self, x, y, width, height):
131 | notOn = x < 0.001 or y < 0.001 or x > width or y > height
132 | return notOn
133 |
134 | def genLabelMap(self, label, boxsize, stride, sigma):
135 | '''
136 | generate label heat map for each part
137 | :param label: 3 * parts_num * seqTrain
138 | :param boxsize: 368
139 | :param stride: 8
140 | :param sigma: 7
141 | :return:
142 | seqtrain * (parts_num + 1 ) * label_size * label_size
143 | 5 * 14 * 46 * 46
144 | '''
145 | label_size = boxsize / stride # 368 / 8 = 46
146 | label_map = torch.zeros(self.seqTrain, self.parts_num + 1, label_size, label_size)
147 |
148 | #
149 | for k in range(self.seqTrain): # for each frame
150 | for i in range(self.parts_num): # for each parts
151 | if label[2, i, k] >= 0: # if exists
152 | cx, cy = label[0, i, k], label[1, i, k] # get the center
153 | heat_map = self.genCenterMap(x=cx, y=cy, sigma=sigma, size_w=label_size, size_h=label_size)
154 | # build heat map of this part
155 | else: # not exists
156 | heat_map = np.zeros((label_size, label_size))
157 | label_map[k, i, :, :] = torch.from_numpy(np.transpose(heat_map)) #
158 |
159 | # build background
160 | background = np.ones((label_size, label_size)) #
161 | for m in range(label_size):
162 | for n in range(label_size):
163 | maxV = max(label_map[k, :, m, n])
164 | background[m, n] = max(1 - maxV, 0)
165 | label_map[k, self.parts_num, :, :] = torch.from_numpy(background)
166 |
167 | return label_map
168 |
169 | transform1 = transforms.Compose([
170 | transforms.ToTensor(), # range [0, 255] -> [0.0,1.0]
171 | ]
172 | )
173 |
174 |
175 | # test case
176 | #data = Penn_Data(data_dir='Penn_Action/', transform=transform1)
177 | #images, label_map, center_map = data[1]
--------------------------------------------------------------------------------
/data/penn_data_pre.py:
--------------------------------------------------------------------------------
1 | '''
2 | rebuild dataset
3 | split train and test dataset
4 |
5 | '''
6 |
7 | import os
8 | import numpy as np
9 | import scipy.io
10 |
11 | frame_dir = 'Penn_Action/frames'
12 | label_dir = 'Penn_Action/labels'
13 | train_dir = 'Penn_Action/train'
14 | test_dir = 'Penn_Action/test'
15 |
16 | nums = os.listdir(label_dir)
17 |
18 | for idx, num in enumerate(nums, 1):
19 | print idx
20 | data = scipy.io.loadmat(os.path.join(label_dir, num))
21 | num = num.split('.')[0]
22 |
23 | npy_Data = dict()
24 | npy_Data['framepath'] = os.path.join(frame_dir, num)
25 | npy_Data['dimensions'] = list(data['dimensions'][0][0:2])
26 | npy_Data['pose'] = str(data['pose'][0])
27 | npy_Data['nframes'] = data['nframes'][0][0]
28 | npy_Data['action'] = str(data['action'][0])
29 | npy_Data['x'] = data['x']
30 | npy_Data['y'] = data['y']
31 | npy_Data['bbox'] = data['bbox']
32 | npy_Data['visibility'] = data['visibility']
33 | npy_Data['seq'] = int(num)
34 |
35 | if data['train'][0][0] == -1:
36 | save_dir = os.path.join(test_dir, num + '.npy')
37 | else:
38 | save_dir = os.path.join(train_dir, num + '.npy')
39 | np.save(save_dir, npy_Data)
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/dataset/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/.DS_Store
--------------------------------------------------------------------------------
/dataset/train_data/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/.DS_Store
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0455.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0455.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0461.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0461.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0467.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0467.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0473.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0473.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0479.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0479.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0485.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0485.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0491.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0491.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0497.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0497.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0503.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0503.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0509.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0509.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0515.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0515.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0521.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0521.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0527.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0527.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0533.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0533.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0539.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0539.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0545.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0545.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0551.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0551.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0557.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0557.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0563.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0563.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0569.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0569.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0575.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0575.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0581.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0581.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0587.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0587.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0599.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0599.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0605.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0605.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0611.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0611.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0617.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0617.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0623.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0623.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0629.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0629.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0635.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0635.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0641.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0641.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0647.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0647.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0653.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0653.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0659.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0659.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0665.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0665.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0671.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0671.jpg
--------------------------------------------------------------------------------
/dataset/train_data/001L0/L0677.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_data/001L0/L0677.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0455.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0455.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0456.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0456.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0457.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0457.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0458.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0458.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0459.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0459.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0460.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0460.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0461.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0461.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0462.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0462.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0463.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0463.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0464.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0464.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0465.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0465.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0466.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0466.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0467.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0467.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0468.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0468.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0469.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0469.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0470.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0470.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0471.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0471.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0472.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0472.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0473.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0473.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0474.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0474.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0475.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0475.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0476.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0476.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0477.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0477.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0478.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0478.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0479.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0479.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0480.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0480.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0481.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0481.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0482.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0482.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0483.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0483.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0484.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0484.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0485.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0485.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0486.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0486.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0487.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0487.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0488.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0488.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0489.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0489.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0490.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0490.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0491.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0491.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0492.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0492.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0493.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0493.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0494.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0494.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0495.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0495.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0496.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0496.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0497.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0497.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0498.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0498.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0499.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0499.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0500.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0500.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0501.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0501.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0502.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0502.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0503.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0503.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0504.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0504.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0505.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0505.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0506.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0506.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0507.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0507.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0508.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0508.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0509.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0509.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0510.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0510.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0511.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0511.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0512.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0512.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0513.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0513.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0514.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0514.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0515.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0515.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0516.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0516.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0517.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0517.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0518.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0518.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0519.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0519.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0520.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0520.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0521.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0521.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0522.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0522.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0523.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0523.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0524.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0524.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0525.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0525.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0526.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0526.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0527.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0527.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0528.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0528.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0529.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0529.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0530.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0530.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0531.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0531.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0532.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0532.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0533.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0533.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0534.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0534.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0535.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0535.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0536.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0536.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0537.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0537.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0538.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0538.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0539.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0539.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0540.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0540.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0541.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0541.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0542.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0542.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0543.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0543.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0544.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0544.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0545.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0545.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0546.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0546.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0547.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0547.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0548.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0548.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0549.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0549.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0550.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0550.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0551.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0551.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0552.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0552.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0553.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0553.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0554.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0554.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0555.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0555.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0556.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0556.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0557.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0557.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0558.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0558.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0559.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0559.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0560.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0560.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0561.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0561.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0562.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0562.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0563.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0563.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0564.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0564.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0565.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0565.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0566.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0566.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0567.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0567.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0568.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0568.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0569.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0569.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0570.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0570.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0571.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0571.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0572.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0572.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0573.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0573.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0574.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0574.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0575.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0575.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0576.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0576.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0577.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0577.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0578.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0578.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0579.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0579.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0580.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0580.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0581.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0581.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0582.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0582.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0583.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0583.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0584.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0584.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0585.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0585.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0586.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0586.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0587.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0587.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0588.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0588.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0589.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0589.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0590.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0590.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0591.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0591.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0592.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0592.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0593.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0593.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0594.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0594.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0595.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0595.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0596.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0596.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0597.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0597.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0598.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0598.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0599.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0599.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0600.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0600.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0601.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0601.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0602.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0602.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0603.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0603.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0604.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0604.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0605.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0605.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0606.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0606.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0607.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0607.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0608.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0608.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0609.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0609.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0610.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0610.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0611.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0611.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0612.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0612.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0613.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0613.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0614.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0614.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0615.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0615.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0616.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0616.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0617.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0617.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0618.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0618.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0619.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0619.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0620.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0620.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0621.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0621.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0622.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0622.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0623.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0623.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0624.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0624.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0625.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0625.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0626.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0626.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0627.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0627.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0628.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0628.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0629.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0629.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0630.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0630.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0631.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0631.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0632.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0632.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0633.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0633.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0634.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0634.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0635.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0635.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0636.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0636.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0637.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0637.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0638.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0638.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0639.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0639.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0640.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0640.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0641.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0641.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0642.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0642.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0643.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0643.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0644.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0644.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0645.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0645.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0646.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0646.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0647.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0647.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0648.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0648.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0649.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0649.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0650.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0650.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0651.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0651.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0652.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0652.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0653.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0653.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0654.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0654.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0655.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0655.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0656.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0656.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0657.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0657.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0658.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0658.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0659.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0659.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0660.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0660.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0661.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0661.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0662.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0662.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0663.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0663.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0664.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0664.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0665.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0665.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0666.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0666.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0667.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0667.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0668.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0668.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0669.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0669.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0670.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0670.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0671.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0671.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0672.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0672.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0673.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0673.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0674.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0674.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0675.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0675.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0676.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0676.jpg
--------------------------------------------------------------------------------
/dataset/train_full_data/001L0/L0677.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/dataset/train_full_data/001L0/L0677.jpg
--------------------------------------------------------------------------------
/dataset/train_label/001L0.json:
--------------------------------------------------------------------------------
1 | {"0491": [[138, 199], [136, 187], [133, 170], [133, 152], [132, 131], [142, 133], [142, 104], [139, 85], [137, 61], [141, 130], [142, 96], [138, 72], [136, 52], [137, 130], [138, 97], [137, 75], [135, 56], [134, 134], [130, 109], [128, 92], [127, 78]], "0497": [[137, 200], [156, 183], [179, 165], [192, 146], [206, 130], [160, 132], [163, 102], [163, 82], [162, 63], [142, 128], [147, 96], [144, 70], [142, 49], [128, 130], [128, 100], [128, 77], [128, 56], [115, 137], [111, 111], [109, 95], [109, 79]], "0611": [[116, 214], [89, 199], [63, 178], [54, 156], [43, 139], [90, 147], [87, 116], [84, 97], [84, 77], [109, 144], [110, 107], [113, 84], [115, 63], [124, 145], [128, 112], [131, 90], [132, 71], [139, 149], [149, 125], [153, 111], [157, 96]], "0509": [[136, 203], [149, 187], [167, 169], [178, 150], [189, 134], [155, 134], [156, 105], [155, 85], [151, 67], [140, 130], [138, 98], [134, 73], [131, 54], [127, 133], [124, 100], [120, 78], [118, 60], [115, 138], [109, 113], [105, 96], [104, 82]], "0521": [[131, 189], [109, 184], [90, 172], [77, 155], [63, 141], [100, 133], [90, 106], [85, 89], [80, 71], [114, 127], [107, 94], [102, 72], [99, 52], [126, 124], [123, 94], [119, 72], [115, 53], [139, 124], [139, 100], [138, 84], [136, 70]], "0527": [[129, 189], [104, 182], [77, 165], [62, 148], [48, 133], [96, 132], [88, 104], [82, 84], [79, 65], [113, 127], [108, 92], [105, 69], [102, 49], [129, 124], [127, 92], [125, 71], [122, 54], [146, 126], [148, 101], [149, 85], [149, 71]], "0659": [[128, 205], [139, 188], [153, 168], [160, 148], [168, 130], [141, 135], [137, 106], [137, 86], [132, 68], [128, 135], [123, 101], [117, 77], [111, 57], [115, 137], [110, 106], [106, 84], [101, 67], [104, 146], [97, 121], [92, 105], [88, 90]], "0503": [[134, 199], [159, 187], [187, 170], [203, 150], [217, 138], [164, 134], [166, 104], [166, 84], [166, 67], [145, 131], [148, 97], [145, 74], [143, 54], [129, 132], [129, 102], [129, 79], [127, 61], [113, 139], [111, 113], [108, 97], [108, 83]], "0581": [[114, 204], [103, 197], [93, 190], [93, 163], [83, 148], [98, 146], [94, 115], [88, 96], [81, 79], [103, 141], [98, 106], [93, 83], [88, 63], [109, 140], [103, 107], [99, 84], [94, 67], [112, 142], [109, 115], [108, 99], [106, 86]], "0635": [[118, 206], [126, 189], [136, 166], [138, 142], [143, 125], [125, 135], [125, 104], [124, 83], [122, 66], [117, 134], [115, 101], [111, 75], [109, 54], [109, 137], [106, 105], [103, 83], [99, 65], [101, 145], [95, 120], [90, 104], [89, 90]], "0569": [[122, 203], [144, 188], [168, 171], [183, 150], [197, 136], [145, 135], [146, 106], [145, 86], [144, 67], [125, 133], [124, 99], [122, 75], [119, 57], [109, 136], [107, 104], [104, 83], [102, 65], [95, 142], [88, 118], [85, 103], [83, 88]], "0677": [[131, 215], [121, 204], [112, 189], [110, 164], [105, 147], [119, 151], [115, 124], [112, 100], [112, 78], [122, 146], [118, 115], [116, 91], [114, 71], [124, 148], [121, 117], [119, 94], [117, 76], [125, 154], [126, 128], [125, 113], [123, 98]], "0617": [[117, 215], [90, 200], [64, 178], [54, 155], [44, 138], [90, 147], [87, 116], [85, 96], [85, 77], [110, 145], [111, 108], [114, 84], [115, 63], [125, 145], [129, 113], [132, 90], [133, 71], [140, 150], [149, 125], [153, 110], [157, 95]], "0461": [[165, 181], [140, 176], [110, 163], [95, 143], [86, 128], [121, 127], [109, 100], [101, 82], [96, 66], [137, 120], [128, 84], [122, 63], [118, 44], [153, 115], [147, 84], [141, 63], [137, 46], [170, 117], [170, 91], [170, 75], [166, 61]], "0563": [[121, 202], [145, 186], [169, 169], [184, 151], [198, 136], [145, 134], [148, 104], [148, 84], [146, 66], [125, 131], [127, 98], [123, 74], [121, 55], [109, 135], [108, 102], [106, 81], [104, 62], [94, 139], [89, 115], [86, 100], [85, 86]], "0467": [[160, 186], [134, 182], [105, 168], [89, 148], [81, 131], [116, 132], [103, 105], [96, 87], [90, 69], [132, 124], [123, 89], [117, 68], [112, 50], [147, 120], [141, 89], [135, 68], [131, 51], [164, 120], [163, 95], [162, 79], [160, 65]], "0545": [[132, 194], [107, 183], [81, 165], [68, 148], [54, 132], [102, 135], [94, 106], [91, 85], [89, 66], [120, 130], [116, 93], [116, 70], [115, 48], [135, 129], [134, 97], [134, 75], [132, 55], [149, 132], [154, 106], [157, 90], [158, 74]], "0665": [[121, 207], [129, 192], [138, 172], [140, 151], [144, 134], [125, 137], [125, 107], [122, 89], [116, 72], [116, 136], [114, 104], [106, 81], [99, 61], [109, 139], [103, 107], [98, 86], [93, 69], [101, 146], [93, 122], [87, 106], [84, 91]], "0587": [[113, 201], [88, 195], [66, 177], [55, 158], [42, 145], [79, 142], [71, 116], [66, 96], [62, 79], [94, 137], [89, 103], [86, 80], [81, 61], [108, 136], [106, 105], [103, 83], [100, 63], [122, 138], [124, 116], [124, 99], [123, 83]], "0623": [[118, 208], [102, 190], [90, 168], [85, 149], [75, 131], [108, 141], [104, 112], [104, 92], [103, 72], [118, 139], [120, 106], [122, 81], [124, 60], [126, 143], [132, 112], [134, 88], [136, 69], [133, 149], [139, 126], [142, 110], [146, 94]], "0485": [[141, 192], [130, 182], [122, 168], [118, 143], [114, 126], [132, 131], [126, 103], [122, 84], [119, 64], [137, 129], [133, 95], [130, 72], [126, 52], [142, 129], [138, 98], [136, 74], [131, 57], [146, 133], [144, 107], [143, 92], [141, 77]], "0653": [[128, 205], [146, 188], [167, 168], [179, 149], [191, 130], [147, 136], [148, 107], [147, 86], [146, 67], [130, 136], [129, 102], [124, 77], [121, 59], [116, 139], [111, 107], [108, 85], [106, 66], [101, 147], [93, 121], [88, 105], [85, 90]], "offset": [1039, 321], "0671": [[122, 208], [118, 193], [113, 175], [113, 162], [108, 145], [122, 137], [117, 112], [111, 91], [106, 71], [120, 137], [113, 105], [108, 82], [102, 64], [115, 142], [113, 109], [107, 87], [101, 68], [111, 148], [104, 123], [101, 107], [99, 91]], "0647": [[127, 205], [146, 186], [167, 168], [179, 146], [190, 128], [146, 135], [148, 106], [148, 84], [147, 65], [129, 134], [128, 100], [124, 76], [121, 55], [114, 139], [111, 106], [107, 84], [106, 65], [99, 147], [91, 121], [88, 104], [84, 89]], "0533": [[128, 193], [104, 183], [77, 167], [62, 148], [48, 131], [97, 133], [88, 104], [84, 85], [82, 66], [116, 129], [111, 93], [109, 70], [107, 49], [130, 127], [128, 95], [128, 74], [126, 55], [147, 129], [149, 104], [153, 87], [153, 74]], "0473": [[153, 190], [128, 187], [99, 174], [84, 154], [75, 136], [110, 135], [97, 109], [90, 92], [84, 74], [127, 126], [116, 93], [111, 73], [107, 55], [143, 123], [136, 93], [130, 73], [125, 57], [159, 125], [158, 100], [157, 85], [154, 71]], "0641": [[124, 205], [137, 185], [151, 164], [159, 143], [166, 123], [134, 132], [134, 103], [135, 82], [132, 64], [122, 133], [119, 98], [116, 74], [113, 54], [109, 137], [105, 105], [102, 83], [98, 64], [97, 146], [91, 120], [85, 104], [82, 90]], "0539": [[129, 193], [104, 184], [77, 168], [61, 149], [47, 132], [96, 134], [89, 104], [83, 85], [82, 67], [116, 130], [111, 93], [109, 70], [108, 50], [131, 129], [128, 95], [126, 74], [124, 54], [147, 130], [150, 104], [152, 89], [154, 74]], "0515": [[129, 196], [124, 189], [117, 179], [116, 156], [108, 144], [121, 138], [117, 110], [110, 92], [107, 74], [123, 131], [118, 100], [111, 77], [109, 57], [124, 130], [119, 98], [115, 78], [110, 59], [126, 131], [123, 101], [118, 86], [116, 73]], "0479": [[153, 190], [129, 182], [109, 163], [98, 142], [88, 126], [123, 131], [112, 104], [105, 86], [102, 69], [137, 126], [130, 92], [124, 72], [118, 54], [149, 126], [146, 96], [140, 75], [134, 58], [161, 129], [160, 106], [160, 90], [157, 76]], "0629": [[117, 207], [112, 193], [109, 178], [108, 163], [109, 145], [116, 140], [117, 111], [115, 86], [113, 66], [116, 141], [117, 104], [113, 80], [112, 57], [114, 144], [115, 109], [114, 85], [111, 65], [112, 149], [111, 124], [109, 109], [109, 93]], "0605": [[116, 214], [89, 200], [63, 178], [53, 156], [43, 139], [89, 147], [85, 117], [83, 96], [83, 76], [109, 144], [109, 107], [111, 83], [113, 63], [124, 145], [127, 112], [130, 90], [131, 71], [139, 150], [147, 125], [152, 109], [155, 94]], "0575": [[124, 205], [142, 187], [162, 169], [173, 150], [186, 131], [142, 135], [142, 106], [140, 84], [135, 66], [124, 133], [120, 100], [117, 76], [111, 58], [111, 137], [104, 106], [100, 84], [97, 65], [96, 144], [88, 119], [82, 104], [81, 89]], "0455": [[165, 178], [141, 174], [111, 160], [96, 139], [87, 123], [122, 124], [111, 97], [104, 79], [98, 62], [139, 117], [129, 82], [124, 61], [120, 42], [155, 113], [149, 81], [143, 61], [140, 44], [172, 114], [171, 88], [171, 73], [169, 59]], "0551": [[124, 200], [114, 188], [108, 172], [108, 146], [103, 128], [113, 133], [109, 105], [106, 80], [105, 61], [114, 130], [113, 96], [111, 72], [108, 51], [116, 133], [115, 100], [115, 76], [112, 58], [120, 138], [120, 112], [120, 96], [118, 81]], "0557": [[119, 203], [128, 186], [141, 163], [144, 141], [149, 124], [125, 129], [121, 100], [118, 80], [112, 63], [113, 128], [105, 95], [98, 72], [91, 52], [103, 133], [93, 101], [86, 80], [79, 62], [91, 140], [80, 117], [73, 102], [68, 87]], "0599": [[114, 213], [87, 199], [62, 178], [50, 157], [40, 139], [87, 147], [83, 116], [80, 96], [80, 77], [105, 145], [105, 108], [107, 84], [108, 63], [121, 145], [123, 113], [126, 90], [127, 71], [136, 149], [144, 123], [148, 108], [151, 93]]}
--------------------------------------------------------------------------------
/lstm_pm_train.py:
--------------------------------------------------------------------------------
1 | # https://github.com/HowieMa/lstm_pm_pytorch.git
2 | import argparse
3 | from model.lstm_pm import LSTM_PM
4 | from data.handpose_data2 import UCIHandPoseDataset
5 | from src.utils import *
6 |
7 | import torch
8 | import torch.optim as optim
9 | import torch.nn as nn
10 |
11 | from torch.optim.lr_scheduler import StepLR
12 | from torch.autograd import Variable
13 | from torch.utils.data import DataLoader
14 | from torchvision import transforms
15 |
16 | # multi-GPU
17 | device_ids = [0, 1, 2, 3]
18 |
19 | # hyper parameter
20 | temporal = 5
21 | train_data_dir = '/home/haoyum/UCIHand/train/train_data'
22 | train_label_dir = '/home/haoyum/UCIHand/train/train_label'
23 |
24 | # add parameter
25 | parser = argparse.ArgumentParser(description='Pytorch LSTM_PM with Penn_Action')
26 | parser.add_argument('--learning_rate', type=float, default=8e-6, help='learning rate')
27 | parser.add_argument('--batch_size', default=4, type=int, help='batch size for training')
28 | parser.add_argument('--epochs', default=50, type=int, help='number of epochs for training')
29 | parser.add_argument('--begin_epoch', default=0, type=int, help='how many epochs the model has been trained')
30 | parser.add_argument('--save_dir', default='ckpt', type=str, help='directory of checkpoint')
31 | parser.add_argument('--cuda', default=1, type=int, help='if you use GPU, set cuda = 1,else set cuda = 0')
32 | parser.add_argument('--temporal', default=4, type=int, help='how many temporals you want ')
33 | args = parser.parse_args()
34 |
35 | if not os.path.exists(args.save_dir):
36 | os.mkdir(args.save_dir)
37 |
38 | transform = transforms.Compose([transforms.ToTensor()])
39 |
40 | # Build dataset
41 | train_data = UCIHandPoseDataset(data_dir=train_data_dir, label_dir=train_label_dir, temporal=temporal, train=True)
42 | print 'Train dataset total number of images sequence is ----' + str(len(train_data))
43 |
44 | # Data Loader
45 | train_dataset = DataLoader(train_data, batch_size=args.batch_size, shuffle=True)
46 |
47 | # Build model
48 | net = LSTM_PM(T=temporal)
49 | if args.cuda:
50 | net = net.cuda(device_ids[0])
51 | net = nn.DataParallel(net, device_ids=device_ids) # multi-Gpu
52 |
53 |
54 | def train():
55 | # initialize optimizer
56 | optimizer = optim.Adam(params=net.parameters(), lr=args.learning_rate, betas=(0.9, 0.999))
57 |
58 | # optimizer = optim.SGD(params=net.parameters(), lr=args.learning_rate, momentum=0.9, weight_decay=5e-4)
59 | # scheduler = StepLR(optimizer, step_size=40000, gamma=0.333)
60 |
61 | criterion = nn.MSELoss(size_average=True) # loss function MSE average
62 |
63 | net.train()
64 | for epoch in range(args.begin_epoch, args.epochs + 1):
65 |
66 | print 'epoch....................................' + str(epoch)
67 | for step, (images, label_map, center_map, imgs) in enumerate(train_dataset):
68 |
69 | images = Variable(images.cuda() if args.cuda else images) # 4D Tensor
70 | # Batch_size * (temporal * 3) * width(368) * height(368)
71 | label_map = Variable(label_map.cuda() if args.cuda else label_map) # 5D Tensor
72 | # Batch_size * Temporal * (joints+1) * 45 * 45
73 | center_map = Variable(center_map.cuda() if args.cuda else center_map) # 4D Tensor
74 | # Batch_size * 1 * width(368) * height(368)
75 |
76 | optimizer.zero_grad()
77 | predict_heatmaps = net(images, center_map) # get a list size: (temporal + 1 ) * 4D Tensor
78 |
79 | # ******************** calculate and save loss of each joints ********************
80 | total_loss = save_loss(predict_heatmaps, label_map, epoch, step, criterion, train=True, temporal=temporal)
81 | if step % 10 == 0:
82 | print '--step .....' + str(step)
83 | print '--loss ' + str(float(total_loss))
84 |
85 | # ******************** save training heat maps per 100 steps ********************
86 | if step % 100 == 0:
87 | save_images(label_map, predict_heatmaps, step, epoch, imgs, train=True, temporal=temporal)
88 |
89 | # backward
90 | total_loss.backward()
91 | optimizer.step()
92 | # scheduler.step()
93 |
94 | # ************************* save model per 10 epochs *************************
95 | if epoch % 5 == 0:
96 | torch.save(net.state_dict(), os.path.join(args.save_dir, 'ucihand_lstm_pm{:d}.pth'.format(epoch)))
97 |
98 | print 'train done!'
99 |
100 |
101 | if __name__ == '__main__':
102 | train()
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
--------------------------------------------------------------------------------
/model/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/model/__init__.py
--------------------------------------------------------------------------------
/model/lstm_pm.py:
--------------------------------------------------------------------------------
1 | import torch.nn as nn
2 | import torch.nn.functional as F
3 | import torch
4 |
5 |
6 | class LSTM_PM(nn.Module):
7 |
8 | def __init__(self, outclass=21, T=7):
9 | super(LSTM_PM, self).__init__()
10 | self.outclass = outclass
11 | self.T = T
12 | self.pool_center_lower = nn.AvgPool2d(kernel_size=9, stride=8)
13 |
14 | # conv_net1
15 | self.conv1_convnet1 = nn.Conv2d(3, 128, kernel_size=9, padding=4) # 3 * 368 * 368
16 | self.pool1_convnet1 = nn.MaxPool2d(kernel_size=3, stride=2)
17 | self.conv2_convnet1 = nn.Conv2d(128, 128, kernel_size=9, padding=4)
18 | self.pool2_convnet1 = nn.MaxPool2d(kernel_size=3, stride=2)
19 | self.conv3_convnet1 = nn.Conv2d(128, 128, kernel_size=9, padding=4)
20 | self.pool3_convnet1 = nn.MaxPool2d(kernel_size=3, stride=2)
21 | self.conv4_convnet1 = nn.Conv2d(128, 32, kernel_size=5, padding=2)
22 | self.conv5_convnet1 = nn.Conv2d(32, 512, kernel_size=9, padding=4)
23 | self.conv6_convnet1 = nn.Conv2d(512, 512, kernel_size=1)
24 | self.conv7_convnet1 = nn.Conv2d(512, self.outclass, kernel_size=1) # 512 * 45 * 45
25 |
26 | # conv_net2
27 | self.conv1_convnet2 = nn.Conv2d(3, 128, kernel_size=9, padding=4) # 3 * 368 * 368
28 | self.pool1_convnet2 = nn.MaxPool2d(kernel_size=3, stride=2)
29 | self.conv2_convnet2 = nn.Conv2d(128, 128, kernel_size=9, padding=4) # 128 * 184 * 184
30 | self.pool2_convnet2 = nn.MaxPool2d(kernel_size=3, stride=2)
31 | self.conv3_convnet2 = nn.Conv2d(128, 128, kernel_size=9, padding=4) # 128 * 92 * 92
32 | self.pool3_convnet2 = nn.MaxPool2d(kernel_size=3, stride=2)
33 | self.conv4_convnet2 = nn.Conv2d(128, 32, kernel_size=5, padding=2) # 32 * 45 * 45
34 |
35 | # conv_net3
36 | self.Mconv1_convnet3 = nn.Conv2d(48, 128, kernel_size=11, padding=5)
37 | self.Mconv2_convnet3 = nn.Conv2d(128, 128, kernel_size=11, padding=5)
38 | self.Mconv3_convnet3 = nn.Conv2d(128, 128, kernel_size=11, padding=5)
39 | self.Mconv4_convnet3 = nn.Conv2d(128, 128, kernel_size=1, padding=0)
40 | self.Mconv5_convnet3 = nn.Conv2d(128, self.outclass, kernel_size=1, padding=0)
41 |
42 | # lstm
43 | self.conv_ix_lstm = nn.Conv2d(32 + 1 + self.outclass, 48, kernel_size=3, padding=1, bias=True)
44 | self.conv_ih_lstm = nn.Conv2d(48, 48, kernel_size=3, padding=1, bias=False)
45 |
46 | self.conv_fx_lstm = nn.Conv2d(32 + 1 + self.outclass, 48, kernel_size=3, padding=1, bias=True)
47 | self.conv_fh_lstm = nn.Conv2d(48, 48, kernel_size=3, padding=1, bias=False)
48 |
49 | self.conv_ox_lstm = nn.Conv2d(32 + 1 + self.outclass, 48, kernel_size=3, padding=1, bias=True)
50 | self.conv_oh_lstm = nn.Conv2d(48, 48, kernel_size=3, padding=1, bias=False)
51 |
52 | self.conv_gx_lstm = nn.Conv2d(32 + 1 + self.outclass, 48, kernel_size=3, padding=1, bias=True)
53 | self.conv_gh_lstm = nn.Conv2d(48, 48, kernel_size=3, padding=1, bias=False)
54 |
55 | # initial lstm
56 | self.conv_gx_lstm0 = nn.Conv2d(32 + 1 + self.outclass, 48, kernel_size=3, padding=1)
57 | self.conv_ix_lstm0 = nn.Conv2d(32 + 1 + self.outclass, 48, kernel_size=3, padding=1)
58 | self.conv_ox_lstm0 = nn.Conv2d(32 + 1 + self.outclass, 48, kernel_size=3, padding=1)
59 |
60 | def convnet1(self, image):
61 | '''
62 | :param image: 3 * 368 * 368
63 | :return: initial_heatmap out_class * 45 * 45
64 | '''
65 | x = self.pool1_convnet1(F.relu(self.conv1_convnet1(image))) # output 128 * 184 * 184
66 | x = self.pool2_convnet1(F.relu(self.conv2_convnet1(x))) # output 128 * 92 * 92
67 | x = self.pool3_convnet1(F.relu(self.conv3_convnet1(x))) # output 128 * 45 * 45
68 | x = F.relu(self.conv4_convnet1(x)) # output 32 * 45 * 45
69 | x = F.relu(self.conv5_convnet1(x)) # output 512 * 45 * 45
70 | x = F.relu(self.conv6_convnet1(x)) # output 512 * 45 * 45
71 | initial_heatmap = self.conv7_convnet1(x) # output (class + 1) * 45 * 45
72 | return initial_heatmap
73 |
74 | def convnet2(self, image):
75 | '''
76 | :param image: 3 * 368 * 368
77 | :return: Fs(.) features 32 * 45 * 45
78 | '''
79 | x = self.pool1_convnet2(F.relu(self.conv1_convnet2(image))) # output 128 * 184 * 184
80 | x = self.pool2_convnet2(F.relu(self.conv2_convnet2(x))) # output 128 * 92 * 92
81 | x = self.pool3_convnet2(F.relu(self.conv3_convnet2(x))) # output 128 * 45 * 45
82 | x = F.relu(self.conv4_convnet2(x)) # output 32 * 45 * 45
83 | return x # output 32 * 45 * 45
84 |
85 | def convnet3(self, hide_t):
86 | """
87 | :param h_t: 48 * 45 * 45
88 | :return: heatmap out_class * 45 * 45
89 | """
90 | x = F.relu(self.Mconv1_convnet3(hide_t)) # output 128 * 45 * 45
91 | x = F.relu(self.Mconv2_convnet3(x)) # output 128 * 45 * 45
92 | x = F.relu(self.Mconv3_convnet3(x)) # output 128 * 45 * 45
93 | x = F.relu(self.Mconv4_convnet3(x)) # output 128 * 45 * 45
94 | x = self.Mconv5_convnet3(x) # output (class+1) * 45 * 45
95 | return x # heatmap (class+1) * 45 * 45
96 |
97 | def lstm(self, heatmap, features, centermap, hide_t_1, cell_t_1):
98 | '''
99 | :param heatmap: (class+1) * 45 * 45
100 | :param features: 32 * 45 * 45
101 | :param centermap: 1 * 45 * 45
102 | :param hide_t_1: 48 * 45 * 45
103 | :param cell_t_1: 48 * 45 * 45
104 | :return:
105 | hide_t: 48 * 45 * 45
106 | cell_t: 48 * 45 * 45
107 | '''
108 | xt = torch.cat([heatmap, features, centermap], dim=1) # (32+ class+1 +1 ) * 45 * 45
109 |
110 | gx = self.conv_gx_lstm(xt) # output: 48 * 45 * 45
111 | gh = self.conv_gh_lstm(hide_t_1) # output: 48 * 45 * 45
112 | g_sum = gx + gh
113 | gt = F.tanh(g_sum)
114 |
115 | ox = self.conv_ox_lstm(xt) # output: 48 * 45 * 45
116 | oh = self.conv_oh_lstm(hide_t_1) # output: 48 * 45 * 45
117 | o_sum = ox + oh
118 | ot = F.sigmoid(o_sum)
119 |
120 | ix = self.conv_ix_lstm(xt) # output: 48 * 45 * 45
121 | ih = self.conv_ih_lstm(hide_t_1) # output: 48 * 45 * 45
122 | i_sum = ix + ih
123 | it = F.sigmoid(i_sum)
124 |
125 | fx = self.conv_fx_lstm(xt) # output: 48 * 45 * 45
126 | fh = self.conv_fh_lstm(hide_t_1) # output: 48 * 45 * 45
127 | f_sum = fx + fh
128 | ft = F.sigmoid(f_sum)
129 |
130 | cell_t = ft * cell_t_1 + it * gt
131 | hide_t = ot * F.tanh(cell_t)
132 |
133 | return cell_t, hide_t
134 |
135 | def lstm0(self, x):
136 | gx = self.conv_gx_lstm0(x)
137 | ix = self.conv_ix_lstm0(x)
138 | ox = self.conv_ox_lstm0(x)
139 |
140 | gx = F.tanh(gx)
141 | ix = F.sigmoid(ix)
142 | ox = F.sigmoid(ox)
143 |
144 | cell1 = F.tanh(gx * ix)
145 | hide_1 = ox * cell1
146 | return cell1, hide_1
147 |
148 | def stage2(self, image, cmap, heatmap, cell_t_1, hide_t_1):
149 | '''
150 | :param image: 3 * 368 * 368
151 | :param cmap: gaussian 1 * 368 * 368
152 | :param heatmap: out_class * 45 * 45
153 | :param cell_t_1: 48 * 45 * 45
154 | :param hide_t_1: 48 * 45 * 45
155 | :return:
156 | new_heatmap: out_class * 45 * 45
157 | cell_t: 48 * 45 * 45
158 | hide_t: 48 * 45 * 45
159 | '''
160 | features = self.convnet2(image)
161 | centermap = self.pool_center_lower(cmap)
162 | cell_t, hide_t = self.lstm(heatmap, features, centermap, hide_t_1, cell_t_1)
163 | new_heat_map = self.convnet3(hide_t)
164 | return new_heat_map, cell_t, hide_t
165 |
166 | def stage1(self, image, cmap):
167 | '''
168 | :param image: 3 * 368 * 368
169 | :param cmap: 1 * 368 * 368
170 | :return:
171 | heatmap: out_class * 45 * 45
172 | cell_t: 48 * 45 * 45
173 | hide_t: 48 * 45 * 45
174 | '''
175 | initial_heatmap = self.convnet1(image)
176 | features = self.convnet2(image)
177 | centermap = self.pool_center_lower(cmap)
178 |
179 | x = torch.cat([initial_heatmap, features, centermap], dim=1)
180 | cell1, hide1 = self.lstm0(x)
181 | heatmap = self.convnet3(hide1)
182 | return initial_heatmap, heatmap, cell1, hide1
183 |
184 | def forward(self, images, center_map):
185 | '''
186 |
187 | :param images: Tensor (T * 3) * w(368) * h(368)
188 | :param center_map: Tensor 1 * 368 * 368
189 | :return:
190 | heatmaps list (T + 1)* out_class * 45 * 45 includes the initial heatmap
191 | '''
192 | image = images[:, 0:3, :, :]
193 |
194 | heat_maps = []
195 | initial_heatmap, heatmap, cell, hide = self.stage1(image, center_map) # initial heat map
196 |
197 | heat_maps.append(initial_heatmap) # for initial loss
198 | heat_maps.append(heatmap)
199 | #
200 | for i in range(1, self.T):
201 | image = images[:, (3 * i):(3 * i + 3), :, :]
202 | heatmap, cell, hide = self.stage2(image, center_map, heatmap, cell, hide)
203 | heat_maps.append(heatmap)
204 | return heat_maps
205 |
206 |
207 | # test case
208 | if __name__ == '__main__':
209 | net = LSTM_PM(T=4)
210 | a = torch.randn(2, 12, 368, 368) # batch size = 2
211 | c = torch.randn(2, 1, 368, 368)
212 | maps = net(a, c)
213 | for m in maps:
214 | print m.shape
215 |
216 |
--------------------------------------------------------------------------------
/src/__init__.py:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/src/__init__.py
--------------------------------------------------------------------------------
/src/__init__.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/src/__init__.pyc
--------------------------------------------------------------------------------
/src/utils.py:
--------------------------------------------------------------------------------
1 | import json
2 | import numpy as np
3 | import os
4 | import scipy.misc
5 |
6 |
7 | def loss_history_init(temporal=5):
8 | loss_history = {}
9 | for t in range(temporal):
10 | loss_history['temporal'+str(t)] = []
11 | loss_history['total'] = 0.0
12 | return loss_history
13 |
14 |
15 | def save_loss(predict_heatmaps, label_map, epoch, step, criterion, train, temporal=5, save_dir='ckpt/'):
16 | loss_save = loss_history_init(temporal=temporal)
17 |
18 | predict = predict_heatmaps[0]
19 | target = label_map[:, 0, :, :, :]
20 | initial_loss = criterion(predict, target) # loss initial
21 | total_loss = initial_loss
22 |
23 | for t in range(temporal):
24 | predict = predict_heatmaps[t + 1]
25 | target = label_map[:, t, :, :, :]
26 | tmp_loss = criterion(predict, target) # loss in each stage
27 | total_loss += tmp_loss
28 | loss_save['temporal' + str(t)] = float('%.8f' % tmp_loss)
29 |
30 | total_loss = total_loss
31 | loss_save['total'] = float(total_loss)
32 |
33 | # save loss to file
34 | if train is True:
35 | if not os.path.exists(save_dir + 'loss_epoch' + str(epoch)):
36 | os.mkdir(save_dir + 'loss_epoch' + str(epoch))
37 | json.dump(loss_save, open(save_dir + 'loss_epoch' + str(epoch) + '/s' + str(step).zfill(4) + '.json', 'wb'))
38 |
39 | else:
40 | if not os.path.exists(save_dir + 'loss_test/'):
41 | os.mkdir(save_dir + 'loss_test/')
42 | json.dump(loss_save, open(save_dir + 'loss_test/' + str(step).zfill(4) + '.json', 'wb'))
43 |
44 | return total_loss
45 |
46 |
47 | def save_images(label_map, predict_heatmaps, step, epoch, imgs, train, pck=1, temporal=5, save_dir='ckpt/'):
48 | """
49 | :param label_map:
50 | :param predict_heatmaps: 5D Tensor Batch_size * Temporal * joints * 45 * 45
51 | :param step:
52 | :param temporal:
53 | :param epoch:
54 | :param train:
55 | :param imgs: list [(), (), ()] temporal * batch_size
56 | :return:
57 | """
58 |
59 | for b in range(label_map.shape[0]): # for each batch (person)
60 | output = np.ones((50 * 2, 50 * temporal)) # cd .. temporal save a single image
61 | seq = imgs[0][b].split('/')[-2] # sequence name 001L0
62 | img = ""
63 | for t in range(temporal): # for each temporal
64 | im = imgs[t][b].split('/')[-1][1:5] # image name 0005
65 | img += '_' + im
66 | pre = np.zeros((45, 45)) #
67 | gth = np.zeros((45, 45))
68 | for i in range(21): # for each joint
69 | pre += np.asarray(predict_heatmaps[t][b, i, :, :].data) # 2D
70 | gth += np.asarray(label_map[b, t, i, :, :].data) # 2D
71 |
72 | output[0:45, 50 * t: 50 * t + 45] = gth
73 | output[50:95, 50 * t: 50 * t + 45] = pre
74 |
75 | if train is True:
76 | if not os.path.exists(save_dir + 'epoch'+str(epoch)):
77 | os.mkdir(save_dir + 'epoch'+str(epoch))
78 | scipy.misc.imsave(save_dir + 'epoch'+str(epoch) + '/s'+str(step) + '_b' + str(b) + '_' + seq + img + '.jpg', output)
79 | else:
80 |
81 | if not os.path.exists(save_dir + 'test'):
82 | os.mkdir(save_dir + 'test')
83 | scipy.misc.imsave(save_dir + 'test' + '/s' + str(step) + '_b' + str(b) + '_'
84 | + seq + img + '_' + str(round(pck, 4)) + '.jpg', output)
85 |
86 |
87 | def lstm_pm_evaluation(label_map, predict_heatmaps, sigma=0.04, temporal=5):
88 | pck_eval = []
89 | empty = np.zeros((21, 45, 45)) # 3D numpy 21 * 45 * 45
90 | for b in range(label_map.shape[0]): # for each batch (person)
91 | for t in range(temporal): # for each temporal
92 | target = np.asarray(label_map[b, t, :, :, :].data) # 3D numpy 21 * 45 * 45
93 | predict = np.asarray(predict_heatmaps[t][b, :, :, :].data) # 3D numpy 21 * 45 * 45
94 | if not np.equal(empty, target).all():
95 | pck_eval.append(PCK(predict, target, sigma=sigma))
96 |
97 | return sum(pck_eval) / float(len(pck_eval)) #
98 |
99 |
100 | def PCK(predict, target, label_size=45, sigma=0.04):
101 | """
102 | calculate possibility of correct key point of one single image
103 | if distance of ground truth and predict point is less than sigma, than the value is 1, otherwise it is 0
104 | :param predict: 3D numpy 21 * 45 * 45
105 | :param target: 3D numpy 21 * 45 * 45
106 | :param label_size:
107 | :param sigma:
108 | :return: 0/21, 1/21, ...
109 | """
110 | pck = 0
111 | for i in range(predict.shape[0]):
112 | pre_x, pre_y = np.where(predict[i, :, :] == np.max(predict[i, :, :]))
113 | tar_x, tar_y = np.where(target[i, :, :] == np.max(target[i, :, :]))
114 |
115 | dis = np.sqrt((pre_x[0] - tar_x[0])**2 + (pre_y[0] - tar_y[0])**2)
116 | if dis < sigma * label_size:
117 | pck += 1
118 | return pck / float(predict.shape[0])
119 |
120 |
121 | def draw_loss(epoch):
122 | all_losses = os.listdir('ckpt/loss_epoch'+str(epoch))
123 | losses = []
124 |
125 | for loss_j in all_losses:
126 | loss = json.load('ckpt/loss_epoch'+str(epoch) + '/' +loss_j)
127 | a = loss['total']
128 | losses.append(a)
129 |
130 |
131 | def Tests_save_label_imgs(label_map, predict_heatmaps, step, imgs, temporal=13, save_dir='ckpt/'):
132 | """
133 | :param label_map:
134 | :param predict_heatmaps: 5D Tensor Batch_size * Temporal * joints * 45 * 45
135 | :param step:
136 | :param temporal:
137 | :param epoch:
138 | :param train:
139 | :param imgs: list [(), (), ()] temporal * batch_size
140 | :return:
141 | """
142 |
143 | for b in range(label_map.shape[0]): # for each batch (person)
144 | output = np.ones((50 * 2, 50 * temporal)) # cd .. temporal save a single image
145 | seq = imgs[0][b].split('/')[-2] # sequence name 001L0
146 | img = "" # all image name in the same seq
147 | label_dict = {} # all image label in the same seq
148 | pck_dict = {}
149 | for t in range(temporal): # for each temporal
150 | labels_list = [] # 21 points label for one image [[], [], [], .. ,[]]
151 |
152 | im = imgs[t][b].split('/')[-1][1:5] # image name 0005
153 | img += '_' + im
154 | pre = np.zeros((45, 45)) #
155 | gth = np.zeros((45, 45))
156 |
157 | # ****************** get pck of one image ************************
158 | target = np.asarray(label_map[b, t, :, :, :].data) # 3D numpy 21 * 45 * 45
159 | predict = np.asarray(predict_heatmaps[t][b, :, :, :].data) # 3D numpy 21 * 45 * 45
160 | empty = np.zeros((21, 45, 45))
161 |
162 | if not np.equal(empty, target).all():
163 | pck = PCK(predict, target, sigma=0.04)
164 | pck_dict[seq + '_' + im] = pck
165 |
166 | # ****************** save image and label of 21 joints ******************
167 | for i in range(21): # for each joint
168 | gth += np.asarray(label_map[b, t, i, :, :].data) # 2D
169 | tmp_pre = np.asarray(predict_heatmaps[t][b, i, :, :].data) # 2D
170 | pre += tmp_pre
171 |
172 | # get label of original image
173 | corr = np.where(tmp_pre == np.max(tmp_pre))
174 | x = corr[0][0] * (256.0 / 45.0)
175 | x = int(x)
176 | y = corr[1][0] * (256.0 / 45.0)
177 | y = int(y)
178 | labels_list.append([y, x]) # save img label
179 |
180 | output[0:45, 50 * t: 50 * t + 45] = gth # save image
181 | output[50:95, 50 * t: 50 * t + 45] = pre
182 |
183 | label_dict[im] = labels_list # save label
184 |
185 | # calculate average PCK
186 | # print pck_dict
187 | avg_pck = sum(pck_dict.values()) / float(pck_dict.__len__())
188 | print 'step ...%d ... PCK %f ....' % (step, avg_pck)
189 |
190 | # ****************** save image ******************
191 | if not os.path.exists(save_dir + 'test'):
192 | os.mkdir(save_dir + 'test')
193 | scipy.misc.imsave(save_dir + 'test' + '/s' + str(step) + '_'
194 | + seq + img + '_' + str(round(avg_pck, 4)) + '.jpg', output)
195 |
196 | # ****************** save label ******************
197 | if not os.path.exists(os.path.join(save_dir, 'test_predict')):
198 | os.mkdir(os.path.join(save_dir, 'test_predict'))
199 |
200 | save_dir_label = os.path.join(save_dir, 'test_predict') + '/' + seq
201 | if not os.path.exists(save_dir_label):
202 | os.mkdir(save_dir_label)
203 |
204 | json.dump(label_dict, open(save_dir_label + '/' + str(step) + '.json', 'w'), sort_keys=True, indent=4)
205 | return pck_dict
206 |
207 |
208 |
209 | from PIL import Image
210 | from PIL import ImageDraw
211 |
212 |
213 |
214 | def draw_point(points, im):
215 | """
216 | draw key point on image
217 | :param points: list 21 [ [x1,y1], ..., [x21,y21] ]
218 | :param im: PIL Image
219 | :return:
220 | """
221 | i = 0
222 | draw=ImageDraw.Draw(im)
223 |
224 | for point in points:
225 | x = point[1]
226 | y = point[0]
227 |
228 | if i==0:
229 | rootx=x
230 | rooty=y
231 | if i==1 or i==5 or i==9 or i==13 or i==17:
232 | prex=rootx
233 | prey=rooty
234 |
235 | if i >0 and i<=4:
236 | draw.line((prex,prey,x,y),'red')
237 | draw.ellipse((x-3, y-3, x+3, y+3), 'red', 'black')
238 | if i >4 and i<=8:
239 | draw.line((prex,prey,x,y),'yellow')
240 | draw.ellipse((x-3, y-3, x+3, y+3), 'yellow', 'black')
241 |
242 | if i >8 and i<=12:
243 | draw.line((prex,prey,x,y),'green')
244 | draw.ellipse((x-3, y-3, x+3, y+3), 'green', 'black')
245 | if i >12 and i<=16:
246 | draw.line((prex,prey,x,y),'blue')
247 | draw.ellipse((x-3, y-3, x+3, y+3), 'blue', 'black')
248 | if i >16 and i<=20:
249 | draw.line((prex,prey,x,y),'purple')
250 | draw.ellipse((x-3, y-3, x+3, y+3), 'purple', 'black')
251 |
252 |
253 | prex=x
254 | prey=y
255 | i=i+1
256 | return im
257 |
258 |
259 |
--------------------------------------------------------------------------------
/src/utils.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HowieMa/lstm_pm_pytorch/4e7af6d44a9d8b791d0ace368f1a950a562546eb/src/utils.pyc
--------------------------------------------------------------------------------
/test_lstm_pm.py:
--------------------------------------------------------------------------------
1 | # test
2 | from data.handpose_data2 import UCIHandPoseDataset
3 | from model.lstm_pm import LSTM_PM
4 | from src.utils import *
5 |
6 | import argparse
7 | import pandas as pd
8 | import os
9 | import torch
10 | import torch.nn as nn
11 | from torch.autograd import Variable
12 | from collections import OrderedDict
13 | from torch.utils.data import DataLoader
14 |
15 | os.environ["CUDA_VISIBLE_DEVICES"] = "0,1"
16 |
17 | # add parameter
18 | parser = argparse.ArgumentParser(description='Pytorch LSTM_PM with Penn_Action')
19 | parser.add_argument('--learning_rate', type=float, default=8e-6, help='learning rate')
20 | parser.add_argument('--batch_size', default=1, type=int, help='batch size for training')
21 | parser.add_argument('--save_dir', default='ckpt', type=str, help='directory of checkpoint')
22 | parser.add_argument('--cuda', default=1, type=int, help='if you use GPU, set cuda = 1,else set cuda = 0')
23 | parser.add_argument('--temporal', default=4, type=int, help='how many temporals you want ')
24 | args = parser.parse_args()
25 |
26 | # hyper parameter
27 | temporal = 5
28 | test_data_dir = '/mnt/data/haoyum/UCIHand/test/test_data'
29 | test_label_dir = '/mnt/data/haoyum/UCIHand/test/test_label'
30 | model_epo = [10, 15, 20, 25, 30, 35, 40, 45, 50]
31 |
32 | # load data
33 | test_data = UCIHandPoseDataset(data_dir=test_data_dir, label_dir=test_label_dir, temporal=temporal, train=False)
34 | print 'Test dataset total number of images sequence is ----' + str(len(test_data))
35 | test_dataset = DataLoader(test_data, batch_size=args.batch_size, shuffle=False)
36 |
37 |
38 | def load_model(model):
39 | # build model
40 | net = LSTM_PM(T=temporal)
41 | if torch.cuda.is_available():
42 | net = net.cuda()
43 | net = nn.DataParallel(net) # multi-Gpu
44 |
45 | save_path = os.path.join('ckpt/ucihand_lstm_pm' + str(model)+'.pth')
46 | state_dict = torch.load(save_path)
47 | net.load_state_dict(state_dict)
48 | return net
49 |
50 | # ******************** transfer from multi-GPU model ********************
51 | # create new OrderedDict that does not contain `module.`
52 | # new_state_dict = OrderedDict()
53 | # for k, v in state_dict.items():
54 | # namekey = k[7:] # remove `module.`
55 | # new_state_dict[namekey] = v
56 | # # load params
57 | # return net
58 |
59 | # **************************************** test all images ****************************************
60 |
61 |
62 | print '********* test data *********'
63 |
64 | for model in model_epo:
65 |
66 | net = load_model(model)
67 | net.eval()
68 |
69 | sigma = 0.01
70 | results = []
71 | for i in range(5):
72 |
73 | result = [] # save sigma and pck
74 | result.append(sigma)
75 | pck_all = []
76 | for step, (images, label_map, center_map, imgs) in enumerate(test_dataset):
77 |
78 | images = Variable(images.cuda() if args.cuda else images) # 4D Tensor
79 | # Batch_size * (temporal * 3) * width(368) * height(368)
80 | label_map = Variable(label_map.cuda() if args.cuda else label_map) # 5D Tensor
81 | # Batch_size * Temporal * joint * 45 * 45
82 | center_map = Variable(center_map.cuda() if args.cuda else center_map) # 4D Tensor
83 | # Batch_size * 1 * width(368) * height(368)
84 |
85 | predict_heatmaps = net(images, center_map) # get a list size: temporal * 4D Tensor
86 | predict_heatmaps = predict_heatmaps[1:]
87 | # calculate pck
88 | pck = lstm_pm_evaluation(label_map, predict_heatmaps, sigma=sigma, temporal=temporal)
89 | pck_all.append(pck)
90 |
91 | if step % 100 == 0:
92 | print '--step ...' + str(step)
93 | print '--pck.....' + str(pck)
94 | save_images(label_map, predict_heatmaps, step, epoch=-1, imgs=imgs, train=False, temporal=temporal,pck=pck)
95 |
96 |
97 | if pck < 0.8:
98 | save_images(label_map, predict_heatmaps, step, epoch=-1, imgs=imgs, train=False, temporal=temporal,pck=pck)
99 |
100 | print 'sigma ==========> ' + str(sigma)
101 | print '===PCK evaluation in test dataset is ' + str(sum(pck_all) / len(pck_all))
102 | result.append(str(sum(pck_all) / len(pck_all)))
103 | results.append(result)
104 |
105 | sigma += 0.01
106 |
107 | results = pd.DataFrame(results)
108 | results.to_csv('ckpt/' + str(model) + 'test_pck.csv')
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
--------------------------------------------------------------------------------