faster-table-recognizer 0.1.0__tar.gz → 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/Cargo.lock +32 -21
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/Cargo.toml +1 -1
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/PKG-INFO +2 -2
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/README.md +1 -1
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/src/model.rs +14 -1
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/src/tensors.rs +11 -3
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/.cargo/config.toml +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/.github/workflows/CI.yml +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/.gitignore +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/LICENSE +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/examples/service_integration.py +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/models/table-transformer-detection/config.json +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/models/table-transformer-detection/preprocessor_config.json +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/pyproject.toml +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/scripts/download_model.sh +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/scripts/make_golden.py +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/src/download.rs +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/src/lib.rs +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/src/main.rs +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/src/math.rs +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/src/postprocess.rs +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/src/preprocess.rs +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/src/python.rs +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/src/winograd.rs +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/tests/golden/g_meta.json +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/tests/golden/raw_boxes.f32 +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/tests/golden/raw_decoder_out.f32 +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/tests/golden/raw_encoder_out.f32 +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/tests/golden/raw_input_projection.f32 +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/tests/golden/raw_logits.f32 +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/tests/golden/raw_pixel_values.f32 +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/tests/golden/raw_shapes.json +0 -0
- {faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/tests/golden/table_sample.png +0 -0
|
@@ -40,9 +40,9 @@ checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495"
|
|
|
40
40
|
|
|
41
41
|
[[package]]
|
|
42
42
|
name = "cc"
|
|
43
|
-
version = "1.
|
|
43
|
+
version = "1.3.0"
|
|
44
44
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
45
|
-
checksum = "
|
|
45
|
+
checksum = "c89588d05638b5b4594a3348a2d6c20277e43a7f5c5202b05cc56888475a47b8"
|
|
46
46
|
dependencies = [
|
|
47
47
|
"find-msvc-tools",
|
|
48
48
|
"shlex",
|
|
@@ -102,7 +102,7 @@ checksum = "1ac70aa55017e108007fbaf5aa0f54b021c98f92ff8af59d42eda9da96e3dd4f"
|
|
|
102
102
|
dependencies = [
|
|
103
103
|
"proc-macro2",
|
|
104
104
|
"quote",
|
|
105
|
-
"syn",
|
|
105
|
+
"syn 2.0.119",
|
|
106
106
|
]
|
|
107
107
|
|
|
108
108
|
[[package]]
|
|
@@ -113,7 +113,7 @@ checksum = "91622ff5e7162018101f2fea40d6ebf4a78bbe5a49736a2020649edf9693679e"
|
|
|
113
113
|
|
|
114
114
|
[[package]]
|
|
115
115
|
name = "faster-table-recognizer"
|
|
116
|
-
version = "0.
|
|
116
|
+
version = "0.2.0"
|
|
117
117
|
dependencies = [
|
|
118
118
|
"base64",
|
|
119
119
|
"image",
|
|
@@ -511,7 +511,7 @@ dependencies = [
|
|
|
511
511
|
"proc-macro2",
|
|
512
512
|
"pyo3-macros-backend",
|
|
513
513
|
"quote",
|
|
514
|
-
"syn",
|
|
514
|
+
"syn 2.0.119",
|
|
515
515
|
]
|
|
516
516
|
|
|
517
517
|
[[package]]
|
|
@@ -524,7 +524,7 @@ dependencies = [
|
|
|
524
524
|
"proc-macro2",
|
|
525
525
|
"pyo3-build-config",
|
|
526
526
|
"quote",
|
|
527
|
-
"syn",
|
|
527
|
+
"syn 2.0.119",
|
|
528
528
|
]
|
|
529
529
|
|
|
530
530
|
[[package]]
|
|
@@ -629,9 +629,9 @@ dependencies = [
|
|
|
629
629
|
|
|
630
630
|
[[package]]
|
|
631
631
|
name = "serde"
|
|
632
|
-
version = "1.0.
|
|
632
|
+
version = "1.0.229"
|
|
633
633
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
634
|
-
checksum = "
|
|
634
|
+
checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba"
|
|
635
635
|
dependencies = [
|
|
636
636
|
"serde_core",
|
|
637
637
|
"serde_derive",
|
|
@@ -639,22 +639,22 @@ dependencies = [
|
|
|
639
639
|
|
|
640
640
|
[[package]]
|
|
641
641
|
name = "serde_core"
|
|
642
|
-
version = "1.0.
|
|
642
|
+
version = "1.0.229"
|
|
643
643
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
644
|
-
checksum = "
|
|
644
|
+
checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48"
|
|
645
645
|
dependencies = [
|
|
646
646
|
"serde_derive",
|
|
647
647
|
]
|
|
648
648
|
|
|
649
649
|
[[package]]
|
|
650
650
|
name = "serde_derive"
|
|
651
|
-
version = "1.0.
|
|
651
|
+
version = "1.0.229"
|
|
652
652
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
653
|
-
checksum = "
|
|
653
|
+
checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
|
|
654
654
|
dependencies = [
|
|
655
655
|
"proc-macro2",
|
|
656
656
|
"quote",
|
|
657
|
-
"syn",
|
|
657
|
+
"syn 3.0.0",
|
|
658
658
|
]
|
|
659
659
|
|
|
660
660
|
[[package]]
|
|
@@ -711,6 +711,17 @@ dependencies = [
|
|
|
711
711
|
"unicode-ident",
|
|
712
712
|
]
|
|
713
713
|
|
|
714
|
+
[[package]]
|
|
715
|
+
name = "syn"
|
|
716
|
+
version = "3.0.0"
|
|
717
|
+
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
718
|
+
checksum = "f2fac314a64dc9a36e61a9eb4261a5e9bbfbc922b27e518af97bc32b926cf967"
|
|
719
|
+
dependencies = [
|
|
720
|
+
"proc-macro2",
|
|
721
|
+
"quote",
|
|
722
|
+
"unicode-ident",
|
|
723
|
+
]
|
|
724
|
+
|
|
714
725
|
[[package]]
|
|
715
726
|
name = "synstructure"
|
|
716
727
|
version = "0.13.2"
|
|
@@ -719,7 +730,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
|
|
|
719
730
|
dependencies = [
|
|
720
731
|
"proc-macro2",
|
|
721
732
|
"quote",
|
|
722
|
-
"syn",
|
|
733
|
+
"syn 2.0.119",
|
|
723
734
|
]
|
|
724
735
|
|
|
725
736
|
[[package]]
|
|
@@ -816,14 +827,14 @@ version = "0.26.11"
|
|
|
816
827
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
817
828
|
checksum = "521bc38abb08001b01866da9f51eb7c5d647a19260e00054a8c7fd5f9e57f7a9"
|
|
818
829
|
dependencies = [
|
|
819
|
-
"webpki-roots 1.0.
|
|
830
|
+
"webpki-roots 1.0.9",
|
|
820
831
|
]
|
|
821
832
|
|
|
822
833
|
[[package]]
|
|
823
834
|
name = "webpki-roots"
|
|
824
|
-
version = "1.0.
|
|
835
|
+
version = "1.0.9"
|
|
825
836
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
826
|
-
checksum = "
|
|
837
|
+
checksum = "7dcd9d09a39985f5344844e66b0c530a33843579125f23e21e9f0f220850f22a"
|
|
827
838
|
dependencies = [
|
|
828
839
|
"rustls-pki-types",
|
|
829
840
|
]
|
|
@@ -932,7 +943,7 @@ checksum = "de844c262c8848816172cef550288e7dc6c7b7814b4ee56b3e1553f275f1858e"
|
|
|
932
943
|
dependencies = [
|
|
933
944
|
"proc-macro2",
|
|
934
945
|
"quote",
|
|
935
|
-
"syn",
|
|
946
|
+
"syn 2.0.119",
|
|
936
947
|
"synstructure",
|
|
937
948
|
]
|
|
938
949
|
|
|
@@ -953,7 +964,7 @@ checksum = "e2e817b7b52d0c7358d3246da9d69935ebb18116b2b102b4230dac079b4862f5"
|
|
|
953
964
|
dependencies = [
|
|
954
965
|
"proc-macro2",
|
|
955
966
|
"quote",
|
|
956
|
-
"syn",
|
|
967
|
+
"syn 2.0.119",
|
|
957
968
|
]
|
|
958
969
|
|
|
959
970
|
[[package]]
|
|
@@ -973,7 +984,7 @@ checksum = "11532158c46691caf0f2593ea8358fed6bbf68a0315e80aae9bd41fbade684a1"
|
|
|
973
984
|
dependencies = [
|
|
974
985
|
"proc-macro2",
|
|
975
986
|
"quote",
|
|
976
|
-
"syn",
|
|
987
|
+
"syn 2.0.119",
|
|
977
988
|
"synstructure",
|
|
978
989
|
]
|
|
979
990
|
|
|
@@ -1013,7 +1024,7 @@ checksum = "625dc425cab0dca6dc3c3319506e6593dcb08a9f387ea3b284dbd52a92c40555"
|
|
|
1013
1024
|
dependencies = [
|
|
1014
1025
|
"proc-macro2",
|
|
1015
1026
|
"quote",
|
|
1016
|
-
"syn",
|
|
1027
|
+
"syn 2.0.119",
|
|
1017
1028
|
]
|
|
1018
1029
|
|
|
1019
1030
|
[[package]]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "faster-table-recognizer"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.2.0"
|
|
4
4
|
edition = "2021"
|
|
5
5
|
description = "From-scratch, dependency-light CPU inference engine for microsoft/table-transformer-detection (DETR table detection). A fast drop-in replacement for HuggingFace transformers."
|
|
6
6
|
license = "MIT"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: faster-table-recognizer
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Classifier: Programming Language :: Rust
|
|
5
5
|
Classifier: Programming Language :: Python :: 3
|
|
6
6
|
Classifier: License :: OSI Approved :: MIT License
|
|
@@ -154,7 +154,7 @@ page, steady-state medians, full pipeline (decode + preprocess + inference):
|
|
|
154
154
|
| Best multi-thread inference | ~189 ms (8 threads) | **~196 ms** (all cores) — parity |
|
|
155
155
|
| As deployed (`torch.set_num_threads(1)`) | ~699 ms | **~196 ms** (3.5× faster) |
|
|
156
156
|
| Cold start (import + load model) | ~5.5 s | **~0.3 s** (~19×) |
|
|
157
|
-
|
|
|
157
|
+
| Steady RSS (weights loaded) | 761 MB | **~246 MB** (0.2: drops mmap + redundant f32 copies) |
|
|
158
158
|
| Install | torch + transformers + timm (~2–3 GB) | one ~1.8 MB wheel |
|
|
159
159
|
| Detection output | — | **identical** (max abs logit Δ ≈ 1e-5) |
|
|
160
160
|
|
|
@@ -135,7 +135,7 @@ page, steady-state medians, full pipeline (decode + preprocess + inference):
|
|
|
135
135
|
| Best multi-thread inference | ~189 ms (8 threads) | **~196 ms** (all cores) — parity |
|
|
136
136
|
| As deployed (`torch.set_num_threads(1)`) | ~699 ms | **~196 ms** (3.5× faster) |
|
|
137
137
|
| Cold start (import + load model) | ~5.5 s | **~0.3 s** (~19×) |
|
|
138
|
-
|
|
|
138
|
+
| Steady RSS (weights loaded) | 761 MB | **~246 MB** (0.2: drops mmap + redundant f32 copies) |
|
|
139
139
|
| Install | torch + transformers + timm (~2–3 GB) | one ~1.8 MB wheel |
|
|
140
140
|
| Detection output | — | **identical** (max abs logit Δ ≈ 1e-5) |
|
|
141
141
|
|
|
@@ -42,7 +42,7 @@ pub struct RawOutput {
|
|
|
42
42
|
}
|
|
43
43
|
|
|
44
44
|
impl Model {
|
|
45
|
-
pub fn new(w: Weights) -> Self {
|
|
45
|
+
pub fn new(mut w: Weights) -> Self {
|
|
46
46
|
let mut folded = HashMap::new();
|
|
47
47
|
// (conv weight name, bn prefix) pairs across the ResNet-18 backbone.
|
|
48
48
|
let bb = "model.backbone.conv_encoder.model";
|
|
@@ -76,6 +76,19 @@ impl Model {
|
|
|
76
76
|
wt.insert(name.clone(), (tr, k, n));
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
|
+
// Free the redundant f32 source copies: every folded backbone conv and every
|
|
80
|
+
// 2-D linear now lives (folded / transposed) in `folded` / `wt`. Forward only
|
|
81
|
+
// still reads `query_position_embeddings.weight` raw among the 2-D tensors, plus
|
|
82
|
+
// small 1-D biases/layernorms and the 4-D input_projection conv (neither in wt).
|
|
83
|
+
let drop_names: Vec<String> = wt
|
|
84
|
+
.keys()
|
|
85
|
+
.filter(|n| n.as_str() != "model.query_position_embeddings.weight")
|
|
86
|
+
.chain(folded.keys())
|
|
87
|
+
.cloned()
|
|
88
|
+
.collect();
|
|
89
|
+
for n in drop_names {
|
|
90
|
+
w.remove(&n);
|
|
91
|
+
}
|
|
79
92
|
Model { w, folded, wt }
|
|
80
93
|
}
|
|
81
94
|
|
|
@@ -23,8 +23,6 @@ impl Tensor {
|
|
|
23
23
|
|
|
24
24
|
pub struct Weights {
|
|
25
25
|
map: HashMap<String, Tensor>,
|
|
26
|
-
// Keep the mmap alive for the lifetime of loading; data is copied to Vec<f32>.
|
|
27
|
-
_mmap: Mmap,
|
|
28
26
|
}
|
|
29
27
|
|
|
30
28
|
fn f16_to_f32(bits: u16) -> f32 {
|
|
@@ -81,7 +79,17 @@ impl Weights {
|
|
|
81
79
|
};
|
|
82
80
|
map.insert(name, Tensor { data, shape });
|
|
83
81
|
}
|
|
84
|
-
|
|
82
|
+
// Everything is copied into owned Vec<f32>, so the mmap (and the f32 file
|
|
83
|
+
// it maps) is dropped here instead of staying resident for the process life.
|
|
84
|
+
drop(st);
|
|
85
|
+
drop(mmap);
|
|
86
|
+
Ok(Weights { map })
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/// Drop a tensor once its data has been folded/transposed elsewhere, freeing
|
|
90
|
+
/// the redundant f32 source copy.
|
|
91
|
+
pub fn remove(&mut self, name: &str) {
|
|
92
|
+
self.map.remove(name);
|
|
85
93
|
}
|
|
86
94
|
|
|
87
95
|
pub fn get(&self, name: &str) -> &Tensor {
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/examples/service_integration.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/tests/golden/raw_decoder_out.f32
RENAMED
|
File without changes
|
{faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/tests/golden/raw_encoder_out.f32
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/tests/golden/raw_pixel_values.f32
RENAMED
|
File without changes
|
{faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/tests/golden/raw_shapes.json
RENAMED
|
File without changes
|
{faster_table_recognizer-0.1.0 → faster_table_recognizer-0.2.0}/tests/golden/table_sample.png
RENAMED
|
File without changes
|