تنفيذ Pytorch من Flownet بواسطة Dosovitskiy et al.
هذا المستودع هو تنفيذ شعلة لـ Flownet ، بقلم Alexey Dosovitskiy et al. في Pytorch. انظر تطبيق الشعلة هنا
هذا الرمز مستوحى بشكل أساسي من مثال ImageNet الرسمي. لم يتم اختباره لعمود معالجة الرسومات المتعددة ، ولكن يجب أن يعمل كما هو الحال في الكود الأصلي.
يوفر الرمز مثالًا تدريبيًا ، باستخدام مجموعة بيانات الكراسي الطيران ، مع زيادة البيانات. يمكن إضافة تطبيق لمجموعات بيانات تدفق المشهد في المستقبل.
يتم توفير نموذجين للشبكة العصبية حاليًا ، إلى جانب تباين المعيار الدُفعات (التجريبي):
بفضل kaixhin ، يمكنك تنزيل نسخة مسبقة من Flownets (من Caffe ، وليس من Pytorch) هنا. يحتوي هذا المجلد أيضًا على شبكات مدربة من الصفر.
قم بتغذية الشبكة التي تم تنزيلها مباشرةً إلى البرنامج النصي ، لا تحتاج إلى إلغاء ضغطها حتى لو أخبرك بيئة سطح المكتب بذلك.
تتوقع هذه الشبكات إدخال BGR (مقارنة بـ RGB في Pytorch). ومع ذلك ، فإن ترتيب BGR ليس مهمًا جدًا.
يمكن تثبيت هذه الوحدات مع pip
pytorch >= 1.2
tensorboard-pytorch
tensorboardX >= 1.4
spatial-correlation-sampler>=0.2.1
imageio
argparse
path.py
أو
pip install -r requirements.txtأولاً ، تحتاج إلى تنزيل مجموعة بيانات Flying Chair. إنه كبير ~ 64 جيجابايت ونوصيك بوضعه في محرك SSD.
إن فرط المسماعات الافتراضية المتوفرة في main.py هي نفسها كما في البرامج النصية للتدريب على الكافيين.
python main.py /path/to/flying_chairs/ -b8 -j8 -a flownetsنوصيك بتعيين J (عدد مؤشرات ترابط البيانات) على ارتفاع إذا كنت تستخدم DataAugmentation لتجنب تحميل البيانات لإبطاء التدريب.
لمزيد من المساعدة يمكنك الكتابة
python main.py -hيتم استخدام Tensorboard-Pytorch للتسجيل. لتصور النتيجة ، ببساطة اكتب
tensorboard --logdir=/path/to/checkpointsيمكن تنزيل النماذج هنا في مجلد Pytorch.
تم تدريب النماذج مع خيارات افتراضية ما لم يتم تحديدها. لم يتم استخدام تزييف اللون.
| قوس | معدل التعلم | حجم الدُفعة | حجم الحقبة | اسم الملف | التحقق من الصحة EPE |
|---|---|---|---|---|---|
| الطيران | 1E-4 | 8 | 2700 | Flownets_epe1.951.pth.tar | 1.951 |
| نطاقات bn | 1E-3 | 32 | 695 | Flownets_BN_EPE2.459.PTH.TAR | 2.459 |
| Flownetc | 1E-4 | 8 | 2700 | flownetc_epe1.766.pth.tar | 1.766 |
ملاحظة : استغرق Flownets BN وقتًا أطول للتدريب وحصلت على نتائج أسوأ. يُنصح بشدة بعدم استخدامه لمجموعة بيانات الكراسي الطيران.
يتم التنبؤ بواسطة الطول.
رمز دقيق للتدفق البصري -> يمكن العثور على خريطة اللون هنا
| مدخل | تنبؤ | جروح |
|---|---|---|
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
إذا كنت بحاجة إلى تشغيل الشبكة على صورك ، فيمكنك تنزيل شبكة مسبقة هنا وتشغيل البرنامج النصي للاستدلال على مجلد أزواج الصور.
يحتاج المجلد الخاص بك إلى الحصول على جميع أزواج الصور في نفس الموقع ، مع نمط الاسم
{image_name}1.{ext}
{image_name}2.{ext}
python3 run_inference.py /path/to/images/folder /path/to/pretrained بالنسبة إلى البرنامج النصي main.py ، تتوفر قائمة مساعدة لخيارات إضافية.
من أجل الحصول على تحولات متماسكة بين المدخلات والهدف ، يجب أن نحدد التحولات الجديدة التي تأخذ كل من الإدخال والهدف ، حيث يتم تعريف متغير عشوائي جديد في كل مرة يتم فيها استدعاء تحول عشوائي.
للسماح بزيادة البيانات ، فكرنا في الدوران والترجمات للمدخلات ونتائجها على خريطة التدفق المستهدف. فيما يلي مجموعة من الأشياء لرعايتها من أجل تحقيق زيادة مناسبة للبيانات
إذا قمت بتطبيق تحول على IMG1 ، فيجب عليك تطبيق نفس خريطة التدفق ، للحصول على نقاط أصل متماسكة للتدفق.
بالنظر إلى ترجمة (tx,ty) المطبقة على IMG2 ، سيكون لدينا
flow[:,:,0] += tx
flow[:,:,1] += ty
مقياس يتم تطبيقه على كل من IMG1 و IMG2 مع معلمات التكبير alpha يضاعف التدفق بنفس الكمية
flow *= alpha
دوران يتم تطبيقه على كلتا الصورتين بواسطة زاوية theta يدور أيضًا متجهات التدفق ( flow[i,j] ) بواسطة نفس الزاوية
for_all i,j flow[i,j] = rotate(flow[i,j], theta)
rotate: x,y,theta -> (x*cos(theta)-x*sin(theta), y*cos(theta), x*sin(theta))
دعونا نفكر في دوران من زاوية theta من مركز الصور.
يجب أن نتحرك كل ناقل تدفق بناءً على الإحداثيات التي تهبط فيها. في كل إحداثي (i, j) ، لدينا:
flow[i, j, 0] += (cos(theta) - 1) * (j - w/2 + flow[i, j, 0]) + sin(theta) * (i - h/2 + flow[i, j, 1])
flow[i, j, 1] += -sin(theta) * (j - w/2 + flow[i, j, 0]) + (cos(theta) - 1) * (i - h/2 + flow[i, j, 1])