Offer three denoise networks and a method to choose between them
AI Denoise's Apply switch becomes Method: Bilinear, Fast, Medium, Best, default Best, so an untouched raw writes nothing and develops through the mixture. `apply` is still read and never written: 0 is Bilinear, 1 keeps a network already chosen. - Best is the mixture of a flat and an edge expert with a learned gate; Medium and Fast are students distilled from it. 2.48 s, 0.79 s and 0.57 s for a 20 MP frame on TensorRT fp16. - Each network carries its own tile border (256 for the mixture, 192 for the students) through `dr_denoise::Shipped` and `TileNet::halo`. - The file is hashed once at open and each network keys its own cached result; Bilinear keeps the result in memory for the way back. - Each has an .a16w16 sibling for the Hexagon: 0.00 dB on the 6D gate, at most 0.11 dB with the noise scaled x0.5 to x4. - APK BUNDLED 19 -> 23; the PKGBUILD installs all three.
This commit is contained in:
@@ -390,13 +390,28 @@ pub fn inpaint_model() -> Option<PathBuf> {
|
||||
}
|
||||
|
||||
/// TRACES: FR-DEV-3g
|
||||
/// The learned demosaic and denoise, as shipped in `models/denoise/`.
|
||||
pub const DENOISE_MODEL: &str = "mosaic-1408.onnx";
|
||||
/// The network a denoise method runs, as shipped in `models/denoise/`;
|
||||
/// `None` for the classical demosaic, which runs none.
|
||||
pub fn denoise_network(
|
||||
method: dr_pipeline::learned_denoise::Method,
|
||||
) -> Option<dr_denoise::Shipped> {
|
||||
use dr_pipeline::learned_denoise::Method;
|
||||
match method {
|
||||
Method::Bilinear => None,
|
||||
Method::Fast => Some(dr_denoise::FAST),
|
||||
Method::Medium => Some(dr_denoise::MEDIUM),
|
||||
Method::Best => Some(dr_denoise::BEST),
|
||||
}
|
||||
}
|
||||
|
||||
/// TRACES: FR-DEV-3g
|
||||
/// Where the denoise model is, by the border filler's search.
|
||||
pub fn denoise_model() -> Option<PathBuf> {
|
||||
shared_model(DENOISE_MODEL)
|
||||
/// Where a method's network is, by the border filler's search, and the
|
||||
/// context it needs.
|
||||
pub fn denoise_model(
|
||||
method: dr_pipeline::learned_denoise::Method,
|
||||
) -> Option<(PathBuf, dr_denoise::Shipped)> {
|
||||
let net = denoise_network(method)?;
|
||||
Some((shared_model(net.file)?, net))
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
||||
Reference in New Issue
Block a user