Giter VIP home page Giter VIP logo

pytorch-hardnet's Introduction

Pytorch-HarDNet

See also SSD-HarDNet for Object Detection

and FC-HarDNet for Semantic Segmentation

  • Fully utilize your cuda cores!
  • Unlike CNN models using a lot of Conv1x1 to reduce model size and number of MACs, HarDNet mainly uses Conv3x3 (with only one Conv1x1 layer for each HarDNet block) to increase the computational density.
  • Increased computational density changes a model from Memory-Bound to Compute-Bound

Architecture

HarDNet Block:

  • k = growth rate (as in DenseNet)
  • m = channel weighting factor (1.6~1.7)
  • Conv3x3 for all layers (no bottleneck layer)
  • Conv-BN-ReLU for all layers intead of BN-ReLU-Conv used in DenseNet
  • See MIPT-Oulu/pytorch_bn_fusion to get rid of BatchNorm for inference.
  • No global dense connection (input of a HarDBlk is NOT reused as a part of output)

HarDNet68/85:

  • Enhanced local feature extraction to benefit the detection of small objects
  • A transitional Conv1x1 layer is employed after each HarDNet block (HarDBlk)

Results

Method MParam GMACs Inference
Time*
ImageNet
Top-1
COCO mAP
with SSD512
HarDNet68 17.6 4.3 22.5 ms 76.5 31.7
ResNet-50 25.6 4.1 31.0 ms 76.2 -
HarDNet85 36.7 9.1 38.0 ms 78.0 35.1
ResNet-101 44.6 7.8 51.2 ms 78.0 31.2
VGG-16 138 15.5 49 ms 73.4 28.8

* Inference time measured on an NVidia 1080ti with pytorch 1.1.0
300 iteraions of random 1024x1024 input images are averaged.

Results of Depthwise Separable (DS) version of HarDNet

Method MParam GMACs Inference
Time**
ImageNet
Top-1
HarDNet39DS 3.5 0.44 32.5 ms 72.1
MobileNetV2 3.5 0.3 37.9 ms 72.0
HarDNet68DS 4.2 0.8 52.6 ms 74.3
MobileNetV2 1.4x 6.1 0.6 57.8 ms 74.7

** Inference time measured on an NVidia Jetson nano with TensorRT
500 iteraions of random 320x320 input images are averaged.

Train HarDNet models for ImageNet

Training prodedure is branched from https://github.com/pytorch/examples/tree/master/imagenet

Training:

python main.py -a hardnet68 [imagenet-folder with train and val folders]

arch = hardnet39ds | hardnet68ds | hardnet68 | hardnet85

Evaluating:

python main.py -a hardnet68 --pretrained -e [imagenet-folder with train and val folders]

for HarDNet85, please download pretrained weights from here

Hyperparameters

  • epochs 150 ~ 250
  • initial lr = 0.05
  • batch size = 256
  • weight decay = 6e-5
  • cosine learning rate decay
  • nestrov = True

pytorch-hardnet's People

Contributors

pingolh 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.