मैं केवल एक वर्ग यानी सभी 84 वर्गों के व्यक्ति की भविष्यवाणी करना चाहता हूं जिनकी जांच की जा रही है और भविष्यवाणी की जा रही है।

YOLACT संदर्भ के लिए https://github.com/dbolya/yolact

परिणाम बहुत अच्छे हैं लेकिन मुझे लगता है कि मुझे केवल एक कोड को संशोधित करने की आवश्यकता है और बहुत ही कम तरीके से लेकिन मैं यह पता लगाने में सक्षम नहीं हूं

इससे संबंधित एक मुद्दा है जिसमें मैंने वही किया जो उन्होंने बताया जैसे Yolact/layers/output_utils.py में 4 लाइनें जोड़ना और कुछ नहीं बदलना। वे पंक्तियाँ इस प्रकार हैं:

boxes = torch.cat((boxes[classes==0], boxes[classes==2]),dim=0)
scores = torch.cat((scores[classes==0], scores[classes==2]),dim=0)
masks = torch.cat((masks[classes==0], masks[classes==2]),dim=0)
classes = torch.cat((classes[classes==0], classes[classes==2]),dim=0)

लेकिन यह निम्न त्रुटि देता है:

RuntimeError: strides[cur - 1] == sizes[cur] * strides[cur] INTERNAL ASSERT FAILED at 
/opt/conda/conda-bld/pytorch_1573049310284/work/torch/csrc/jit/fuser/executor.cpp:175, 
please report a bug to PyTorch. 
The above operation failed in interpreter, with the following stack trace:

terminate called without an active exception
Aborted (core dumped)

मैंने उल्लिखित स्थिति को जोड़ने का प्रयास किया लेकिन फिर भी यह त्रुटि देता है। मैं pytorch 1.3 using का उपयोग कर रहा हूँ

3
Areeb Muzaffar 28 सितंबर 2020, 17:26

1 उत्तर

सबसे बढ़िया उत्तर

अनुमान के समय एकल वर्ग (व्यक्ति, आईडी: 0) आउटपुट दिखाने के लिए, आपको बस जोड़ना होगा

cur_scores[1:] *= 0

cur_scores = conf_preds[batch_idx, 1:, :] के बाद yolact/ की लाइन 83 में लेयर्स/फंक्शन्स/डिटेक्शन.py

फिर दौड़ना

!python eval.py --trained_model=weights/yolact_resnet50_54_800000.pth --score_threshold=0.15 --top_k=15 --image=input_image.png:output_image.png

आपको एकल वर्ग अनुमान देगा।

जैसा कि लेखक ने issue#218 में बताया है:

आप एनएमएस गणना पर बचत करने के लिए परिवर्तन कर सकते हैं, बस cur_scores[<everything but your desired class>] *= 0 जोड़ें

सूचकांक के लिए, यदि आप केवल व्यक्ति (कक्षा 0) चाहते हैं, तो आप 1: डाल सकते हैं, लेकिन यदि आप इससे अधिक वर्ग चाहते हैं तो आपको 2 कथन करने होंगे: एक :<class_idx> और दूसरा <class_idx>+1 के साथ:। फिर जब आप eval चलाते हैं, तो इसे --cross_class_nms=True के साथ चलाएं और यह NMS से अन्य सभी वर्गों को हटा देगा।

दूसरी विधि output_utils.py में आउटपुट को संशोधित करना है।

1
kHarshit 29 सितंबर 2020, 07:51