يهدف هذا المشروع إلى تبسيط عملية إنشاء نموذج مخصص للأعمدة باستخدام نماذج googlenet المخصصة ومجموعات بيانات الصور المخصصة.
فيما يلي بعض التصورات التي تم إنشاؤها مع نماذج مخصصة مخصصة تم تدريبها على الصور ذات الطابع الصيفي:
التبعيات:
يمكنك العثور على إرشادات تثبيت مفصلة لـ Ubuntu و Windows في دليل التثبيت.
بعد التأكد من تثبيت Pytorch ، يمكنك بشكل اختياري تنزيل نماذج Googlenet و inception 5h (inceptionv1) مع الأمر التالي:
python models/download_models.py
إذا كنت ترغب فقط في إنشاء أحلام أعماق مع النماذج المسبقة أو قمت بتنزيل نموذج مسبق من قبل شخص آخر مع Creator Dream ، فيمكنك تخطي النماذج.
إنشاء وإعداد مجموعة البيانات الخاصة بك
جمع الصور
فرز الصور في التنسيق المطلوب.
إزالة أي صور تالفة.
تأكد من إزالة أي تكرارات إذا لم تكن قد فعلت ذلك بالفعل
تغيير حجم مجموعة البيانات لتسريع التدريب.
احسب الانحراف المعياري والمعياري لمجموعة البيانات الخاصة بك.
تدريب نموذج googlenet
تصور النتائج
إذا لم تكن النتائج رائعة ، فقد تضطر إلى العودة إلى الخطوة 1-2 وإجراء بعض التغييرات مع الصور والفئات ومعلمات التدريب.
قد يستغرق الأمر أقل من 5 عصر لإنشاء تصورات تشبه بيانات التدريب الخاصة بك باستخدام طبقة FC/Logits الرئيسية. من أجل تسريع التدريب وإنشاء نتائج أفضل للنظر ، يتم تجميد نموذج BVLC المسبق المستخدم جزئيًا من أجل حماية الطبقات السفلية من التغيير.
من أجل تدريب نموذج مخصص للأحلام ، ستحتاج إلى إنشاء مجموعة بيانات تتكون من الصور التي ترغب في استخدامها للتدريب. هناك مجموعة متنوعة من الطرق التي يمكنك من خلالها تناول الصور لمجموعة البيانات الخاصة بك ، وستحتاج على الأقل بضع مئات من الصور لكل فئة/فئة.
غالبًا ما يتم تنفيذ DeepDream مع نماذج تصنيف الصور المدربة على مجموعات بيانات الصور التي تتكون من فئات/فئات مختلفة. تحاول نماذج تصنيف الصور تعلم الفرق بين فئات الصور المختلفة وبذلك تكتسب الخلايا العصبية القدرة على خلق هلوسة تشبه الحلم. الصور التي تختارها ، والاختلافات بينها ، والاختلافات بين الفئات التي اخترتها ، وعدد الصور المستخدمة ستؤثر بشكل كبير على التصورات التي يمكن إنتاجها.
يجب تنظيم مجموعات بيانات صور Pytorch حيث يحتوي الدليل/المجلد الرئيسي على مجلدات/أدلة فرعية لكل فئة/فئة. يظهر مثال على بنية مجموعة البيانات المطلوبة:
dataset_dir
│
└───category1
│ │ image1.jpg
│ │ image2.jpg
│ │ image3.jpg
│
└───category2
│ image1.jpg
│ image2.jpg
│ image3.jpg
بمجرد إنشاء مجموعة البيانات الخاصة بك بالتنسيق المناسب ، تأكد من إزالة أي صور مكررة إذا لم تكن قد قمت بذلك بالفعل. هناك مجموعة متنوعة من الأدوات التي يمكنك استخدامها لهذه المهمة ، بما في ذلك البرامج المجانية والمفتوحة المصدر.
إذا لم تكن قد فعلت ذلك بالفعل ، فقد ترغب في إنشاء نسخة احتياطية من مجموعة البيانات الخاصة بك.
بعد ذلك ، ستحتاج إلى التحقق من أن أيا من الصور تالف بطريقة تمنع Pytorch من تحميلها. لإزالة أي صور فاسدة تلقائيًا من مجموعة البيانات الخاصة بك ، استخدم الأمر التالي:
python data_tools/remove_bad.py -delete_bad -data_path <training_data>
بعد ذلك ، من المحتمل أن ترغب في تغيير حجم مجموعة البيانات الخاصة بك لتكون أقرب إلى حجم صورة التدريب من أجل تسريع التدريب. لا تمنعك تغيير حجم مجموعة البيانات الخاصة بك من إنشاء صور أكبر مع النموذج الناتج. لن يقوم البرنامج النصي بتغيير حجمه إلا تعديل الصور التي تتجاوز حجم الصورة المحدد مع ارتفاعها أو عرضها.
لتغيير حجم الصور في مجموعة البيانات الخاصة بك ، استخدم الأمر التالي:
python data_tools/resize_data.py -data_path <training_data> -max_size 500
الآن مع مجموعة البيانات التي تم تغيير حجمها حديثًا ، يمكنك حساب الانحراف المعياري والمعياري لمجموعة البيانات الخاصة بك للاستخدام في التدريب ، وأحلام عميق. تأكد من إعادة حساب الانحراف المتوسط والمعياري مرة أخرى إذا قمت بتعديل مجموعة البيانات عن طريق إضافة الصور أو إزالةها.
لحساب المتوسط والانحراف المعياري لمجموعة البيانات الخاصة بك ، استخدم الأمر التالي وحفظ الإخراج للخطوة التالية:
python data_tools/calc_ms.py -data_path <training_data>
يمكنك الآن البدء في تدريب طراز DeepDream عن طريق تشغيل البرنامج النصي لتدريب Googlenet. يوصى بحفظ النموذج كل 5-10 عصر من أجل مراقبة جودة التصورات.
بعد تدريب النماذج الخاصة بك ، يمكنك إضافة مصفوفة ارتباط بالألوان لهم من أجل إلغاء الارتباط بالألوان مع الأمر التالي:
python data_tools/calc_cm.py -data_path <training_data> -model_file <bvlc_out120>.pth
قيادة التدريب الأساسية:
python train_googlenet.py -data_path <training_data> -balance_classes -batch_size 96 -data_mean <mean> -data_sd <sd>
خيارات الإدخال:
-data_path
: مسار إلى دليل/مجلد مجموعة البيانات التي ترغب في استخدامها.-data_mean
: قائمة القيم المتوسطة الخاصة بك مسبقًا لمجموعة البيانات التي اخترتها.-data_sd
: قائمتك المسبقة لقيم الانحراف المعياري لمجموعة البيانات التي اخترتها.خيارات التدريب:
-num_epochs
: عدد عصر التدريب المراد استخدامه. الافتراضي هو 120
.-batch_size
: عدد صور التدريب والتحقق من الصحة لوضعها عبر الشبكة في نفس الوقت. الافتراضي هو 32
.-learning_rate
: معدل التعلم لاستخدامه مع Adam أو SGD Optimizer. الافتراضي هو 1e-2
.-optimizer
: خوارزمية التحسين للاستخدام ؛ إما sgd
أو adam
؛ الافتراضي هو sgd
.-train_workers
: كم عدد العمال الذين يستخدمون للتدريب. الافتراضي هو 0
.-val_workers
: كم عدد العمال الذين يستخدمون للتحقق من الصحة. الافتراضي هو 0
.-balance_classes
: سيؤدي تمكين هذا العلامة إلى توازن التدريب لكل فصل بناءً على حجم الفصل.خيارات النموذج:
-model_file
: مسار إلى ملف نموذج .pth
لاستخدامه في نموذج البداية. الافتراضي هو نموذج BVLC Googlenet.-freeze_to
: أي طبقة لتجميد النموذج يصل إلى ؛ واحد من none
، conv1
، conv2
، conv3
، mixed3a
، mixed3b
، mixed4a
، mixed4b
، mixed4c
، mixed4d
، mixed4e
، mixed5a
، أو mixed5b
. الافتراضي هو mixed3b
.-freeze_aux1_to
: أي طبقة لتجميد الفرع الأول المساعد يصل إلى ؛ واحد من none
، loss_conv
، loss_fc
، أو loss_classifier
. الافتراضي هو none
.-freeze_aux2_to
: أي طبقة لتجميد الفرع المساعدة الثاني يصل إلى ؛ واحد من none
، loss_conv
، loss_fc
، أو loss_classifier
. الافتراضي هو none
.-delete_branches
: إذا تم تمكين هذه العلامة ، فلن يتم استخدام أي فروع مساعدة في النموذج.خيارات الإخراج:
-save_epoch
: حفظ النموذج كل عصر save_epoch
. الافتراضي هو 10
. ضبط على 0
لتعطيل توفير النماذج الوسيطة.-output_name
: اسم نموذج الإخراج. الافتراضي هو bvlc_out.pth
.-individual_acc
: سيقوم تمكين هذه العلامة بطباعة الدقة الفردية لكل فئة.-save_csv
: سيؤدي تمكين هذه العلامة إلى توفير بيانات الخسارة والدقة إلى ملفات TXT.-csv_dir
: حيث لحفظ ملفات CSV. تم تعيين الافتراضي على دليل العمل الحالي.خيارات أخرى:
-use_device
: معرّف صفري من وحدة معالجة الرسومات لاستخدام Plus cuda:
. الافتراضي هو cuda:0
.-seed
: قيمة عدد صحيح يمكنك تحديده للنتائج القابلة للتكرار. بشكل افتراضي ، هذه القيمة عشوائية لكل تشغيل.خيارات مجموعة البيانات:
-val_percent
: النسبة المئوية للصور من كل فئة لاستخدامها للتحقق من الصحة. الافتراضي هو 0.2
.بعد تدريب نموذج جديد على أعماق ، ستحتاج إلى اختبار تصوراته. تم العثور على أفضل التصورات في طبقة FC الرئيسية المعروفة أيضًا باسم طبقة "Logits". يساعدك هذا البرنامج النصي على تصور جميع قنوات الطبقة المحددة بسرعة وسهولة في نموذج معين لعصر طراز معين ، عن طريق إنشاء صورة منفصلة لكل قناة.
خيارات الإدخال:
-model_file
: مسار إلى نموذج googlenet pretrained الذي ترغب في استخدامه.-learning_rate
: معدل التعلم لاستخدامه مع Optimizer Adam أو L-BFGS. الافتراضي هو 1.5
.-optimizer
: خوارزمية التحسين للاستخدام ؛ إما lbfgs
أو adam
؛ الافتراضي هو adam
.-num_iterations
: الافتراضي هو 500
.-layer
: الطبقة المحددة التي ترغب في استخدامها. تم تعيين الافتراضي على fc
.-extract_neuron
: إذا تم تمكين هذه العلامة ، فسيتم استخراج الخلايا العصبية المركزية من كل قناة.-image_size
: قائمة مفصولة بفاصلة من <height>,<width>
لاستخدامها في صورة الإخراج. يتم تعيين الافتراضي على 224,224
.-jitter
: مقدار ارتعاش الصورة لاستخدامه في المعالجة المسبقة. الافتراضي هو 16
.-fft_decorrelation
: ما إذا كان لاستخدام الارتباط المكاني FFT أم لا. إذا تم تمكينه ، فيجب استخدام معدل تعليمي أقل.-color_decorrelation
: ما إذا كان يجب استخدام ارتباط اللون أم لا. توفير اختياريا قائمة مفصولة مفصولة من القيم لمصفوفة ارتباط الألوان. إذا لم يتم توفير قيم ، فسيتم إجراء محاولة لتحميل مصفوفة ارتباط بالألوان من ملف النموذج قبل الافتراضي إلى مصفوفة ارتباط ألوان ImageNet.-random_scale
: سواء كان استخدام التحجيم العشوائي أم لا. اختياريا توفير قائمة مفصولة بفاصلة من القيم للمقاييس التي يتم تحديدها بشكل عشوائي من. إذا لم يتم توفير قيم ، فسيتم تحديد المقاييس بشكل عشوائي من القائمة التالية: 1, 0.975, 1.025, 0.95, 1.05
.-random_rotation
: سواء كان استخدام دورات عشوائية أم لا. توفير اختياريا قائمة مفصولة بفاصلة من قيم الدرجات للدورات التي يتم تحديدها بشكل عشوائي من أو قيمة واحدة لاستخدامها لتحديد الدرجات بشكل عشوائي من [-value, value]
. إذا لم يتم توفير قيم ، فسيتم استخدام مجموعة من [-5, 5]
.-padding
: كمية الحشو التي يجب استخدامها قبل التحجيم العشوائي والتناوب العشوائي لمنع القطع الأثرية الحافة. ثم تتم إزالة الحشو بعد التحويلات. يتم تعيين الافتراضي على 0
لتعطيله.خيارات المعالجة:
-batch_size
: كم عدد صور تصور القناة التي يجب إنشاؤها في كل دفعة. الافتراضي هو 10
.-start_channel
: ما هي القناة التي تبدأ في إنشاء صور التصور في. الافتراضي هو 0
.-end_channel
: ما هي القناة للتوقف عن إنشاء صور التصور في. يتم تعيين الافتراضي على -1
لجميع القنوات.مطلوب فقط إذا لم يكن النموذج لا يحتوي عليها ، الخيارات :
-model_epoch
: عصر التدريب الذي تم حفظ النموذج منه ، لاستخدامه في أسماء صور الإخراج. الافتراضي هو 120
.-data_mean
: قائمة القيم المتوسطة التي تم استخدامها لتدريب النموذج مسبقًا لتدريب النموذج ، إذا لم يتم حفظها داخل النموذج.-num_classes
: عدد الفئات التي تم تدريب النموذج عليها. الافتراضي هو 120
.خيارات الإخراج :
-output_dir
: حيث لحفظ صور الإخراج. يتم تعيين الافتراضي على دليل العمل الحالي.-print_iter
: طباعة تقدم كل تكرارات print_iter
. ضبط على 0
لتعطيل الطباعة.-save_iter
: احفظ الصور كل تكرارات save_iter
. الافتراضي هو إلى 0
لتعطيل حفظ النتائج الوسيطة.خيارات أخرى:
-use_device
: معرّف صفري من وحدة معالجة الرسومات لاستخدام Plus cuda:
. الافتراضي هو cuda:0
.-seed
: قيمة عدد صحيح يمكنك تحديده للنتائج القابلة للتكرار. بشكل افتراضي ، هذه القيمة عشوائية لكل تشغيل.تصور طبقة FC الأساسي:
python vis_multi.py -model_file <bvlc_out120>.pth
تصور الطبقة المتقدمة FC (سجلات):
python vis_multi.py -model_file <bvlc_out120>.pth -layer fc -color_decorrelation -fft_decorrelation -random_scale -random_rotation -lr 0.4 -output_dir <output_dir> -padding 16 -jitter 16,8
يتيح لك هذا البرنامج النصي إنشاء هلوسة أحلام أعماق مع نماذج googlenet المدربة.
خيارات الإدخال:
-model_file
: مسار إلى نموذج googlenet pretrained الذي ترغب في استخدامه.-learning_rate
: معدل التعلم لاستخدامه مع Optimizer Adam أو L-BFGS. الافتراضي هو 1.5
.-optimizer
: خوارزمية التحسين للاستخدام ؛ إما lbfgs
أو adam
؛ الافتراضي هو adam
.-num_iterations
: الافتراضي هو 500
.-content_image
: مسار إلى صورة الإدخال الخاصة بك. إذا لم يتم تحديد صورة إدخال ، يتم استخدام ضوضاء عشوائية بدلاً من ذلك.-layer
: الطبقة المحددة التي ترغب في استخدامها. تم تعيين الافتراضي على mixed5a
.-channel
: قناة الطبقة المحددة التي ترغب في استخدامها. يتم تعيين الافتراضي على -1
لتعطيل اختيار القناة المحددة.-extract_neuron
: إذا تم تمكين هذه العلامة ، فسيتم استخراج الخلايا العصبية المركزية من القناة المحددة بواسطة المعلمة -channel
.-image_size
: قائمة مفصولة بفاصلة من <height>,<width>
لاستخدامها في صورة الإخراج. إذا تم توفير قيمة واحدة لأقصى طول جانبي مع صورة محتوى ، فسيتم حساب الحد الأدنى لطول الجانب تلقائيًا. يتم تعيين الافتراضي على 224,224
.-jitter
: مقدار ارتعاش الصورة لاستخدامه في المعالجة المسبقة. الافتراضي هو 16
.-fft_decorrelation
: ما إذا كان لاستخدام الارتباط المكاني FFT أم لا. إذا تم تمكينه ، فيجب استخدام معدل تعليمي أقل.-color_decorrelation
: ما إذا كان يجب استخدام ارتباط اللون أم لا. توفير اختياريا قائمة مفصولة مفصولة من القيم لمصفوفة ارتباط الألوان. إذا لم يتم توفير قيم ، فسيتم إجراء محاولة لتحميل مصفوفة ارتباط بالألوان من ملف النموذج قبل الافتراضي إلى مصفوفة ارتباط ألوان ImageNet.-random_scale
: سواء كان استخدام التحجيم العشوائي أم لا. اختياريا توفير قائمة مفصولة بفاصلة من القيم للمقاييس التي يتم تحديدها بشكل عشوائي من. إذا لم يتم توفير قيم ، فسيتم تحديد المقاييس بشكل عشوائي من القائمة التالية: 1, 0.975, 1.025, 0.95, 1.05
.-random_rotation
: سواء كان استخدام دورات عشوائية أم لا. توفير اختياريا قائمة مفصولة بفاصلة من قيم الدرجات للدورات التي يتم تحديدها بشكل عشوائي من أو قيمة واحدة لاستخدامها لتحديد الدرجات بشكل عشوائي من [-value, value]
. إذا لم يتم توفير قيم ، فسيتم استخدام مجموعة من [-5, 5]
.-padding
: كمية الحشو التي يجب استخدامها قبل التحجيم العشوائي والتناوب العشوائي لمنع القطع الأثرية الحافة. ثم تتم إزالة الحشو بعد التحويلات. يتم تعيين الافتراضي على 0
لتعطيله.-layer_vis
: ما إذا كان يجب استخدام تصور الحلم أو الاتجاه عند عدم تصور قنوات طبقة محددة. واحدة من deepdream
أو direction
؛ الافتراضي هو deepdream
.مطلوب فقط إذا لم يكن النموذج لا يحتوي عليها ، الخيارات :
-data_mean
: قائمة القيم المتوسطة التي تم استخدامها لتدريب النموذج مسبقًا لتدريب النموذج ، إذا لم يتم حفظها داخل النموذج.-num_classes
: عدد الفئات التي تم تدريب النموذج عليها ، إذا لم يتم حفظها داخل النموذج.خيارات الإخراج :
-output_image
: اسم صورة الإخراج. الافتراضي هو out.png
.-print_iter
: طباعة تقدم كل تكرارات print_iter
. ضبط على 0
لتعطيل الطباعة.-save_iter
: احفظ الصور كل تكرارات save_iter
. الافتراضي هو إلى 0
لتعطيل حفظ النتائج الوسيطة.خيارات التبليط:
-tile_size
: حجم البلاط المطلوب للاستخدام. إما قائمة مفصولة بفاصلة من <height>,<width>
أو قيمة واحدة لاستخدامها في كل من ارتفاع البلاط وعرضها. يتم تعيين الافتراضي على 0
لتعطيل البلاط.-tile_overlap
: النسبة المئوية للتداخل لاستخدامها في البلاط. الافتراضي هو 25
لتداخل 25 ٪. تداخل النسب المئوية التي تزيد عن 50 ٪ ستؤدي إلى مشاكل.-tile_iter
: الافتراضي هو 50
.خيارات أخرى:
-use_device
: معرّف صفري من وحدة معالجة الرسومات لاستخدام Plus cuda:
. الافتراضي هو cuda:0
.-seed
: قيمة عدد صحيح يمكنك تحديده للنتائج القابلة للتكرار. بشكل افتراضي ، هذه القيمة عشوائية لكل تشغيل.أحلام عميقة:
python vis.py -model_file <bvlc_out120>.pth -layer mixed5a
أحلام عميقة المتقدمة:
python vis.py -model_file <bvlc_out120>.pth -layer mixed5a/conv_5x5_relu -channel 9 -color_decorrelation -fft_decorrelation -random_scale -random_rotation -lr 0.4 -padding 16 -jitter 16,8
انظر هنا لمزيد من المعلومات حول جميع البرامج النصية/الأدوات المضمنة المتعلقة بإنشاء مجموعة البيانات وتنظيفها والإعداد.