====== AI Vision ====== Voir aussi: * [[/informatique/ign_bdortho|IGN BdOrtho]] ===== llama.cpp ===== Il y a YOLO et tout plein d'outils dédiés à la détection dans des images. Là je teste avec des modèles multimodaux, sans entraînement spécifique. Le prompt demande s'il y a des panneaux solaire dans l'image fournie, avec sa bbox, et si "oui" de calculer les coordonnées géographiques de l'objet trouvé. Les 2 instructions permettent d'éliminer des faux positifs. Par exemple le modèle trouve un panneau solaire dans cette image, mais ne trouve pas les coordonnées géo, on peut donc l'évacuer des positifs. {{:informatique:ai_lm:ai_vision:champ-avec-rayures_18-131487-91478.jpeg?direct&140|champ avec rayures}} * [[https://github.com/ggml-org/llama.cpp/tree/master/tools/mtmd|Multimodal Support in llama.cpp]] Nécessite un modèle multimodal et un fichier ''mmproj'' approprié. ==== Tentatives ==== * ticket ouvert: https://github.com/ggml-org/llama.cpp/issues/19639 Avec **llama-mtmd-cli** et **gemma-3-4b-it** : * [[https://huggingface.co/ggml-org/gemma-3-4b-it-GGUF/resolve/main/gemma-3-4b-it-Q4_K_M.gguf|gemma-3-4b-it-Q4_K_M.gguf]] * [[https://huggingface.co/ggml-org/gemma-3-4b-it-GGUF/resolve/main/mmproj-model-f16.gguf|mmproj-model-f16.gguf]] # gemma-3-4b-it-UD-Q8_K_XL $ time ~/llama.cpp/build/bin/llama-mtmd-cli --log-timestamps \ -m ~/Data/gemma-3-4b-it-UD-Q8_K_XL.gguf \ --mmproj ~/Data/mmproj-model-f16.gguf \ --image ~/Data/screenshot_20260214-141126.png -p 'Vois tu des panneaux solaires sur cette image ?' main: loading model: ~/Data/gemma-3-4b-it-UD-Q8_K_XL.gguf WARN: This is an experimental CLI for testing multimodal capability. For normal use cases, please use the standard llama-cli encoding image slice... image slice encoded in 789 ms decoding image batch 1/1, n_tokens_batch = 256 sched_reserve: reserving ... sched_reserve: CUDA0 compute buffer size = 517.12 MiB sched_reserve: CUDA_Host compute buffer size = 269.02 MiB sched_reserve: graph nodes = 1369 sched_reserve: graph splits = 2 sched_reserve: reserve took 109.44 ms, sched copies = 1 image decoded (batch 1/1) in 201 ms sched_reserve: reserving ... sched_reserve: CUDA0 compute buffer size = 517.12 MiB sched_reserve: CUDA_Host compute buffer size = 269.02 MiB sched_reserve: graph nodes = 1369 sched_reserve: graph splits = 2 sched_reserve: reserve took 188.38 ms, sched copies = 1 Oui, je vois des panneaux solaires sur l'image. Ils sont disposés sur le toit du bâtiment principal au centre de l'image. llama_perf_context_print: load time = 2846.21 ms llama_perf_context_print: prompt eval time = 852.69 ms / 278 tokens ( 3.07 ms per token, 326.03 tokens per second) llama_perf_context_print: eval time = 542.06 ms / 30 runs ( 18.07 ms per token, 55.34 tokens per second) llama_perf_context_print: total time = 2344.07 ms / 308 tokens llama_perf_context_print: graphs reused = 29 real 0m8,165s user 0m4,880s sys 0m3,269s # gemma-3-4b-it-Q4_K_M.gguf Oui, je vois des panneaux solaires sur l'image. Ils sont installés sur le toit du bâtiment principal, qui est une grande structure rectangulaire. llama_perf_context_print: load time = 1614.35 ms llama_perf_context_print: prompt eval time = 856.85 ms / 278 tokens ( 3.08 ms per token, 324.45 tokens per second) llama_perf_context_print: eval time = 359.10 ms / 33 runs ( 10.88 ms per token, 91.90 tokens per second) llama_perf_context_print: total time = 2049.84 ms / 311 tokens llama_perf_context_print: graphs reused = 32 real 0m6,531s user 0m3,426s sys 0m3,041s ===== Yolo ===== * https://docs.ultralytics.com/models/yolo26/ Comparaison de perf avec le modèle ''yolo26x.pt'' sur 1521 tuiles de 640 pixels: ^ ^ real ^ user ^ sys ^ | CUDA RTX 3060 | 0m25,625s | 0m22,140s | 0m3,480s | | 13th i7-1360P | 6m3,403s | 48m3,806s | 0m2,906s | ==== Entraînement ==== Construction du jeu de données d’entraînement avec [[https://labelstud.io/|Label Studio]]. Export au format "Yolo + images". Attention, il faut ensuite répartir les images et labels entre "train" et "val". uv run yolo detect train \ data=dataset_s4-project-1-at-2026-03-07-15-33-9190b7c5.yml \ model=~/Data/AI_ModelsVision/yolo26l.pt \ epochs=130 lr0=0.0005 cos_lr=True augment=True optimizer=AdamW ==== panneaux solaires photovoltaïques ==== Spécialisation à la détection de panneaux solaires photovoltaïques sur les tuiles de [[/informatique/ign_bdortho|IGN BdOrtho]]. Essentiellement les grandes installation comme la bâtis agricoles et toitures d'écoles et bâtiment industriels. Les petits panneaux sur toitures habitation résidentielles sont difficiles à différencier et peuvent être pour chauffer l'eau et pas pour générer de l'électricité. Il y a encore quelques faux positifs, mais à la marge. 😉 Le dataset avec 286 images pour "train" et 50 pour "val" : * {{ :informatique:ai_lm:ai_vision:yolo:solar-panels_project-s4_2026-03-07.zip |}} * https://huggingface.co/datasets/Cyrille37/solar-panels-IGN-bdortho Le modèle résultant à partir de **Yolo26L** : * {{ :informatique:ai_lm:ai_vision:yolo:yolo26l_solar_panel-s4.pt.zip |}} * https://huggingface.co/Cyrille37/solar-panels-IGN-bdortho === Détections par départements === Les rectangles ont 2 propriétés: la "confidence" de la détection et "file" pour le nom de la tuile. * 03 Allier {{ :informatique:ai_lm:ai_vision:yolo:bdortho_tuiles-640_03.geojson.zip |}} * [[https://maproulette.org/browse/challenges/54541|Challenge maproulette]] * 05 Hautes-Alpes {{ :informatique:ai_lm:ai_vision:yolo:bdortho_tuiles-640_05.geojson.zip |}} * le modèle hallucine en haute-montagne, mais pas suffisamment de faux-positifs pour justifier un nouvel entraînement * [[https://maproulette.org/browse/challenges/54542|Challenge maproulette]] * 09 Ariège {{ :informatique:ai_lm:ai_vision:yolo:bdortho_tuiles-640_09.geojson.zip |}} * [[https://maproulette.org/browse/challenges/54545|Challenge maproulette]] * 10 Aube {{ :informatique:ai_lm:ai_vision:yolo:bdortho_tuiles-640_10.geojson.zip |}} * [[https://maproulette.org/browse/challenges/54550|Challenge maproulette]] * 22 Côtes-d'Armor {{ :informatique:ai_lm:ai_vision:yolo:bdortho_tuiles-640_22.geojson.zip |}} * [[https://maproulette.org/browse/challenges/54551|Challenge maproulette]] * 32 Gers {{ :informatique:ai_lm:ai_vision:yolo:bdortho_tuiles-640_32.geojson.zip |}} * [[https://maproulette.org/browse/challenges/54538|Challenge maproulette]] * 37 Indre-et-Loire * 42 Loire {{ :informatique:ai_lm:ai_vision:yolo:solar-panels_42.geojson.zip |}} * [[https://maproulette.org/browse/challenges/54565|Challenge maproulette]] * 43 Haute-Loire {{ :informatique:ai_lm:ai_vision:yolo:solar-panels_43.geojson.zip |}} * [[https://maproulette.org/browse/challenges/54585|Challenge maproulette]] * 44 Loire-Atlantique {{ :informatique:ai_lm:ai_vision:yolo:bdortho_tuiles-640_44.geojson.zip |}} * [[https://maproulette.org/browse/challenges/54594|Challenge maproulette]] * 46 Lot {{ :informatique:ai_lm:ai_vision:yolo:bdortho_tuiles-640_46.geojson.zip |}} * [[https://maproulette.org/browse/challenges/54595|Challenge maproulette]] * 48 Lozère {{ :informatique:ai_lm:ai_vision:yolo:bdortho_tuiles-640_48.geojson.zip |}} * [[https://maproulette.org/browse/challenges/54596|Challenge maproulette]] * 49 Maine-et-Loire {{ :informatique:ai_lm:ai_vision:yolo:solar-panels_49.geojson.zip |}} * [[https://maproulette.org/browse/challenges/54624|Challenge maproulette]] * 50 Manche {{ :informatique:ai_lm:ai_vision:yolo:solar-panels_50.geojson.zip |}} * [[https://maproulette.org/browse/challenges/54710|Challenge maproulette]] * 59 Nord {{:informatique:ai_lm:ai_vision:yolo:bdortho_tuiles-640_59.geojson.zip|}} * [[https://maproulette.org/browse/challenges/54555|Challenge maproulette]] * 63 Puy-de-Dôme {{ :informatique:ai_lm:ai_vision:yolo:solar-panels_63.geojson.zip |}} * [[https://maproulette.org/browse/challenges/54626|Challenge maproulette]] * 65 Hautes-Pyrénées {{ :informatique:ai_lm:ai_vision:yolo:solar-panels_65.geojson.zip |}} * [[https://maproulette.org/browse/challenges/54632|Challenge maproulette]] * 82 Tarn-et-Garonne {{ :informatique:ai_lm:ai_vision:yolo:solar-panels_82.geojson.zip |}} * [[https://maproulette.org/browse/challenges/54636|Challenge maproulette]]