Repository files navigation

Introduction

MutualGuide is a compact object detector specially designed for edge computing devices. Comparing to existing detectors, this repo contains two key features.

Firstly, the Mutual Guidance mecanism assigns labels to the classification task based on the prediction on the localization task, and vice versa, alleviating the misalignment problem between both tasks; Secondly, the teacher-student prediction disagreements guides the knowledge transfer in a feature-based detection distillation framework, thereby reducing the performance gap between both models.

For more details, please refer to our ACCV paper and BMVC paper.

Planning

  • Train medium and large models.
  • Add SIOU loss.
  • Add CspDarknet backbone.
  • Add RepVGG backbone.
  • Add ShuffleNetV2 backbone.
  • Add SwinTransformer backbone.
  • Add TensorRT transform code for inference acceleration.
  • Add vis function to plot detection results.
  • Add custom dataset training (annotations in XML format).
  • Add PolyLoss, improve mAP by ~0.3%.

Benchmark

BackboneSizeAPval
0.5:0.95
APval
0.5
APval
0.75
APval
small
APval
medium
APval
large
Params
(M)
FLOPs
(G)
Speed
(ms)
cspdarknet-0.75640x64043.061.146.224.250.059.924.3224.0211.4(3060)
cspdarknet-0.5640x64040.458.443.321.046.458.017.4012.676.5(3060)
resnet18640x64040.458.543.319.946.558.922.0922.958.5(3060)
repvgg-A0640x64039.958.242.520.346.157.912.3018.407.5(3060)
shufflenet-1.5640x64035.753.937.916.541.353.52.552.655.6(3060)
shufflenet-1.0640x64031.849.033.113.635.848.41.501.475.4(3060)

Remarks:

  • The precision is measured on the COCO2017 Val dataset.
  • The inference runtime is measured by Pytorch framework (without TensorRT acceleration) on a GTX 3060 GPU, and the post-processing time (e.g., NMS) is not included (i.e., we measure the model inference time).
  • To dowload from Baidu cloud, go to this link (password: mugu).

Datasets

First download the COCO2017 dataset, you may find the sripts in data/scripts/ helpful. Then modify the parameter self.root in data/coco.py to the path of COCO dataset:

self.root=os.path.join("/home/heng/Documents/Datasets/", "COCO/")

Remarks:

  • For training on custom dataset, first modify the dataset path and categories XML_CLASSES in data/xml_dataset.py. Then apply --dataset XML.

Training

For training with Mutual Guide:

$ python3 train.py --neck ssd --backbone vgg16 --dataset COCO
fpn resnet34 VOC
pafpn repvgg-A2 XML
cspdarknet-0.75
shufflenet-1.0
swin-T

For knowledge distillation using PDF-Distil:

$ python3 distil.py --neck ssd --backbone vgg11 --dataset COCO --kd pdf
fpn resnet18 VOC
pafpn repvgg-A1 XML
cspdarknet-0.5
shufflenet-0.5

Remarks:

  • For training without MutualGuide, just use the --mutual_guide False;
  • For training on custom dataset, convert your annotations into XML format and use the parameter --dataset XML. An example is given in datasets/XML/;
  • For knowledge distillation with traditional MSE loss, just use parameter --kd mse;
  • The default folder to save trained model is weights/.

Evaluation

Every time you want to evaluate a trained network:

$ python3 test.py --neck ssd --backbone vgg11 --dataset COCO --trained_model path_to_saved_weights --vis
fpn resnet18 VOC
pafpn repvgg-A1 XML
cspdarknet-0.5
shufflenet-0.5

Remarks:

  • It will directly print the mAP, AP50 and AP50 results on COCO2017 Val;
  • Add parameter --vis to draw detection results. They will be saved in vis/VOC/ or vis/COCO/ or vis/XML/;

Citing us

Please cite our papers in your publications if they help your research:

@InProceedings{Zhang_2020_ACCV,
author = {Zhang, Heng and Fromont, Elisa and Lefevre, Sebastien and Avignon, Bruno},
title = {Localize to Classify and Classify to Localize: Mutual Guidance in Object Detection},
booktitle = {Proceedings of the Asian Conference on Computer Vision (ACCV)},
month = {November},
year = {2020}
}
@InProceedings{Zhang_2021_BMVC,
author = {Zhang, Heng and Fromont, Elisa and Lefevre, Sebastien and Avignon, Bruno},
title = {PDF-Distil: including Prediction Disagreements in Feature-based Distillation for object detection},
booktitle = {Proceedings of the British Machine Vision Conference (BMVC)},
month = {November},
year = {2021}
}

Acknowledgement

This project contains pieces of code from the following projects: ssd.pytorch, rfbnet, mmdetection and yolox.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Introduction

MutualGuide is a compact object detector specially designed for edge computing devices. Comparing to existing detectors, this repo contains two key features.

Firstly, the Mutual Guidance mecanism assigns labels to the classification task based on the prediction on the localization task, and vice versa, alleviating the misalignment problem between both tasks; Secondly, the teacher-student prediction disagreements guides the knowledge transfer in a feature-based detection distillation framework, thereby reducing the performance gap between both models.

For more details, please refer to our ACCV paper and BMVC paper.

Planning

  • Train medium and large models.
  • Add SIOU loss.
  • Add CspDarknet backbone.
  • Add RepVGG backbone.
  • Add ShuffleNetV2 backbone.
  • Add SwinTransformer backbone.
  • Add TensorRT transform code for inference acceleration.
  • Add vis function to plot detection results.
  • Add custom dataset training (annotations in XML format).
  • Add PolyLoss, improve mAP by ~0.3%.

Benchmark

BackboneSizeAPval
0.5:0.95
APval
0.5
APval
0.75
APval
small
APval
medium
APval
large
Params
(M)
FLOPs
(G)
Speed
(ms)
cspdarknet-0.75640x64043.061.146.224.250.059.924.3224.0211.4(3060)
cspdarknet-0.5640x64040.458.443.321.046.458.017.4012.676.5(3060)
resnet18640x64040.458.543.319.946.558.922.0922.958.5(3060)
repvgg-A0640x64039.958.242.520.346.157.912.3018.407.5(3060)
shufflenet-1.5640x64035.753.937.916.541.353.52.552.655.6(3060)
shufflenet-1.0640x64031.849.033.113.635.848.41.501.475.4(3060)

Remarks:

  • The precision is measured on the COCO2017 Val dataset.
  • The inference runtime is measured by Pytorch framework (without TensorRT acceleration) on a GTX 3060 GPU, and the post-processing time (e.g., NMS) is not included (i.e., we measure the model inference time).
  • To dowload from Baidu cloud, go to this link (password: mugu).

Datasets

First download the COCO2017 dataset, you may find the sripts in data/scripts/ helpful. Then modify the parameter self.root in data/coco.py to the path of COCO dataset:

self.root=os.path.join("/home/heng/Documents/Datasets/", "COCO/")

Remarks:

  • For training on custom dataset, first modify the dataset path and categories XML_CLASSES in data/xml_dataset.py. Then apply --dataset XML.

Training

For training with Mutual Guide:

$ python3 train.py --neck ssd --backbone vgg16 --dataset COCO
fpn resnet34 VOC
pafpn repvgg-A2 XML
cspdarknet-0.75
shufflenet-1.0
swin-T

For knowledge distillation using PDF-Distil:

$ python3 distil.py --neck ssd --backbone vgg11 --dataset COCO --kd pdf
fpn resnet18 VOC
pafpn repvgg-A1 XML
cspdarknet-0.5
shufflenet-0.5

Remarks:

  • For training without MutualGuide, just use the --mutual_guide False;
  • For training on custom dataset, convert your annotations into XML format and use the parameter --dataset XML. An example is given in datasets/XML/;
  • For knowledge distillation with traditional MSE loss, just use parameter --kd mse;
  • The default folder to save trained model is weights/.

Evaluation

Every time you want to evaluate a trained network:

$ python3 test.py --neck ssd --backbone vgg11 --dataset COCO --trained_model path_to_saved_weights --vis
fpn resnet18 VOC
pafpn repvgg-A1 XML
cspdarknet-0.5
shufflenet-0.5

Remarks:

  • It will directly print the mAP, AP50 and AP50 results on COCO2017 Val;
  • Add parameter --vis to draw detection results. They will be saved in vis/VOC/ or vis/COCO/ or vis/XML/;

Citing us

Please cite our papers in your publications if they help your research:

@InProceedings{Zhang_2020_ACCV,
author = {Zhang, Heng and Fromont, Elisa and Lefevre, Sebastien and Avignon, Bruno},
title = {Localize to Classify and Classify to Localize: Mutual Guidance in Object Detection},
booktitle = {Proceedings of the Asian Conference on Computer Vision (ACCV)},
month = {November},
year = {2020}
}
@InProceedings{Zhang_2021_BMVC,
author = {Zhang, Heng and Fromont, Elisa and Lefevre, Sebastien and Avignon, Bruno},
title = {PDF-Distil: including Prediction Disagreements in Feature-based Distillation for object detection},
booktitle = {Proceedings of the British Machine Vision Conference (BMVC)},
month = {November},
year = {2021}
}

Acknowledgement

This project contains pieces of code from the following projects: ssd.pytorch, rfbnet, mmdetection and yolox.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Introduction

MutualGuide is a compact object detector specially designed for edge computing devices. Comparing to existing detectors, this repo contains two key features.

Firstly, the Mutual Guidance mecanism assigns labels to the classification task based on the prediction on the localization task, and vice versa, alleviating the misalignment problem between both tasks; Secondly, the teacher-student prediction disagreements guides the knowledge transfer in a feature-based detection distillation framework, thereby reducing the performance gap between both models.

For more details, please refer to our ACCV paper and BMVC paper.

Planning

  • Train medium and large models.
  • Add SIOU loss.
  • Add CspDarknet backbone.
  • Add RepVGG backbone.
  • Add ShuffleNetV2 backbone.
  • Add SwinTransformer backbone.
  • Add TensorRT transform code for inference acceleration.
  • Add vis function to plot detection results.
  • Add custom dataset training (annotations in XML format).
  • Add PolyLoss, improve mAP by ~0.3%.

Benchmark

BackboneSizeAPval
0.5:0.95
APval
0.5
APval
0.75
APval
small
APval
medium
APval
large
Params
(M)
FLOPs
(G)
Speed
(ms)
cspdarknet-0.75640x64043.061.146.224.250.059.924.3224.0211.4(3060)
cspdarknet-0.5640x64040.458.443.321.046.458.017.4012.676.5(3060)
resnet18640x64040.458.543.319.946.558.922.0922.958.5(3060)
repvgg-A0640x64039.958.242.520.346.157.912.3018.407.5(3060)
shufflenet-1.5640x64035.753.937.916.541.353.52.552.655.6(3060)
shufflenet-1.0640x64031.849.033.113.635.848.41.501.475.4(3060)

Remarks:

  • The precision is measured on the COCO2017 Val dataset.
  • The inference runtime is measured by Pytorch framework (without TensorRT acceleration) on a GTX 3060 GPU, and the post-processing time (e.g., NMS) is not included (i.e., we measure the model inference time).
  • To dowload from Baidu cloud, go to this link (password: mugu).

Datasets

First download the COCO2017 dataset, you may find the sripts in data/scripts/ helpful. Then modify the parameter self.root in data/coco.py to the path of COCO dataset:

self.root=os.path.join("/home/heng/Documents/Datasets/", "COCO/")

Remarks:

  • For training on custom dataset, first modify the dataset path and categories XML_CLASSES in data/xml_dataset.py. Then apply --dataset XML.

Training

For training with Mutual Guide:

$ python3 train.py --neck ssd --backbone vgg16 --dataset COCO
fpn resnet34 VOC
pafpn repvgg-A2 XML
cspdarknet-0.75
shufflenet-1.0
swin-T

For knowledge distillation using PDF-Distil:

$ python3 distil.py --neck ssd --backbone vgg11 --dataset COCO --kd pdf
fpn resnet18 VOC
pafpn repvgg-A1 XML
cspdarknet-0.5
shufflenet-0.5

Remarks:

  • For training without MutualGuide, just use the --mutual_guide False;
  • For training on custom dataset, convert your annotations into XML format and use the parameter --dataset XML. An example is given in datasets/XML/;
  • For knowledge distillation with traditional MSE loss, just use parameter --kd mse;
  • The default folder to save trained model is weights/.

Evaluation

Every time you want to evaluate a trained network:

$ python3 test.py --neck ssd --backbone vgg11 --dataset COCO --trained_model path_to_saved_weights --vis
fpn resnet18 VOC
pafpn repvgg-A1 XML
cspdarknet-0.5
shufflenet-0.5

Remarks:

  • It will directly print the mAP, AP50 and AP50 results on COCO2017 Val;
  • Add parameter --vis to draw detection results. They will be saved in vis/VOC/ or vis/COCO/ or vis/XML/;

Citing us

Please cite our papers in your publications if they help your research:

@InProceedings{Zhang_2020_ACCV,
author = {Zhang, Heng and Fromont, Elisa and Lefevre, Sebastien and Avignon, Bruno},
title = {Localize to Classify and Classify to Localize: Mutual Guidance in Object Detection},
booktitle = {Proceedings of the Asian Conference on Computer Vision (ACCV)},
month = {November},
year = {2020}
}
@InProceedings{Zhang_2021_BMVC,
author = {Zhang, Heng and Fromont, Elisa and Lefevre, Sebastien and Avignon, Bruno},
title = {PDF-Distil: including Prediction Disagreements in Feature-based Distillation for object detection},
booktitle = {Proceedings of the British Machine Vision Conference (BMVC)},
month = {November},
year = {2021}
}

Acknowledgement

This project contains pieces of code from the following projects: ssd.pytorch, rfbnet, mmdetection and yolox.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Introduction

MutualGuide is a compact object detector specially designed for edge computing devices. Comparing to existing detectors, this repo contains two key features.

Firstly, the Mutual Guidance mecanism assigns labels to the classification task based on the prediction on the localization task, and vice versa, alleviating the misalignment problem between both tasks; Secondly, the teacher-student prediction disagreements guides the knowledge transfer in a feature-based detection distillation framework, thereby reducing the performance gap between both models.

For more details, please refer to our ACCV paper and BMVC paper.

Planning

  • Train medium and large models.
  • Add SIOU loss.
  • Add CspDarknet backbone.
  • Add RepVGG backbone.
  • Add ShuffleNetV2 backbone.
  • Add SwinTransformer backbone.
  • Add TensorRT transform code for inference acceleration.
  • Add vis function to plot detection results.
  • Add custom dataset training (annotations in XML format).
  • Add PolyLoss, improve mAP by ~0.3%.

Benchmark

BackboneSizeAPval
0.5:0.95
APval
0.5
APval
0.75
APval
small
APval
medium
APval
large
Params
(M)
FLOPs
(G)
Speed
(ms)
cspdarknet-0.75640x64043.061.146.224.250.059.924.3224.0211.4(3060)
cspdarknet-0.5640x64040.458.443.321.046.458.017.4012.676.5(3060)
resnet18640x64040.458.543.319.946.558.922.0922.958.5(3060)
repvgg-A0640x64039.958.242.520.346.157.912.3018.407.5(3060)
shufflenet-1.5640x64035.753.937.916.541.353.52.552.655.6(3060)
shufflenet-1.0640x64031.849.033.113.635.848.41.501.475.4(3060)

Remarks:

  • The precision is measured on the COCO2017 Val dataset.
  • The inference runtime is measured by Pytorch framework (without TensorRT acceleration) on a GTX 3060 GPU, and the post-processing time (e.g., NMS) is not included (i.e., we measure the model inference time).
  • To dowload from Baidu cloud, go to this link (password: mugu).

Datasets

First download the COCO2017 dataset, you may find the sripts in data/scripts/ helpful. Then modify the parameter self.root in data/coco.py to the path of COCO dataset:

self.root=os.path.join("/home/heng/Documents/Datasets/", "COCO/")

Remarks:

  • For training on custom dataset, first modify the dataset path and categories XML_CLASSES in data/xml_dataset.py. Then apply --dataset XML.

Training

For training with Mutual Guide:

$ python3 train.py --neck ssd --backbone vgg16 --dataset COCO
fpn resnet34 VOC
pafpn repvgg-A2 XML
cspdarknet-0.75
shufflenet-1.0
swin-T

For knowledge distillation using PDF-Distil:

$ python3 distil.py --neck ssd --backbone vgg11 --dataset COCO --kd pdf
fpn resnet18 VOC
pafpn repvgg-A1 XML
cspdarknet-0.5
shufflenet-0.5

Remarks:

  • For training without MutualGuide, just use the --mutual_guide False;
  • For training on custom dataset, convert your annotations into XML format and use the parameter --dataset XML. An example is given in datasets/XML/;
  • For knowledge distillation with traditional MSE loss, just use parameter --kd mse;
  • The default folder to save trained model is weights/.

Evaluation

Every time you want to evaluate a trained network:

$ python3 test.py --neck ssd --backbone vgg11 --dataset COCO --trained_model path_to_saved_weights --vis
fpn resnet18 VOC
pafpn repvgg-A1 XML
cspdarknet-0.5
shufflenet-0.5

Remarks:

  • It will directly print the mAP, AP50 and AP50 results on COCO2017 Val;
  • Add parameter --vis to draw detection results. They will be saved in vis/VOC/ or vis/COCO/ or vis/XML/;

Citing us

Please cite our papers in your publications if they help your research:

@InProceedings{Zhang_2020_ACCV,
author = {Zhang, Heng and Fromont, Elisa and Lefevre, Sebastien and Avignon, Bruno},
title = {Localize to Classify and Classify to Localize: Mutual Guidance in Object Detection},
booktitle = {Proceedings of the Asian Conference on Computer Vision (ACCV)},
month = {November},
year = {2020}
}
@InProceedings{Zhang_2021_BMVC,
author = {Zhang, Heng and Fromont, Elisa and Lefevre, Sebastien and Avignon, Bruno},
title = {PDF-Distil: including Prediction Disagreements in Feature-based Distillation for object detection},
booktitle = {Proceedings of the British Machine Vision Conference (BMVC)},
month = {November},
year = {2021}
}

Acknowledgement

This project contains pieces of code from the following projects: ssd.pytorch, rfbnet, mmdetection and yolox.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Introduction

MutualGuide is a compact object detector specially designed for edge computing devices. Comparing to existing detectors, this repo contains two key features.

Firstly, the Mutual Guidance mecanism assigns labels to the classification task based on the prediction on the localization task, and vice versa, alleviating the misalignment problem between both tasks; Secondly, the teacher-student prediction disagreements guides the knowledge transfer in a feature-based detection distillation framework, thereby reducing the performance gap between both models.

For more details, please refer to our ACCV paper and BMVC paper.

Planning

  • Train medium and large models.
  • Add SIOU loss.
  • Add CspDarknet backbone.
  • Add RepVGG backbone.
  • Add ShuffleNetV2 backbone.
  • Add SwinTransformer backbone.
  • Add TensorRT transform code for inference acceleration.
  • Add vis function to plot detection results.
  • Add custom dataset training (annotations in XML format).
  • Add PolyLoss, improve mAP by ~0.3%.

Benchmark

BackboneSizeAPval
0.5:0.95
APval
0.5
APval
0.75
APval
small
APval
medium
APval
large
Params
(M)
FLOPs
(G)
Speed
(ms)
cspdarknet-0.75640x64043.061.146.224.250.059.924.3224.0211.4(3060)
cspdarknet-0.5640x64040.458.443.321.046.458.017.4012.676.5(3060)
resnet18640x64040.458.543.319.946.558.922.0922.958.5(3060)
repvgg-A0640x64039.958.242.520.346.157.912.3018.407.5(3060)
shufflenet-1.5640x64035.753.937.916.541.353.52.552.655.6(3060)
shufflenet-1.0640x64031.849.033.113.635.848.41.501.475.4(3060)

Remarks:

  • The precision is measured on the COCO2017 Val dataset.
  • The inference runtime is measured by Pytorch framework (without TensorRT acceleration) on a GTX 3060 GPU, and the post-processing time (e.g., NMS) is not included (i.e., we measure the model inference time).
  • To dowload from Baidu cloud, go to this link (password: mugu).

Datasets

First download the COCO2017 dataset, you may find the sripts in data/scripts/ helpful. Then modify the parameter self.root in data/coco.py to the path of COCO dataset:

self.root=os.path.join("/home/heng/Documents/Datasets/", "COCO/")

Remarks:

  • For training on custom dataset, first modify the dataset path and categories XML_CLASSES in data/xml_dataset.py. Then apply --dataset XML.

Training

For training with Mutual Guide:

$ python3 train.py --neck ssd --backbone vgg16 --dataset COCO
fpn resnet34 VOC
pafpn repvgg-A2 XML
cspdarknet-0.75
shufflenet-1.0
swin-T

For knowledge distillation using PDF-Distil:

$ python3 distil.py --neck ssd --backbone vgg11 --dataset COCO --kd pdf
fpn resnet18 VOC
pafpn repvgg-A1 XML
cspdarknet-0.5
shufflenet-0.5

Remarks:

  • For training without MutualGuide, just use the --mutual_guide False;
  • For training on custom dataset, convert your annotations into XML format and use the parameter --dataset XML. An example is given in datasets/XML/;
  • For knowledge distillation with traditional MSE loss, just use parameter --kd mse;
  • The default folder to save trained model is weights/.

Evaluation

Every time you want to evaluate a trained network:

$ python3 test.py --neck ssd --backbone vgg11 --dataset COCO --trained_model path_to_saved_weights --vis
fpn resnet18 VOC
pafpn repvgg-A1 XML
cspdarknet-0.5
shufflenet-0.5

Remarks:

  • It will directly print the mAP, AP50 and AP50 results on COCO2017 Val;
  • Add parameter --vis to draw detection results. They will be saved in vis/VOC/ or vis/COCO/ or vis/XML/;

Citing us

Please cite our papers in your publications if they help your research:

@InProceedings{Zhang_2020_ACCV,
author = {Zhang, Heng and Fromont, Elisa and Lefevre, Sebastien and Avignon, Bruno},
title = {Localize to Classify and Classify to Localize: Mutual Guidance in Object Detection},
booktitle = {Proceedings of the Asian Conference on Computer Vision (ACCV)},
month = {November},
year = {2020}
}
@InProceedings{Zhang_2021_BMVC,
author = {Zhang, Heng and Fromont, Elisa and Lefevre, Sebastien and Avignon, Bruno},
title = {PDF-Distil: including Prediction Disagreements in Feature-based Distillation for object detection},
booktitle = {Proceedings of the British Machine Vision Conference (BMVC)},
month = {November},
year = {2021}
}

Acknowledgement

This project contains pieces of code from the following projects: ssd.pytorch, rfbnet, mmdetection and yolox.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Introduction

MutualGuide is a compact object detector specially designed for edge computing devices. Comparing to existing detectors, this repo contains two key features.

Firstly, the Mutual Guidance mecanism assigns labels to the classification task based on the prediction on the localization task, and vice versa, alleviating the misalignment problem between both tasks; Secondly, the teacher-student prediction disagreements guides the knowledge transfer in a feature-based detection distillation framework, thereby reducing the performance gap between both models.

For more details, please refer to our ACCV paper and BMVC paper.

Planning

  • Train medium and large models.
  • Add SIOU loss.
  • Add CspDarknet backbone.
  • Add RepVGG backbone.
  • Add ShuffleNetV2 backbone.
  • Add SwinTransformer backbone.
  • Add TensorRT transform code for inference acceleration.
  • Add vis function to plot detection results.
  • Add custom dataset training (annotations in XML format).
  • Add PolyLoss, improve mAP by ~0.3%.

Benchmark

BackboneSizeAPval
0.5:0.95
APval
0.5
APval
0.75
APval
small
APval
medium
APval
large
Params
(M)
FLOPs
(G)
Speed
(ms)
cspdarknet-0.75640x64043.061.146.224.250.059.924.3224.0211.4(3060)
cspdarknet-0.5640x64040.458.443.321.046.458.017.4012.676.5(3060)
resnet18640x64040.458.543.319.946.558.922.0922.958.5(3060)
repvgg-A0640x64039.958.242.520.346.157.912.3018.407.5(3060)
shufflenet-1.5640x64035.753.937.916.541.353.52.552.655.6(3060)
shufflenet-1.0640x64031.849.033.113.635.848.41.501.475.4(3060)

Remarks:

  • The precision is measured on the COCO2017 Val dataset.
  • The inference runtime is measured by Pytorch framework (without TensorRT acceleration) on a GTX 3060 GPU, and the post-processing time (e.g., NMS) is not included (i.e., we measure the model inference time).
  • To dowload from Baidu cloud, go to this link (password: mugu).

Datasets

First download the COCO2017 dataset, you may find the sripts in data/scripts/ helpful. Then modify the parameter self.root in data/coco.py to the path of COCO dataset:

self.root=os.path.join("/home/heng/Documents/Datasets/", "COCO/")

Remarks:

  • For training on custom dataset, first modify the dataset path and categories XML_CLASSES in data/xml_dataset.py. Then apply --dataset XML.

Training

For training with Mutual Guide:

$ python3 train.py --neck ssd --backbone vgg16 --dataset COCO
fpn resnet34 VOC
pafpn repvgg-A2 XML
cspdarknet-0.75
shufflenet-1.0
swin-T

For knowledge distillation using PDF-Distil:

$ python3 distil.py --neck ssd --backbone vgg11 --dataset COCO --kd pdf
fpn resnet18 VOC
pafpn repvgg-A1 XML
cspdarknet-0.5
shufflenet-0.5

Remarks:

  • For training without MutualGuide, just use the --mutual_guide False;
  • For training on custom dataset, convert your annotations into XML format and use the parameter --dataset XML. An example is given in datasets/XML/;
  • For knowledge distillation with traditional MSE loss, just use parameter --kd mse;
  • The default folder to save trained model is weights/.

Evaluation

Every time you want to evaluate a trained network:

$ python3 test.py --neck ssd --backbone vgg11 --dataset COCO --trained_model path_to_saved_weights --vis
fpn resnet18 VOC
pafpn repvgg-A1 XML
cspdarknet-0.5
shufflenet-0.5

Remarks:

  • It will directly print the mAP, AP50 and AP50 results on COCO2017 Val;
  • Add parameter --vis to draw detection results. They will be saved in vis/VOC/ or vis/COCO/ or vis/XML/;

Citing us

Please cite our papers in your publications if they help your research:

@InProceedings{Zhang_2020_ACCV,
author = {Zhang, Heng and Fromont, Elisa and Lefevre, Sebastien and Avignon, Bruno},
title = {Localize to Classify and Classify to Localize: Mutual Guidance in Object Detection},
booktitle = {Proceedings of the Asian Conference on Computer Vision (ACCV)},
month = {November},
year = {2020}
}
@InProceedings{Zhang_2021_BMVC,
author = {Zhang, Heng and Fromont, Elisa and Lefevre, Sebastien and Avignon, Bruno},
title = {PDF-Distil: including Prediction Disagreements in Feature-based Distillation for object detection},
booktitle = {Proceedings of the British Machine Vision Conference (BMVC)},
month = {November},
year = {2021}
}

Acknowledgement

This project contains pieces of code from the following projects: ssd.pytorch, rfbnet, mmdetection and yolox.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Introduction

MutualGuide is a compact object detector specially designed for edge computing devices. Comparing to existing detectors, this repo contains two key features.

Firstly, the Mutual Guidance mecanism assigns labels to the classification task based on the prediction on the localization task, and vice versa, alleviating the misalignment problem between both tasks; Secondly, the teacher-student prediction disagreements guides the knowledge transfer in a feature-based detection distillation framework, thereby reducing the performance gap between both models.

For more details, please refer to our ACCV paper and BMVC paper.

Planning

  • Train medium and large models.
  • Add SIOU loss.
  • Add CspDarknet backbone.
  • Add RepVGG backbone.
  • Add ShuffleNetV2 backbone.
  • Add SwinTransformer backbone.
  • Add TensorRT transform code for inference acceleration.
  • Add vis function to plot detection results.
  • Add custom dataset training (annotations in XML format).
  • Add PolyLoss, improve mAP by ~0.3%.

Benchmark

BackboneSizeAPval
0.5:0.95
APval
0.5
APval
0.75
APval
small
APval
medium
APval
large
Params
(M)
FLOPs
(G)
Speed
(ms)
cspdarknet-0.75640x64043.061.146.224.250.059.924.3224.0211.4(3060)
cspdarknet-0.5640x64040.458.443.321.046.458.017.4012.676.5(3060)
resnet18640x64040.458.543.319.946.558.922.0922.958.5(3060)
repvgg-A0640x64039.958.242.520.346.157.912.3018.407.5(3060)
shufflenet-1.5640x64035.753.937.916.541.353.52.552.655.6(3060)
shufflenet-1.0640x64031.849.033.113.635.848.41.501.475.4(3060)

Remarks:

  • The precision is measured on the COCO2017 Val dataset.
  • The inference runtime is measured by Pytorch framework (without TensorRT acceleration) on a GTX 3060 GPU, and the post-processing time (e.g., NMS) is not included (i.e., we measure the model inference time).
  • To dowload from Baidu cloud, go to this link (password: mugu).

Datasets

First download the COCO2017 dataset, you may find the sripts in data/scripts/ helpful. Then modify the parameter self.root in data/coco.py to the path of COCO dataset:

self.root=os.path.join("/home/heng/Documents/Datasets/", "COCO/")

Remarks:

  • For training on custom dataset, first modify the dataset path and categories XML_CLASSES in data/xml_dataset.py. Then apply --dataset XML.

Training

For training with Mutual Guide:

$ python3 train.py --neck ssd --backbone vgg16 --dataset COCO
fpn resnet34 VOC
pafpn repvgg-A2 XML
cspdarknet-0.75
shufflenet-1.0
swin-T

For knowledge distillation using PDF-Distil:

$ python3 distil.py --neck ssd --backbone vgg11 --dataset COCO --kd pdf
fpn resnet18 VOC
pafpn repvgg-A1 XML
cspdarknet-0.5
shufflenet-0.5

Remarks:

  • For training without MutualGuide, just use the --mutual_guide False;
  • For training on custom dataset, convert your annotations into XML format and use the parameter --dataset XML. An example is given in datasets/XML/;
  • For knowledge distillation with traditional MSE loss, just use parameter --kd mse;
  • The default folder to save trained model is weights/.

Evaluation

Every time you want to evaluate a trained network:

$ python3 test.py --neck ssd --backbone vgg11 --dataset COCO --trained_model path_to_saved_weights --vis
fpn resnet18 VOC
pafpn repvgg-A1 XML
cspdarknet-0.5
shufflenet-0.5

Remarks:

  • It will directly print the mAP, AP50 and AP50 results on COCO2017 Val;
  • Add parameter --vis to draw detection results. They will be saved in vis/VOC/ or vis/COCO/ or vis/XML/;

Citing us

Please cite our papers in your publications if they help your research:

@InProceedings{Zhang_2020_ACCV,
author = {Zhang, Heng and Fromont, Elisa and Lefevre, Sebastien and Avignon, Bruno},
title = {Localize to Classify and Classify to Localize: Mutual Guidance in Object Detection},
booktitle = {Proceedings of the Asian Conference on Computer Vision (ACCV)},
month = {November},
year = {2020}
}
@InProceedings{Zhang_2021_BMVC,
author = {Zhang, Heng and Fromont, Elisa and Lefevre, Sebastien and Avignon, Bruno},
title = {PDF-Distil: including Prediction Disagreements in Feature-based Distillation for object detection},
booktitle = {Proceedings of the British Machine Vision Conference (BMVC)},
month = {November},
year = {2021}
}

Acknowledgement

This project contains pieces of code from the following projects: ssd.pytorch, rfbnet, mmdetection and yolox.

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Introduction

MutualGuide is a compact object detector specially designed for edge computing devices. Comparing to existing detectors, this repo contains two key features.

Firstly, the Mutual Guidance mecanism assigns labels to the classification task based on the prediction on the localization task, and vice versa, alleviating the misalignment problem between both tasks; Secondly, the teacher-student prediction disagreements guides the knowledge transfer in a feature-based detection distillation framework, thereby reducing the performance gap between both models.

For more details, please refer to our ACCV paper and BMVC paper.

Planning

  • Train medium and large models.
  • Add SIOU loss.
  • Add CspDarknet backbone.
  • Add RepVGG backbone.
  • Add ShuffleNetV2 backbone.
  • Add SwinTransformer backbone.
  • Add TensorRT transform code for inference acceleration.
  • Add vis function to plot detection results.
  • Add custom dataset training (annotations in XML format).
  • Add PolyLoss, improve mAP by ~0.3%.

Benchmark

BackboneSizeAPval
0.5:0.95
APval
0.5
APval
0.75
APval
small
APval
medium
APval
large
Params
(M)
FLOPs
(G)
Speed
(ms)
cspdarknet-0.75640x64043.061.146.224.250.059.924.3224.0211.4(3060)
cspdarknet-0.5640x64040.458.443.321.046.458.017.4012.676.5(3060)
resnet18640x64040.458.543.319.946.558.922.0922.958.5(3060)
repvgg-A0640x64039.958.242.520.346.157.912.3018.407.5(3060)
shufflenet-1.5640x64035.753.937.916.541.353.52.552.655.6(3060)
shufflenet-1.0640x64031.849.033.113.635.848.41.501.475.4(3060)

Remarks:

  • The precision is measured on the COCO2017 Val dataset.
  • The inference runtime is measured by Pytorch framework (without TensorRT acceleration) on a GTX 3060 GPU, and the post-processing time (e.g., NMS) is not included (i.e., we measure the model inference time).
  • To dowload from Baidu cloud, go to this link (password: mugu).

Datasets

First download the COCO2017 dataset, you may find the sripts in data/scripts/ helpful. Then modify the parameter self.root in data/coco.py to the path of COCO dataset:

self.root=os.path.join("/home/heng/Documents/Datasets/", "COCO/")

Remarks:

  • For training on custom dataset, first modify the dataset path and categories XML_CLASSES in data/xml_dataset.py. Then apply --dataset XML.

Training

For training with Mutual Guide:

$ python3 train.py --neck ssd --backbone vgg16 --dataset COCO
fpn resnet34 VOC
pafpn repvgg-A2 XML
cspdarknet-0.75
shufflenet-1.0
swin-T

For knowledge distillation using PDF-Distil:

$ python3 distil.py --neck ssd --backbone vgg11 --dataset COCO --kd pdf
fpn resnet18 VOC
pafpn repvgg-A1 XML
cspdarknet-0.5
shufflenet-0.5

Remarks:

  • For training without MutualGuide, just use the --mutual_guide False;
  • For training on custom dataset, convert your annotations into XML format and use the parameter --dataset XML. An example is given in datasets/XML/;
  • For knowledge distillation with traditional MSE loss, just use parameter --kd mse;
  • The default folder to save trained model is weights/.

Evaluation

Every time you want to evaluate a trained network:

$ python3 test.py --neck ssd --backbone vgg11 --dataset COCO --trained_model path_to_saved_weights --vis
fpn resnet18 VOC
pafpn repvgg-A1 XML
cspdarknet-0.5
shufflenet-0.5

Remarks:

  • It will directly print the mAP, AP50 and AP50 results on COCO2017 Val;
  • Add parameter --vis to draw detection results. They will be saved in vis/VOC/ or vis/COCO/ or vis/XML/;

Citing us

Please cite our papers in your publications if they help your research:

@InProceedings{Zhang_2020_ACCV,
author = {Zhang, Heng and Fromont, Elisa and Lefevre, Sebastien and Avignon, Bruno},
title = {Localize to Classify and Classify to Localize: Mutual Guidance in Object Detection},
booktitle = {Proceedings of the Asian Conference on Computer Vision (ACCV)},
month = {November},
year = {2020}
}
@InProceedings{Zhang_2021_BMVC,
author = {Zhang, Heng and Fromont, Elisa and Lefevre, Sebastien and Avignon, Bruno},
title = {PDF-Distil: including Prediction Disagreements in Feature-based Distillation for object detection},
booktitle = {Proceedings of the British Machine Vision Conference (BMVC)},
month = {November},
year = {2021}
}

Acknowledgement

This project contains pieces of code from the following projects: ssd.pytorch, rfbnet, mmdetection and yolox.

Releases

Packages

Used by

Contributors

Languages