-
Notifications
You must be signed in to change notification settings - Fork 0
/
GTR.html
297 lines (258 loc) · 21.7 KB
/
GTR.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
<!DOCTYPE html>
<html class="fontawesome-i2svg-active fontawesome-i2svg-complete"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="">
<meta name="keywords" content="GTR, LGM">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module" src="./GTR_files/model-viewer.min.js"></script>
<title>GTR: Improving Large 3D Reconstruction Models through Geometry and Texture Refinement</title>
<style type="text/css">svg:not(:root).svg-inline--fa{overflow:visible}.svg-inline--fa{display:inline-block;font-size:inherit;height:1em;overflow:visible;vertical-align:-.125em}.svg-inline--fa.fa-lg{vertical-align:-.225em}.svg-inline--fa.fa-w-1{width:.0625em}.svg-inline--fa.fa-w-2{width:.125em}.svg-inline--fa.fa-w-3{width:.1875em}.svg-inline--fa.fa-w-4{width:.25em}.svg-inline--fa.fa-w-5{width:.3125em}.svg-inline--fa.fa-w-6{width:.375em}.svg-inline--fa.fa-w-7{width:.4375em}.svg-inline--fa.fa-w-8{width:.5em}.svg-inline--fa.fa-w-9{width:.5625em}.svg-inline--fa.fa-w-10{width:.625em}.svg-inline--fa.fa-w-11{width:.6875em}.svg-inline--fa.fa-w-12{width:.75em}.svg-inline--fa.fa-w-13{width:.8125em}.svg-inline--fa.fa-w-14{width:.875em}.svg-inline--fa.fa-w-15{width:.9375em}.svg-inline--fa.fa-w-16{width:1em}.svg-inline--fa.fa-w-17{width:1.0625em}.svg-inline--fa.fa-w-18{width:1.125em}.svg-inline--fa.fa-w-19{width:1.1875em}.svg-inline--fa.fa-w-20{width:1.25em}.svg-inline--fa.fa-pull-left{margin-right:.3em;width:auto}.svg-inline--fa.fa-pull-right{margin-left:.3em;width:auto}.svg-inline--fa.fa-border{height:1.5em}.svg-inline--fa.fa-li{width:2em}.svg-inline--fa.fa-fw{width:1.25em}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:#ff253a;border-radius:1em;-webkit-box-sizing:border-box;box-sizing:border-box;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;right:0;text-overflow:ellipsis;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:0;right:0;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:0;left:0;right:auto;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{right:0;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:0;right:auto;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top left;transform-origin:top left}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:solid .08em #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-webkit-transform:scale(1,-1);transform:scale(1,-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1,-1);transform:scale(-1,-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:#fff}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color,currentColor);opacity:1;opacity:var(--fa-primary-opacity,1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color,currentColor);opacity:.4;opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:.4;opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:1;opacity:var(--fa-primary-opacity,1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}.fad.fa-inverse{color:#fff}</style><link href="./GTR_files/css" rel="stylesheet">
<link href="./GTR_files/css(1)" rel="stylesheet">
<link rel="stylesheet" href="./GTR_files/bulma.min.css">
<link rel="stylesheet" href="./GTR_files/bulma-carousel.min.css">
<link rel="stylesheet" href="./GTR_files/bulma-slider.min.css">
<link rel="stylesheet" href="./GTR_files/fontawesome.all.min.css">
<link rel="stylesheet" href="./GTR_files/academicons.min.css">
<link rel="stylesheet" href="./GTR_files/index.css">
<script src="./GTR_files/jquery.min.js"></script>
<script src="./GTR_files/main.js"></script><script src="./GTR_files/ViewSDKInterface.js"></script>
<script defer="" src="./GTR_files/fontawesome.all.min.js"></script>
<script src="./GTR_files/bulma-carousel.min.js"></script>
<script src="./GTR_files/bulma-slider.min.js"></script>
<script src="./GTR_files/index.js"></script>
<script src="./GTR_files/babylon.viewer.js"></script><style type="text/css">.ViewSDK_hideOverflow {
overflow: hidden;
}</style><style type="text/css">.ViewSDK_parentRelativeWidth {
width: 100%;
}</style><style type="text/css">.ViewSDK_viewportRelativeWidth {
width: 100vw;
}</style><style type="text/css">.ViewSDK_parentRelativeHeight {
height: 100%;
}</style><style type="text/css">.ViewSDK_viewportRelativeHeight {
height: 100vh;
}</style><style type="text/css">.ViewSDK_fullScreenPDFViewer {
width:100vw !important; height:100vh !important;
max-width:100vw !important; max-height:100vh !important;
position:fixed; top:0; left:0; z-index:99999;
margin: 0 !important; padding: 0 !important;
border: none !important;
}</style><style type="text/css">:root { --ViewSDK-mobile-viewport-height:1vh; }</style><style type="text/css">.ViewSDK_fullScreenPDFViewerMobile {
width:100vw !important; height:calc(100 * var(--ViewSDK-mobile-viewport-height)) !important;
max-width:100vw !important; max-height:calc(100 * var(--ViewSDK-mobile-viewport-height)) !important;
position:fixed; top:0; left:0; z-index:99999;
margin: 0 !important; padding: 0 !important;
border: none !important;
}</style><style type="text/css">.ViewSDK_hideOverflow {
overflow: hidden;
}</style><style type="text/css">.ViewSDK_parentRelativeWidth {
width: 100%;
}</style><style type="text/css">.ViewSDK_viewportRelativeWidth {
width: 100vw;
}</style><style type="text/css">.ViewSDK_parentRelativeHeight {
height: 100%;
}</style><style type="text/css">.ViewSDK_viewportRelativeHeight {
height: 100vh;
}</style><style type="text/css">.ViewSDK_fullScreenPDFViewer {
width:100vw !important; height:100vh !important;
max-width:100vw !important; max-height:100vh !important;
position:fixed; top:0; left:0; z-index:9999;
margin: 0 !important; padding: 0 !important;
border: none !important;
}</style><style type="text/css">.ViewSDK_LBFullScreenPDFViewer {
width:100vw !important; height:100vh !important;
max-width:100vw !important; max-height:100vh !important;
position:fixed; top:0; left:0; z-index:10000;
margin: 0 !important; padding: 0 !important;
background-color: rgba(0, 0, 0, 0.2);
border: none !important;
}</style><style type="text/css">:root { --ViewSDK-mobile-viewport-height:1vh; }</style><style type="text/css">.ViewSDK_fullScreenPDFViewerMobile {
width:100vw !important; height:calc(100 * var(--ViewSDK-mobile-viewport-height)) !important;
max-width:100vw !important; max-height:calc(100 * var(--ViewSDK-mobile-viewport-height)) !important;
position:fixed; top:0; left:0; z-index:9999;
margin: 0 !important; padding: 0 !important;
border: none !important;
}</style><style type="text/css">.ViewSDK_LBLoader {
position: absolute;
left: 50%;
top: 50%;
z-index: 10000;
border: 4px solid #f3f3f3;
border-top: 4px solid #1473E6;
width: 56px !important;
height: 56px !important;
margin: -32px 0 0 -32px;
border-radius: 50%;
-webkit-animation: lbSpin 2s linear infinite;
animation: lbSpin 2s linear infinite;
}
@-webkit-keyframes lbSpin {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
@keyframes lbSpin {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}</style><style>[touch-action="none"]{ -ms-touch-action: none; touch-action: none; }
[touch-action="auto"]{ -ms-touch-action: auto; touch-action: auto; }
[touch-action~="pan-x"]{ -ms-touch-action: pan-x; touch-action: pan-x; }
[touch-action~="pan-y"]{ -ms-touch-action: pan-y; touch-action: pan-y; }
[touch-action~="pan-up"]{ -ms-touch-action: pan-up; touch-action: pan-up; }
[touch-action~="pan-down"]{ -ms-touch-action: pan-down; touch-action: pan-down; }
[touch-action~="pan-left"]{ -ms-touch-action: pan-left; touch-action: pan-left; }
[touch-action~="pan-right"]{ -ms-touch-action: pan-right; touch-action: pan-right; }
</style>
</head>
<body>
<section class="hero">
<div class="hero-body">
<div class="container is-max-desktop">
<div class="columns is-centered">
<div class="column has-text-centered">
<h1 class="title is-1 publication-title">
<span class="dnerf">GTR: Improving Large 3D Reconstruction Models through Geometry and Texture Refinement </span>
</h1>
<div class="is-size-5 publication-authors">
<span class="author-block">
<a href="https://payeah.net/">Peiye Zhuang</a>,</span>
<span class="author-block">
<a href="http://hansf.me/">Songfang Han</a>,</span>
<span class="author-block">
<a href="https://mightychaos.github.io/">Chaoyang Wang</a>,</span>
<span class="author-block">
<a href="https://aliaksandrsiarohin.github.io/aliaksandr-siarohin-website/">Aliaksandr Siarohin</a>,</span>
<span class="author-block">
Jiaxu Zou,</span>
<span class="author-block">
Michael Vasilkovsky,</span>
<br>
<span class="author-block">
Vladislav Shakhrai,</span>
<span class="author-block">
Sergey Korolev,</span>
<span class="author-block">
<a href="http://www.stulyakov.com/">Sergey Tulyakov</a>,</span>
<span class="author-block">
<a href="http://hsinyinglee.com/">Hsin-Ying Lee</a>
</span></div>
<div class="is-size-5 publication-authors">
<span class="author-block">Snap Inc. </span>
<br>
<p><br></p>
<div class="column has-text-centered">
<div class="publication-links">
<span class="link-block">
<a href="https://payeah.net/" class="external-link button is-normal is-rounded is-dark">
<!-- <span class="icon">
<i class="ai ai-arxiv"></i>
</span> -->
<span class="icon">
<svg class="svg-inline--fa fa-file-pdf fa-w-12" aria-hidden="true" focusable="false" data-prefix="fas" data-icon="file-pdf" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512" data-fa-i2svg=""><path fill="currentColor" d="M181.9 256.1c-5-16-4.9-46.9-2-46.9 8.4 0 7.6 36.9 2 46.9zm-1.7 47.2c-7.7 20.2-17.3 43.3-28.4 62.7 18.3-7 39-17.2 62.9-21.9-12.7-9.6-24.9-23.4-34.5-40.8zM86.1 428.1c0 .8 13.2-5.4 34.9-40.2-6.7 6.3-29.1 24.5-34.9 40.2zM248 160h136v328c0 13.3-10.7 24-24 24H24c-13.3 0-24-10.7-24-24V24C0 10.7 10.7 0 24 0h200v136c0 13.2 10.8 24 24 24zm-8 171.8c-20-12.2-33.3-29-42.7-53.8 4.5-18.5 11.6-46.6 6.2-64.2-4.7-29.4-42.4-26.5-47.8-6.8-5 18.3-.4 44.1 8.1 77-11.6 27.6-28.7 64.6-40.8 85.8-.1 0-.1.1-.2.1-27.1 13.9-73.6 44.5-54.5 68 5.6 6.9 16 10 21.5 10 17.9 0 35.7-18 61.1-61.8 25.8-8.5 54.1-19.1 79-23.2 21.7 11.8 47.1 19.5 64 19.5 29.2 0 31.2-32 19.7-43.4-13.9-13.6-54.3-9.7-73.6-7.2zM377 105L279 7c-4.5-4.5-10.6-7-17-7h-6v128h128v-6.1c0-6.3-2.5-12.4-7-16.9zm-74.1 255.3c4.1-2.7-2.5-11.9-42.8-9 37.1 15.8 42.8 9 42.8 9z"></path></svg><!-- <i class="fas fa-file-pdf"></i> Font Awesome fontawesome.com -->
</span>
<span>arXiv</span>
</a>
</span>
<!-- Video Link. -->
<!-- <span class="link-block">
<a href="#BibTeX" class="external-link button is-normal is-rounded is-dark">
<span class="icon">
<svg class="svg-inline--fa fa-quote-left fa-w-16" aria-hidden="true" focusable="false" data-prefix="fa" data-icon="quote-left" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" data-fa-i2svg=""><path fill="currentColor" d="M464 256h-80v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8c-88.4 0-160 71.6-160 160v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48zm-288 0H96v-64c0-35.3 28.7-64 64-64h8c13.3 0 24-10.7 24-24V56c0-13.3-10.7-24-24-24h-8C71.6 32 0 103.6 0 192v240c0 26.5 21.5 48 48 48h128c26.5 0 48-21.5 48-48V304c0-26.5-21.5-48-48-48z"></path></svg><!-- <i class="fa fa-quote-left"></i> Font Awesome fontawesome.com -->
<!-- </span> -->
<!-- <span>Cite</span> -->
<!-- </a> -->
<!-- <span> -->
</span></span></div>
</div>
<!-- <span class="author-block"> -->
<hr style="width:100%;height:0.7px;background-color:rgba(0, 0, 0, 0.665);margin-top:1em">
A <strong>large 3D reconstruction model </strong> that takes <strong>multi-view images</strong> as input and enables the generation of high-quality <strong>meshes</strong> with faithful texture reconstruction within <strong>seconds</strong>.
</div>
</div>
</div>
</div>
</div></section>
<section class="section">
<div class="container is-max-desktop">
<!-- Abstract. -->
<div class="columns is-centered has-text-centered">
<div class="column is-four-fifths">
<h2 class="title is-3">Abstract</h2>
<div class="content has-text-justified">
<p>
We propose a novel approach for 3D mesh reconstruction from multi-view images. Our method takes inspiration from large reconstruction models like LRM that use a transformer-based triplane generator and a Neural Radiance Field (NeRF) model trained on multi-view images. However, in our method, we introduce several important modifications that allow us to significantly enhance 3D reconstruction quality. First of all, we examine the original LRM architecture and find several shortcomings. Subsequently, we introduce respective modifications to the LRM architecture, which lead to improved multi-view image representation and more computationally efficient training. Second, in order to improve geometry recon- struction and enable supervision at full image resolution, we extract meshes from the NeRF field in a differentiable manner and fine-tune the NeRF model through mesh rendering. These modifications allow us to achieve state-of-the-art performance on both 2D and 3D evaluation metrics, such as a PSNR of 28.67 on Google Scanned Objects (GSO) dataset. Despite these superior results, our feed-forward model still struggles to reconstruct complex textures, such as text and portraits on assets. To address this, we introduce a lightweight per-instance texture refinement procedure. This procedure fine-tunes the triplane representation and the NeRF’s color estimation model on the mesh surface using the input multi-view images in just 4 seconds. This refinement improves the PSNR to 29.79 and achieves faith- ful reconstruction of complex textures, such as text. Additionally, our approach enables various downstream applications, including text/image-to-3D generation.
<br><br>
</p>
</div>
</div>
</div>
<img src="./GTR_files/pipeline.png" alt="gtr_pipline_figure">
<p><strong>Figure 1: Overview of our proposed approach for 3D reconstruction.</strong> Our pipeline consists of a convolutional decoder E, a transformer-based triplane generator, T, and a NeRF-based triplane decoder that contains two MLPs, fc and fd, for color and density prediction, respectively. In practice, the triplane resolution is set to 256, and the mesh representation has a grid size resolution of 256. </p>
<img src="./GTR_files/pipeline2.png" alt="gtr_pipline_figure">
<p><strong>Figure 2: Texture refinement for extracted meshes.</strong>We refine the texture by fine-tuning the triplane feature of the asset and the color MLP using the input images. </p>
</div>
</section>
<section class="section">
<div class="container is-max-desktop">
<div class="columns is-centered has-text-centered">
<div class="column is-full-width">
<div class="has-text-centered">
<h2 class="title is-3">Sparse-view Reconstruction</h2>
</div>
<br>
<video id="dollyzoom" autoplay="" controls="" muted="" loop="" playsinline="" height="100%">
<!-- <source src="./GTR/sparse.mp4" type="video/mp4"> -->
<source src="./GTR_files/1.mp4" type="video/mp4">
</video>
<video id="dollyzoom" autoplay="" controls="" muted="" loop="" playsinline="" height="100%">
<!-- <source src="./GTR/sparse.mp4" type="video/mp4"> -->
<source src="./GTR_files/2.mp4" type="video/mp4">
</video>
</div>
</div>
</div>
</section>
<!-- <section class="hero is-small"> -->
<section class="section">
<div class="container is-max-desktop">
<div class="columns is-centered has-text-centered">
<div class="column is-full-width">
<div class="has-text-centered">
<h2 class="title is-3">Imag/Text-to-3D</h2>
</div>
<br>
<video id="dollyzoom" autoplay="" controls="" muted="" loop="" playsinline="" height="100%">
<source src="./GTR_files/syn.mp4" type="video/mp4">
</video>
</div>
</div>
</div>
</section>
<section class="section" id="BibTeX">
<div class="container is-max-desktop content">
<h2 class="title">BibTeX</h2>
<pre><code>@misc{zhuang2024gtr,
title={GTR: Improving Large 3D Reconstruction Models through Geometry and Texture Refinement},
author={Peiye Zhuang and Songfang Han and Chaoyang Wang and Aliaksandr Siarohin and Jiaxu Zou and Michael Vasilkovsky and Vladislav Shakhrai and Sergey Korolev and Sergey Tulyakov and Hsin-Ying Lee},
year={2024},
archivePrefix={arXiv},
primaryClass={cs.CV}
}
</code></pre>
</div>
</section>
<footer class="footer">
<div class="container">
</div>
<div class="columns is-centered">
<div class="column is-8">
<div class="content">
<p>
We borrow the source code of this website <a href="https://github.com/nerfies/nerfies.github.io">from here
(Nerfies)</a> which is licensed
under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Creative
Commons Attribution-ShareAlike 4.0 International License</a>.
</p>
</div>
</div>
</div>
</footer>
<!-- </section> -->
</body></html>