CharlesCNorton
Image-level person classification on EUPE-ViT-B features with a single free parameter
f5498f9 | // Popcount-reformulated 1-parameter person classifier, thresholds baked in. | |
| // Generated by rtl_gen.py; do not edit by hand. | |
| // | |
| // Inputs are the 40 Stage 0 classifier dims as signed INT8, post-LayerNorm and | |
| // post-max-pool. Output is one bit. Combinational, no multipliers, no memory. | |
| // | |
| // Per-dim thresholds are the calibrated float values scaled by 8 and rounded. | |
| module person_classifier_popcount_folded ( | |
| input signed [7:0] f00, f01, f02, f03, f04, f05, f06, f07, f08, f09, | |
| input signed [7:0] f10, f11, f12, f13, f14, f15, f16, f17, f18, f19, | |
| input signed [7:0] f20, f21, f22, f23, f24, f25, f26, f27, f28, f29, | |
| input signed [7:0] f30, f31, f32, f33, f34, f35, f36, f37, f38, f39, | |
| output person_present | |
| ); | |
| localparam signed [7:0] T00 = 53, T01 = 56, T02 = 26, T03 = 60, T04 = 17, | |
| T05 = 12, T06 = 16, T07 = 1, T08 = 5, T09 = 11, | |
| T10 = 4, T11 = 4, T12 = 6, T13 = 9, T14 = 8, | |
| T15 = 16, T16 = 6, T17 = 6, T18 = 7, T19 = 8, | |
| T20 = 36, T21 = 45, T22 = 19, T23 = 14, T24 = 14, | |
| T25 = 63, T26 = 18, T27 = 49, T28 = 17, T29 = 17, | |
| T30 = 17, T31 = 21, T32 = 11, T33 = 18, T34 = 19, | |
| T35 = 14, T36 = 18, T37 = 16, T38 = 21, T39 = 14; | |
| localparam signed [5:0] FINAL_T = 13; | |
| wire [5:0] count_pos = | |
| (f00 > T00) + (f01 > T01) + (f02 > T02) + | |
| (f03 > T03) + (f04 > T04) + (f05 > T05) + | |
| (f06 > T06) + (f07 > T07) + (f08 > T08) + | |
| (f09 > T09) + (f10 > T10) + (f11 > T11) + | |
| (f12 > T12) + (f13 > T13) + (f14 > T14) + | |
| (f15 > T15) + (f16 > T16) + (f17 > T17) + | |
| (f18 > T18) + (f19 > T19); | |
| wire [5:0] count_neg = | |
| (f20 > T20) + (f21 > T21) + (f22 > T22) + | |
| (f23 > T23) + (f24 > T24) + (f25 > T25) + | |
| (f26 > T26) + (f27 > T27) + (f28 > T28) + | |
| (f29 > T29) + (f30 > T30) + (f31 > T31) + | |
| (f32 > T32) + (f33 > T33) + (f34 > T34) + | |
| (f35 > T35) + (f36 > T36) + (f37 > T37) + | |
| (f38 > T38) + (f39 > T39); | |
| wire signed [6:0] diff = {1'b0, count_pos} - {1'b0, count_neg}; | |
| assign person_present = diff > FINAL_T; | |
| endmodule | |