MCPcopy Index your code
hub / github.com/explainingai-code/FasterRCNN-PyTorch

github.com/explainingai-code/FasterRCNN-PyTorch @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
39 symbols 144 edges 10 files 14 documented · 36%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Faster R-CNN Implementation in Pytorch

This repository implements Faster R-CNN with training, inference and map evaluation in PyTorch. The aim was to create a simple implementation based on PyTorch faster r-cnn codebase and to get rid of all the abstractions and make the implementation easy to understand.

The implementation caters to batch size of 1 only and uses roi pooling on single scale feature map. The repo is meant to train faster r-cnn on voc dataset. Specifically I trained on VOC 2007 dataset.

Faster R-CNN Explanation Video

Faster R-CNN Explanation

Faster R-CNN Implementation Video

Faster R-CNN Implementation

Faster R-CNN PyTorch Code Walkthrough Video

Faster R-CNN Implementation

Sample Output by training Faster R-CNN on VOC 2007 dataset

Ground Truth(Left) | Prediction(right)

Data preparation

For setting up the VOC 2007 dataset: * Download VOC 2007 train/val data from http://host.robots.ox.ac.uk/pascal/VOC/voc2007 and name it as VOC2007 folder * Download VOC 2007 test data from http://host.robots.ox.ac.uk/pascal/VOC/voc2007 and name it as VOC2007-test folder * Place both the directories inside the root folder of repo according to below structure FasterRCNN-Pytorch -> VOC2007 -> JPEGImages -> Annotations -> VOC2007-test -> JPEGImages -> Annotations -> tools -> train.py -> infer.py -> train_torchvision_frcnn.py -> infer_torchvision_frcnn.py -> config -> voc.yaml -> model -> faster_rcnn.py -> dataset -> voc.py

For training on your own dataset

  • Copy the VOC config(config/voc.yaml) and update the dataset_params and change the task_name as well as ckpt_name based on your own dataset.
  • Copy the VOC dataset(dataset/voc.py) class and make following changes:
  • Update the classes list here (excluding background).
  • Modify the load_images_and_anns method to returns a list of im_infos for all images, where each im_info is a dictionary with following keys: im_info : { 'filename' : <image path> 'detections' : [ 'label': <integer class label for this detection>, # assuming the same order as classes list present above, with background as zero index. 'bbox' : list of x1,y1,x2,y2 for the bboxes. ] }
  • Ensure that __getitem__ returns the following: im_tensor(C x H x W) , target{ 'bboxes': Number of Gts x 4, 'labels': Number of Gts, } file_path(just used for debugging)
  • Change the training script to use your dataset here
  • Then run training with the desired config passed as argument.

Differences from Faster RCNN paper

This repo has some differences from actual Faster RCNN paper. * Caters to single batch size * Uses a randomly initialized fc6 fc7 layer of 1024 dim. * Most of the hyper-parameters have directly been picked from official version and have not been tuned to this setting of 1024 dimensional fc layers. As of now using this I am getting ~61-62% mAP. * To improve the results one can try the following: * Use VGG fc6 and fc7 layers * Tune the weight of different losses * Experiment with roi batch size * Experiment with hard negative mining

For modifications

  • To change the fc dimension , change fc_inner_dim in config
  • To use a different backbone, make the change here and also change backbone_out_channels in config
  • To use hard negative mining change roi_low_bg_iou to say 0.1(this will ignore proposals with < 0.1 iou)
  • To use gradient accumulation change acc_steps in config to > 1

Quickstart

  • Create a new conda environment with python 3.8 then run below commands
  • git clone https://github.com/explainingai-code/FasterRCNN-PyTorch.git
  • cd FasterRCNN-PyTorch
  • pip install -r requirements.txt
  • For training/inference use the below commands passing the desired configuration file as the config argument .
  • python -m tools.train for training Faster R-CNN on voc dataset
  • python -m tools.infer --evaluate False --infer_samples True for generating inference predictions
  • python -m tools.infer --evaluate True --infer_samples False for evaluating on test dataset

Using torchvision FasterRCNN

  • For training/inference using torchvision faster rcnn codebase, use the below commands passing the desired configuration file as the config argument.
  • python -m tools.train_torchvision_frcnn for training using torchvision pretrained Faster R-CNN class on voc dataset
  • This uses the following arguments other than config file
  • --use_resnet50_fpn
    • True(default) - Use pretrained torchvision faster rcnn
    • False - Build your own custom model using torchvision faster rcnn class)
  • python -m tools.infer_torchvision_frcnn for inference and testing purposes. Pass the desired configuration file as the config argument.
  • This uses the following arguments other than config file
  • --use_resnet50_fpn
    • True(default) - Use pretrained torchvision faster rcnn
    • False - Build your own custom model using torchvision faster rcnn class)
    • Should be same value as used during training
  • --evaluate (Whether to evaluate mAP on test dataset or not, default value is False)
  • -- infer_samples (Whether to generate predicitons on some sample test images, default value is True)

Configuration

  • config/voc.yaml - Allows you to play with different components of faster r-cnn on voc dataset

Output

Outputs will be saved according to the configuration present in yaml files.

For every run a folder of task_name key in config will be created

During training of FasterRCNN the following output will be saved * Latest Model checkpoint in task_name directory

During inference the following output will be saved * Sample prediction outputs for images in task_name/samples/*.png

Citations

@article{DBLP:journals/corr/RenHG015,
  author       = {Shaoqing Ren and
                  Kaiming He and
                  Ross B. Girshick and
                  Jian Sun},
  title        = {Faster {R-CNN:} Towards Real-Time Object Detection with Region Proposal
                  Networks},
  journal      = {CoRR},
  volume       = {abs/1506.01497},
  year         = {2015},
  url          = {http://arxiv.org/abs/1506.01497},
  eprinttype    = {arXiv},
  eprint       = {1506.01497},
  timestamp    = {Mon, 13 Aug 2018 16:46:02 +0200},
  biburl       = {https://dblp.org/rec/journals/corr/RenHG015.bib},
  bibsource    = {dblp computer science bibliography, https://dblp.org}
}

Core symbols most depended-on inside this repo

load_model_and_dataset
called by 2
tools/infer.py
load_model_and_dataset
called by 2
tools/infer_torchvision_frcnn.py
get_iou
called by 2
model/faster_rcnn.py
boxes_to_transformation_targets
called by 2
model/faster_rcnn.py
apply_regression_pred_to_anchors_or_proposals
called by 2
model/faster_rcnn.py
sample_positive_negative
called by 2
model/faster_rcnn.py
clamp_boxes_to_image_boundary
called by 2
model/faster_rcnn.py
normalize_resize_image_and_boxes
called by 2
model/faster_rcnn.py

Shape

Function 20
Method 15
Class 4

Languages

Python100%

Modules by API surface

model/faster_rcnn.py21 symbols
tools/infer_torchvision_frcnn.py5 symbols
tools/infer.py5 symbols
dataset/voc.py5 symbols
tools/train_torchvision_frcnn.py2 symbols
tools/train.py1 symbols

For agents

$ claude mcp add FasterRCNN-PyTorch \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact