candle/candle-wasm-examples/segment-anything
shua 6056fd5c90
onnx: fix pad, unsqueeze (#2317)
* onnx: fix pad, unsqueeze

both implementations have off-by-one errors:
- Pad 'reflect' cycle for eg `dim==3` is `[0,1,2,1]` which has length of
  4 (or `dim*2 - 2`) not 5 (current code `dim*2 - 1`)
- Unsqueeze(-1) for tensor with `dim==3` should be 3 (ie `dim+index+1`)
  not 2 (ie currently `dim+index`)

in addition, Pad is incorrectly calculating the starting padding.
If we want to pad out 2 elements to the start, and we have this cycle
of indices of length 6, then we should skip 4 elements, but currently
we skip 2. A more visual representation of what's going on is below:

```
pad_start: 2
data:      [a,b,c,d]
indices:   [0, 1, 2, 3, 2, 1, 0, 1, 2, 3, 2, 1, 0, ..] // zigzag between 0..4
actual:    skip [ c  d| c  b  a  b]
expected:  ~  skip  ~ [ c  b| a  b  c  d]
```

The values between `[` and `|` are padding and the values between
`|` and `]` in the example should match the original data being padded.

* Fix clippy lints.

---------

Co-authored-by: Laurent <laurent.mazare@gmail.com>
2024-07-23 23:10:57 +02:00
..
src onnx: fix pad, unsqueeze (#2317) 2024-07-23 23:10:57 +02:00
Cargo.toml Simplifying our internal cargo dependencies. (#1529) 2024-01-07 12:04:14 +01:00
README.md Detach the tensors on batch-norm eval. (#1702) 2024-02-13 14:26:32 +01:00
build-lib.sh Add a wasm module for the segment anything example. (#797) 2023-09-10 12:29:37 +01:00
lib-example.html feat: [SAM] able to download the result as png (#1035) 2023-10-05 22:14:47 +01:00
samWorker.js [segment-anything] add multi point logic for demo site (#1002) 2023-10-01 18:25:22 +01:00

README.md

Running Segment Anything Example

Here, we provide an example showing how to run the Segment Anything model in the browser.

Vanilla JS and WebWorkers

To build and test the UI made in Vanilla JS and WebWorkers, first we need to build the WASM library:

sh build-lib.sh

This will bundle the library under ./build and we can import it inside our WebWorker like a normal JS module:

import init, { Model } from "./build/m.js";

The full example can be found under ./lib-example.html. All needed assets are fetched from the web, so no need to download anything. Finally, you can preview the example by running a local HTTP server. For example:

python -m http.server

Then open http://localhost:8000/lib-example.html in your browser.