Giter Club home page Giter Club logo

pytorch-object-detection-faster-rcnn-tutorial's Introduction

PyTorch Faster-RCNN Tutorial

Learn how to start an object detection deep learning project using PyTorch and the Faster-RCNN architecture in this beginner-friendly tutorial. Based on the blog series Train your own object detector with Faster-RCNN & PyTorch by Johannes Schmidt.

image1 image2

Summary

You can train the model using the training script.

In addition, I provide jupyter-notebooks for various tasks such as creating & exploring datasets, running inference and visualizing anchor boxes:

Installation

After cloning the repository, follow these steps to install the dependencies in a new environment and start a jupyter server:

  1. Set up & activate a new environment with an environment manager (recommended):

    1. poetry:
      1. poetry env use python3.10
      2. source .venv/bin/activate
    2. venv:
      1. python3 -m venv .venv
      2. source .venv/bin/activate
    3. conda:
      1. conda create --name faster-rcnn-tutorial -y
      2. conda activate faster-rcnn-tutorial
      3. conda install python=3.10 -y
  2. Install the libraries with pip or poetry:

    1. poetry:
      1. poetry install (poetry.lock)
    2. pip (including conda):
      1. pip install -r requirements.txt (requirements.txt)
  3. Start a jupyter server:

    1. jupyter-notebook (not jupyter-lab, because of a dependency issue with the neptune-client<1.0.0)

Note: This will install the CPU-version of torch. If you want to use a GPU or TPU, please refer to the instructions on the PyTorch website. To check whether pytorch uses the nvidia gpu, check if torch.cuda.is_available() returns True in a Python shell.

Windows user: If you can not start jupyter-lab or jupyter-notebook on Windows because of ImportError: DLL load failed while importing win32api, try to run conda install pywin32 with the conda package manager.

Dependencies

These are the libraries that are used in this project:

  • High-level deep learning library for PyTorch: PyTorch Lightning
  • Visualization software: Custom code with the image-viewer Napari
  • [OPTIONAL] Experiment tracking software/logging module: Neptune

If you want to use Neptune for your own experiments, add the API-Key to the NEPTUNE variable in the .env file.

Please make sure that you meet these requirements:

Dataset

The dataset consists of 20 selfie-images randomly selected from the internet.

Faster-RCNN model

Most of the model's code is based on PyTorch's Faster-RCNN implementation. Metrics can be computed based on the PASCAL VOC (Visual Object Classes) evaluator in the metrics section.

Anchor Sizes/Aspect Ratios

Anchor sizes/aspect ratios are really important for training a Faster-RCNN model (but also similar models like SSD, YOLO). These "default" boxes are compared to those outputted by the network, therefore choosing adequate sizes/ratios can be critical for the success of a project. The PyTorch implementation of the AnchorGenerator (and also the helper classes here) generally expect the following format:

  • anchor_size: Tuple[Tuple[int, ...], ...]
  • aspect_ratios: Tuple[Tuple[float, ...]]

Without FPN

The ResNet backbone without the FPN always returns a single feature map that is used to create anchor boxes. Because of that we must create a Tuple that contains a single Tuple: e.g. ((32, 64, 128, 256, 512),) or (((32, 64),)

With FPN

With FPN we can use 4 feature maps (output from a ResNet + FPN) and map our anchor sizes with the feature maps. Because of that we must create a Tuple that contains exactly 4 Tuples: e.g. ((32,), (64,), (128,), (256,)) or ((8, 16, 32), (32, 64), (32, 64, 128, 256, 512), (200, 300))

Examples

Examples on how to create a Faster-RCNN model with pretrained ResNet backbone (ImageNet), examples are given in the tests section. Pay special attention to the test_faster_RCNN.py::test_get_faster_rcnn_resnet. Recommendation: Run the test in debugger mode.

Notes

  • Sliders in the inference script do not work right now due to dependency updates.
  • Please note that the library "neptune-client" is deprecated but the migration to "neptune" has not finished yet. Therefore, the library "neptune-client" is still used in this project.

pytorch-object-detection-faster-rcnn-tutorial's People

Contributors

johschmidt42 avatar schmiddi-75 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.