LPX55's picture
feat: add flowchart representation of image prediction process and enhance README with flowchart and multi-model consensus methods overview
e2d09ed
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="729pt" height="873pt" viewBox="0.00 0.00 729.00 872.72">
<g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 868.72)">
<title>ImagePredictionFlow</title>
<polygon fill="white" stroke="none" points="-4,4 -4,-868.72 725,-868.72 725,4 -4,4"/>
<g id="clust1" class="cluster">
<title>cluster_models</title>
<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="8,-568 8,-748.72 510,-748.72 510,-568 8,-568"/>
<text text-anchor="middle" x="259" y="-735.72" font-family="Arial" font-size="10.00">Model Ensemble</text>
</g>
<g id="clust2" class="cluster">
<title>cluster_forensics</title>
<polygon fill="none" stroke="black" stroke-dasharray="5,2" points="268,-136 268,-334.36 713,-334.36 713,-136 268,-136"/>
<text text-anchor="middle" x="490.5" y="-321.36" font-family="Arial" font-size="10.00">Forensic Analysis</text>
</g>
<!-- A -->
<g id="node1" class="node">
<title>A</title>
<path fill="lightgreen" stroke="black" d="M284.18,-864.72C284.18,-864.72 233.82,-864.72 233.82,-864.72 227.82,-864.72 221.82,-858.72 221.82,-852.72 221.82,-852.72 221.82,-840.72 221.82,-840.72 221.82,-834.72 227.82,-828.72 233.82,-828.72 233.82,-828.72 284.18,-828.72 284.18,-828.72 290.18,-828.72 296.18,-834.72 296.18,-840.72 296.18,-840.72 296.18,-852.72 296.18,-852.72 296.18,-858.72 290.18,-864.72 284.18,-864.72"/>
<text text-anchor="middle" x="259" y="-849.72" font-family="Arial" font-size="10.00">User Upload,</text>
<text text-anchor="middle" x="259" y="-837.72" font-family="Arial" font-size="10.00">Predict</text>
</g>
<!-- B -->
<g id="node2" class="node">
<title>B</title>
<path fill="lightyellow" stroke="black" d="M285.29,-792.72C285.29,-792.72 232.71,-792.72 232.71,-792.72 226.71,-792.72 220.71,-786.72 220.71,-780.72 220.71,-780.72 220.71,-768.72 220.71,-768.72 220.71,-762.72 226.71,-756.72 232.71,-756.72 232.71,-756.72 285.29,-756.72 285.29,-756.72 291.29,-756.72 297.29,-762.72 297.29,-768.72 297.29,-768.72 297.29,-780.72 297.29,-780.72 297.29,-786.72 291.29,-792.72 285.29,-792.72"/>
<text text-anchor="middle" x="259" y="-777.72" font-family="Arial" font-size="10.00">Img Pre-proc,</text>
<text text-anchor="middle" x="259" y="-765.72" font-family="Arial" font-size="10.00">Agent Init</text>
</g>
<!-- A&#45;&gt;B -->
<g id="edge25" class="edge">
<title>A-&gt;B</title>
<path fill="none" stroke="black" d="M259,-828.42C259,-821.13 259,-812.45 259,-804.26"/>
<polygon fill="black" stroke="black" points="262.5,-804.34 259,-794.34 255.5,-804.34 262.5,-804.34"/>
</g>
<!-- ImageIn -->
<g id="node3" class="node">
<title>ImageIn</title>
<ellipse fill="lightblue" stroke="black" cx="259" cy="-720.36" rx="0.36" ry="0.36"/>
</g>
<!-- B&#45;&gt;ImageIn -->
<g id="edge26" class="edge">
<title>B-&gt;ImageIn</title>
<path fill="none" stroke="black" d="M259,-756.28C259,-748.56 259,-739.69 259,-732.82"/>
<polygon fill="black" stroke="black" points="262.5,-732.93 259,-722.93 255.5,-732.93 262.5,-732.93"/>
</g>
<!-- Model1 -->
<g id="node4" class="node">
<title>Model1</title>
<path fill="lightcoral" stroke="black" d="M58,-684C58,-684 28,-684 28,-684 22,-684 16,-678 16,-672 16,-672 16,-660 16,-660 16,-654 22,-648 28,-648 28,-648 58,-648 58,-648 64,-648 70,-654 70,-660 70,-660 70,-672 70,-672 70,-678 64,-684 58,-684"/>
<text text-anchor="middle" x="43" y="-663" font-family="Arial" font-size="10.00">Model1</text>
</g>
<!-- ImageIn&#45;&gt;Model1 -->
<g id="edge1" class="edge">
<title>ImageIn-&gt;Model1</title>
<path fill="none" stroke="black" d="M258.34,-719.93C249.82,-719.03 160.97,-709.3 80.95,-684.18"/>
<polygon fill="black" stroke="black" points="82.27,-680.93 71.67,-681.17 80.11,-687.58 82.27,-680.93"/>
</g>
<!-- Model2 -->
<g id="node5" class="node">
<title>Model2</title>
<path fill="lightcoral" stroke="black" d="M130,-684C130,-684 100,-684 100,-684 94,-684 88,-678 88,-672 88,-672 88,-660 88,-660 88,-654 94,-648 100,-648 100,-648 130,-648 130,-648 136,-648 142,-654 142,-660 142,-660 142,-672 142,-672 142,-678 136,-684 130,-684"/>
<text text-anchor="middle" x="115" y="-663" font-family="Arial" font-size="10.00">Model2</text>
</g>
<!-- ImageIn&#45;&gt;Model2 -->
<g id="edge2" class="edge">
<title>ImageIn-&gt;Model2</title>
<path fill="none" stroke="black" d="M258.61,-719.89C253.66,-718.49 203.17,-704.07 153.04,-684.57"/>
<polygon fill="black" stroke="black" points="154.36,-681.33 143.77,-680.89 151.78,-687.84 154.36,-681.33"/>
</g>
<!-- Model3 -->
<g id="node6" class="node">
<title>Model3</title>
<path fill="lightcoral" stroke="black" d="M202,-684C202,-684 172,-684 172,-684 166,-684 160,-678 160,-672 160,-672 160,-660 160,-660 160,-654 166,-648 172,-648 172,-648 202,-648 202,-648 208,-648 214,-654 214,-660 214,-660 214,-672 214,-672 214,-678 208,-684 202,-684"/>
<text text-anchor="middle" x="187" y="-663" font-family="Arial" font-size="10.00">Model3</text>
</g>
<!-- ImageIn&#45;&gt;Model3 -->
<g id="edge3" class="edge">
<title>ImageIn-&gt;Model3</title>
<path fill="none" stroke="black" d="M258.54,-719.66C255.42,-717.36 236.94,-703.76 219.55,-690.96"/>
<polygon fill="black" stroke="black" points="221.99,-688.41 211.86,-685.3 217.84,-694.05 221.99,-688.41"/>
</g>
<!-- Model4 -->
<g id="node7" class="node">
<title>Model4</title>
<path fill="lightcoral" stroke="black" d="M274,-684C274,-684 244,-684 244,-684 238,-684 232,-678 232,-672 232,-672 232,-660 232,-660 232,-654 238,-648 244,-648 244,-648 274,-648 274,-648 280,-648 286,-654 286,-660 286,-660 286,-672 286,-672 286,-678 280,-684 274,-684"/>
<text text-anchor="middle" x="259" y="-663" font-family="Arial" font-size="10.00">Model4</text>
</g>
<!-- ImageIn&#45;&gt;Model4 -->
<g id="edge4" class="edge">
<title>ImageIn-&gt;Model4</title>
<path fill="none" stroke="black" d="M259,-719.85C259,-718.44 259,-707.41 259,-695.79"/>
<polygon fill="black" stroke="black" points="262.5,-695.82 259,-685.82 255.5,-695.82 262.5,-695.82"/>
</g>
<!-- Model5 -->
<g id="node8" class="node">
<title>Model5</title>
<path fill="lightcoral" stroke="black" d="M346,-684C346,-684 316,-684 316,-684 310,-684 304,-678 304,-672 304,-672 304,-660 304,-660 304,-654 310,-648 316,-648 316,-648 346,-648 346,-648 352,-648 358,-654 358,-660 358,-660 358,-672 358,-672 358,-678 352,-684 346,-684"/>
<text text-anchor="middle" x="331" y="-663" font-family="Arial" font-size="10.00">Model5</text>
</g>
<!-- ImageIn&#45;&gt;Model5 -->
<g id="edge5" class="edge">
<title>ImageIn-&gt;Model5</title>
<path fill="none" stroke="black" d="M259.46,-719.66C262.58,-717.36 281.06,-703.76 298.45,-690.96"/>
<polygon fill="black" stroke="black" points="300.16,-694.05 306.14,-685.3 296.01,-688.41 300.16,-694.05"/>
</g>
<!-- Model6 -->
<g id="node9" class="node">
<title>Model6</title>
<path fill="lightcoral" stroke="black" d="M418,-684C418,-684 388,-684 388,-684 382,-684 376,-678 376,-672 376,-672 376,-660 376,-660 376,-654 382,-648 388,-648 388,-648 418,-648 418,-648 424,-648 430,-654 430,-660 430,-660 430,-672 430,-672 430,-678 424,-684 418,-684"/>
<text text-anchor="middle" x="403" y="-663" font-family="Arial" font-size="10.00">Model6</text>
</g>
<!-- ImageIn&#45;&gt;Model6 -->
<g id="edge6" class="edge">
<title>ImageIn-&gt;Model6</title>
<path fill="none" stroke="black" d="M259.39,-719.89C264.34,-718.49 314.83,-704.07 364.96,-684.57"/>
<polygon fill="black" stroke="black" points="366.22,-687.84 374.23,-680.89 363.64,-681.33 366.22,-687.84"/>
</g>
<!-- Model7 -->
<g id="node10" class="node">
<title>Model7</title>
<path fill="lightcoral" stroke="black" d="M490,-684C490,-684 460,-684 460,-684 454,-684 448,-678 448,-672 448,-672 448,-660 448,-660 448,-654 454,-648 460,-648 460,-648 490,-648 490,-648 496,-648 502,-654 502,-660 502,-660 502,-672 502,-672 502,-678 496,-684 490,-684"/>
<text text-anchor="middle" x="475" y="-663" font-family="Arial" font-size="10.00">Model7</text>
</g>
<!-- ImageIn&#45;&gt;Model7 -->
<g id="edge7" class="edge">
<title>ImageIn-&gt;Model7</title>
<path fill="none" stroke="black" d="M259.66,-719.93C268.18,-719.03 357.03,-709.3 437.05,-684.18"/>
<polygon fill="black" stroke="black" points="437.89,-687.58 446.33,-681.17 435.73,-680.93 437.89,-687.58"/>
</g>
<!-- WeightedConsensusInput -->
<g id="node11" class="node">
<title>WeightedConsensusInput</title>
<path fill="lightyellow" stroke="black" d="M286.68,-612C286.68,-612 231.32,-612 231.32,-612 225.32,-612 219.32,-606 219.32,-600 219.32,-600 219.32,-588 219.32,-588 219.32,-582 225.32,-576 231.32,-576 231.32,-576 286.68,-576 286.68,-576 292.68,-576 298.68,-582 298.68,-588 298.68,-588 298.68,-600 298.68,-600 298.68,-606 292.68,-612 286.68,-612"/>
<text text-anchor="middle" x="259" y="-591" font-family="Arial" font-size="10.00">Model Results</text>
</g>
<!-- Model1&#45;&gt;WeightedConsensusInput -->
<g id="edge8" class="edge">
<title>Model1-&gt;WeightedConsensusInput</title>
<path fill="none" stroke="black" d="M70.33,-651.56C73.23,-650.29 76.16,-649.08 79,-648 121.77,-631.72 171.79,-617.35 208.24,-607.69"/>
<polygon fill="black" stroke="black" points="208.84,-611.15 217.63,-605.23 207.07,-604.38 208.84,-611.15"/>
</g>
<!-- Model2&#45;&gt;WeightedConsensusInput -->
<g id="edge9" class="edge">
<title>Model2-&gt;WeightedConsensusInput</title>
<path fill="none" stroke="black" d="M142.42,-651.67C162.31,-642 189.67,-628.7 212.89,-617.41"/>
<polygon fill="black" stroke="black" points="214.4,-620.57 221.86,-613.05 211.34,-614.28 214.4,-620.57"/>
</g>
<!-- Model3&#45;&gt;WeightedConsensusInput -->
<g id="edge10" class="edge">
<title>Model3-&gt;WeightedConsensusInput</title>
<path fill="none" stroke="black" d="M204.8,-647.7C213.28,-639.45 223.59,-629.43 232.93,-620.35"/>
<polygon fill="black" stroke="black" points="235.34,-622.88 240.07,-613.4 230.46,-617.86 235.34,-622.88"/>
</g>
<!-- Model4&#45;&gt;WeightedConsensusInput -->
<g id="edge11" class="edge">
<title>Model4-&gt;WeightedConsensusInput</title>
<path fill="none" stroke="black" d="M259,-647.7C259,-640.41 259,-631.73 259,-623.54"/>
<polygon fill="black" stroke="black" points="262.5,-623.62 259,-613.62 255.5,-623.62 262.5,-623.62"/>
</g>
<!-- Model5&#45;&gt;WeightedConsensusInput -->
<g id="edge12" class="edge">
<title>Model5-&gt;WeightedConsensusInput</title>
<path fill="none" stroke="black" d="M313.2,-647.7C304.72,-639.45 294.41,-629.43 285.07,-620.35"/>
<polygon fill="black" stroke="black" points="287.54,-617.86 277.93,-613.4 282.66,-622.88 287.54,-617.86"/>
</g>
<!-- Model6&#45;&gt;WeightedConsensusInput -->
<g id="edge13" class="edge">
<title>Model6-&gt;WeightedConsensusInput</title>
<path fill="none" stroke="black" d="M375.58,-651.67C355.69,-642 328.33,-628.7 305.11,-617.41"/>
<polygon fill="black" stroke="black" points="306.66,-614.28 296.14,-613.05 303.6,-620.57 306.66,-614.28"/>
</g>
<!-- Model7&#45;&gt;WeightedConsensusInput -->
<g id="edge14" class="edge">
<title>Model7-&gt;WeightedConsensusInput</title>
<path fill="none" stroke="black" d="M447.67,-651.56C444.77,-650.29 441.84,-649.08 439,-648 396.23,-631.72 346.21,-617.35 309.76,-607.69"/>
<polygon fill="black" stroke="black" points="310.93,-604.38 300.37,-605.23 309.16,-611.15 310.93,-604.38"/>
</g>
<!-- ContextualIntelligenceAgent -->
<g id="node12" class="node">
<title>ContextualIntelligenceAgent</title>
<path fill="lightcyan" stroke="black" d="M139.75,-540C139.75,-540 68.25,-540 68.25,-540 62.25,-540 56.25,-534 56.25,-528 56.25,-528 56.25,-516 56.25,-516 56.25,-510 62.25,-504 68.25,-504 68.25,-504 139.75,-504 139.75,-504 145.75,-504 151.75,-510 151.75,-516 151.75,-516 151.75,-528 151.75,-528 151.75,-534 145.75,-540 139.75,-540"/>
<text text-anchor="middle" x="104" y="-525" font-family="Arial" font-size="10.00">Contextual</text>
<text text-anchor="middle" x="104" y="-513" font-family="Arial" font-size="10.00">Intelligence Agent</text>
</g>
<!-- WeightedConsensusInput&#45;&gt;ContextualIntelligenceAgent -->
<g id="edge27" class="edge">
<title>WeightedConsensusInput-&gt;ContextualIntelligenceAgent</title>
<path fill="none" stroke="black" d="M220.29,-575.52C199.87,-566.29 174.61,-554.89 152.85,-545.06"/>
<polygon fill="black" stroke="black" points="154.42,-541.93 143.87,-541 151.54,-548.31 154.42,-541.93"/>
</g>
<!-- BaggingAgent -->
<g id="node13" class="node">
<title>BaggingAgent</title>
<path fill="lightcyan" stroke="black" d="M236.42,-540C236.42,-540 181.58,-540 181.58,-540 175.58,-540 169.58,-534 169.58,-528 169.58,-528 169.58,-516 169.58,-516 169.58,-510 175.58,-504 181.58,-504 181.58,-504 236.42,-504 236.42,-504 242.42,-504 248.42,-510 248.42,-516 248.42,-516 248.42,-528 248.42,-528 248.42,-534 242.42,-540 236.42,-540"/>
<text text-anchor="middle" x="209" y="-519" font-family="Arial" font-size="10.00">BaggingAgent</text>
</g>
<!-- WeightedConsensusInput&#45;&gt;BaggingAgent -->
<g id="edge28" class="edge">
<title>WeightedConsensusInput-&gt;BaggingAgent</title>
<path fill="none" stroke="black" d="M246.64,-575.7C240.95,-567.73 234.07,-558.1 227.76,-549.26"/>
<polygon fill="black" stroke="black" points="230.76,-547.44 222.1,-541.34 225.06,-551.51 230.76,-547.44"/>
</g>
<!-- DeepEnsembleAgent -->
<g id="node14" class="node">
<title>DeepEnsembleAgent</title>
<path fill="lightcyan" stroke="black" d="M339.19,-540C339.19,-540 278.81,-540 278.81,-540 272.81,-540 266.81,-534 266.81,-528 266.81,-528 266.81,-516 266.81,-516 266.81,-510 272.81,-504 278.81,-504 278.81,-504 339.19,-504 339.19,-504 345.19,-504 351.19,-510 351.19,-516 351.19,-516 351.19,-528 351.19,-528 351.19,-534 345.19,-540 339.19,-540"/>
<text text-anchor="middle" x="309" y="-525" font-family="Arial" font-size="10.00">DeepEnsemble</text>
<text text-anchor="middle" x="309" y="-513" font-family="Arial" font-size="10.00">Agent</text>
</g>
<!-- WeightedConsensusInput&#45;&gt;DeepEnsembleAgent -->
<g id="edge29" class="edge">
<title>WeightedConsensusInput-&gt;DeepEnsembleAgent</title>
<path fill="none" stroke="black" d="M271.36,-575.7C277.05,-567.73 283.93,-558.1 290.24,-549.26"/>
<polygon fill="black" stroke="black" points="292.94,-551.51 295.9,-541.34 287.24,-547.44 292.94,-551.51"/>
</g>
<!-- EvolutionEnsembleAgent -->
<g id="node15" class="node">
<title>EvolutionEnsembleAgent</title>
<path fill="lightcyan" stroke="black" d="M458.8,-540C458.8,-540 381.2,-540 381.2,-540 375.2,-540 369.2,-534 369.2,-528 369.2,-528 369.2,-516 369.2,-516 369.2,-510 375.2,-504 381.2,-504 381.2,-504 458.8,-504 458.8,-504 464.8,-504 470.8,-510 470.8,-516 470.8,-516 470.8,-528 470.8,-528 470.8,-534 464.8,-540 458.8,-540"/>
<text text-anchor="middle" x="420" y="-525" font-family="Arial" font-size="10.00">EvolutionEnsemble</text>
<text text-anchor="middle" x="420" y="-513" font-family="Arial" font-size="10.00">Agent</text>
</g>
<!-- WeightedConsensusInput&#45;&gt;EvolutionEnsembleAgent -->
<g id="edge30" class="edge">
<title>WeightedConsensusInput-&gt;EvolutionEnsembleAgent</title>
<path fill="none" stroke="black" d="M298.8,-575.7C320.1,-566.43 346.56,-554.93 369.32,-545.03"/>
<polygon fill="black" stroke="black" points="370.66,-548.27 378.43,-541.07 367.87,-541.85 370.66,-548.27"/>
</g>
<!-- WeightManager -->
<g id="node16" class="node">
<title>WeightManager</title>
<path fill="lightcyan" stroke="black" d="M274.73,-468C274.73,-468 243.27,-468 243.27,-468 237.27,-468 231.27,-462 231.27,-456 231.27,-456 231.27,-444 231.27,-444 231.27,-438 237.27,-432 243.27,-432 243.27,-432 274.73,-432 274.73,-432 280.73,-432 286.73,-438 286.73,-444 286.73,-444 286.73,-456 286.73,-456 286.73,-462 280.73,-468 274.73,-468"/>
<text text-anchor="middle" x="259" y="-453" font-family="Arial" font-size="10.00">Weight</text>
<text text-anchor="middle" x="259" y="-441" font-family="Arial" font-size="10.00">Manager</text>
</g>
<!-- ContextualIntelligenceAgent&#45;&gt;WeightManager -->
<g id="edge31" class="edge">
<title>ContextualIntelligenceAgent-&gt;WeightManager</title>
<path fill="none" stroke="black" d="M142.71,-503.52C166.51,-492.77 196.87,-479.06 220.61,-468.34"/>
<polygon fill="black" stroke="black" points="221.95,-471.57 229.62,-464.27 219.07,-465.19 221.95,-471.57"/>
</g>
<!-- BaggingAgent&#45;&gt;WeightManager -->
<g id="edge32" class="edge">
<title>BaggingAgent-&gt;WeightManager</title>
<path fill="none" stroke="black" d="M221.36,-503.7C227.05,-495.73 233.93,-486.1 240.24,-477.26"/>
<polygon fill="black" stroke="black" points="242.94,-479.51 245.9,-469.34 237.24,-475.44 242.94,-479.51"/>
</g>
<!-- DeepEnsembleAgent&#45;&gt;WeightManager -->
<g id="edge33" class="edge">
<title>DeepEnsembleAgent-&gt;WeightManager</title>
<path fill="none" stroke="black" d="M296.64,-503.7C290.95,-495.73 284.07,-486.1 277.76,-477.26"/>
<polygon fill="black" stroke="black" points="280.76,-475.44 272.1,-469.34 275.06,-479.51 280.76,-475.44"/>
</g>
<!-- EvolutionEnsembleAgent&#45;&gt;WeightManager -->
<g id="edge34" class="edge">
<title>EvolutionEnsembleAgent-&gt;WeightManager</title>
<path fill="none" stroke="black" d="M379.79,-503.52C354.64,-492.58 322.42,-478.57 297.58,-467.77"/>
<polygon fill="black" stroke="black" points="299.04,-464.59 288.47,-463.81 296.25,-471.01 299.04,-464.59"/>
</g>
<!-- WeightedConsensus -->
<g id="node17" class="node">
<title>WeightedConsensus</title>
<path fill="lightgreen" stroke="black" d="M311.01,-396C311.01,-396 268.99,-396 268.99,-396 262.99,-396 256.99,-390 256.99,-384 256.99,-384 256.99,-372 256.99,-372 256.99,-366 262.99,-360 268.99,-360 268.99,-360 311.01,-360 311.01,-360 317.01,-360 323.01,-366 323.01,-372 323.01,-372 323.01,-384 323.01,-384 323.01,-390 317.01,-396 311.01,-396"/>
<text text-anchor="middle" x="290" y="-381" font-family="Arial" font-size="10.00">Weighted</text>
<text text-anchor="middle" x="290" y="-369" font-family="Arial" font-size="10.00">Consensus</text>
</g>
<!-- WeightManager&#45;&gt;WeightedConsensus -->
<g id="edge35" class="edge">
<title>WeightManager-&gt;WeightedConsensus</title>
<path fill="none" stroke="black" d="M266.66,-431.7C270.04,-424.07 274.09,-414.92 277.87,-406.4"/>
<polygon fill="black" stroke="black" points="280.96,-408.05 281.81,-397.49 274.56,-405.21 280.96,-408.05"/>
</g>
<!-- OptimizeAgent -->
<g id="node18" class="node">
<title>OptimizeAgent</title>
<path fill="lightcyan" stroke="black" d="M247.51,-324C247.51,-324 210.49,-324 210.49,-324 204.49,-324 198.49,-318 198.49,-312 198.49,-312 198.49,-300 198.49,-300 198.49,-294 204.49,-288 210.49,-288 210.49,-288 247.51,-288 247.51,-288 253.51,-288 259.51,-294 259.51,-300 259.51,-300 259.51,-312 259.51,-312 259.51,-318 253.51,-324 247.51,-324"/>
<text text-anchor="middle" x="229" y="-309" font-family="Arial" font-size="10.00">Weight</text>
<text text-anchor="middle" x="229" y="-297" font-family="Arial" font-size="10.00">Opt Agent</text>
</g>
<!-- WeightedConsensus&#45;&gt;OptimizeAgent -->
<g id="edge36" class="edge">
<title>WeightedConsensus-&gt;OptimizeAgent</title>
<path fill="none" stroke="black" d="M274.92,-359.7C267.83,-351.56 259.23,-341.69 251.4,-332.7"/>
<polygon fill="black" stroke="black" points="254.11,-330.49 244.9,-325.25 248.83,-335.08 254.11,-330.49"/>
</g>
<!-- ForensicIn -->
<g id="node19" class="node">
<title>ForensicIn</title>
<ellipse fill="lightblue" stroke="black" cx="438" cy="-306" rx="0.36" ry="0.36"/>
</g>
<!-- WeightedConsensus&#45;&gt;ForensicIn -->
<g id="edge38" class="edge">
<title>WeightedConsensus-&gt;ForensicIn</title>
<path fill="none" stroke="black" d="M323.21,-361.29C356.77,-345.42 406.6,-321.85 427.83,-311.81"/>
<polygon fill="black" stroke="black" points="429.04,-315.11 436.58,-307.67 426.04,-308.78 429.04,-315.11"/>
</g>
<!-- OptimizeAgent&#45;&gt;WeightManager -->
<g id="edge37" class="edge">
<title>OptimizeAgent-&gt;WeightManager</title>
<path fill="none" stroke="black" d="M232.61,-324.11C237.67,-348.03 246.91,-391.76 253,-420.6"/>
<polygon fill="black" stroke="black" points="249.52,-421.05 255.01,-430.11 256.37,-419.6 249.52,-421.05"/>
</g>
<!-- GradientProcessing -->
<g id="node20" class="node">
<title>GradientProcessing</title>
<path fill="lightpink" stroke="black" d="M329.73,-252C329.73,-252 288.27,-252 288.27,-252 282.27,-252 276.27,-246 276.27,-240 276.27,-240 276.27,-228 276.27,-228 276.27,-222 282.27,-216 288.27,-216 288.27,-216 329.73,-216 329.73,-216 335.73,-216 341.73,-222 341.73,-228 341.73,-228 341.73,-240 341.73,-240 341.73,-246 335.73,-252 329.73,-252"/>
<text text-anchor="middle" x="309" y="-237" font-family="Arial" font-size="10.00">Gradient</text>
<text text-anchor="middle" x="309" y="-225" font-family="Arial" font-size="10.00">Processing</text>
</g>
<!-- ForensicIn&#45;&gt;GradientProcessing -->
<g id="edge15" class="edge">
<title>ForensicIn-&gt;GradientProcessing</title>
<path fill="none" stroke="black" d="M437.91,-304.95C435.51,-303.65 387.72,-277.71 351.02,-257.8"/>
<polygon fill="black" stroke="black" points="352.8,-254.78 342.34,-253.09 349.46,-260.94 352.8,-254.78"/>
</g>
<!-- MinMaxProcessing -->
<g id="node21" class="node">
<title>MinMaxProcessing</title>
<path fill="lightpink" stroke="black" d="M412.73,-252C412.73,-252 371.27,-252 371.27,-252 365.27,-252 359.27,-246 359.27,-240 359.27,-240 359.27,-228 359.27,-228 359.27,-222 365.27,-216 371.27,-216 371.27,-216 412.73,-216 412.73,-216 418.73,-216 424.73,-222 424.73,-228 424.73,-228 424.73,-240 424.73,-240 424.73,-246 418.73,-252 412.73,-252"/>
<text text-anchor="middle" x="392" y="-237" font-family="Arial" font-size="10.00">MinMax</text>
<text text-anchor="middle" x="392" y="-225" font-family="Arial" font-size="10.00">Processing</text>
</g>
<!-- ForensicIn&#45;&gt;MinMaxProcessing -->
<g id="edge16" class="edge">
<title>ForensicIn-&gt;MinMaxProcessing</title>
<path fill="none" stroke="black" d="M437.97,-304.95C437.17,-303.74 422.24,-281.01 409.61,-261.79"/>
<polygon fill="black" stroke="black" points="412.55,-259.89 404.13,-253.46 406.7,-263.74 412.55,-259.89"/>
</g>
<!-- ELAPorcessing -->
<g id="node22" class="node">
<title>ELAPorcessing</title>
<path fill="lightpink" stroke="black" d="M515.18,-252C515.18,-252 454.82,-252 454.82,-252 448.82,-252 442.82,-246 442.82,-240 442.82,-240 442.82,-228 442.82,-228 442.82,-222 448.82,-216 454.82,-216 454.82,-216 515.18,-216 515.18,-216 521.18,-216 527.18,-222 527.18,-228 527.18,-228 527.18,-240 527.18,-240 527.18,-246 521.18,-252 515.18,-252"/>
<text text-anchor="middle" x="485" y="-231" font-family="Arial" font-size="10.00">ELAPorcessing</text>
</g>
<!-- ForensicIn&#45;&gt;ELAPorcessing -->
<g id="edge17" class="edge">
<title>ForensicIn-&gt;ELAPorcessing</title>
<path fill="none" stroke="black" d="M438.03,-304.95C438.85,-303.73 454.25,-280.8 467.19,-261.53"/>
<polygon fill="black" stroke="black" points="469.95,-263.7 472.61,-253.45 464.13,-259.8 469.95,-263.7"/>
</g>
<!-- BitPlaneExtraction -->
<g id="node23" class="node">
<title>BitPlaneExtraction</title>
<path fill="lightpink" stroke="black" d="M593.23,-252C593.23,-252 556.77,-252 556.77,-252 550.77,-252 544.77,-246 544.77,-240 544.77,-240 544.77,-228 544.77,-228 544.77,-222 550.77,-216 556.77,-216 556.77,-216 593.23,-216 593.23,-216 599.23,-216 605.23,-222 605.23,-228 605.23,-228 605.23,-240 605.23,-240 605.23,-246 599.23,-252 593.23,-252"/>
<text text-anchor="middle" x="575" y="-237" font-family="Arial" font-size="10.00">BitPlane</text>
<text text-anchor="middle" x="575" y="-225" font-family="Arial" font-size="10.00">Extraction</text>
</g>
<!-- ForensicIn&#45;&gt;BitPlaneExtraction -->
<g id="edge18" class="edge">
<title>ForensicIn-&gt;BitPlaneExtraction</title>
<path fill="none" stroke="black" d="M438.1,-304.95C440.72,-303.61 494.86,-275.95 534.26,-255.82"/>
<polygon fill="black" stroke="black" points="535.76,-258.98 543.07,-251.31 532.57,-252.75 535.76,-258.98"/>
</g>
<!-- WaveletBasedNoiseAnalysis -->
<g id="node24" class="node">
<title>WaveletBasedNoiseAnalysis</title>
<path fill="lightpink" stroke="black" d="M692.79,-252C692.79,-252 635.21,-252 635.21,-252 629.21,-252 623.21,-246 623.21,-240 623.21,-240 623.21,-228 623.21,-228 623.21,-222 629.21,-216 635.21,-216 635.21,-216 692.79,-216 692.79,-216 698.79,-216 704.79,-222 704.79,-228 704.79,-228 704.79,-240 704.79,-240 704.79,-246 698.79,-252 692.79,-252"/>
<text text-anchor="middle" x="664" y="-237" font-family="Arial" font-size="10.00">Wavelet</text>
<text text-anchor="middle" x="664" y="-225" font-family="Arial" font-size="10.00">Noise Analysis</text>
</g>
<!-- ForensicIn&#45;&gt;WaveletBasedNoiseAnalysis -->
<g id="edge19" class="edge">
<title>ForensicIn-&gt;WaveletBasedNoiseAnalysis</title>
<path fill="none" stroke="black" d="M438.07,-304.98C440.94,-304.16 529.49,-278.81 612.03,-252.58"/>
<polygon fill="black" stroke="black" points="612.93,-255.96 621.4,-249.58 610.8,-249.29 612.93,-255.96"/>
</g>
<!-- AnomalyAgent -->
<g id="node25" class="node">
<title>AnomalyAgent</title>
<path fill="lightcyan" stroke="black" d="M502.12,-180C502.12,-180 467.88,-180 467.88,-180 461.88,-180 455.88,-174 455.88,-168 455.88,-168 455.88,-156 455.88,-156 455.88,-150 461.88,-144 467.88,-144 467.88,-144 502.12,-144 502.12,-144 508.12,-144 514.12,-150 514.12,-156 514.12,-156 514.12,-168 514.12,-168 514.12,-174 508.12,-180 502.12,-180"/>
<text text-anchor="middle" x="485" y="-165" font-family="Arial" font-size="10.00">Anomaly</text>
<text text-anchor="middle" x="485" y="-153" font-family="Arial" font-size="10.00">Detection</text>
</g>
<!-- GradientProcessing&#45;&gt;AnomalyAgent -->
<g id="edge20" class="edge">
<title>GradientProcessing-&gt;AnomalyAgent</title>
<path fill="none" stroke="black" d="M342.1,-219.21C344.77,-218.12 347.43,-217.04 350,-216 381.81,-203.16 417.99,-188.98 444.89,-178.52"/>
<polygon fill="black" stroke="black" points="445.98,-181.85 454.03,-174.97 443.44,-175.33 445.98,-181.85"/>
</g>
<!-- MinMaxProcessing&#45;&gt;AnomalyAgent -->
<g id="edge21" class="edge">
<title>MinMaxProcessing-&gt;AnomalyAgent</title>
<path fill="none" stroke="black" d="M414.99,-215.7C426.39,-207.11 440.35,-196.61 452.8,-187.24"/>
<polygon fill="black" stroke="black" points="454.86,-190.07 460.74,-181.26 450.65,-184.47 454.86,-190.07"/>
</g>
<!-- ELAPorcessing&#45;&gt;AnomalyAgent -->
<g id="edge22" class="edge">
<title>ELAPorcessing-&gt;AnomalyAgent</title>
<path fill="none" stroke="black" d="M485,-215.7C485,-208.41 485,-199.73 485,-191.54"/>
<polygon fill="black" stroke="black" points="488.5,-191.62 485,-181.62 481.5,-191.62 488.5,-191.62"/>
</g>
<!-- BitPlaneExtraction&#45;&gt;AnomalyAgent -->
<g id="edge23" class="edge">
<title>BitPlaneExtraction-&gt;AnomalyAgent</title>
<path fill="none" stroke="black" d="M552.75,-215.7C541.72,-207.11 528.21,-196.61 516.16,-187.24"/>
<polygon fill="black" stroke="black" points="518.54,-184.65 508.5,-181.28 514.24,-190.18 518.54,-184.65"/>
</g>
<!-- WaveletBasedNoiseAnalysis&#45;&gt;AnomalyAgent -->
<g id="edge24" class="edge">
<title>WaveletBasedNoiseAnalysis-&gt;AnomalyAgent</title>
<path fill="none" stroke="black" d="M622.93,-216.94C593.55,-205.45 554.21,-190.07 525.06,-178.67"/>
<polygon fill="black" stroke="black" points="526.43,-175.44 515.84,-175.06 523.88,-181.96 526.43,-175.44"/>
</g>
<!-- DataLoggingAndOutput -->
<g id="node26" class="node">
<title>DataLoggingAndOutput</title>
<path fill="lightsalmon" stroke="black" d="M510.75,-108C510.75,-108 459.25,-108 459.25,-108 453.25,-108 447.25,-102 447.25,-96 447.25,-96 447.25,-84 447.25,-84 447.25,-78 453.25,-72 459.25,-72 459.25,-72 510.75,-72 510.75,-72 516.75,-72 522.75,-78 522.75,-84 522.75,-84 522.75,-96 522.75,-96 522.75,-102 516.75,-108 510.75,-108"/>
<text text-anchor="middle" x="485" y="-93" font-family="Arial" font-size="10.00">Data Logging</text>
<text text-anchor="middle" x="485" y="-81" font-family="Arial" font-size="10.00">Output</text>
</g>
<!-- AnomalyAgent&#45;&gt;DataLoggingAndOutput -->
<g id="edge39" class="edge">
<title>AnomalyAgent-&gt;DataLoggingAndOutput</title>
<path fill="none" stroke="black" d="M485,-143.7C485,-136.41 485,-127.73 485,-119.54"/>
<polygon fill="black" stroke="black" points="488.5,-119.62 485,-109.62 481.5,-119.62 488.5,-119.62"/>
</g>
<!-- ResultsDisplay -->
<g id="node27" class="node">
<title>ResultsDisplay</title>
<path fill="lightgreen" stroke="black" d="M500,-36C500,-36 470,-36 470,-36 464,-36 458,-30 458,-24 458,-24 458,-12 458,-12 458,-6 464,0 470,0 470,0 500,0 500,0 506,0 512,-6 512,-12 512,-12 512,-24 512,-24 512,-30 506,-36 500,-36"/>
<text text-anchor="middle" x="485" y="-15" font-family="Arial" font-size="10.00">Results</text>
</g>
<!-- DataLoggingAndOutput&#45;&gt;ResultsDisplay -->
<g id="edge40" class="edge">
<title>DataLoggingAndOutput-&gt;ResultsDisplay</title>
<path fill="none" stroke="black" d="M485,-71.7C485,-64.41 485,-55.73 485,-47.54"/>
<polygon fill="black" stroke="black" points="488.5,-47.62 485,-37.62 481.5,-47.62 488.5,-47.62"/>
</g>
</g>
</svg>