vision_rs/models/yolo/yolo26/blocks/
conv.rs1use teeny_core::{
19 dtype::Float,
20 graph::SymTensor,
21 name_scope::name_scope,
22 nn::{Layer, activation::sigmoid::Silu, batchnorm::BatchNorm2d, conv2d::Conv2d},
23};
24
25pub fn conv<D: Float>(
32 c_in: usize,
33 c_out: usize,
34 k: usize,
35 s: usize,
36) -> impl Fn(SymTensor) -> SymTensor {
37 let p = k / 2;
38 let conv2d = Conv2d::<D, SymTensor, SymTensor, 4>::new(c_in, c_out, (k, k), (s, s), (p, p), false);
39 let bn = BatchNorm2d::<D, SymTensor, SymTensor, 4>::new(c_out).with_eps(0.001);
40 let act = Silu::<D, SymTensor, 4>::new();
41 move |x: SymTensor| {
42 let x = { let _g = name_scope("conv"); conv2d.call(x) };
43 let x = { let _g = name_scope("bn"); bn.call(x) };
44 act.call(x)
45 }
46}
47
48pub fn conv_bn<D: Float>(
54 c_in: usize,
55 c_out: usize,
56 k: usize,
57 s: usize,
58 g: usize,
59) -> impl Fn(SymTensor) -> SymTensor {
60 let p = k / 2;
61 let conv2d = Conv2d::<D, SymTensor, SymTensor, 4>::new_grouped(
62 c_in, c_out, (k, k), (s, s), (p, p), false, g,
63 );
64 let bn = BatchNorm2d::<D, SymTensor, SymTensor, 4>::new(c_out).with_eps(0.001);
65 move |x: SymTensor| {
66 let x = { let _g = name_scope("conv"); conv2d.call(x) };
67 { let _g = name_scope("bn"); bn.call(x) }
68 }
69}
70
71pub fn dwconv<D: Float>(c: usize, k: usize, s: usize) -> impl Fn(SymTensor) -> SymTensor {
76 let p = k / 2;
77 let conv2d = Conv2d::<D, SymTensor, SymTensor, 4>::new_grouped(c, c, (k, k), (s, s), (p, p), false, c);
78 let bn = BatchNorm2d::<D, SymTensor, SymTensor, 4>::new(c).with_eps(0.001);
79 let act = Silu::<D, SymTensor, 4>::new();
80 move |x: SymTensor| {
81 let x = { let _g = name_scope("conv"); conv2d.call(x) };
82 let x = { let _g = name_scope("bn"); bn.call(x) };
83 act.call(x)
84 }
85}
86
87pub fn conv_plain<D: Float>(
91 c_in: usize,
92 c_out: usize,
93 k: usize,
94 s: usize,
95) -> impl Fn(SymTensor) -> SymTensor {
96 let p = k / 2;
97 let layer = Conv2d::<D, SymTensor, SymTensor, 4>::new(c_in, c_out, (k, k), (s, s), (p, p), true);
98 move |x| layer.call(x)
99}