استخدم هذا بدلاً من ذلك: https://github.com/facebookresearch/maskrcnn-benchmark

مثال على الإخراج من e2e_mask_rcnn-r-101-fpn_2x باستخدام الوزن المسبق للكشف.

مثال المقابل الإخراج من Detectron.

مثال على الإخراج من e2e_keypoint_rcnn-r-50-fpn_s1x باستخدام الوزن المسبق للكشف.
يتبع هذا الرمز بنية تنفيذ Detectron. يتم دعم جزء فقط من الوظيفة. تحقق من هذا القسم لمزيد من المعلومات.
مع هذا الرمز ، يمكنك ...
تم بناء هذا المستودع في الأصل على jwyang/faster-rcnn.pytorch. ومع ذلك ، بعد العديد من التعديلات ، يتغير الهيكل كثيرًا ويشبه الآن اكتشافه. أنا أعمد كل شيء مشابه أو متطابق لاكتشاف تنفيذ ، وذلك لإعادة إنتاج النتيجة مباشرة من ملفات الوزن الرسمية المسبقة.
يحتوي هذا التنفيذ على الميزات التالية:
إنه رمز Pytorch النقي . بالطبع ، هناك بعض كود CUDA.
وهو يدعم التدريب على الدفعة متعددة الصور .
وهو يدعم التدريب متعدد وحدات معالجة الرسومات .
وهو يدعم ثلاث طرق تجميع . لاحظ أنه يتم مراجعة محاذاة العائد على الاستثمار فقط لمطابقة التنفيذ في CAFFE2. لذلك ، استخدمه.
إنه فعال الذاكرة . بالنسبة لتكوين البيانات ، هناك نوعان من التكنولوجيا المتاحة لتقليل استخدام الذاكرة: 1) مجموعة الجوانب : صور المجموعة ذات نسبة العرض إلى الارتفاع المماثلة في دفعة 2) زراعة الجوانب : صور المحاصيل طويلة جدًا. يتم تنفيذ مجموعة الجوانب في Detectron ، لذلك يتم استخدامها للتخلف. Cropping Side هي الفكرة من Jwyang/Faster-Rcnn.pytorch ، ولا يتم استخدامها للتخلف عن الافتراضي.
إلى جانب ذلك ، أقوم بتنفيذ وحدة nn.DataParallel المخصصة التي تتيح حجمًا مختلفًا لحجم مجموعة الدُفعات على وحدات معالجة الرسومات المختلفة. تحقق من القسم الخاص بي nn.dataparallel لمزيد من التفاصيل حول هذا الموضوع.
استنساخ الريبو:
git clone https://github.com/roytseng-tw/mask-rcnn.pytorch.git
تم اختباره تحت Python3.
تجميع رمز CUDA:
cd lib # please change to this directory
sh make.sh
إذا كنت تستخدم فولتا وحدات معالجة الرسومات ، فقم بتومية هذا الخط في lib/mask.sh وتذكر لتأجيل ضربة خلفية في السطر أعلاه. CUDA_PATH الافتراضيات إلى /usr/loca/cuda . إذا كنت ترغب في استخدام مكتبة CUDA على مسار مختلف ، فقم بتغيير هذا الخط وفقًا لذلك.
سوف يقوم بتجميع جميع الوحدات التي تحتاجها ، بما في ذلك NMS و ROI_POOING و ROI_CROP و ROI_ALIGN. (في الواقع لا يتم استخدام GPU NMS أبدًا ...)
لاحظ أنه إذا كنت تستخدم CUDA_VISIBLE_DEVICES لتعيين وحدات معالجة الرسومات ، فتأكد من أن وحدة معالجة الرسومات واحدة على الأقل مرئية عند تجميع الرمز.
إنشاء مجلد بيانات تحت الريبو ،
cd {repo_root}
mkdir data
COCO : قم بتنزيل صور COCO والشروح من موقع COCO.
وتأكد من وضع الملفات كهيكل التالي:
coco
├── annotations
| ├── instances_minival2014.json
│ ├── instances_train2014.json
│ ├── instances_train2017.json
│ ├── instances_val2014.json
│ ├── instances_val2017.json
│ ├── instances_valminusminival2014.json
│ ├── ...
|
└── images
├── train2014
├── train2017
├── val2014
├──val2017
├── ...
قم بتنزيل التعليقات التوضيحية Coco Mini من هنا. يرجى ملاحظة أن Minival يعادل تمامًا مجموعة Val 2017 المحددة مؤخرًا. وبالمثل ، فإن اتحاد ValminusMinival وقطار 2014 يعادل تمامًا مجموعة القطار لعام 2017.
لا تتردد في وضع مجموعة البيانات في أي مكان تريده ، ثم ربط مجموعة البيانات تحت data/ المجلد:
ln -s path/to/coco data/coco
أوصي بوضع الصور على SSD لتحسين أداء التدريب أفضل
يمكنني استخدام أوزان ImageNet قبل Caffe لشبكات العمود الفقري.
قم بتنزيلها ووضعها في {repo_root}/data/pretrained_model .
يمكنك الأمر التالي لتنزيلهم جميعًا:
argparse_color_formater ، colorama ، requests python tools/download_imagenet_weights.py
ملاحظة : الأوزان المسبقة للكافيين لها أداء أفضل قليلاً من الأوزان Pytorch. اقترح استخدام نماذج Caffe PretRained من الرابط أعلاه لإعادة إنتاج النتائج. بالمناسبة ، استخدم Detectron أيضًا الأوزان المسبقة من Caffe.
إذا كنت ترغب في استخدام نماذج Pytorch التي تم تدريبها مسبقًا ، فيرجى تذكر تحويل الصور من BGR إلى RGB ، وكذلك استخدام نفس المعالجة المسبقة للبيانات (ناقص متوسط وتطبيع) كما هو مستخدم في نموذج Pytorch.
إلى جانب استخدام الأوزان المسبقة لـ Resnet أعلاه ، يمكنك أيضًا استخدام الأوزان من Detectron عن طريق تغيير الخط المقابل في ملف تكوين النموذج على النحو التالي:
RESNETS:
IMAGENET_PRETRAINED_WEIGHTS: 'data/pretrained_model/R-50.pkl'
R-50-GN.PKL و R-101-GN.PKL مطلوبة لـ GN_BASELINES.
X-101-32x8d.pkl ، X-101-64x4d.pkl و X-152-32x8d-in5k.pkl مطلوبة للعمود الفقري Resnext.
لا تقم بتغيير أي شيء في ملفات التكوين المقدمة (configs/**/xxxx.yml) إلا إذا كنت تعرف ما تفعله
استخدم متغير البيئة CUDA_VISIBLE_DEVICES للتحكم في وحدات معالجة الرسومات التي يجب استخدامها.
batch_size: NUM_GPUS x TRAIN.IMS_PER_BATCH
stivent_batch_size: batch_size x iter_size
تغيير شيء ما: new value of something / old value of something
سيتم iter_size خيارات التكوين تلقائيًا وفقًا لإعدادات التدريب الفعلية: 1) عدد GPUS NUM_GPUS ، 2) حجم الدُفعة لكل TRAIN.IMS_PER_BATCH GPU
SOLVER.BASE_LR : اضبط مباشرة على تغيير Batch_size.SOLVER.STEPS ، SOLVER.MAX_ITER : اضبط عكسيًا على تغيير فعلي stivent_batch_size.خذ Mask-Rcnn مع Res50 Backbone على سبيل المثال.
python tools/train_net_step.py --dataset coco2017 --cfg configs/baselines/e2e_mask_rcnn_R-50-C4.yml --use_tfboard --bs {batch_size} --nw {num_workers}
استخدم --bs للكتابة فوق حجم الدُفعة الافتراضية إلى قيمة مناسبة تناسب معالجة الرسومات الخاصة بك. Simliar for --nw ، عدد مؤشرات ترابط لوادر البيانات الافتراضية إلى 4 في config.py.
حدد- —-use_tfboard لتسجيل الخسائر على Tensorboard.
ملاحظة : استخدم- --dataset keypoints_coco2017 عند التدريب على مفاتيح keypoint-rcnn.
--iter_size كما هو الحال في CAFFE ، تحديث الشبكة مرة واحدة ( optimizer.step() ) كل تكرارات iter_size (إلى الأمام + للخلف). بهذه الطريقة للحصول على حجم دفعة فعالة أكبر للتدريب. لاحظ أنه يتم زيادة عدد الخطوات فقط بعد تحديث الشبكة.
python tools/train_net_step.py --dataset coco2017 --cfg configs/baselines/e2e_mask_rcnn_R-50-C4.yml --bs 4 --iter_size 4
iter_size الافتراضيات إلى 1.
python tools/train_net_step.py ... --load_ckpt {path/to/the/checkpoint}
أو باستخدام ملف نقطة التفتيش في Detectron
python tools/train_net_step.py ... --load_detectron {path/to/the/checkpoint}
python tools/train_net_step.py ... --load_ckpt {path/to/the/checkpoint} --resume
عند استئناف التدريب ، سيتم أيضًا استعادة عدد الخطوات وحالة المحسن من نقطة التفتيش. بالنسبة إلى SGD Optimizer ، تحتوي حالة Optimizer على الزخم لكل معلمة قابلة للتدريب.
ملاحظة : -لا يتم دعم --resume بعد لـ --load_detectron
python tools/train_net_step.py ... --no_save --set {config.name1} {value1} {config.name2} {value2} ...
python tools/train_net_step.py ... --no_save --set DEBUG True
--no_save لتجنب حفظ أي نقطة تفتيش أو تسجيل. python train_net_step.py --help
باختصار ، استخدم train_net_step.py .
في train_net_step.py :
SOLVER.LR_POLICY: steps_with_decay مدعوم. (تم إهمالها) في train_net.py لا يوجد لدى بعض خيارات التكوين أي تأثيرات وتستحق الملاحظة:
SOLVER.LR_POLICY ، SOLVER.MAX_ITER ، SOLVER.STEPS ، SOLVER.LRS : في الوقت الحالي ، يتم التحكم في سياسة التدريب بواسطة وسيطات سطر الأوامر هذه:
--epochs : كم عدد الحصر للتدريب. حقبة واحدة تعني سفر واحد عبر مجموعات التدريب بأكملها. الإعدادات الافتراضية إلى 6.--lr_decay_epochs : عصر لتحلل معدل التعلم على. يحدث تسوس في بداية الحقبة. العصر هو 0- فهرسة. الافتراضات إلى [4 ، 5]. لمزيد من وسيطات سطر الأوامر ، يرجى الرجوع إلى python train_net.py --help
SOLVER.WARM_UP_ITERS ، SOLVER.WARM_UP_FACTOR ، SOLVER.WARM_UP_METHOD : التدريب غير مدعوم.
على سبيل المثال ، اختبار قناع RCNN على مجموعة VAL COCO2017
python tools/test_net.py --dataset coco2017 --cfg config/baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml --load_ckpt {path/to/your/checkpoint}
use --load_detectron لتحميل نقطة تفتيش Detectron. إذا كانت وحدات معالجة الرسومات المتعددة متوفرة ، فأضف- --multi-gpu-testing .
حدد دليل إخراج مختلف ، استخدم --output_dir {...} . الإعدادات الافتراضية إلى {the/parent/dir/of/checkpoint}/test
python tools/infer_simple.py --dataset coco --cfg cfgs/baselines/e2e_mask_rcnn_R-50-C4.yml --load_ckpt {path/to/your/checkpoint} --image_dir {dir/of/input/images} --output_dir {dir/to/save/visualizations}
--output_dir الإعدادات الافتراضية infer_outputs .
العمود الفقري:
ResNet50_conv4_body ، ResNet50_conv5_body ، ResNet101_Conv4_Body ، ResNet101_Conv5_Body ، ResNet152_Conv5_Body[fpn_]ResNet101_Conv4_Body ، [fpn_]ResNet101_Conv5_Body ، [fpn_]ResNet152_Conv5_Bodyfpn_ResNet50_conv5_body ، fpn_ResNet50_conv5_P2only_body ، fpn_ResNet101_conv5_body ، fpn_ResNet101_conv5_P2only_body ، fpn_ResNet152_conv5_P2only_body fpn_ResNet152_conv5_body Box Head: ResNet_roi_conv5_head ، roi_2mlp_head ، roi_Xconv1fc_head ، roi_Xconv1fc_gn_head
رأس القناع: mask_rcnn_fcn_head_v0upshare ، mask_rcnn_fcn_head_v0up ، mask_rcnn_fcn_head_v1up ، mask_rcnn_fcn_head_v1up4convs ، mask_rcnn_fcn_head_v1up4convs_gn
رئيس Keypoints: roi_pose_head_v1convX
ملاحظة : التسمية مشابهة لتلك المستخدمة في اكتشافها. فقط قم بإزالة أي add_ .
يتم دعم Coco فقط في الوقت الحالي. ومع ذلك ، فإن تطبيق مكتبة مجموعات البيانات بأكملها متطابقة تقريبًا مع اكتشافها ، لذلك يجب أن يكون من السهل إضافة المزيد من مجموعات البيانات التي تدعمها Detectron.
يتم وضع ملفات التكوين المحددة للهندسة المعمارية ضمن التكوينات. يحتوي ملف التكوين العام lib/core/config.py على جميع الخيارات تقريبًا مع نفس القيم الافتراضية كما في Detectron ، لذلك من الجهد تحويل التكوينات الخاصة بالهندسة المعمارية من Detectron.
لا يتم استخدام بعض الخيارات من Detectron لأن الوظائف المقابلة لم يتم تنفيذها بعد. على سبيل المثال ، زيادة البيانات على الاختبار.
MODEL.LOAD_IMAGENET_PRETRAINED_WEIGHTS = True : ما إذا كان يجب تحميل أوزان pretriated ImageNet.RESNETS.IMAGENET_PRETRAINED_WEIGHTS = '' : مسار إلى أوزان الشبكة المتبقية المسبق. إذا ابدأ بـ '/' ، فسيتم التعامل معها كمسار مطلق. خلاف ذلك ، تعامل كمسار نسبي إلى ROOT_DIR .TRAIN.ASPECT_CROPPING = False ، TRAIN.ASPECT_HI = 2 ، TRAIN.ASPECT_LO = 0.5 : خيارات لاستنباط الجوانب لتقييد نطاق نسبة العرض إلى ارتفاع الصورة.RPN.OUT_DIM_AS_IN_DIM = True ، RPN.OUT_DIM = 512 ، RPN.CLS_ACTIVATION = 'sigmoid' : التنفيذ الرسمي لـ RPN له نفس قنوات ميزة الإدخال والمخرجات واستخدام sigmoid كدالة التنشيط لتنبؤ فئة Fg/bg. في تطبيق Jwyang ، يقوم بإصلاح رقم قناة الإخراج إلى 512 واستخدام SoftMax كدالة تنشيط.MODEL.NUM_CLASSES . سيتم تعيينه وفقًا لمجموعة البيانات المحددة بواسطة --dataset .TRAIN.DATASETS TEST.DATASETS TRAIN.WEIGHTSMODEL.CONV_BODY ، FAST_RCNN.ROI_BOX_HEAD ...) ، قم بإزالة add_ في السلسلة إذا كانت موجودة.RESNETS.IMAGENET_PRETRAINED_WEIGHTS التي تشير إلى ملف الوزن المسبق. إذا لم يكن الأمر كذلك ، قم بتعيين MODEL.LOAD_IMAGENET_PRETRAINED_WEIGHTS إلى False .OUTPUT_DIR: . في السطر الأخيرNUM_GPUS في ملف التكوين. يتم استخدامه لاستنتاج حجم الدُفعة الأصلي للتدريب ، وسيتم تحجيم معدل التعلم خطيًا وفقًا لتغيير حجم الدُفعات. يعد تعديل معدل التعلم المناسب مهمًا للتدريب مع حجم دفعة مختلفة.RESNETS.USE_GN: True . المعيار