Gather every model under one tree at the repository root
The weights were in two places: face detection and recognition in `models/face/`, segmentation in `core/dr-segment/models/`. Nothing was wrong with either path, but between them there was nowhere to look to answer "how much model does this application carry", and that number is about to start growing. So the crate-local copy moves up beside the other. `models/` now holds `face/` and `segment/`, and a `du -sh` of one directory is the whole answer. No content changes: the .onnx and its vocabulary are byte-identical, and `LICENCE.md` moves up a level to cover the tree rather than one crate. The LFS pattern in `.gitattributes` is `*.onnx` and already matched both locations, so only its comment needed the new path. `include_bytes!` is relative to the source file and `build.rs` runs with the crate root as its working directory, which is why the two paths climb a different number of levels. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
# Model weights live in LFS.
|
# Model weights live in LFS.
|
||||||
#
|
#
|
||||||
# `core/dr-segment/models/*.onnx` is ~11 MB of binary that changes wholesale
|
# `models/**/*.onnx` is tens of MB of binary that changes wholesale
|
||||||
# when it changes at all. In ordinary git objects every future revision of it
|
# when it changes at all. In ordinary git objects every future revision of it
|
||||||
# would be stored in full, in every clone, forever — and the one thing nobody
|
# would be stored in full, in every clone, forever — and the one thing nobody
|
||||||
# can do with it is a useful diff.
|
# can do with it is a useful diff.
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ jobs:
|
|||||||
|
|
||||||
# The model, which is in LFS and is not optional.
|
# The model, which is in LFS and is not optional.
|
||||||
#
|
#
|
||||||
# `core/dr-segment/models/*.onnx` is tracked in LFS (.gitattributes), so a
|
# `models/**/*.onnx` is tracked in LFS (.gitattributes), so a
|
||||||
# plain checkout writes a ~130-byte pointer where 11 MB should be, and
|
# plain checkout writes a ~130-byte pointer where 11 MB should be, and
|
||||||
# `dr-segment`'s build script panics by design rather than embedding a
|
# `dr-segment`'s build script panics by design rather than embedding a
|
||||||
# pointer and failing at inference. That failure reads like a broken build
|
# pointer and failing at inference. That failure reads like a broken build
|
||||||
@@ -97,7 +97,7 @@ jobs:
|
|||||||
git config --local lfs.url \
|
git config --local lfs.url \
|
||||||
"https://x-access-token:${LFS_TOKEN}@gitea.tourolle.paris/dtourolle/DarkRoom.git/info/lfs"
|
"https://x-access-token:${LFS_TOKEN}@gitea.tourolle.paris/dtourolle/DarkRoom.git/info/lfs"
|
||||||
git lfs pull
|
git lfs pull
|
||||||
ls -l core/dr-segment/models/
|
ls -lR models/
|
||||||
|
|
||||||
- name: Cache cargo
|
- name: Cache cargo
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
@@ -174,7 +174,7 @@ jobs:
|
|||||||
|
|
||||||
# The model, which is in LFS and is not optional.
|
# The model, which is in LFS and is not optional.
|
||||||
#
|
#
|
||||||
# `core/dr-segment/models/*.onnx` is tracked in LFS (.gitattributes), so a
|
# `models/**/*.onnx` is tracked in LFS (.gitattributes), so a
|
||||||
# plain checkout writes a ~130-byte pointer where 11 MB should be, and
|
# plain checkout writes a ~130-byte pointer where 11 MB should be, and
|
||||||
# `dr-segment`'s build script panics by design rather than embedding a
|
# `dr-segment`'s build script panics by design rather than embedding a
|
||||||
# pointer and failing at inference. That failure reads like a broken build
|
# pointer and failing at inference. That failure reads like a broken build
|
||||||
@@ -214,7 +214,7 @@ jobs:
|
|||||||
git config --local lfs.url \
|
git config --local lfs.url \
|
||||||
"https://x-access-token:${LFS_TOKEN}@gitea.tourolle.paris/dtourolle/DarkRoom.git/info/lfs"
|
"https://x-access-token:${LFS_TOKEN}@gitea.tourolle.paris/dtourolle/DarkRoom.git/info/lfs"
|
||||||
git lfs pull
|
git lfs pull
|
||||||
ls -l core/dr-segment/models/
|
ls -lR models/
|
||||||
|
|
||||||
- name: Cache cargo
|
- name: Cache cargo
|
||||||
uses: actions/cache@v4
|
uses: actions/cache@v4
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
//! Check the model is a model and not an LFS pointer.
|
//! Check the model is a model and not an LFS pointer.
|
||||||
//!
|
//!
|
||||||
//! `models/*.onnx` is stored in Git LFS (see `.gitattributes`). A clone made
|
//! `models/segment/*.onnx` is stored in Git LFS (see `.gitattributes`). A clone made
|
||||||
//! without git-lfs installed, or with `GIT_LFS_SKIP_SMUDGE` set, leaves a
|
//! without git-lfs installed, or with `GIT_LFS_SKIP_SMUDGE` set, leaves a
|
||||||
//! ~130-byte text pointer at that path instead of the weights.
|
//! ~130-byte text pointer at that path instead of the weights.
|
||||||
//!
|
//!
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
|
|
||||||
const MODEL: &str = "models/yolo26n-seg.onnx";
|
const MODEL: &str = "../../models/segment/yolo26n-seg.onnx";
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
println!("cargo:rerun-if-changed={MODEL}");
|
println!("cargo:rerun-if-changed={MODEL}");
|
||||||
|
|||||||
@@ -26,7 +26,7 @@
|
|||||||
//!
|
//!
|
||||||
//! That combination is also what repairs the vocabulary problem. The shipped
|
//! That combination is also what repairs the vocabulary problem. The shipped
|
||||||
//! model is COCO-trained, so it recognises subjects and has no class for sky,
|
//! model is COCO-trained, so it recognises subjects and has no class for sky,
|
||||||
//! foliage or wall (`models/LICENCE.md`). Selecting those falls to arm A,
|
//! foliage or wall (`models/LICENCE.md` at the repository root). Selecting those falls to arm A,
|
||||||
//! which never needed a vocabulary to begin with.
|
//! which never needed a vocabulary to begin with.
|
||||||
|
|
||||||
pub mod distance;
|
pub mod distance;
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
//! behaviour, and it is worth being glad of rather than working around.
|
//! behaviour, and it is worth being glad of rather than working around.
|
||||||
//!
|
//!
|
||||||
//! So arm B here contributes *subjects*, and the watershed contributes
|
//! So arm B here contributes *subjects*, and the watershed contributes
|
||||||
//! everything else. See `models/LICENCE.md` for why no ADE20K variant is
|
//! everything else. See `models/LICENCE.md` at the repository root for why no ADE20K variant is
|
||||||
//! shipped instead.
|
//! shipped instead.
|
||||||
//!
|
//!
|
||||||
//! # Cost, and where it may run
|
//! # Cost, and where it may run
|
||||||
@@ -198,15 +198,15 @@ pub struct SemanticModel {
|
|||||||
classes: Vec<Arc<str>>,
|
classes: Vec<Arc<str>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The weights that ship with this crate (`models/`, AGPL — see LICENCE.md).
|
/// The weights, from the repository-root `models/segment/` (AGPL — see `models/LICENCE.md`).
|
||||||
///
|
///
|
||||||
/// Embedded rather than read from a path because Android hands the app no
|
/// Embedded rather than read from a path because Android hands the app no
|
||||||
/// filesystem location to read from (ARCH §6.9) — the same reasoning that has
|
/// filesystem location to read from (ARCH §6.9) — the same reasoning that has
|
||||||
/// the Lensfun database shipping inside its crate.
|
/// the Lensfun database shipping inside its crate.
|
||||||
#[cfg(feature = "embedded-model")]
|
#[cfg(feature = "embedded-model")]
|
||||||
const EMBEDDED_MODEL: &[u8] = include_bytes!("../models/yolo26n-seg.onnx");
|
const EMBEDDED_MODEL: &[u8] = include_bytes!("../../../models/segment/yolo26n-seg.onnx");
|
||||||
#[cfg(feature = "embedded-model")]
|
#[cfg(feature = "embedded-model")]
|
||||||
const EMBEDDED_CLASSES: &str = include_str!("../models/yolo26n-seg.classes.json");
|
const EMBEDDED_CLASSES: &str = include_str!("../../../models/segment/yolo26n-seg.classes.json");
|
||||||
|
|
||||||
impl SemanticModel {
|
impl SemanticModel {
|
||||||
/// Load the model that ships with this crate.
|
/// Load the model that ships with this crate.
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Re-export the segmentation model that ships in core/dr-segment/models/.
|
# Re-export the segmentation model that ships in models/ at the repository root.
|
||||||
#
|
#
|
||||||
# The .onnx is committed (D14), so this is not part of any build — it exists so
|
# The .onnx is committed (D14), so this is not part of any build — it exists so
|
||||||
# the committed artefact is reproducible rather than a binary someone once
|
# the committed artefact is reproducible rather than a binary someone once
|
||||||
@@ -24,7 +24,7 @@ set -euo pipefail
|
|||||||
|
|
||||||
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
HERE="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
REPO="$(cd "${HERE}/.." && pwd)"
|
REPO="$(cd "${HERE}/.." && pwd)"
|
||||||
OUT="${REPO}/core/dr-segment/models"
|
OUT="${REPO}/models/segment"
|
||||||
|
|
||||||
MODEL="${1:-yolo26n-seg}"
|
MODEL="${1:-yolo26n-seg}"
|
||||||
IMGSZ="${2:-640}"
|
IMGSZ="${2:-640}"
|
||||||
|
|||||||
Reference in New Issue
Block a user