Spaces:
Running
Running
Yang Gu
commited on
Commit
·
51802c2
1
Parent(s):
a8ddd77
Polish gallery mode
Browse files- demos.js +5 -10
- demos/ort-phi2-test/index.html +1 -0
- demos/ort-phi3-test/index.html +1 -0
- demos/ort-sdturbo/index.html +4 -4
- demos/tflite-gemma/index.js +3 -3
- demos/tjs-moondream/tjs-moondream.mp4 +3 -0
- gallery.html +7 -8
demos.js
CHANGED
@@ -7,49 +7,46 @@ const categoryDemos = [
|
|
7 |
name: 'Benchmark',
|
8 |
description: `Benchmark by Transformers.js`,
|
9 |
filename: "https://huggingface.co/spaces/Xenova/webgpu-embedding-benchmark",
|
10 |
-
openInNewTab: true,
|
11 |
},
|
12 |
'tjs-clip': {
|
13 |
name: 'OpenAI Clip',
|
14 |
description: `Zero-shot Image Classification with OpenAI's CLIP by Transformers.js`,
|
15 |
filename: "https://huggingface.co/spaces/Xenova/webgpu-clip",
|
16 |
-
openInNewTab: true,
|
17 |
},
|
18 |
'tjs-depthAnything': {
|
19 |
name: 'Depth Anything',
|
20 |
description: `Depth Anything by Transformers.js`,
|
21 |
filename: "https://huggingface.co/spaces/Xenova/webgpu-depth-anything",
|
22 |
-
|
|
|
|
|
|
|
|
|
23 |
},
|
24 |
'tjs-musicGen': {
|
25 |
name: 'Text to Music (WASM)',
|
26 |
description: `Text to music by Transformers.js`,
|
27 |
filename: "https://huggingface.co/spaces/Xenova/musicgen-web",
|
28 |
-
openInNewTab: true,
|
29 |
},
|
30 |
'tjs-phi3': {
|
31 |
name: 'Phi3',
|
32 |
description: `Phi3 by Transformers.js`,
|
33 |
filename: "https://huggingface.co/spaces/Xenova/experimental-phi3-webgpu",
|
34 |
-
openInNewTab: true,
|
35 |
},
|
36 |
'tjs-removeImageBackground': {
|
37 |
name: 'Remove Image Background',
|
38 |
description: `Image Background Removal by Transformers.js`,
|
39 |
filename: "https://huggingface.co/spaces/Xenova/remove-background-webgpu",
|
40 |
-
openInNewTab: true,
|
41 |
},
|
42 |
'tjs-removeVideoBackground': {
|
43 |
name: 'Remove Video Background',
|
44 |
description: `Video Background Removal by Transformers.js`,
|
45 |
filename: "https://huggingface.co/spaces/Xenova/webgpu-video-background-removal",
|
46 |
-
openInNewTab: true,
|
47 |
},
|
48 |
'tjs-yolo': {
|
49 |
name: 'Realtime Video Object Detection',
|
50 |
description: `Realtime video object detection by Transformers.js`,
|
51 |
filename: "https://huggingface.co/spaces/Xenova/video-object-detection",
|
52 |
-
openInNewTab: true,
|
53 |
},
|
54 |
},
|
55 |
},
|
@@ -103,13 +100,11 @@ const categoryDemos = [
|
|
103 |
name: 'Web Stable Diffusion',
|
104 |
description: `Web Stable Diffusion`,
|
105 |
filename: "https://websd.mlc.ai/",
|
106 |
-
openInNewTab: true,
|
107 |
},
|
108 |
'tvm-llama3': {
|
109 |
name: 'Web LLM Llama3',
|
110 |
description: `Web LLM Llama3`,
|
111 |
filename: "https://webllm.mlc.ai/",
|
112 |
-
openInNewTab: true,
|
113 |
},
|
114 |
},
|
115 |
},
|
|
|
7 |
name: 'Benchmark',
|
8 |
description: `Benchmark by Transformers.js`,
|
9 |
filename: "https://huggingface.co/spaces/Xenova/webgpu-embedding-benchmark",
|
|
|
10 |
},
|
11 |
'tjs-clip': {
|
12 |
name: 'OpenAI Clip',
|
13 |
description: `Zero-shot Image Classification with OpenAI's CLIP by Transformers.js`,
|
14 |
filename: "https://huggingface.co/spaces/Xenova/webgpu-clip",
|
|
|
15 |
},
|
16 |
'tjs-depthAnything': {
|
17 |
name: 'Depth Anything',
|
18 |
description: `Depth Anything by Transformers.js`,
|
19 |
filename: "https://huggingface.co/spaces/Xenova/webgpu-depth-anything",
|
20 |
+
},
|
21 |
+
'tjs-moondream': {
|
22 |
+
name: 'Moondream',
|
23 |
+
description: `Moondream (Vision-Language Model) by Transformers.js`,
|
24 |
+
filename: "https://huggingface.co/spaces/Xenova/experimental-moondream-webgpu",
|
25 |
},
|
26 |
'tjs-musicGen': {
|
27 |
name: 'Text to Music (WASM)',
|
28 |
description: `Text to music by Transformers.js`,
|
29 |
filename: "https://huggingface.co/spaces/Xenova/musicgen-web",
|
|
|
30 |
},
|
31 |
'tjs-phi3': {
|
32 |
name: 'Phi3',
|
33 |
description: `Phi3 by Transformers.js`,
|
34 |
filename: "https://huggingface.co/spaces/Xenova/experimental-phi3-webgpu",
|
|
|
35 |
},
|
36 |
'tjs-removeImageBackground': {
|
37 |
name: 'Remove Image Background',
|
38 |
description: `Image Background Removal by Transformers.js`,
|
39 |
filename: "https://huggingface.co/spaces/Xenova/remove-background-webgpu",
|
|
|
40 |
},
|
41 |
'tjs-removeVideoBackground': {
|
42 |
name: 'Remove Video Background',
|
43 |
description: `Video Background Removal by Transformers.js`,
|
44 |
filename: "https://huggingface.co/spaces/Xenova/webgpu-video-background-removal",
|
|
|
45 |
},
|
46 |
'tjs-yolo': {
|
47 |
name: 'Realtime Video Object Detection',
|
48 |
description: `Realtime video object detection by Transformers.js`,
|
49 |
filename: "https://huggingface.co/spaces/Xenova/video-object-detection",
|
|
|
50 |
},
|
51 |
},
|
52 |
},
|
|
|
100 |
name: 'Web Stable Diffusion',
|
101 |
description: `Web Stable Diffusion`,
|
102 |
filename: "https://websd.mlc.ai/",
|
|
|
103 |
},
|
104 |
'tvm-llama3': {
|
105 |
name: 'Web LLM Llama3',
|
106 |
description: `Web LLM Llama3`,
|
107 |
filename: "https://webllm.mlc.ai/",
|
|
|
108 |
},
|
109 |
},
|
110 |
},
|
demos/ort-phi2-test/index.html
CHANGED
@@ -26,6 +26,7 @@
|
|
26 |
csv: 0,
|
27 |
max_tokens: 256,
|
28 |
local: 1,
|
|
|
29 |
}
|
30 |
let vars = query.split("&");
|
31 |
for (var i = 0; i < vars.length; i++) {
|
|
|
26 |
csv: 0,
|
27 |
max_tokens: 256,
|
28 |
local: 1,
|
29 |
+
ortUrl: "default",
|
30 |
}
|
31 |
let vars = query.split("&");
|
32 |
for (var i = 0; i < vars.length; i++) {
|
demos/ort-phi3-test/index.html
CHANGED
@@ -22,6 +22,7 @@
|
|
22 |
csv: 0,
|
23 |
max_tokens: 256,
|
24 |
local: 1,
|
|
|
25 |
}
|
26 |
let vars = query.split("&");
|
27 |
for (var i = 0; i < vars.length; i++) {
|
|
|
22 |
csv: 0,
|
23 |
max_tokens: 256,
|
24 |
local: 1,
|
25 |
+
ortUrl: "default",
|
26 |
}
|
27 |
let vars = query.split("&");
|
28 |
for (var i = 0; i < vars.length; i++) {
|
demos/ort-sdturbo/index.html
CHANGED
@@ -261,7 +261,7 @@ fn main(@location(0) fragUV : vec2<f32>) -> @location(0) vec4<f32> {
|
|
261 |
async function load_models(models) {
|
262 |
let loadedCount = 0;
|
263 |
for (const [name, model] of Object.entries(models)) {
|
264 |
-
const model_bytes = await getModelOPFS(model.url,
|
265 |
const sess_opt = { ...opt, ...model.opt };
|
266 |
// profiling
|
267 |
//ort.env.webgpu.profiling = { mode: "default" };
|
@@ -279,17 +279,17 @@ fn main(@location(0) fragUV : vec2<f32>) -> @location(0) vec4<f32> {
|
|
279 |
|
280 |
const models = {
|
281 |
"unet": {
|
282 |
-
url:
|
283 |
// should have 'steps: 1' but will fail to create the session
|
284 |
opt: { freeDimensionOverrides: { batch_size: 1, num_channels: 4, height: 64, width: 64, sequence_length: 77, } }
|
285 |
},
|
286 |
"text_encoder": {
|
287 |
-
url:
|
288 |
// should have 'sequence_length: 77' but produces a bad image
|
289 |
opt: { freeDimensionOverrides: { batch_size: 1, } },
|
290 |
},
|
291 |
"vae_decoder": {
|
292 |
-
url:
|
293 |
opt: { freeDimensionOverrides: { batch_size: 1, num_channels_latent: 4, height_latent: 64, width_latent: 64 } }
|
294 |
}
|
295 |
}
|
|
|
261 |
async function load_models(models) {
|
262 |
let loadedCount = 0;
|
263 |
for (const [name, model] of Object.entries(models)) {
|
264 |
+
const model_bytes = await getModelOPFS(model.url.split('/').pop(), model.url, false);
|
265 |
const sess_opt = { ...opt, ...model.opt };
|
266 |
// profiling
|
267 |
//ort.env.webgpu.profiling = { mode: "default" };
|
|
|
279 |
|
280 |
const models = {
|
281 |
"unet": {
|
282 |
+
url: `${getModelsPath()}sdturbo-unet.onnx`, size: 640,
|
283 |
// should have 'steps: 1' but will fail to create the session
|
284 |
opt: { freeDimensionOverrides: { batch_size: 1, num_channels: 4, height: 64, width: 64, sequence_length: 77, } }
|
285 |
},
|
286 |
"text_encoder": {
|
287 |
+
url: `${getModelsPath()}sdturbo-text-encoder.onnx`, size: 1700,
|
288 |
// should have 'sequence_length: 77' but produces a bad image
|
289 |
opt: { freeDimensionOverrides: { batch_size: 1, } },
|
290 |
},
|
291 |
"vae_decoder": {
|
292 |
+
url: `${getModelsPath()}sdturbo-vae-decoder.onnx`, size: 95,
|
293 |
opt: { freeDimensionOverrides: { batch_size: 1, num_channels_latent: 4, height_latent: 64, width_latent: 64 } }
|
294 |
}
|
295 |
}
|
demos/tflite-gemma/index.js
CHANGED
@@ -14,14 +14,14 @@
|
|
14 |
|
15 |
// ---------------------------------------------------------------------------------------- //
|
16 |
|
17 |
-
import {FilesetResolver, LlmInference} from 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai';
|
18 |
|
19 |
const input = document.getElementById('input');
|
20 |
const output = document.getElementById('output');
|
21 |
const submit = document.getElementById('submit');
|
22 |
const status = document.getElementById('status');
|
23 |
|
24 |
-
const modelFileName =
|
25 |
let startTime;
|
26 |
|
27 |
/**
|
@@ -50,7 +50,7 @@ async function runDemo() {
|
|
50 |
const genaiFileset = await FilesetResolver.forGenAiTasks(
|
51 |
'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai/wasm');
|
52 |
let llmInference;
|
53 |
-
const modelBuffer = new Int8Array(await getModelOPFS(modelFileName, modelFileName, false));
|
54 |
|
55 |
submit.onclick = () => {
|
56 |
startTime = performance.now();
|
|
|
14 |
|
15 |
// ---------------------------------------------------------------------------------------- //
|
16 |
|
17 |
+
import {FilesetResolver, LlmInference} from 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai@0.10.12/wasm/genai_wasm_internal.min.js';
|
18 |
|
19 |
const input = document.getElementById('input');
|
20 |
const output = document.getElementById('output');
|
21 |
const submit = document.getElementById('submit');
|
22 |
const status = document.getElementById('status');
|
23 |
|
24 |
+
const modelFileName = `gemma-2b-it-gpu-int4.bin`; /* Update the file name */
|
25 |
let startTime;
|
26 |
|
27 |
/**
|
|
|
50 |
const genaiFileset = await FilesetResolver.forGenAiTasks(
|
51 |
'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-genai/wasm');
|
52 |
let llmInference;
|
53 |
+
const modelBuffer = new Int8Array(await getModelOPFS(modelFileName.split('/').pop(), modelFileName, false));
|
54 |
|
55 |
submit.onclick = () => {
|
56 |
startTime = performance.now();
|
demos/tjs-moondream/tjs-moondream.mp4
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:ff63f88cd5ad127f34c788482ea19d5c02a2fe04fa425abc1df83f684e2ec5f3
|
3 |
+
size 603647
|
gallery.html
CHANGED
@@ -65,16 +65,15 @@
|
|
65 |
video.controls = true;
|
66 |
|
67 |
const a = document.createElement('a');
|
68 |
-
|
69 |
-
|
70 |
-
a.style.fontSize = 28;
|
71 |
-
if (demoInfo.openInNewTab) {
|
72 |
-
a.target = '_blank';
|
73 |
} else {
|
74 |
-
a.
|
75 |
-
setSampleIFrameURL(e, demoInfo);
|
76 |
-
};
|
77 |
}
|
|
|
|
|
|
|
|
|
78 |
|
79 |
li.appendChild(video);
|
80 |
li.appendChild(a);
|
|
|
65 |
video.controls = true;
|
66 |
|
67 |
const a = document.createElement('a');
|
68 |
+
if (demoInfo.filename.startsWith('https')) {
|
69 |
+
a.href = demoInfo.filename;
|
|
|
|
|
|
|
70 |
} else {
|
71 |
+
a.href = `demos/${demoInfo.filename}`;
|
|
|
|
|
72 |
}
|
73 |
+
a.textContent = `${demoInfo.name || key}`;
|
74 |
+
a.title = demoInfo.description;
|
75 |
+
a.style.fontSize = 28;
|
76 |
+
a.target = '_blank';
|
77 |
|
78 |
li.appendChild(video);
|
79 |
li.appendChild(a);
|