{"id":946,"date":"2024-04-05T15:48:02","date_gmt":"2024-04-05T14:48:02","guid":{"rendered":"https:\/\/ai.reboot-conseil.com\/?p=946"},"modified":"2024-04-05T15:59:53","modified_gmt":"2024-04-05T14:59:53","slug":"dataset-synthetique-grace-au-rendu-3d-dans-blender","status":"publish","type":"post","link":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/","title":{"rendered":"Dataset synth\u00e9tique gr\u00e2ce au rendu 3D dans Blender"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Cr\u00e9er un dataset sp\u00e9cifique \u00e0 un besoin peut parfois s&rsquo;av\u00e9rer difficile en plus d&rsquo;\u00eatre co\u00fbteux en temps. Sp\u00e9cifiquement pour les dataset d&rsquo;images, on peut \u00eatre contraint par le droit d&rsquo;auteur et le droit \u00e0 l&rsquo;image, ne pas avoir le mat\u00e9riel pour prendre des photos, ne pas avoir le temps de labelliser le dataset \u00e0 la main.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On peut alors se tourner vers la donn\u00e9e synth\u00e9tique, g\u00e9n\u00e9r\u00e9e \u00e0 partir de rien, et labellis\u00e9e automatiquement. Aujourd&rsquo;hui je vais vous pr\u00e9senter comment j&rsquo;ai g\u00e9n\u00e9r\u00e9 un dataset synth\u00e9tique en utilisant <a href=\"https:\/\/www.blender.org\/\">Blender<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Blender est un logiciel libre de mod\u00e9lisation, animation et rendu d&rsquo;images 3D (entre autres).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;objectif \u00e9tait de cr\u00e9er un dataset d&rsquo;entra\u00eenement pour la reconnaissance d&rsquo;objets, sp\u00e9cifiquement pour la reconnaissance de pi\u00e9tons et de v\u00e9hicules transpalettes.<br>Cet article d\u00e9taille l&rsquo;entra\u00eenement d&rsquo;un r\u00e9seau de neurone avec ce dataset : <a href=\"https:\/\/ai.reboot-conseil.com\/index.php\/2024\/04\/05\/fine-tuning-pour-la-reconnaissance-de-pietons-et-vehicules-dans-un-entrepot\/\" data-type=\"link\" data-id=\"https:\/\/ai.reboot-conseil.com\/index.php\/2024\/04\/05\/fine-tuning-pour-la-reconnaissance-de-pietons-et-vehicules-dans-un-entrepot\/\">Fine tuning pour la reconnaissance de pi\u00e9tons et v\u00e9hicules dans un entrep\u00f4t<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"289\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027-1024x289.png\" alt=\"\" class=\"wp-image-947\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027-1024x289.png 1024w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027-300x85.png 300w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027-768x217.png 768w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027.png 1340w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Extrait du dataset cr\u00e9\u00e9, \u00e0 gauche une image d&rsquo;entr\u00e9e et \u00e0 droite le masque qui d\u00e9crit les objets \u00e0 reconnaitre<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Pour reproduire ce r\u00e9sultat, vous aurez besoin des connaissances de base de Blender, et de pouvoir lancer un script python.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mod\u00e9lisation 3D<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"670\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/viewport-1024x670.png\" alt=\"\" class=\"wp-image-956\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/viewport-1024x670.png 1024w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/viewport-300x196.png 300w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/viewport-768x502.png 768w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/viewport.png 1254w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;ai commenc\u00e9 par la mod\u00e9lisation en 3D d&rsquo;un entrep\u00f4t. En mod\u00e9lisant les objets 3D les plus simples, et en utilisant des assets libre de droit pour les plus compliqu\u00e9s. J&rsquo;ai notamment utilis\u00e9 :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.mixamo.com\/#\/\">Mixamo<\/a> pour les personnages et leurs animations<\/li>\n\n\n\n<li><a href=\"https:\/\/polyhaven.com\/\">Poly Haven<\/a> pour les HDRI et textures<\/li>\n\n\n\n<li><a href=\"https:\/\/sketchfab.com\/3d-models\/warehouse-forklift-gameready-94e21059f00c4e989c6403ada034516e\">Sketchfab<\/a> pour un mod\u00e8le de transpalette<\/li>\n\n\n\n<li><a href=\"https:\/\/www.turbosquid.com\/3d-models\/wood-pallet-3d-model-1743380\">TurboSquid<\/a> pour un mod\u00e8le de palette<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Animation<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;ai ensuite anim\u00e9 la cam\u00e9ra, un personnage et un transpalette pour que le dataset final contienne des angles de vue vari\u00e9s des objets qu&rsquo;il faudra reconna\u00eetre.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour cela, j&rsquo;ai d&rsquo;abord donn\u00e9 une animation simple aux objets, puis dans l&rsquo;\u00e9diteur de courbes, j&rsquo;ai appliqu\u00e9 le modificateur de bruit \u00e0 la position X et Y.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"309\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blennder_graph_editor-1024x309.png\" alt=\"\" class=\"wp-image-953\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blennder_graph_editor-1024x309.png 1024w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blennder_graph_editor-300x91.png 300w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blennder_graph_editor-768x232.png 768w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blennder_graph_editor-1536x464.png 1536w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blennder_graph_editor.png 1585w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><code>(1) Editeur de graph; (2) Ajouter un modificateur; (3) Bruit<\/code><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Avec ce modificateur, il y a certaines <em>frames<\/em> o\u00f9 les objets sortent de l&rsquo;\u00e9cran ou alors sont superpos\u00e9s. Il m&rsquo;a fallu <em>bake<\/em> l&rsquo;animation pour pouvoir \u00e9diter uniquement les <em>frames<\/em> probl\u00e9matiques.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"669\" height=\"903\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_bake_animation.jpg\" alt=\"\" class=\"wp-image-949\" style=\"width:418px;height:auto\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_bake_animation.jpg 669w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_bake_animation-222x300.jpg 222w\" sizes=\"(max-width: 669px) 100vw, 669px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Rendu des images<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c0 ce point, j&rsquo;ai pu faire le rendu de mes images:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"672\" height=\"378\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/warehouse_blender_animation.gif\" alt=\"\" class=\"wp-image-957\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Je me suis ensuite attel\u00e9 au rendu des masks.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Compositing des masks<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Un mask est une image en noir et blanc dont la valeur d&rsquo;un pixel repr\u00e9sente un objet \u00e0 reconna\u00eetre. On va donc cr\u00e9er des images o\u00f9 le background aura la valeur 0, un transpalette la valeur 1 et un pi\u00e9ton la valeur 2.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour cela il faut changer les param\u00e8tres de rendu suivants:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Pouvoir diff\u00e9rencier les objets par leurs mat\u00e9riaux<\/th><th>Retirer les filtres de couleurs artistiques de Blender<\/th><th>Passer le mode de rende en Noir et Blanc<\/th><\/tr><\/thead><tbody><tr><td><img loading=\"lazy\" decoding=\"async\" width=\"488\" height=\"1108\" class=\"wp-image-951\" style=\"width: 488px;\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_material_index.png\" alt=\"\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_material_index.png 330w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_material_index-132x300.png 132w\" sizes=\"(max-width: 488px) 100vw, 488px\" \/><\/td><td><img loading=\"lazy\" decoding=\"async\" width=\"444\" height=\"1005\" class=\"wp-image-950\" style=\"width: 444px;\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_color_management.png\" alt=\"\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_color_management.png 334w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_color_management-133x300.png 133w\" sizes=\"(max-width: 444px) 100vw, 444px\" \/><\/td><td><img loading=\"lazy\" decoding=\"async\" width=\"520\" height=\"1270\" class=\"wp-image-952\" style=\"width: 520px;\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_output.png\" alt=\"\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_output.png 342w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_output-123x300.png 123w\" sizes=\"(max-width: 520px) 100vw, 520px\" \/><\/td><\/tr><tr><td>View Layer &gt;<br>Passes &gt;<br>Data &gt;<br><strong>Material Index<\/strong><\/td><td>Render &gt;<br>Color Management &gt;<br>View Transform = Standard<br>Look = None<br>Sequencer = Non-Colo<strong>r<\/strong><\/td><td>Output &gt;<br>Output &gt;<br><strong>Color = BW<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;ai activ\u00e9 la passe <code>Material Index<\/code> pour diff\u00e9rencier mes objets gr\u00e2ce \u00e0 leurs mat\u00e9riaux. Il faut donc donner un index diff\u00e9rent aux mat\u00e9riaux de mes objets \u00e0 diff\u00e9rencier (0 pour le background, 1 pour le transpalette et 2 pour le pi\u00e9ton)<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"767\" height=\"636\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_material_index-1.png\" alt=\"\" class=\"wp-image-958\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_material_index-1.png 767w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_material_index-1-300x249.png 300w\" sizes=\"(max-width: 767px) 100vw, 767px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><br>En s\u00e9lectionnant un objet : Material &gt; Settings &gt; <strong>Pass Index<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Maintenant que les index de mat\u00e9riaux sont configur\u00e9s, on peut les utiliser dans le graph de composition.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"627\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_compositing_nodes-1024x627.png\" alt=\"\" class=\"wp-image-959\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_compositing_nodes-1024x627.png 1024w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_compositing_nodes-300x184.png 300w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_compositing_nodes-768x470.png 768w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Blender_compositing_nodes.png 1215w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>(1), j&rsquo;utilise la node <em>ID Mask<\/em> pour avoir des mask qui s\u00e9parent les index de mat\u00e9riaux.<\/li>\n\n\n\n<li>(2), je combine ces masks et leur donne les valeurs 0, 0.5 et 1. Cela me permet de visualiser le masks avec des couleurs visibles.<\/li>\n\n\n\n<li>(3), je map les valeurs 0, 0.5 et 1 aux valeurs 0, 1\/255 et 2\/255 gr\u00e2ce \u00e0 une node <em>Color Ramp<\/em> en mode continue.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Blender code les valeurs de couleurs rouge verte et bleu en valeurs flottantes entre 0 et 1, mais l&rsquo;image que l&rsquo;on veut cr\u00e9\u00e9 sera cod\u00e9e en noir et blanc en valeurs enti\u00e8re entre 0 et 255. C&rsquo;est pour \u00e7a que dans la node <em>Color Ramp<\/em>, je divise les valeurs voulues par 255.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Malheureusement, quand j&rsquo;inspecte les masks rendus, je vois que le background est repr\u00e9sent\u00e9s par des pixels de couleur 0 et 1; le transpalette par des pixels de couleur 12, 13, 14 et le pi\u00e9ton par des pixels de couleur 21, 22, 23.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"273\" height=\"421\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Daher_mask_bad.png\" alt=\"\" class=\"wp-image-960\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Daher_mask_bad.png 273w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/Daher_mask_bad-195x300.png 195w\" sizes=\"(max-width: 273px) 100vw, 273px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Je n&rsquo;ai pas trouv\u00e9 de solution \u00e0 ce probl\u00e8me, j&rsquo;ai donc trait\u00e9 les masks avec un script python \u2b07<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Traitement des masks<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><code>mask_processor.py<\/code><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># imports\nfrom PIL import Image\nimport os\nimport argparse\n\n\n#### Parse arguments\nparser = argparse.ArgumentParser(\n                    prog='ProgramName',\n                    description='What the program does',\n                    epilog='Text at the bottom of help')\nparser.add_argument('--source', type=str, default=\"\", help='Source folder')\nparser.add_argument('--output', type=str, default=\"processed_masks\", help='Output folder')\nargs = parser.parse_args()\nsource_folder = args.source\noutput_folder = args.output\nif not os.path.exists(source_folder) or len(os.listdir(source_folder)) == 0:\n    print('Given source folder does not exist or is empty')\n    exit\nif not os.path.exists(output_folder):\n    os.makedirs(output_folder)\n    print(f'Created output folder {output_folder}')\n\n\n#### Count the occurence of color in the input imagges\ncolor_count = {i: 0 for i in range(256)}\nfor filename in os.listdir(source_folder):\n    img = Image.open(os.path.join(source_folder, filename))\n    px = img.load()\n    for x in range(img.size&#91;0]):\n        for y in range(img.size&#91;1]):\n            color_count&#91;px&#91;x, y]] += 1\n\n\n#### Use the color count to identify the ranges of clustered colors\nranges = &#91;]\ncurrent_range = &#91;]\nfor i in range(256):\n    if color_count&#91;i] &gt; 0:\n        current_range.append(i)\n    elif len(current_range) &gt; 0:\n        ranges.append(current_range)\n        current_range = &#91;]\n\n\n#### Process the images to map the fuzy values to distinct values\nfor filename in os.listdir(source_folder):\n    img = Image.open(os.path.join(source_folder, filename))\n    px = img.load()\n    for x in range(img.size&#91;0]):\n        for y in range(img.size&#91;1]):\n            for color_range in ranges:\n                if px&#91;x, y] in color_range:\n                    px&#91;x, y] = ranges.index(color_range)\n                    break\n\n    img.save(os.path.join(output_folder, filename))\n    print(f\"Processed {filename}\")\n\n\n#### Display ranges info\nfor color_range in ranges:\n    print(f'colors {color_range} have been mapped to {ranges.index(color_range)}')<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Vous pouvez utiliser ce script avec la commande suivante:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>python mask_processor.py --source &#91;chemin vers le dossier contenant vos masks]<\/code><\/pre>\n\n\n\n<h1 class=\"wp-block-heading\">Conclusion<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">J&rsquo;ai cr\u00e9\u00e9 dans Blender un dataset synth\u00e9tique d&rsquo;images pour l&rsquo;entra\u00eenement d&rsquo;un r\u00e9seau de neurone \u00e0 la reconnaissance d&rsquo;objets sp\u00e9cifiques.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"289\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027-1024x289.png\" alt=\"\" class=\"wp-image-947\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027-1024x289.png 1024w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027-300x85.png 300w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027-768x217.png 768w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027.png 1340w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Vous pouvez retrouver les d\u00e9tails de l&rsquo;entra\u00eenement dans cet article : <a href=\"https:\/\/ai.reboot-conseil.com\/index.php\/2024\/04\/05\/fine-tuning-pour-la-reconnaissance-de-pietons-et-vehicules-dans-un-entrepot\/\" data-type=\"link\" data-id=\"https:\/\/ai.reboot-conseil.com\/index.php\/2024\/04\/05\/fine-tuning-pour-la-reconnaissance-de-pietons-et-vehicules-dans-un-entrepot\/\">Fine tuning pour la reconnaissance de pi\u00e9tons et v\u00e9hicules dans un entrep\u00f4t<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cr\u00e9er un dataset sp\u00e9cifique \u00e0 un besoin peut parfois s&rsquo;av\u00e9rer difficile en plus d&rsquo;\u00eatre co\u00fbteux en temps. Sp\u00e9cifiquement pour les dataset d&rsquo;images, on peut \u00eatre contraint par le droit d&rsquo;auteur et le droit \u00e0 l&rsquo;image, ne pas avoir le mat\u00e9riel pour prendre des photos, ne pas avoir le temps de labelliser le dataset \u00e0 la main. On peut alors se tourner vers la donn\u00e9e synth\u00e9tique, g\u00e9n\u00e9r\u00e9e \u00e0 partir de rien, et labellis\u00e9e automatiquement. Aujourd&rsquo;hui je vais vous pr\u00e9senter comment j&rsquo;ai g\u00e9n\u00e9r\u00e9 un dataset synth\u00e9tique en utilisant Blender. Blender est un logiciel libre de mod\u00e9lisation, animation et rendu d&rsquo;images 3D (entre autres). L&rsquo;objectif \u00e9tait de cr\u00e9er un dataset d&rsquo;entra\u00eenement pour la reconnaissance d&rsquo;objets, sp\u00e9cifiquement pour la reconnaissance de pi\u00e9tons et de v\u00e9hicules transpalettes.Cet article d\u00e9taille l&rsquo;entra\u00eenement d&rsquo;un r\u00e9seau de neurone avec ce dataset : Fine tuning pour la reconnaissance de pi\u00e9tons et v\u00e9hicules dans un entrep\u00f4t Pour reproduire ce r\u00e9sultat, vous aurez besoin des connaissances de base de Blender, et de pouvoir lancer un script python. Mod\u00e9lisation 3D J&rsquo;ai commenc\u00e9 par la mod\u00e9lisation en 3D d&rsquo;un entrep\u00f4t. En mod\u00e9lisant les objets 3D les plus simples, et en utilisant des assets libre de droit pour les plus compliqu\u00e9s. J&rsquo;ai notamment utilis\u00e9 : Animation J&rsquo;ai ensuite anim\u00e9 la cam\u00e9ra, un personnage et un transpalette pour que le dataset final contienne des angles de vue vari\u00e9s des objets qu&rsquo;il faudra reconna\u00eetre. Pour cela, j&rsquo;ai d&rsquo;abord donn\u00e9 une animation simple aux objets, puis dans l&rsquo;\u00e9diteur de courbes, j&rsquo;ai appliqu\u00e9 le modificateur de bruit \u00e0 la position X et Y. Avec ce modificateur, il y a certaines frames o\u00f9 les objets sortent de l&rsquo;\u00e9cran ou alors sont superpos\u00e9s. Il m&rsquo;a fallu bake l&rsquo;animation pour pouvoir \u00e9diter uniquement les frames probl\u00e9matiques. Rendu des images \u00c0 ce point, j&rsquo;ai pu faire le rendu de mes images: Je me suis ensuite attel\u00e9 au rendu des masks. Compositing des masks Un mask est une image en noir et blanc dont la valeur d&rsquo;un pixel repr\u00e9sente un objet \u00e0 reconna\u00eetre. On va donc cr\u00e9er des images o\u00f9 le background aura la valeur 0, un transpalette la valeur 1 et un pi\u00e9ton la valeur 2. Pour cela il faut changer les param\u00e8tres de rendu suivants: Pouvoir diff\u00e9rencier les objets par leurs mat\u00e9riaux Retirer les filtres de couleurs artistiques de Blender Passer le mode de rende en Noir et Blanc View Layer &gt;Passes &gt;Data &gt;Material Index Render &gt;Color Management &gt;View Transform = StandardLook = NoneSequencer = Non-Color Output &gt;Output &gt;Color = BW J&rsquo;ai activ\u00e9 la passe Material Index pour diff\u00e9rencier mes objets gr\u00e2ce \u00e0 leurs mat\u00e9riaux. Il faut donc donner un index diff\u00e9rent aux mat\u00e9riaux de mes objets \u00e0 diff\u00e9rencier (0 pour le background, 1 pour le transpalette et 2 pour le pi\u00e9ton) En s\u00e9lectionnant un objet : Material &gt; Settings &gt; Pass Index Maintenant que les index de mat\u00e9riaux sont configur\u00e9s, on peut les utiliser dans le graph de composition. Blender code les valeurs de couleurs rouge verte et bleu en valeurs flottantes entre 0 et 1, mais l&rsquo;image que l&rsquo;on veut cr\u00e9\u00e9 sera cod\u00e9e en noir et blanc en valeurs enti\u00e8re entre 0 et 255. C&rsquo;est pour \u00e7a que dans la node Color Ramp, je divise les valeurs voulues par 255. Malheureusement, quand j&rsquo;inspecte les masks rendus, je vois que le background est repr\u00e9sent\u00e9s par des pixels de couleur 0 et 1; le transpalette par des pixels de couleur 12, 13, 14 et le pi\u00e9ton par des pixels de couleur 21, 22, 23. Je n&rsquo;ai pas trouv\u00e9 de solution \u00e0 ce probl\u00e8me, j&rsquo;ai donc trait\u00e9 les masks avec un script python \u2b07 Traitement des masks mask_processor.py Vous pouvez utiliser ce script avec la commande suivante: Conclusion J&rsquo;ai cr\u00e9\u00e9 dans Blender un dataset synth\u00e9tique d&rsquo;images pour l&rsquo;entra\u00eenement d&rsquo;un r\u00e9seau de neurone \u00e0 la reconnaissance d&rsquo;objets sp\u00e9cifiques. Vous pouvez retrouver les d\u00e9tails de l&rsquo;entra\u00eenement dans cet article : Fine tuning pour la reconnaissance de pi\u00e9tons et v\u00e9hicules dans un entrep\u00f4t<\/p>\n","protected":false},"author":10,"featured_media":947,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,1],"tags":[77,36,73,78,76,75,7,35,74],"class_list":["post-946","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-generation-dimages","category-uncategorized","tag-3d-render","tag-artificial-intelligence","tag-blender","tag-create-dataset","tag-dataset","tag-donnee-synthetique","tag-ia","tag-reboot-conseil","tag-synthetic-data"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Dataset synth\u00e9tique gr\u00e2ce au rendu 3D dans Blender -<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dataset synth\u00e9tique gr\u00e2ce au rendu 3D dans Blender -\" \/>\n<meta property=\"og:description\" content=\"Cr\u00e9er un dataset sp\u00e9cifique \u00e0 un besoin peut parfois s&rsquo;av\u00e9rer difficile en plus d&rsquo;\u00eatre co\u00fbteux en temps. Sp\u00e9cifiquement pour les dataset d&rsquo;images, on peut \u00eatre contraint par le droit d&rsquo;auteur et le droit \u00e0 l&rsquo;image, ne pas avoir le mat\u00e9riel pour prendre des photos, ne pas avoir le temps de labelliser le dataset \u00e0 la main. On peut alors se tourner vers la donn\u00e9e synth\u00e9tique, g\u00e9n\u00e9r\u00e9e \u00e0 partir de rien, et labellis\u00e9e automatiquement. Aujourd&rsquo;hui je vais vous pr\u00e9senter comment j&rsquo;ai g\u00e9n\u00e9r\u00e9 un dataset synth\u00e9tique en utilisant Blender. Blender est un logiciel libre de mod\u00e9lisation, animation et rendu d&rsquo;images 3D (entre autres). L&rsquo;objectif \u00e9tait de cr\u00e9er un dataset d&rsquo;entra\u00eenement pour la reconnaissance d&rsquo;objets, sp\u00e9cifiquement pour la reconnaissance de pi\u00e9tons et de v\u00e9hicules transpalettes.Cet article d\u00e9taille l&rsquo;entra\u00eenement d&rsquo;un r\u00e9seau de neurone avec ce dataset : Fine tuning pour la reconnaissance de pi\u00e9tons et v\u00e9hicules dans un entrep\u00f4t Pour reproduire ce r\u00e9sultat, vous aurez besoin des connaissances de base de Blender, et de pouvoir lancer un script python. Mod\u00e9lisation 3D J&rsquo;ai commenc\u00e9 par la mod\u00e9lisation en 3D d&rsquo;un entrep\u00f4t. En mod\u00e9lisant les objets 3D les plus simples, et en utilisant des assets libre de droit pour les plus compliqu\u00e9s. J&rsquo;ai notamment utilis\u00e9 : Animation J&rsquo;ai ensuite anim\u00e9 la cam\u00e9ra, un personnage et un transpalette pour que le dataset final contienne des angles de vue vari\u00e9s des objets qu&rsquo;il faudra reconna\u00eetre. Pour cela, j&rsquo;ai d&rsquo;abord donn\u00e9 une animation simple aux objets, puis dans l&rsquo;\u00e9diteur de courbes, j&rsquo;ai appliqu\u00e9 le modificateur de bruit \u00e0 la position X et Y. Avec ce modificateur, il y a certaines frames o\u00f9 les objets sortent de l&rsquo;\u00e9cran ou alors sont superpos\u00e9s. Il m&rsquo;a fallu bake l&rsquo;animation pour pouvoir \u00e9diter uniquement les frames probl\u00e9matiques. Rendu des images \u00c0 ce point, j&rsquo;ai pu faire le rendu de mes images: Je me suis ensuite attel\u00e9 au rendu des masks. Compositing des masks Un mask est une image en noir et blanc dont la valeur d&rsquo;un pixel repr\u00e9sente un objet \u00e0 reconna\u00eetre. On va donc cr\u00e9er des images o\u00f9 le background aura la valeur 0, un transpalette la valeur 1 et un pi\u00e9ton la valeur 2. Pour cela il faut changer les param\u00e8tres de rendu suivants: Pouvoir diff\u00e9rencier les objets par leurs mat\u00e9riaux Retirer les filtres de couleurs artistiques de Blender Passer le mode de rende en Noir et Blanc View Layer &gt;Passes &gt;Data &gt;Material Index Render &gt;Color Management &gt;View Transform = StandardLook = NoneSequencer = Non-Color Output &gt;Output &gt;Color = BW J&rsquo;ai activ\u00e9 la passe Material Index pour diff\u00e9rencier mes objets gr\u00e2ce \u00e0 leurs mat\u00e9riaux. Il faut donc donner un index diff\u00e9rent aux mat\u00e9riaux de mes objets \u00e0 diff\u00e9rencier (0 pour le background, 1 pour le transpalette et 2 pour le pi\u00e9ton) En s\u00e9lectionnant un objet : Material &gt; Settings &gt; Pass Index Maintenant que les index de mat\u00e9riaux sont configur\u00e9s, on peut les utiliser dans le graph de composition. Blender code les valeurs de couleurs rouge verte et bleu en valeurs flottantes entre 0 et 1, mais l&rsquo;image que l&rsquo;on veut cr\u00e9\u00e9 sera cod\u00e9e en noir et blanc en valeurs enti\u00e8re entre 0 et 255. C&rsquo;est pour \u00e7a que dans la node Color Ramp, je divise les valeurs voulues par 255. Malheureusement, quand j&rsquo;inspecte les masks rendus, je vois que le background est repr\u00e9sent\u00e9s par des pixels de couleur 0 et 1; le transpalette par des pixels de couleur 12, 13, 14 et le pi\u00e9ton par des pixels de couleur 21, 22, 23. Je n&rsquo;ai pas trouv\u00e9 de solution \u00e0 ce probl\u00e8me, j&rsquo;ai donc trait\u00e9 les masks avec un script python \u2b07 Traitement des masks mask_processor.py Vous pouvez utiliser ce script avec la commande suivante: Conclusion J&rsquo;ai cr\u00e9\u00e9 dans Blender un dataset synth\u00e9tique d&rsquo;images pour l&rsquo;entra\u00eenement d&rsquo;un r\u00e9seau de neurone \u00e0 la reconnaissance d&rsquo;objets sp\u00e9cifiques. Vous pouvez retrouver les d\u00e9tails de l&rsquo;entra\u00eenement dans cet article : Fine tuning pour la reconnaissance de pi\u00e9tons et v\u00e9hicules dans un entrep\u00f4t\" \/>\n<meta property=\"og:url\" content=\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-04-05T14:48:02+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-05T14:59:53+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1340\" \/>\n\t<meta property=\"og:image:height\" content=\"378\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Oscar DEWASMES\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Oscar DEWASMES\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/\"},\"author\":{\"name\":\"Oscar DEWASMES\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/#\/schema\/person\/7e9a247d91c32bab30436624bdf6e9c1\"},\"headline\":\"Dataset synth\u00e9tique gr\u00e2ce au rendu 3D dans Blender\",\"datePublished\":\"2024-04-05T14:48:02+00:00\",\"dateModified\":\"2024-04-05T14:59:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/\"},\"wordCount\":838,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027.png\",\"keywords\":[\"3D render\",\"Artificial Intelligence\",\"Blender\",\"Create Dataset\",\"Dataset\",\"Donn\u00e9e Synth\u00e9tique\",\"IA\",\"Reboot Conseil\",\"Synthetic Data\"],\"articleSection\":[\"G\u00e9n\u00e9ration d'images\",\"Uncategorized\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/\",\"url\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/\",\"name\":\"Dataset synth\u00e9tique gr\u00e2ce au rendu 3D dans Blender -\",\"isPartOf\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027.png\",\"datePublished\":\"2024-04-05T14:48:02+00:00\",\"dateModified\":\"2024-04-05T14:59:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/#primaryimage\",\"url\":\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027.png\",\"contentUrl\":\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027.png\",\"width\":1340,\"height\":378},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/beta.reboot-conseil.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dataset synth\u00e9tique gr\u00e2ce au rendu 3D dans Blender\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/#website\",\"url\":\"https:\/\/beta.reboot-conseil.com\/\",\"name\":\"AI Squad\",\"description\":\"Dans le doute, Reboot\",\"publisher\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/beta.reboot-conseil.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/#organization\",\"name\":\"AI Squad By Reboot Conseil\",\"url\":\"https:\/\/beta.reboot-conseil.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/09\/cropped-cropped-Logo-IA-Squad-by-Reboot-Conseil-3.png\",\"contentUrl\":\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/09\/cropped-cropped-Logo-IA-Squad-by-Reboot-Conseil-3.png\",\"width\":500,\"height\":218,\"caption\":\"AI Squad By Reboot Conseil\"},\"image\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/#\/schema\/person\/7e9a247d91c32bab30436624bdf6e9c1\",\"name\":\"Oscar DEWASMES\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/b4afa3c07c044276516af3bd95976af4494381e71c8bfcda0415d22b6fde168d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/b4afa3c07c044276516af3bd95976af4494381e71c8bfcda0415d22b6fde168d?s=96&d=mm&r=g\",\"caption\":\"Oscar DEWASMES\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Dataset synth\u00e9tique gr\u00e2ce au rendu 3D dans Blender -","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/","og_locale":"fr_FR","og_type":"article","og_title":"Dataset synth\u00e9tique gr\u00e2ce au rendu 3D dans Blender -","og_description":"Cr\u00e9er un dataset sp\u00e9cifique \u00e0 un besoin peut parfois s&rsquo;av\u00e9rer difficile en plus d&rsquo;\u00eatre co\u00fbteux en temps. Sp\u00e9cifiquement pour les dataset d&rsquo;images, on peut \u00eatre contraint par le droit d&rsquo;auteur et le droit \u00e0 l&rsquo;image, ne pas avoir le mat\u00e9riel pour prendre des photos, ne pas avoir le temps de labelliser le dataset \u00e0 la main. On peut alors se tourner vers la donn\u00e9e synth\u00e9tique, g\u00e9n\u00e9r\u00e9e \u00e0 partir de rien, et labellis\u00e9e automatiquement. Aujourd&rsquo;hui je vais vous pr\u00e9senter comment j&rsquo;ai g\u00e9n\u00e9r\u00e9 un dataset synth\u00e9tique en utilisant Blender. Blender est un logiciel libre de mod\u00e9lisation, animation et rendu d&rsquo;images 3D (entre autres). L&rsquo;objectif \u00e9tait de cr\u00e9er un dataset d&rsquo;entra\u00eenement pour la reconnaissance d&rsquo;objets, sp\u00e9cifiquement pour la reconnaissance de pi\u00e9tons et de v\u00e9hicules transpalettes.Cet article d\u00e9taille l&rsquo;entra\u00eenement d&rsquo;un r\u00e9seau de neurone avec ce dataset : Fine tuning pour la reconnaissance de pi\u00e9tons et v\u00e9hicules dans un entrep\u00f4t Pour reproduire ce r\u00e9sultat, vous aurez besoin des connaissances de base de Blender, et de pouvoir lancer un script python. Mod\u00e9lisation 3D J&rsquo;ai commenc\u00e9 par la mod\u00e9lisation en 3D d&rsquo;un entrep\u00f4t. En mod\u00e9lisant les objets 3D les plus simples, et en utilisant des assets libre de droit pour les plus compliqu\u00e9s. J&rsquo;ai notamment utilis\u00e9 : Animation J&rsquo;ai ensuite anim\u00e9 la cam\u00e9ra, un personnage et un transpalette pour que le dataset final contienne des angles de vue vari\u00e9s des objets qu&rsquo;il faudra reconna\u00eetre. Pour cela, j&rsquo;ai d&rsquo;abord donn\u00e9 une animation simple aux objets, puis dans l&rsquo;\u00e9diteur de courbes, j&rsquo;ai appliqu\u00e9 le modificateur de bruit \u00e0 la position X et Y. Avec ce modificateur, il y a certaines frames o\u00f9 les objets sortent de l&rsquo;\u00e9cran ou alors sont superpos\u00e9s. Il m&rsquo;a fallu bake l&rsquo;animation pour pouvoir \u00e9diter uniquement les frames probl\u00e9matiques. Rendu des images \u00c0 ce point, j&rsquo;ai pu faire le rendu de mes images: Je me suis ensuite attel\u00e9 au rendu des masks. Compositing des masks Un mask est une image en noir et blanc dont la valeur d&rsquo;un pixel repr\u00e9sente un objet \u00e0 reconna\u00eetre. On va donc cr\u00e9er des images o\u00f9 le background aura la valeur 0, un transpalette la valeur 1 et un pi\u00e9ton la valeur 2. Pour cela il faut changer les param\u00e8tres de rendu suivants: Pouvoir diff\u00e9rencier les objets par leurs mat\u00e9riaux Retirer les filtres de couleurs artistiques de Blender Passer le mode de rende en Noir et Blanc View Layer &gt;Passes &gt;Data &gt;Material Index Render &gt;Color Management &gt;View Transform = StandardLook = NoneSequencer = Non-Color Output &gt;Output &gt;Color = BW J&rsquo;ai activ\u00e9 la passe Material Index pour diff\u00e9rencier mes objets gr\u00e2ce \u00e0 leurs mat\u00e9riaux. Il faut donc donner un index diff\u00e9rent aux mat\u00e9riaux de mes objets \u00e0 diff\u00e9rencier (0 pour le background, 1 pour le transpalette et 2 pour le pi\u00e9ton) En s\u00e9lectionnant un objet : Material &gt; Settings &gt; Pass Index Maintenant que les index de mat\u00e9riaux sont configur\u00e9s, on peut les utiliser dans le graph de composition. Blender code les valeurs de couleurs rouge verte et bleu en valeurs flottantes entre 0 et 1, mais l&rsquo;image que l&rsquo;on veut cr\u00e9\u00e9 sera cod\u00e9e en noir et blanc en valeurs enti\u00e8re entre 0 et 255. C&rsquo;est pour \u00e7a que dans la node Color Ramp, je divise les valeurs voulues par 255. Malheureusement, quand j&rsquo;inspecte les masks rendus, je vois que le background est repr\u00e9sent\u00e9s par des pixels de couleur 0 et 1; le transpalette par des pixels de couleur 12, 13, 14 et le pi\u00e9ton par des pixels de couleur 21, 22, 23. Je n&rsquo;ai pas trouv\u00e9 de solution \u00e0 ce probl\u00e8me, j&rsquo;ai donc trait\u00e9 les masks avec un script python \u2b07 Traitement des masks mask_processor.py Vous pouvez utiliser ce script avec la commande suivante: Conclusion J&rsquo;ai cr\u00e9\u00e9 dans Blender un dataset synth\u00e9tique d&rsquo;images pour l&rsquo;entra\u00eenement d&rsquo;un r\u00e9seau de neurone \u00e0 la reconnaissance d&rsquo;objets sp\u00e9cifiques. Vous pouvez retrouver les d\u00e9tails de l&rsquo;entra\u00eenement dans cet article : Fine tuning pour la reconnaissance de pi\u00e9tons et v\u00e9hicules dans un entrep\u00f4t","og_url":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/","article_published_time":"2024-04-05T14:48:02+00:00","article_modified_time":"2024-04-05T14:59:53+00:00","og_image":[{"width":1340,"height":378,"url":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027.png","type":"image\/png"}],"author":"Oscar DEWASMES","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Oscar DEWASMES","Dur\u00e9e de lecture estim\u00e9e":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/#article","isPartOf":{"@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/"},"author":{"name":"Oscar DEWASMES","@id":"https:\/\/beta.reboot-conseil.com\/#\/schema\/person\/7e9a247d91c32bab30436624bdf6e9c1"},"headline":"Dataset synth\u00e9tique gr\u00e2ce au rendu 3D dans Blender","datePublished":"2024-04-05T14:48:02+00:00","dateModified":"2024-04-05T14:59:53+00:00","mainEntityOfPage":{"@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/"},"wordCount":838,"commentCount":0,"publisher":{"@id":"https:\/\/beta.reboot-conseil.com\/#organization"},"image":{"@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/#primaryimage"},"thumbnailUrl":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027.png","keywords":["3D render","Artificial Intelligence","Blender","Create Dataset","Dataset","Donn\u00e9e Synth\u00e9tique","IA","Reboot Conseil","Synthetic Data"],"articleSection":["G\u00e9n\u00e9ration d'images","Uncategorized"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/","url":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/","name":"Dataset synth\u00e9tique gr\u00e2ce au rendu 3D dans Blender -","isPartOf":{"@id":"https:\/\/beta.reboot-conseil.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/#primaryimage"},"image":{"@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/#primaryimage"},"thumbnailUrl":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027.png","datePublished":"2024-04-05T14:48:02+00:00","dateModified":"2024-04-05T14:59:53+00:00","breadcrumb":{"@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/#primaryimage","url":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027.png","contentUrl":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/04\/PedForkImg_0027.png","width":1340,"height":378},{"@type":"BreadcrumbList","@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/04\/05\/dataset-synthetique-grace-au-rendu-3d-dans-blender\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/beta.reboot-conseil.com\/"},{"@type":"ListItem","position":2,"name":"Dataset synth\u00e9tique gr\u00e2ce au rendu 3D dans Blender"}]},{"@type":"WebSite","@id":"https:\/\/beta.reboot-conseil.com\/#website","url":"https:\/\/beta.reboot-conseil.com\/","name":"AI Squad","description":"Dans le doute, Reboot","publisher":{"@id":"https:\/\/beta.reboot-conseil.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/beta.reboot-conseil.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/beta.reboot-conseil.com\/#organization","name":"AI Squad By Reboot Conseil","url":"https:\/\/beta.reboot-conseil.com\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/beta.reboot-conseil.com\/#\/schema\/logo\/image\/","url":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/09\/cropped-cropped-Logo-IA-Squad-by-Reboot-Conseil-3.png","contentUrl":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/09\/cropped-cropped-Logo-IA-Squad-by-Reboot-Conseil-3.png","width":500,"height":218,"caption":"AI Squad By Reboot Conseil"},"image":{"@id":"https:\/\/beta.reboot-conseil.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/beta.reboot-conseil.com\/#\/schema\/person\/7e9a247d91c32bab30436624bdf6e9c1","name":"Oscar DEWASMES","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/beta.reboot-conseil.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/b4afa3c07c044276516af3bd95976af4494381e71c8bfcda0415d22b6fde168d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b4afa3c07c044276516af3bd95976af4494381e71c8bfcda0415d22b6fde168d?s=96&d=mm&r=g","caption":"Oscar DEWASMES"}}]}},"_links":{"self":[{"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/posts\/946","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/comments?post=946"}],"version-history":[{"count":7,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/posts\/946\/revisions"}],"predecessor-version":[{"id":972,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/posts\/946\/revisions\/972"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/media\/947"}],"wp:attachment":[{"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/media?parent=946"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/categories?post=946"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/tags?post=946"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}