From 6f59876ad6150c2a93340f47e1280609660a5542 Mon Sep 17 00:00:00 2001 From: Sayanna Chandula Date: Fri, 15 Mar 2024 11:40:00 -0700 Subject: [PATCH] thermal: enable input data validation Update tflite models with metadata containing input data ranges. Enable input data validation and backup sesor. Add offsets based off temperature ranges. Bug: 319167815 Bug: 328789394 Test: Build and boot on device. Test backup sensor and offsets Change-Id: Icdc0c1a1fe026613e4a1716747335e60aca4edf9 Signed-off-by: Sayanna Chandula --- thermal/thermal_info_config_caiman.json | 17 +++++++----- thermal/thermal_info_config_caiman_proto.json | 25 ++++++++++++------ thermal/thermal_info_config_komodo.json | 14 ++++++---- thermal/thermal_info_config_komodo_proto.json | 23 ++++++++++------ thermal/thermal_info_config_tokay.json | 15 ++++++++--- thermal/thermal_info_config_tokay_proto.json | 19 ++++++++----- thermal/vt_estimation_model_caiman.tflite | Bin 4887 -> 4836 bytes thermal/vt_estimation_model_komodo.tflite | Bin 3917 -> 4836 bytes thermal/vt_estimation_model_tokay.tflite | Bin 4887 -> 4836 bytes 9 files changed, 76 insertions(+), 37 deletions(-) diff --git a/thermal/thermal_info_config_caiman.json b/thermal/thermal_info_config_caiman.json index 54949e4d..fef432b6 100644 --- a/thermal/thermal_info_config_caiman.json +++ b/thermal/thermal_info_config_caiman.json @@ -171,10 +171,12 @@ "ModelPath": "vt_estimation_model.tflite", "Formula": "USE_ML_MODEL", "Combination": ["battery", "btmspkr_therm", "charging_therm", "disp_therm", "north_therm", "quiet_therm", "rfpa_therm", "soc_therm", "usb_pwr_therm"], - "CombinationType":["SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR"], - "Coefficient": [1.0], "Multiplier": 0.001, - "PreviousSampleCount": 5 + "PreviousSampleCount": 3, + "BackupSensor" : "VIRTUAL-SKIN-LEGACY", + "OffsetThresholds" : [50000, 53000], + "OffsetValues" : [500, 1000], + "ValidateInput": true }, { "Name": "VIRTUAL-SKIN-MODEL-LEGACY-DIFF", @@ -237,7 +239,8 @@ "Coefficient": [0.073, 0.001, 0.029, 0.08, 0.072, 0.034, 0.004, 0.036, 0.04, 0.055, 0.002, 0.029, 0.061, 0.072, 0.011, 0.04, 0.027, 0.072, 0.071, 0.003, 0.026, 0.03, 0.04, 0.015, 0.001, 0.035, 0.042], - "Offset": -490.0, + "OffsetThresholds": [0.0], + "OffsetValues": [-490.0], "Multiplier": 0.001 }, { @@ -250,7 +253,8 @@ "Coefficient": [0.077, 0.089, 0.003, 0.077, 0.002, 0.021, 0.07, 0.035, 0.044, 0.094, 0.001, 0.001, 0.001, 0.084, 0.034, 0.022, 0.081, 0.026, 0.083, 0.022, 0.012, 0.051, 0.017, 0.021, 0.003, 0.024, 0.009], - "Offset": -961.0, + "OffsetThresholds": [0.0], + "OffsetValues": [-961.0], "Multiplier": 0.001 }, { @@ -263,7 +267,8 @@ "Coefficient": [0.094, 0.007, 0.011, 0.032, 0.001, 0.091, 0.085, 0.045, 0.002, 0.054, 0.0, 0.019, 0.01, 0.065, 0.012, 0.03, 0.022, 0.076, 0.062, 0.019, 0.007, 0.025, 0.071, 0.005, 0.081, 0.015, 0.058], - "Offset": -440.0, + "OffsetThresholds": [0.0], + "OffsetValues": [-440.0], "Multiplier": 0.001 }, { diff --git a/thermal/thermal_info_config_caiman_proto.json b/thermal/thermal_info_config_caiman_proto.json index 59ee53fe..f9ca1c9e 100644 --- a/thermal/thermal_info_config_caiman_proto.json +++ b/thermal/thermal_info_config_caiman_proto.json @@ -182,9 +182,12 @@ "Formula": "USE_ML_MODEL", "Combination": ["battery", "btmspkr_therm", "charging_therm", "disp_therm", "north_therm", "quiet_therm", "rfpa_therm", "soc_therm", "usb_pwr_therm"], "CombinationType":["SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR"], - "Coefficient": [1.0], "Multiplier": 0.001, - "PreviousSampleCount": 5 + "PreviousSampleCount": 3, + "BackupSensor" : "VIRTUAL-SKIN-LEGACY", + "OffsetThresholds" : [50000, 53000], + "OffsetValues" : [500, 1000], + "ValidateInput": true }, { "Name": "VIRTUAL-SKIN-MODEL-LEGACY-DIFF", @@ -247,7 +250,8 @@ "Coefficient": [0.19, 0.04, 0.0, 0.06, 0.0, 0.0, 0.07, 0.03, 0.16, 0.01, 0.05, 0.07, 0.05, 0.0, 0.01, 0.0, 0.0, 0.02, 0.05, 0.01, 0.0, 0.01, 0.0, 0.0, 0.06, 0.0, 0.05], - "Offset": 2390.0, + "OffsetThresholds" : [0.0], + "OffsetValues" : [2390.0], "Multiplier": 0.001 }, { @@ -260,7 +264,8 @@ "Coefficient": [0.17, 0.06, 0.0, 0.03, 0.0, 0.02, 0.05, 0.03, 0.28, 0.02, 0.04, 0.0, 0.0, 0.0, 0.0, 0.05, 0.03, 0.05, 0.06, 0.0, 0.0, 0.01, 0.0, 0.0, 0.04, 0.02, 0.03], - "Offset": 840.0, + "OffsetThresholds" : [0.0], + "OffsetValues" : [840.0], "Multiplier": 0.001 }, { @@ -273,7 +278,8 @@ "Coefficient": [0.1, 0.04, 0.0, 0.0, 0.0, 0.0, 0.08, 0.03, 0.4, 0.02, 0.0, 0.0, 0.0, 0.0, 0.06, 0.04, 0.0, 0.06, 0.12, 0.0, 0.0, 0.0, 0.0, 0.01, 0.06, 0.0, 0.0], - "Offset": 370.0, + "OffsetThresholds" : [0.0], + "OffsetValues" : [370.0], "Multiplier": 0.001 }, { @@ -286,7 +292,8 @@ "Coefficient": [0.23, 0.04, 0.0, 0.01, 0.0, 0.0, 0.12, 0.04, 0.41, 0.05, 0.02, 0.0, 0.0, 0.0, 0.0, 0.02, 0.05, 0.02, 0.01, 0.0, 0.0, 0.0, 0.0, 0.0, 0.05, 0.02, 0.06], - "Offset": -5250.0, + "OffsetThresholds" : [0.0], + "OffsetValues" : [-5250.0], "Multiplier": 0.001 }, { @@ -299,7 +306,8 @@ "Coefficient": [0.0, 0.01, 0.0, 0.0, 0.0, 0.0, 0.07, 0.0, 0.26, 0.04, 0.0, 0.0, 0.0, 0.0, 0.0, 0.01, 0.0, 0.06, 0.26, 0.1, 0.0, 0.0, 0.0, 0.0, 0.01, 0.03, 0.15], - "Offset": 530.0, + "OffsetThresholds" : [0.0], + "OffsetValues" : [530.0], "Multiplier": 0.001 }, { @@ -312,7 +320,8 @@ "Coefficient": [0.19, 0.09, 0.03, 0.01, 0.0, 0.04, 0.08, 0.04, 0.02, 0.02, 0.02, 0.06, 0.07, 0.0, 0.01, 0.05, 0.01, 0.04, 0.03, 0.04, 0.01, 0.03, 0.0, 0.0, 0.04, 0.0, 0.08], - "Offset": -1070.0, + "OffsetThresholds" : [0.0], + "OffsetValues" : [-1070.0], "Multiplier": 0.001 }, { diff --git a/thermal/thermal_info_config_komodo.json b/thermal/thermal_info_config_komodo.json index 8c1a0cca..dba36b7f 100644 --- a/thermal/thermal_info_config_komodo.json +++ b/thermal/thermal_info_config_komodo.json @@ -193,11 +193,13 @@ "ModelPath": "vt_estimation_model.tflite", "Formula": "USE_ML_MODEL", "Combination": ["battery", "btmspkr_therm", "charging_therm", "disp_therm", "north_therm", "quiet_therm", "rfpa_therm", "soc_therm", "usb_pwr_therm"], - "CombinationType":["SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR"], - "Coefficient": [1.0], "Multiplier": 0.001, "Offset": 500, - "PreviousSampleCount": 3 + "PreviousSampleCount": 3, + "BackupSensor" : "VIRTUAL-SKIN-LEGACY", + "OffsetThresholds" : [50000, 53000], + "OffsetValues" : [500, 1000], + "ValidateInput": true }, { "Name": "VIRTUAL-SKIN-MODEL-LEGACY-DIFF", @@ -260,7 +262,8 @@ "Coefficient": [0.1, 0.055, 0.004, 0.027, 0.062, 0.025, 0.04, 0.05, 0.037, 0.077, 0.001, 0.007, 0.015, 0.025, 0.016, 0.019, 0.09, 0.045, 0.072, 0.044, 0.015, 0.029, 0.043, 0.001, 0.002, 0.059, 0.039], - "Offset": -168.0, + "OffsetThresholds": [0.0], + "OffsetValues": [-168.0], "Multiplier": 0.001 }, { @@ -273,7 +276,8 @@ "Coefficient": [0.046, 0.006, 0.012, 0.033, 0.068, 0.029, 0.033, 0.061, 0.047, 0.039, 0.042, 0.005, 0.031, 0.05, 0.008, 0.024, 0.014, 0.044, 0.054, 0.029, 0.003, 0.068, 0.067, 0.028, 0.066, 0.039, 0.055], - "Offset": -76.0, + "OffsetThresholds": [0.0], + "OffsetValues": [-76.0], "Multiplier": 0.001 }, { diff --git a/thermal/thermal_info_config_komodo_proto.json b/thermal/thermal_info_config_komodo_proto.json index 41c1a739..fad2e07f 100644 --- a/thermal/thermal_info_config_komodo_proto.json +++ b/thermal/thermal_info_config_komodo_proto.json @@ -215,10 +215,12 @@ "Formula": "USE_ML_MODEL", "Combination": ["battery", "btmspkr_therm", "charging_therm", "disp_therm", "north_therm", "quiet_therm", "rfpa_therm", "soc_therm", "usb_pwr_therm"], "CombinationType":["SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR"], - "Coefficient": [1.0], "Multiplier": 0.001, - "Offset": 500, - "PreviousSampleCount": 3 + "PreviousSampleCount": 3, + "BackupSensor" : "VIRTUAL-SKIN-LEGACY", + "OffsetThresholds" : [50000, 53000], + "OffsetValues" : [500, 1000], + "ValidateInput": true }, { "Name": "VIRTUAL-SKIN-MODEL-LEGACY-DIFF", @@ -281,7 +283,8 @@ "Coefficient": [0.02, 0.0, 0.0, 0.05, 0.0, 0.0, 0.05, 0.01, 0.04, 0.0, 0.0, 0.01, 0.01, 0.0, 0.0, 0.01, 0.0, 0.0, 0.31, 0.03, 0.0, 0.05, 0.0, 0.0, 0.0, 0.25, 0.08], - "Offset": 2660.0, + "OffsetThresholds" : [0.0], + "OffsetValues" : [2660.0], "Multiplier": 0.001 }, { @@ -294,7 +297,8 @@ "Coefficient": [0.19, 0.06, 0.0, 0.01, 0.0, 0.0, 0.07, 0.1, 0.09, 0.02, 0.03, 0.0, 0.0, 0.05, 0.0, 0.04, 0.03, 0.01, 0.05, 0.01, 0.0, 0.0, 0.01, 0.0, 0.03, 0.07, 0.04], - "Offset": 2860.0, + "OffsetThresholds" : [0.0], + "OffsetValues" : [2860.0], "Multiplier": 0.001 }, { @@ -307,7 +311,8 @@ "Coefficient": [0.21, 0.02, 0.0, 0.44, 0.0, 0.0, 0.0, 0.12, 0.0, 0.04, 0.0, 0.0, 0.03, 0.0, 0.0, 0.0, 0.04, 0.0, 0.01, 0.0, 0.0, 0.01, 0.0, 0.0, 0.0, 0.05, 0.0], - "Offset": 1330.0, + "OffsetThresholds" : [0.0], + "OffsetValues" : [1330.0], "Multiplier": 0.001 }, { @@ -320,7 +325,8 @@ "Coefficient": [0.07, 0.03, 0.0, 0.05, 0.0, 0.0, 0.07, 0.1, 0.03, 0.11, 0.0, 0.0, 0.06, 0.0, 0.02, 0.05, 0.07, 0.05, 0.07, 0.0, 0.0, 0.04, 0.0, 0.02, 0.05, 0.03, 0.03], - "Offset": 2070.0, + "OffsetThresholds" : [0.0], + "OffsetValues" : [2070.0], "Multiplier": 0.001 }, { @@ -333,7 +339,8 @@ "Coefficient": [0.18, 0.0, 0.0, 0.03, 0.1, 0.04, 0.09, 0.13, 0.05, 0.07, 0.0, 0.0, 0.0, 0.06, 0.0, 0.02, 0.05, 0.07, 0.01, 0.0, 0.0, 0.0, 0.01, 0.0, 0.0, 0.02, 0.07], - "Offset": 10.0, + "OffsetThresholds" : [0.0], + "OffsetValues" : [10.0], "Multiplier": 0.001 }, { diff --git a/thermal/thermal_info_config_tokay.json b/thermal/thermal_info_config_tokay.json index 85304155..ede898a2 100644 --- a/thermal/thermal_info_config_tokay.json +++ b/thermal/thermal_info_config_tokay.json @@ -161,10 +161,12 @@ "ModelPath": "vt_estimation_model.tflite", "Formula": "USE_ML_MODEL", "Combination": ["battery", "btmspkr_therm", "charging_therm", "disp_therm", "north_therm", "quiet_therm", "rfpa_therm", "soc_therm", "usb_pwr_therm"], - "CombinationType":["SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR"], - "Coefficient": [1.0], "Multiplier": 0.001, - "PreviousSampleCount": 5 + "PreviousSampleCount": 3, + "BackupSensor" : "VIRTUAL-SKIN-LEGACY", + "OffsetThresholds" : [50000, 53000], + "OffsetValues" : [500, 1000], + "ValidateInput": true }, { "Name": "VIRTUAL-SKIN-MODEL-LEGACY-DIFF", @@ -228,6 +230,8 @@ 0.061, 0.034, 0.034, 0.067, 0.046, 0.068, 0.033, 0.001, 0.079, 0.043, 0.006, 0.005, 0.026, 0.033, 0.015, 0.062, 0.009, 0.03], "Offset": -1087.0, + "OffsetThresholds": [0.0], + "OffsetValues": [-1087.0], "Multiplier": 0.001 }, { @@ -241,6 +245,8 @@ 0.023, 0.049, 0.018, 0.082, 0.008, 0.066, 0.065, 0.02, 0.006, 0.048, 0.033, 0.009, 0.085, 0.018, 0.019, 0.05, 0.005, 0.073], "Offset": -127.0, + "OffsetThresholds": [0.0], + "OffsetValues": [-127.0], "Multiplier": 0.001 }, { @@ -253,7 +259,8 @@ "Coefficient": [0.067, 0.036, 0.02, 0.001, 0.02, 0.041, 0.011, 0.0, 0.08, 0.054, 0.041, 0.017, 0.019, 0.041, 0.074, 0.069, 0.004, 0.044, 0.077, 0.006, 0.012, 0.077, 0.043, 0.071, 0.055, 0.011, 0.009], - "Offset": -333.0, + "OffsetThresholds": [0.0], + "OffsetValues": [-333.0], "Multiplier": 0.001 }, { diff --git a/thermal/thermal_info_config_tokay_proto.json b/thermal/thermal_info_config_tokay_proto.json index 47d95a46..62446c9d 100644 --- a/thermal/thermal_info_config_tokay_proto.json +++ b/thermal/thermal_info_config_tokay_proto.json @@ -161,9 +161,12 @@ "Formula": "USE_ML_MODEL", "Combination": ["battery", "btmspkr_therm", "charging_therm", "disp_therm", "north_therm", "quiet_therm", "rfpa_therm", "soc_therm", "usb_pwr_therm"], "CombinationType":["SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR", "SENSOR"], - "Coefficient": [1.0], "Multiplier": 0.001, - "PreviousSampleCount": 5 + "PreviousSampleCount": 3, + "BackupSensor" : "VIRTUAL-SKIN-LEGACY", + "OffsetThresholds" : [50000, 53000], + "OffsetValues" : [500, 1000], + "ValidateInput": true }, { "Name": "VIRTUAL-SKIN-MODEL-LEGACY-DIFF", @@ -226,7 +229,8 @@ "Coefficient": [0.08, 0.0, 0.0, 0.01, 0.0, 0.16, 0.17, 0.0, 0.22, 0.0, 0.0, 0.0, 0.0, 0.0, 0.07, 0.04, 0.0, 0.13, 0.02, 0.0, 0.0, 0.01, 0.0, 0.0, 0.03, 0.0, 0.09], - "Offset": 1020.0, + "OffsetThresholds" : [0.0], + "OffsetValues" : [1020.0], "Multiplier": 0.001 }, { @@ -239,7 +243,8 @@ "Coefficient": [0.03, 0.03, 0.0, 0.18, 0.02, 0.07, 0.08, 0.0, 0.12, 0.01, 0.05, 0.0, 0.09, 0.04, 0.04, 0.0, 0.0, 0.07, 0.01, 0.06, 0.0, 0.04, 0.01, 0.0, 0.05, 0.0, 0.04], - "Offset": -80.0, + "OffsetThresholds" : [0.0], + "OffsetValues" : [-80.0], "Multiplier": 0.001 }, { @@ -252,7 +257,8 @@ "Coefficient": [0.01, 0.0, 0.0, 0.09, 0.0, 0.08, 0.02, 0.0, 0.04, 0.02, 0.0, 0.0, 0.06, 0.0, 0.06, 0.02, 0.0, 0.02, 0.1, 0.0, 0.0, 0.28, 0.0, 0.11, 0.03, 0.0, 0.04], - "Offset": 2230.0, + "OffsetThresholds" : [0.0], + "OffsetValues" : [2230.0], "Multiplier": 0.001 }, { @@ -265,7 +271,8 @@ "Coefficient": [0.1, 0.0, 0.0, 0.06, 0.0, 0.03, 0.31, 0.0, 0.1, 0.05, 0.0, 0.0, 0.05, 0.0, 0.06, 0.0, 0.0, 0.01, 0.06, 0.01, 0.0, 0.02, 0.0, 0.07, 0.03, 0.0, 0.09], - "Offset": -390.0, + "OffsetThresholds" : [0.0], + "OffsetValues" : [-390.0], "Multiplier": 0.001 }, { diff --git a/thermal/vt_estimation_model_caiman.tflite b/thermal/vt_estimation_model_caiman.tflite index c7b2b29340ed2f9b29b79339a77b5a4964dfcf93..fbeb3faaeb7af0946a9151a9fa2d042a967a6eaf 100644 GIT binary patch literal 4836 zcmbstYgiQ5bx@+HV0=bY)RCAk+RC!a;z;Gw-g60K7$#?CntlYsGGR<8GlChy1OqOJ34}2NIEJYL2o8Yp0EU?g&Vy5H7Wnjo+m?GJ)=1eAre4x7^=dYzKZAy`TU(PMKtReOSgC=lQV7=9R_7#yMn zm<+(8a{ylHGk+ z&j2L2`GR7BO|uoC<1}op-##`8ldxWPfLK1jKe38plWEV6AE(efw#yePzus=uqx#G7M^T9vw z>PyUnNPtXHu-XbF4-0D8Qky7wc{}S_WOK5T;Bd3hJCcMVwm`6ZY+jFs845hPDOovl z64D~FQ&Te793TT6>Ins4m|^XCr%vD}5HNll;-P;L0BJjN6s^Kc!(4&Z2V;yn)U2`; zxSWNyB29@0BFr$e01{nJiMKgDU|FGy*yoqjzi43xvXRL3w`(6{@gXSWC0M-No7HV)Px`uE`}bEw}wSnFDnGm<{gCfAkmTAj9-iaUI{Nit6^Q<3143 zmq-_-(djj?FU=jle3YfrOjC0fhH7hu@A@o2Ry)mPz?L}5=o!ltZud)nBDaoZlDhv+ zQHHEoMAm)5D1W`Zgzzz2O*8s_PS&;a7(roh!>in$lCgB8W;0oEV<$KMoe!E;GHvqK z!=cTs6DqmW`968cvU4P4?HTjN^Qm-wzwunn#9dtKyMLou6_L%#w;Q>WpB2-rxyfYC zx&F$XTXiSje)m`0#_^%?FL|}fm(!D)M;$#wu1w!0zgSXDAD`4nYoz7ov|}r1Y4lF= z^KY|g^s*|tdvrQw#>B)aRrBdL&i%Az>GS3-C+kUzFn|VcyCt{I-%jV1m(je$wX$j4 zHo58#2TfPApCGfOBec1`!t~w8fi!Sj1 zx8lG>^3{Mo@iD$SGI5BJY;D-ceKBK?GV;AU=0wAM@?`3p-0i~UG(B{Sa&p)vl4N|E zTYTZTQhqZ|*`KpaS^d&EuBhm^Qu~hzZo$xr%IRE|2>ZO;*y}d>?UYm{P#30T4A{Z> zM$J@?552^N3|}BuKkK5pZ$jeh{y4=n^mC1(Gq=!1c_!{u>Q`~5b7Khe5q~NuA%h$} z=#yQ~#L>*j&D7+KAcsF3PKS(WYGU7ii<~_ECatO5V@{Kbh;`Ufa(<*&u09Y+g{T9x zbjvFMQIpJ+6^j%bVnn!VVI`nnd+8>S?jEUT(a;nify5FvlM>G_m&jzEOzgtDF++9OUZ|ou9oi=ss}W;Qj4 z<&dM}8_fIPTWQvmh0?>vLTK@m>&c;*x6Lc*)>GkYD(KyeMtXh1K@yvLiEI!2m$JnZ ztcO2db%xdW+{%GsSKXv&x!WZUmnaK|rS;r2S_nwunkgMYiWXz#VbA8P!VyIn3rtUaFUw+I;ZX0Xq z@L|89qubV#Tgo81??ixU^}L&M?woRS!{c+wCFjQ`_MV+SJ9|E@`m~-t(W<8#qW2O; zYcNeHkEgA=sbs+md&%XC;Z&b=gihKOMEms_Mr-n~ULUe^ zyux$mhl>~9#Y4$>?5l*=L;KFaaYwrrv0}!1-!Za(-t{a*{`?EyCcJpp=c@w1x+6U; zC5wei1L_1xuxix12k&%-8QfV}VT~~uFdcV&4UFpm_5+|y2V6MNsb?zQL5OPsd;ND9 z6NG0qjsx%ce0aCvnTzEH)&@w6IMnw9{9+|Hs9m4`zGQ;1#~Q?cw)a>0VG@9RC9(Z=W7 zh1qV^w)rO%^V0ZLXTDA^8;CE;VJkgN#Z3wJdT~Gq7dz0#1Xde45$oY zJv^V6BtcvnKDCojUCzQnu?xS-20u~Lj9RGpyVB!gv{8=>UF1C1Ia_|8;bE3Y4v%}0 zXi+Q3Uf5%Zj*9Nl9=+c9DE1T-^I{Rc5_@YvsM5(y<*2L-zJy~PWYNO!g_lvDr?6nC}udRtO#6mnC z^vyKAQ4dc0#ny<0Zoc=%L`6Y79yBIKYtTJP8hcy?y|={}6VsC|2Axj(C`se>V?w>*7Zc!+;czB1~E_f_1(JF|r zu2*@N4_uy^8qjA%--jQ<>gfzWD+7WzA4pu#h!S{>8U)UJea>H1xB6CnU3IFv|A&)y zo9~z^oN7Q2a$e_$<=BO5g|z2ScF#PklZwMqsNyhVK>eQXM}mm@c5#@;A=#67VwQMG!*1HX!tf!F=o8rKQJLGG11^ z7DXu4F_8(HICX+JHaJEpj*Jz@sl$|Naa_1KTp1?T#EE0#!jvnm`3L0lH6Qa8J^9v} zwHm&g@ZvQmGQm*OGppzXLNpK2C}ULC#E1b?YLu}Faq7I) z+G$!{f91W=4%7;KowrnHEd8{-yStrN+Uxg=pUe;ZJynjagU_P2#2YARPa#a~5}`x& zE#%w9dE`c|5>!?36VxVGGABQb(HqQfIp(x+oG)moY>93rKSKj23@4aA7**f%xc`mtpPyxJInu>^18gi3*KU}B?fDED(YHyj7p2i!H zp^iOTzU=_>z&i&#CF@{GET`C6`lSRnryHu2Fagv#2 zd6D5t;!w6rF`78LnYrZ`36B~d)aN({Fm(%e!z!T;SX)$+F7A%x+h!pmvIe2zR9_S| zW+OUQQ%=4}Pp_94Z$m|kW&pitr9b-8cRGC8y#_Yh8Nu8|MNE|EOqlTNIZ}83LAdaX zP`=^eAuv^hkp7vLq&Jrg4>B{zEn7!2x{vpu_7F7;G5?c^sP7{0#zd13X3J3`9)_CM zACPC8ECq*M;iQ?*FxVE80j=L$A ztG+o18!7{l*iu2(W+aou0VjFM@nwwn(77~ZsU8o2cj@Jclr5=ArV{^y(?EP5=cuHm(9%nRz zJ+w2PJxXq)21V^+yH^`iHCapXg)A%1wy_XtQ=ej?GK`ISlEz9zqo`Z$6WHiygD8i{ z4cJ*^#yw%1(Q(@%be>kYur4=E*sg@Xv3_C-`;*-%?0C~3>r`2BW{FSGGU-cZTv8dk z^jSX0>T2+d!x!23p?8t-vW+;c0CNsSH&9saQ~88|Lo64$57eoj;Db|*sJgCd?#x|B zyyKD)F7_EI_g8Vyl$$~Q$1)G8I_p@0q6rJEia9!^^&Tnu>;yhFx{=90XTeU152jwH z=&;Yz{aK^R96YQhgY$Umi3)`Jl-RoZB3Ocmeqn+C!14ZCYNfuXj)&{$G zj-xhxdlCFgC^p{Np1ShAFZ*b95~?~%iV=L zHk#nuW8CrKHwB!I8Ewy9^)IFpEbQ3dJFKY$xftjEYdtQ#v=euE55b>RDmmqXAnwY% zChF~vPV67?rc`u-7xjsj3O^me;Cr_75V8Frw5_gWf}6X^x?TBjGjcOJ(^2ZwTsu}i zxFin7*E}O*Zyy6UNg6osKhUtQ=j(kiKK~qZK=l=KcyKr<^pcDFDyV9AsEB9Eq4*@|D;G zf@(s*>$C`(J=VxeE_BGnjh2v_v%fy|2t!`GIvcV~BA|2YJ+ig!Hn}p?0H~uiPSIzj zpeM_QSjTKst6xTg)dE+zQ04^17xU5NHZ7#I&j)c>84z{Wj)s2qq}tmJ^d=ov87b8D`8u4N+kG}^Y$J}kTgILpzYZ^+l!ara8gcg5 zVsPR;KkCRI-6v(7Z>iHMCDBN;?~_C&nyUe z3BDeUF!GUzA_Bzdu51~Ltd8R0uO8!Y*MUps0DYhfex^*}f4IG%HM81^aq1*AoF zNbZo1V;8OGqP;Tkh3=1kRsP5N?xL>;)b}(fgFNS?)0?%&= zLYKD{I(+%wm-KiNg|x`|IHj-A5=_gh8S<7dj~dM2%f|-O=$puU$t(Aq7xBDX>CykQ z6CuGGjZ&Scun~r6ViHu*YQ;N0!N;Ky!Ri%}u`7Bz!Xgt?y+Lf8S`*P5#jlD~YI-Ae zxQY($jS}KQd)uoLLKLbs9~uA9B?IV^fpm$m4_zYcOP2`y(j`Kk9;~3>uRUkA->n$K=@ip6HZi)W_Vleib diff --git a/thermal/vt_estimation_model_komodo.tflite b/thermal/vt_estimation_model_komodo.tflite index 0792305d6edd28a8f962b9b70d64ed14e821e103..8dce026bf73c5dfa0f40abb6b24f23f9d206cbd1 100644 GIT binary patch literal 4836 zcmbtY4O~=J7JtZ?fQY87S&sTdQ|c$f3@|{*yAM=M;=^emmTKGK!8~AezI^irOhd_B zsWe5S)WVNVP5LlV%M54kXqu~r=FjbetTo!&qz{YV(ynfPu;;v)!4+wLKkV{5bMHO( z+;jf--1F`|7d68$g)?&#qZyV_GozSjW*8F*yf8)uZ3cJ@Qx6mw0_|{ynF6#A1VVua zERe<$q0GWL5zxc=I4>1wD3D8(sx0;jlUXbm+*Vncrvkp*-Q9f))Yu*bWESl%(WL7c zmo9X7lmKEE@z>5XKaS!N0yVyp1u%7I~EK^=qVdjj?!c69K7zfzO_z0+{ z&(1H(G8Sad&c7xT2B;B#7>pyKE|j%d>?X-=mn}BYR3%C-i^Hzqi3A}PP$vLy2C4*y zXn|sZSac3h;{d;&w2S_AJPCdDOP*G%yWZb^i$Q-+1Q{z3`n?UD{5g;o<_?6uPNUUm zp}rR=(3>~Loi~RW51dW!hlx1gHe0+6vwMJ0HG!CgE-s%^1#ph;E&&n^z ziUUy%!-6iSWxi;QlPg8ZCRpQK)p4>Y*fJ^{jtZ-&DRbCBq-Vb)l^yoSh(A{RcrhOQ z{p)>+aS#t=kVLbkOm?wghOM$lvRkmSuDKRFD~mQK3$<;ASizQwR+q)?(lEEeoT6-F z;RBhuaRoWq`D`JG0T1nr0%Dlqfw)sT@S_5bA43MzD}Yco7^8>^BMoB($^hJBw4p?m zsmx(7w^V56xL}7FW){$Nhg}vdb{8Nkcd$aK!!5Hmhgr0;PC*iEE>^Ic0}Mq4YZq*y zp9?FrNUS8-D@0fb6twBLgUY}-^s96XV}v^3m%iO1N`mZ`#NOUv-7ff~aEfHJxMYW< z_%I+07Dt2LqJWDF(8cIGHeksiF(-fV$7CVM`S&cUC;ri27=sLRi^2f<~99fpuvv`SqhNokp+3EHssJ0KV(PK*oSfEO7Un7{nhv^R3qry^WMww|nkv z9L4|j!X`Sy(L^rt0zJFsdGbu#~Krq3>OmEL1y>-J9XZkvTh-L;z-jH77c#~zyTR0esa+)Sgl z7r_2k6RwKQx=KKGgbu-{~Rk{&XXciwHF?iZWsOIMyH+B0fy z{@)IAo9FCG@9Jo!U0451lXjMqx97h|Uw`-&%64oa?VFRy)*n_;DN9XjyAJI?dU*ml zuwge{vyY)?C%sPF#?SR0eR3B~UbBXj#~NsJV=HH{sLA>3v1;>KKfiR`@8 zLYEIPd+#~cM(<|cARVir9=@Dz|9&Q&HFpoU_&>w;@71eFddCTFNVLbh`qFX|xn&o* z^3#c_p}S9WnPWLJ;-M(Ay<{hilU^gwerTZHe{b|Y`1+@`-r-H3GNFz#Bir|@W-g^A zgIqZE9-S{&azD+s(j8qdQ^PcoOdofQ8mzOt zM~7QUi~BG1lY(?w?^#aNTaFOAXb)wEwoh%y63EXTqe+~v*jIGsPX6sRQ|N79J?A@e zZZG-y;%V~TFJ0WYJ9cnio?qi>+_!?}6fNRc|1g%SzIXUeANIccP!>^H=qImww z#KB};VS;bt!UA4YJ>uI?`aZ4PnZu7-u#5YsZY;mdpypdwr;!Eoe(yUD`2e0*cNkt|-e)1sFZ*Wx!4;RgyX%24@5sx|HnMPOK%O9r zW{q<9;GNDeQ9YRz<`_}H3EuUap}iHT2?%xC;KG4QIaBctLf%Qh>%YU8Fg&ZVt-8|P zjdvTKxtMNXZh*4LLwh6P7c;rR0ek-Yk_p2aa}fV}1}XEQ6N2+l2kOFtHJ(FO&gF$yGRLFZ`6xxF98bb#XD9FaxUT0}+GS zzdvfi6b|kj#u1dBH6sSh=azzcV}){1x96s0qI(d>de8$O%=UZHC!y zbQFi>erGC#Ek^1yOI#SiLW#-7H^~e^7Gl!ahZPpG{e#%T5|a;^A&keA3bHIpkH$>t z5mbham?&O1Uzr9!2}$>8A>+SZ9tZVFi8yebo=19mHPBNj*ph3ZfO~>P53T{9-87ncZi^`Q8%?r4HMLJPsR^m@4!vnK zQn^#;HyC|l3hYN8u1QHqNc;_8T#mASV@c8J`~1X{QfR&t4uDz=Cq0~lS49#5{xG*b88}M3^^eK pqCfha8_c#5k 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 delta 3061 zcmZ{m2~<ZkLPf9^WwUDLOHf;tYO5BtwLZk+b7`?fi#}{?eHXO|ocHcI|M}*d`DT81&bjx@ z|JIaUZiO?rGk6RmWp!p$(aZ#sxZa}j-9F>38ODJX!^+5InEj>qfQDWr^3ye|Scq1cqVi(whHa@;rfSmE z#p$M5CV%~>_;=H2ljy$Ucg&o1J-yGK^|H$9dvSPoc42k)ayVzLk)HjTD;vF|77}+p zrCAH+$hJq7QOnPKaD!I?&Tb2$EicztS};spT0La#I*J*pZ{YNXH2l{tbJDo92aIVaIZWA4sb42<}AAv&mCipH=2T2ph7<#?hV05U3VRqsf$~hn;F87>~EAJ-z4tPWD z)tzK2@D1ydeugSPv0?q4HWGh%uD-e40>gePf%RpC+<$N-u%~XCA^C}}7M-#@vFN%O zz7@G+sZ$P4R~*ExPg39mmsa}q)j;I%>hZO+1?UiTpKfd@Lsfu6f9=6jebI?1{SHL{ zd{O0&4K2GNa_2R@BJd;HDvzLN1qtZ*3<1ni`ZR4EV646%Zh|Yrw8zJtpoD#Tko(;s5d=qF~ zF<;tIYK;zC_S2SkYH0PdQ`9+Z4hp_7O0_e-q}=n{VCRzW2=8zq+WwJ^w)tYnY)U__ zGHI2{O>^N)a0>m!-4kB>^aId+;!%PH#&V3|kJI;r3CW_b)?$!-2yJTq0OJ&8_}0%o zq-;|@-1%uP3Ib*L*YrTlyuDw~On!2#FMK{sw!1*&eg(KdIS%>r5@98shJL>`lY-OHRz`nZibrymf)fM18<2( zp}O82Zgf)mZb2blU+fD0>J1=WJq=PC#3;>MChatt1Cz1?q)V;asQMEbhQ{cOAkL4* z^Ib9M-MF4CJw6f+M~nntKQ8=caK!SAa`GX}%f&&9tA_0-Zen1-fJ16#=@QgUDw_IVeRk1za2+e0#- zCS?`E4F+O#-!4O5^BYioej8!LR?;yoHL%xjHQe&tL*-ZUY4LUe_G-Flsa%Kh-uK~l zmID~G#d>Y5IRuS7sV|%THH~|`879X~1;5A`iY65}<_j*={W4qTKk7E|YIGrbt2%PJ z$PIdQ-GTQKAtBTHQ13jvK^VUjBQ^@q|-* z9M_N^$yEP3)bBVVU3BUi#I!Gh-TbS#y?`TYD42qo{hzww98okl&J`Lu z5`5tMs8NOo@14h_%L39Ed5_j}j!;qjTZYT++o2_I36?B8N;^zf(DFl>a8uv_@b+Em zJmDX-^3tEUj^`=U+;TR&Z7PFV73P6!m)@YGQmP@seuV7Lu~#74?K;ip?1GNkXuP*i zC!m2pY@~u8N@;zJIZSG3f}U+V!G56|*ml~==H^5pr;~u2Fd5F)O(2q|^Yytm=MxWM zD^2w;p^~jC%+KBoGmEXkHf<;EbN8mqL>FZIf&<+SR-nFe39h{6hNri`kILL?j5&Nm z?>WB;UvsR+#1cz-SI783p=tr-+u7hA8y@aGKbqv6D}h6{$spmr2bQMJG}kT~+gwKA zCbJy;K4c@F8|jMm-5=tG6$RLN--D%tTWkjV&Q3)$w_NOr zZJ?hA?I&9-tUm!Vl zmB9295$HCD1N%B`;OH_B43Qtiik6dlcaD@aC%H@G$CZ;4k19!U_`6VCDa4I&2lRqU z75qA*6h4()C0^n7xWt|z0=tF8ri=&P5uUhMnn8U>h;ibM4jnNrC?Y3vorsyI1QP7W zODl5U#si_psG>Mbe|gFX42>EI`|K-8<%3*QUY?14@3wpW4~Ea);~9cl*Xix^ z%F)Nsh;=m_ zSj%ngkImD!a9VS9lV0ynX8C97H(2<{7{;8n6=rPv!k6@WlHZqEwKfJ>X-znu#m&}# zu7v1O(Ga?52wn7ou1(aj zMo%FcL>CRCv&@%t@i4l0I9)uLE*?S`521_yrYqID6oq&YT|A7=GGEdq!|0OXbje`4 zWC&d{gf4kSPf?^x2GJ$M=n}3xgk$1h+W$>5%>VjQpHHw&CTBeBs|PvU0UIn28PWeM Qu-2Qy%wnUV-`q0)1qnIrxc~qF