██╗ ██╗ ██████╗ ██╗ █████╗ ██████╗████████╗
╚██╗ ██╔╝██╔═══██╗██║ ██╔══██╗██╔════╝╚══██╔══╝
╚████╔╝ ██║ ██║██║ ███████║██║ ██║
╚██╔╝ ██║ ██║██║ ██╔══██║██║ ██║
██║ ╚██████╔╝███████╗██║ ██║╚██████╗ ██║
╚═╝ ╚═════╝ ╚══════╝╚═╝ ╚═╝ ╚═════╝ ╚═╝
نموذج بسيط وتلافيف بالكامل لتجزئة مثيل في الوقت الفعلي. هذا هو رمز أوراقنا:
يعمل طراز Yolact ++ ResNet50 بسرعة 33.5 إطارًا في الثانية على Titan XP ويحقق 34.1 خريطة على test-dev 's Coco (راجع ورقة دفتر اليومية هنا).
من أجل استخدام YOLACT ++ ، تأكد من تجميع رمز DCNV2. (انظر التثبيت)
بعض الأمثلة من نموذج قاعدة yolact لدينا (33.5 إطارًا في الثانية على خريطة Titan XP وخريطة 29.8 على test-dev ):



git clone https://github.com/dbolya/yolact.git
cd yolactconda env create -f environment.yml # Cython needs to be installed before pycocotools
pip install cython
pip install opencv-python pillow pycocotools matplotlib ./data/coco . sh data/scripts/COCO.shtest-dev ، فقم بتنزيل test-dev باستخدام هذا البرنامج النصي. sh data/scripts/COCO_test.sh cd external/DCNv2
python setup.py build develop فيما يلي نماذج YOLACT الخاصة بنا (تم إصدارها في 5 أبريل 2019) إلى جانب FPS على Titan XP وخريطة على test-dev :
| حجم الصورة | العمود الفقري | FPS | رسم خريطة | الأوزان | |
|---|---|---|---|---|---|
| 550 | resnet50-FPN | 42.5 | 28.2 | YOLACT_RESNET50_54_800000.PTH | مرآة |
| 550 | DarkNet53-FPN | 40.0 | 28.7 | yolact_darknet53_54_800000.pth | مرآة |
| 550 | Resnet101-FPN | 33.5 | 29.8 | yolact_base_54_800000.pth | مرآة |
| 700 | Resnet101-FPN | 23.6 | 31.2 | YOLACT_IM700_54_800000.PTH | مرآة |
نماذج Yolact ++ (التي تم إصدارها في 16 ديسمبر 2019):
| حجم الصورة | العمود الفقري | FPS | رسم خريطة | الأوزان | |
|---|---|---|---|---|---|
| 550 | resnet50-FPN | 33.5 | 34.1 | YOLACT_PLUS_RESNET50_54_800000.PTH | مرآة |
| 550 | Resnet101-FPN | 27.3 | 34.6 | yolact_plus_base_54_800000.pth | مرآة |
لتقييم النموذج ، ضع ملف الأوزان المقابل في دليل ./weights وقم بتشغيل أحد الأوامر التالية. اسم كل تكوين هو كل شيء قبل الأرقام في اسم الملف (على سبيل المثال ، yolact_base لـ yolact_base_54_800000.pth ).
# Quantitatively evaluate a trained model on the entire validation set. Make sure you have COCO downloaded as above.
# This should get 29.92 validation mask mAP last time I checked.
python eval.py --trained_model=weights/yolact_base_54_800000.pth
# Output a COCOEval json to submit to the website or to use the run_coco_eval.py script.
# This command will create './results/bbox_detections.json' and './results/mask_detections.json' for detection and instance segmentation respectively.
python eval.py --trained_model=weights/yolact_base_54_800000.pth --output_coco_json
# You can run COCOEval on the files created in the previous command. The performance should match my implementation in eval.py.
python run_coco_eval.py
# To output a coco json file for test-dev, make sure you have test-dev downloaded from above and go
python eval.py --trained_model=weights/yolact_base_54_800000.pth --output_coco_json --dataset=coco2017_testdev_dataset # Display qualitative results on COCO. From here on I'll use a confidence threshold of 0.15.
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --display # Run just the raw model on the first 1k images of the validation set
python eval.py --trained_model=weights/yolact_base_54_800000.pth --benchmark --max_images=1000 # Display qualitative results on the specified image.
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --image=my_image.png
# Process an image and save it to another file.
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --image=input_image.png:output_image.png
# Process a whole folder of images.
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --images=path/to/input/folder:path/to/output/folder # Display a video in real-time. "--video_multiframe" will process that many frames at once for improved performance.
# If you want, use "--display_fps" to draw the FPS directly on the frame.
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --video_multiframe=4 --video=my_video.mp4
# Display a webcam feed in real-time. If you have multiple webcams pass the index of the webcam you want instead of 0.
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --video_multiframe=4 --video=0
# Process a video and save it to another file. This uses the same pipeline as the ones above now, so it's fast!
python eval.py --trained_model=weights/yolact_base_54_800000.pth --score_threshold=0.15 --top_k=15 --video_multiframe=4 --video=input_video.mp4:output_video.mp4 كما يمكنك أن تقول ، يمكن أن تفعل eval.py الكثير من الأشياء. قم بتشغيل أمر --help لرؤية كل ما يمكن أن يفعله.
python eval.py --helpبشكل افتراضي ، نتدرب على كوكو. تأكد من تنزيل مجموعة البيانات بأكملها باستخدام الأوامر أعلاه.
./weightsresnet101_reducedfc.pth من هنا.resnet50-19c8e357.pth من هنا.darknet53.pth من هنا.*_interrupt.pth في التكرار الحالي../weights افتراضيًا مع اسم الملف <config>_<epoch>_<iter>.pth . # Trains using the base config with a batch size of 8 (the default).
python train.py --config=yolact_base_config
# Trains yolact_base_config with a batch_size of 5. For the 550px models, 1 batch takes up around 1.5 gigs of VRAM, so specify accordingly.
python train.py --config=yolact_base_config --batch_size=5
# Resume training yolact_base with a specific weight file and start from the iteration specified in the weight file's name.
python train.py --config=yolact_base_config --resume=weights/yolact_base_10_32100.pth --start_iter=-1
# Use the help option to see a description of all available command line arguments
python train.py --helpيدعم Yolact الآن معالجة وحدات معالجة الرسومات المتعددة بسلاسة أثناء التدريب:
export CUDA_VISIBLE_DEVICES=[gpus]nvidia-smi .8*num_gpus مع أوامر التدريب أعلاه. سيقوم البرنامج النصي التدريبي تلقائيًا بتوسيع نطاق المقاييس المفرطة إلى القيم الصحيحة.--batch_alloc=[alloc] حيث [تخصيص] قائمة مفصولة فاصلة تحتوي على عدد الصور على كل وحدة معالجة الرسومات. هذا يجب أن يلخص batch_size . تقوم Yolact الآن بتسجيل معلومات التدريب والتحقق من الصحة بشكل افتراضي. يمكنك تعطيل هذا مع --no_log . سيأتي دليل حول كيفية تصور هذه السجلات قريبًا ، ولكن يمكنك الآن النظر في LogVizualizer في utils/logger.py للحصول على المساعدة.
ندرج أيضًا تكوينًا للتدريب على تعليقات Pascal SBD (للتجربة السريعة أو المقارنة مع الطرق الأخرى). للتدريب على Pascal SBD ، تابع الخطوات التالية:
benchmark.tgz ).dataset/img . ./data/sbd/img . dataset/img ./data/sbd./data/sbd/ .--config=yolact_resnet50_pascal_config . تحقق من هذا التكوين لمعرفة كيفية تمديده إلى نماذج أخرى. سأقوم بأتمتة كل هذا مع البرنامج النصي قريبًا ، لا تقلق. أيضًا ، إذا كنت تريد البرنامج النصي الذي اعتدت عليه لتحويل التعليقات التوضيحية ، فأنا وضعه في ./scripts/convert_sbd.py ، ولكن عليك التحقق من كيفية عمله لتكون قادرًا على استخدامه لأنني لا أتذكر بالفعل في هذه المرحلة.
إذا كنت ترغب في التحقق من نتائجنا ، فيمكنك تنزيل أوزان yolact_resnet50_pascal_config من هنا. يجب أن يحصل هذا النموذج على 72.3 قناع AP_50 و 56.2 قناع AP_70. لاحظ أن "All" AP ليس هو نفسه "Vol" AP المبلغ عنه في أوراق أخرى لـ Pascal (يستخدمون متوسطات العتبات من 0.1 - 0.9 بزيادات من 0.1 بدلاً من ما يستخدمه Coco).
يمكنك أيضًا التدريب على مجموعة البيانات الخاصة بك باتباع هذه الخطوات:
infoliscenseimage : license, flickr_url, coco_url, date_capturedcategories (نستخدم تنسيقنا الخاص للفئات ، انظر أدناه)dataset_base في data/config.py (انظر التعليقات في dataset_base للحصول على شرح لكل حقل): my_custom_dataset = dataset_base . copy ({
'name' : 'My Dataset' ,
'train_images' : 'path_to_training_images' ,
'train_info' : 'path_to_training_annotation' ,
'valid_images' : 'path_to_validation_images' ,
'valid_info' : 'path_to_validation_annotation' ,
'has_gt' : True ,
'class_names' : ( 'my_class_id_1' , 'my_class_id_2' , 'my_class_id_3' , ...)
})class_names . إذا لم يكن هذا هو الحال بالنسبة لملف التعليقات التوضيحية الخاصة بك (كما هو الحال في COCO) ، راجع الحقل label_map في dataset_base .python train.py --help ) ، سيقوم train.py بإخراج خريطة التحقق من الصحة لأول 5000 صورة في مجموعة البيانات كل عصران.yolact_base_config في نفس الملف ، قم بتغيير القيمة لـ 'dataset' إلى 'my_custom_dataset' أو أي شيء قمت بتسمية كائن التكوين أعلاه. ثم يمكنك استخدام أي من أوامر التدريب في القسم السابق. شاهد هذا المنشور اللطيف بواسطة @amit12690 للحصول على نصائح حول كيفية التعليق على مجموعة بيانات مخصصة وإعدادها للاستخدام مع yolact.
إذا كنت تستخدم YOLACT أو قاعدة الرموز هذه في عملك ، يرجى الاستشهاد
@inproceedings{yolact-iccv2019,
author = {Daniel Bolya and Chong Zhou and Fanyi Xiao and Yong Jae Lee},
title = {YOLACT: {Real-time} Instance Segmentation},
booktitle = {ICCV},
year = {2019},
}
لـ Yolact ++ ، يرجى الاستشهاد
@article{yolact-plus-tpami2020,
author = {Daniel Bolya and Chong Zhou and Fanyi Xiao and Yong Jae Lee},
journal = {IEEE Transactions on Pattern Analysis and Machine Intelligence},
title = {YOLACT++: Better Real-time Instance Segmentation},
year = {2020},
}
للحصول على أسئلة حول ورقنا أو رمزنا ، يرجى الاتصال بـ Daniel Bolya.