Reproduce ResNet-v2(Identity Mappings in Deep Residual Networks) with MXNet

Related tags

Deep Learning ResNet
Overview

Reproduce ResNet-v2 using MXNet

Requirements

  • Install MXNet on a machine with CUDA GPU, and it's better also installed with cuDNN v5
  • Please fix the randomness if you want to train your own model and using this pull request

Trained models

The trained ResNet models achieve better error rates than the original ResNet-v1 models.

ImageNet 1K

Imagenet 1000 class dataset with 1.2 million images.

single center crop (224x224) validation error rate(%)

Network Top-1 error Top-5 error Traind Model
ResNet-18 30.48 10.92 data.dmlc.ml
ResNet-34 27.20 8.86 data.dmlc.ml
ResNet-50 24.39 7.24 data.dmlc.ml
ResNet-101 22.68 6.58 data.dmlc.ml
ResNet-152 22.25 6.42 data.dmlc.ml
ResNet-200 22.14 6.16 data.dmlc.ml

ImageNet 11K:

Full imagenet dataset: fall11_whole.tar from http://www.image-net.org/download-images.

We removed classes with less than 500 images. The filtered dataset contains 11221 classes and 12.4 millions images. We randomly pick 50 images from each class as the validation set. The split is available at http://data.dmlc.ml/mxnet/models/imagenet-11k/

Network Top-1 error Top-5 error Traind Model
ResNet-200 58.4 28.8

cifar10: single crop validation error rate(%):

Network top-1
ResNet-164 4.68

Training Curve

The following curve is ResNet-v2 trainined on imagenet-1k, all the training detail you can found here, which include gpu information, lr schedular, batch-size etc, and you can also see the training speed with the corresponding logs.

you can get the curve by run:
cd log && python plot_curve.py --logs=resnet-18.log,resnet-34.log,resnet-50.log,resnet-101.log,resnet-152.log,resnet-200.log

How to Train

imagenet

first you should prepare the train.lst and val.lst, you can generate this list files by yourself(please ref.make-the-image-list, and do not forget to shuffle the list files!), or just download the provided version from here.

then you can create the *.rec file, i recommend use this cmd parameters:

$im2rec_path train.lst train/ data/imagenet/train_480_q90.rec resize=480 quality=90

set resize=480 and quality=90(quality=100 will be best i think:)) here may use more disk memory(about ~103G), but this is very useful with scale augmentation during training[1][2], and can help reproducing a good result.

because you are training imagenet , so we should set data-type = imagenet, then the training cmd is like this(here i use 6 gpus for training):

python -u train_resnet.py --data-dir data/imagenet \
--data-type imagenet --depth 50 --batch-size 256  --gpus=0,1,2,3,4,5

change depth to different number to support different model, currently support ResNet-18, ResNet-34, ResNet-50, ResNet-101, ResNet-152, ResNet-200.

cifar10

same as above, first you should use im2rec to create the .rec file, then training with cmd like this:

python -u train_resnet.py --data-dir data/cifar10 --data-type cifar10 \
  --depth 164 --batch-size 128 --num-examples 50000 --gpus=0,1

change depth when training different model, only support(depth-2)%9==0, such as RestNet-110, ResNet-164, ResNet-1001...

retrain

When training large dataset(like imagenet), it's better for us to change learning rate manually, or the training is killed by some other reasons, so retrain is very important. the code here support retrain, suppose you want to retrain your resnet-50 model from epoch 70 and want to change lr=0.0005, wd=0.001, batch-size=256 using 8gpu, then you can try this cmd:

python -u train_resnet.py --data-dir data/imagenet --data-type imagenet --depth 50 --batch-size 256 \
--gpus=0,1,2,3,4,5,6,7 --model-load-epoch=70 --lr 0.0005 --wd 0.001 --retrain

Notes

  • it's better training the model in imagenet with epoch > 110, because this will lead better result.
  • when epoch is about 95, cancel the scale/color/aspect augmentation during training, this can be done by only comment out 6 lines of the code, like this:
train = mx.io.ImageRecordIter(
        # path_imgrec         = os.path.join(args.data_dir, "train_480_q90.rec"),
        path_imgrec         = os.path.join(args.data_dir, "train_256_q90.rec"),
        label_width         = 1,
        data_name           = 'data',
        label_name          = 'softmax_label',
        data_shape          = (3, 32, 32) if args.data_type=="cifar10" else (3, 224, 224),
        batch_size          = args.batch_size,
        pad                 = 4 if args.data_type == "cifar10" else 0,
        fill_value          = 127,  # only used when pad is valid
        rand_crop           = True,
        # max_random_scale    = 1.0 if args.data_type == "cifar10" else 1.0,  # 480
        # min_random_scale    = 1.0 if args.data_type == "cifar10" else 0.533,  # 256.0/480.0
        # max_aspect_ratio    = 0 if args.data_type == "cifar10" else 0.25,
        # random_h            = 0 if args.data_type == "cifar10" else 36,  # 0.4*90
        # random_s            = 0 if args.data_type == "cifar10" else 50,  # 0.4*127
        # random_l            = 0 if args.data_type == "cifar10" else 50,  # 0.4*127
        rand_mirror         = True,
        shuffle             = True,
        num_parts           = kv.num_workers,
        part_index          = kv.rank)

but you should prepare one train_256_q90.rec using im2rec like:

$im2rec_path train.lst train/ data/imagenet/train_256_q90.rec resize=256 quality=90

cancel this scale/color/aspect augmentation can be done easily by using --aug-level=1 in your cmd.

  • it's better for running longer than 30 epoch before first decrease the lr(such as 60), so you may decide the epoch number by observe the val-acc curve, and set lr with retrain.

Training ResNet-200 by only one gpu with 'dark knowledge' of mxnet

you can training ResNet-200 or even ResNet-1000 on imaget with only one gpu! for example, we can train ResNet-200 with batch-size=128 on one gpu(=12G), or if your gpu memory is less than 12G, you should decrease the batch-size by a little. here is the way of how to using 'dark knowledge' of mxnet:

when turn on memonger, the trainning speed will be about 25% slower, but we can training more depth network, have fun!

ResNet-v2 vs ResNet-v1

Does ResNet-v2 always achieve better result than ResNet-v1 on imagnet? The answer is NO, ResNet-v2 has no advantage or even has disadvantage than ResNet-v1 when depth<152, we can get the following result from paper[2].(why?)

ImageNet: single center crop validation error rate(%)

Network crop-size top-1 top-5
ResNet-101-v1 224x224 23.6 7.1
ResNet-101-v2 224x224 24.6 7.5
ResNet-152-v1 320x320 21.3 5.5
ResNet-152-v2 320x320 21.1 5.5

we can see that:

  • when depth=101, ResNet-v2 is 1% worse than ResNet-v1 on top-1 and 0.4% worse on top-5.
  • when depth=152, ResNet-v2 is only 0.2% better than ResNet-v1 on top-1 and owns the same performance on top-5 even when crop-size=320x320.

How to use Trained Models

we can use the pre-trained model to classify one input image, the step is easy:

  • download the pre-trained model form data.dml.ml and put it into the predict directory.
  • cd predict and run python -u predict.py --img test.jpg --prefix resnet-50 --gpu 0, this means you want to recgnition test.jpg using model resnet-50-0000.params and gpu 0, then it will output the classification result.

Reference

[1] Kaiming He, et al. "Deep Residual Learning for Image Recognition." arXiv arXiv:1512.03385 (2015).
[2] Kaiming He, et al. "Identity Mappings in Deep Residual Networks" arXiv:1603.05027 (2016).
[3] caffe official training code and model, https://github.com/KaimingHe/deep-residual-networks
[4] torch training code and model provided by facebook, https://github.com/facebook/fb.resnet.torch
[5] MXNet resnet-v1 cifar10 examples,https://github.com/dmlc/mxnet/blob/master/example/image-classification/train_cifar10_resnet.py

Comments
  • resnet 152

    resnet 152

    i'm running the 152 layer model using the default hyper-parameters, will update the results on this issue

    current progress

    INFO:root:Epoch[10] Batch [4850]        Speed: 298.15 samples/sec       Train-accuracy=0.447188
    INFO:root:Epoch[10] Batch [4850]        Speed: 298.15 samples/sec       Train-top_k_accuracy_5=0.697656
    INFO:root:Epoch[10] Batch [4900]        Speed: 298.05 samples/sec       Train-accuracy=0.445703
    INFO:root:Epoch[10] Batch [4900]        Speed: 298.05 samples/sec       Train-top_k_accuracy_5=0.699609
    INFO:root:Epoch[10] Batch [4950]        Speed: 297.75 samples/sec       Train-accuracy=0.444453
    INFO:root:Epoch[10] Batch [4950]        Speed: 297.75 samples/sec       Train-top_k_accuracy_5=0.695312
    INFO:root:Epoch[10] Batch [5000]        Speed: 298.33 samples/sec       Train-accuracy=0.443906
    INFO:root:Epoch[10] Batch [5000]        Speed: 298.33 samples/sec       Train-top_k_accuracy_5=0.690469
    INFO:root:Epoch[10] Resetting Data Iterator
    INFO:root:Epoch[10] Time cost=4299.024
    INFO:root:Saved checkpoint to "model/resnet-imagenet-152-0011.params"
    INFO:root:Epoch[10] Validation-accuracy=0.507553
    INFO:root:Epoch[10] Validation-top_k_accuracy_5=0.765446
    INFO:root:Epoch[11] Batch [50]  Speed: 306.66 samples/sec       Train-accuracy=0.444453
    INFO:root:Epoch[11] Batch [50]  Speed: 306.66 samples/sec       Train-top_k_accuracy_5=0.694766
    INFO:root:Epoch[11] Batch [100] Speed: 298.39 samples/sec       Train-accuracy=0.444609
    INFO:root:Epoch[11] Batch [100] Speed: 298.39 samples/sec       Train-top_k_accuracy_5=0.694141
    INFO:root:Epoch[11] Batch [150] Speed: 298.08 samples/sec       Train-accuracy=0.439922
    INFO:root:Epoch[11] Batch [150] Speed: 298.08 samples/sec       Train-top_k_accuracy_5=0.691719
    
    opened by mli 26
  • Strange Train-Accuracy at very beginning

    Strange Train-Accuracy at very beginning

    I got a very strange train-accuracy output like below.

    INFO:root:Namespace(aug_level=2, batch_size=128, bn_mom=0.9, data_dir='data', data_type='imagenet', depth=34, gpus='0,1', kv_store='device', list_dir='data', lr=0.1, model_load_epoch=0, mom=0.9, num_examples=1281167, retrain=False, wd=0.0001)
    [10:13:13] src/io/iter_image_recordio.cc:209: ImageRecordIOParser: data/train_480_q90.rec, use 4 threads for decoding..
    [10:13:14] src/io/iter_image_recordio.cc:209: ImageRecordIOParser: data/val_256_q90.rec, use 4 threads for decoding..
    INFO:root:Start training with [gpu(0), gpu(1)]
    INFO:root:Epoch[0] Batch [50]   Speed: 323.01 samples/sec       Train-accuracy=0.507188
    INFO:root:Epoch[0] Batch [50]   Speed: 323.01 samples/sec       Train-top_k_accuracy_5=0.932031
    INFO:root:Epoch[0] Batch [100]  Speed: 308.74 samples/sec       Train-accuracy=0.026719
    INFO:root:Epoch[0] Batch [100]  Speed: 308.74 samples/sec       Train-top_k_accuracy_5=0.501719
    INFO:root:Epoch[0] Batch [150]  Speed: 313.60 samples/sec       Train-accuracy=0.060937
    INFO:root:Epoch[0] Batch [150]  Speed: 313.60 samples/sec       Train-top_k_accuracy_5=0.265313
    INFO:root:Epoch[0] Batch [200]  Speed: 311.01 samples/sec       Train-accuracy=0.000000
    INFO:root:Epoch[0] Batch [200]  Speed: 311.01 samples/sec       Train-top_k_accuracy_5=0.105938
    INFO:root:Epoch[0] Batch [250]  Speed: 313.49 samples/sec       Train-accuracy=0.000000
    INFO:root:Epoch[0] Batch [250]  Speed: 313.49 samples/sec       Train-top_k_accuracy_5=0.070938
    INFO:root:Epoch[0] Batch [300]  Speed: 312.41 samples/sec       Train-accuracy=0.000000
    INFO:root:Epoch[0] Batch [300]  Speed: 312.41 samples/sec       Train-top_k_accuracy_5=0.084687
    INFO:root:Epoch[0] Batch [350]  Speed: 312.28 samples/sec       Train-accuracy=0.000000
    INFO:root:Epoch[0] Batch [350]  Speed: 312.28 samples/sec       Train-top_k_accuracy_5=0.084844
    INFO:root:Epoch[0] Batch [400]  Speed: 313.47 samples/sec       Train-accuracy=0.000000
    INFO:root:Epoch[0] Batch [400]  Speed: 313.47 samples/sec       Train-top_k_accuracy_5=0.079531
    INFO:root:Epoch[0] Batch [450]  Speed: 312.25 samples/sec       Train-accuracy=0.000000
    INFO:root:Epoch[0] Batch [450]  Speed: 312.25 samples/sec       Train-top_k_accuracy_5=0.045937
    INFO:root:Epoch[0] Batch [500]  Speed: 313.55 samples/sec       Train-accuracy=0.000000
    INFO:root:Epoch[0] Batch [500]  Speed: 313.55 samples/sec       Train-top_k_accuracy_5=0.074531
    INFO:root:Epoch[0] Batch [550]  Speed: 312.60 samples/sec       Train-accuracy=0.000000
    INFO:root:Epoch[0] Batch [550]  Speed: 312.60 samples/sec       Train-top_k_accuracy_5=0.062344
    INFO:root:Epoch[0] Batch [600]  Speed: 313.40 samples/sec       Train-accuracy=0.000000
    INFO:root:Epoch[0] Batch [600]  Speed: 313.40 samples/sec       Train-top_k_accuracy_5=0.052969
    INFO:root:Epoch[0] Batch [650]  Speed: 312.94 samples/sec       Train-accuracy=0.000000
    INFO:root:Epoch[0] Batch [650]  Speed: 312.94 samples/sec       Train-top_k_accuracy_5=0.048281
    

    The accuracy is very high and goes down very quickly. It seems my training data doesn't get shuffled. I use im2rec data/train.lst /home/zhangjie/data/imagenet/ILSVRC2012/train/ data/train_480_q90.rec resize=480 quality=90 to create the data.

    opened by luoyetx 6
  • how does the quality option of im2rec affect?

    how does the quality option of im2rec affect?

    Luckily I have found this great work! I reproduced the ResNet-v1 on ImageNet a few months ago (50-layer top5 error: 7.4), and now I realize that the images are encoded with the default quality option quality=80.

    I use the python tool im2rec.py on Windows. And the quality=80 affects a lot when I train another network on Cifar100 because the 32x32 images are too small.

    1. So I wonder if I have to retrain my own network on ImageNet by using a high quality record file, such as quality=90 or 100? How does this option affect, 0.1 percent difference?
    2. Another question on im2rec. Now I convert the Cifar100 python version data to lossless png images, and pack them into record file by im2rec.py, am I right? Do you guys know how the provided Cifar-10 record file generated? (Do I need to compile the im2rec.cc on Windows?)

    I would greatly appreciate it if you kindly give me some feedback.

    opened by zlmzju 6
  • resnet 164 on cifar10

    resnet 164 on cifar10

    I have test the this repository on cifar10 with resnet164. curves

    I have decreased lr at 160, 180, 200 epoch by 10. The begining lr is 0.1.

    The best top1 accuracy is 94.77%, which is higher on than those in Kaiming's paper (error rate 5.46%).

    I also found an interesting thing, if you train resnet164 with longer epochs at the first lr, the accuracy will be higher than resnet-1001 in Kaiming's paper. However, i haven't save the log. :cry:

    opened by austingg 5
  • ResNet-34

    ResNet-34

    begin training resnet-34, using 4 gpus, batch-size=512, will update it here:

    INFO:root:Start training with [gpu(4), gpu(5), gpu(6), gpu(7)] INFO:root:Epoch[0] Batch [50] Speed: 252.55 samples/sec Train-accuracy=0.002344 INFO:root:Epoch[0] Batch [50] Speed: 252.55 samples/sec Train-top_k_accuracy_5=0.009336 INFO:root:Epoch[0] Batch [100] Speed: 251.83 samples/sec Train-accuracy=0.003789 INFO:root:Epoch[0] Batch [100] Speed: 251.83 samples/sec Train-top_k_accuracy_5=0.016328

    opened by tornadomeet 4
  • ResNet-18

    ResNet-18

    i'm running resnet-18 using 4 gpus batch-size=512, and using mx.lr_scheduler.MultiFactorScheduler(step=[60*epoch_size, 75*epoch_size, 90*epoch_size], factor=0.1), i'l update the training progress here

    INFO:root:Epoch[0] Batch [150]  Speed: 339.12 samples/sec   Train-accuracy=0.007578
    INFO:root:Epoch[0] Batch [150]  Speed: 339.12 samples/sec   Train-top_k_accuracy_5=0.029492
    INFO:root:Epoch[0] Batch [200]  Speed: 384.57 samples/sec   Train-accuracy=0.009336
    INFO:root:Epoch[0] Batch [200]  Speed: 384.57 samples/sec   Train-top_k_accuracy_5=0.039297
    INFO:root:Epoch[0] Batch [250]  Speed: 376.04 samples/sec   Train-accuracy=0.014883
    INFO:root:Epoch[0] Batch [250]  Speed: 376.04 samples/sec   Train-top_k_accuracy_5=0.051484
    
    opened by tornadomeet 4
  • Is Imagenet rec file available?

    Is Imagenet rec file available?

    I´m wondering if the Imagenet rec file you used to train the network is available, or at least the data you used with im2rec to generate the rec file

    opened by miguelgfierro 3
  • Why are RELU and BN set before Conv?

    Why are RELU and BN set before Conv?

    https://github.com/tornadomeet/ResNet/blob/master/symbol_resnet.py In line 28:

        bn1 = mx.sym.BatchNorm(data=data, fix_gamma=False, eps=2e-5, momentum=bn_mom, name=name + '_bn1')
        act1 = mx.sym.Activation(data=bn1, act_type='relu', name=name + '_relu1')
        conv1 = mx.sym.Convolution(data=act1, num_filter=int(num_filter*0.25), kernel=(1,1), stride=(1,1), pad=(0,0),
    

    bn1 and act1 layer is set before conv1, why?

    opened by cuteding 2
  • rgb channel in predict.py

    rgb channel in predict.py

    you need to use cv2.cvtColor(cv2.imread(filename), cv2.COLOR_BGR2RGB) to switch to rgb. see example https://github.com/dmlc/mxnet-notebooks/blob/master/python/tutorials/predict_imagenet.ipynb

    opened by mli 1
  • why do not use mean img?

    why do not use mean img?

    I am trying to train the ResNet. However, I can't find the mean_r,mean_g,mean_b in the train_resnet.py

        train = mx.io.ImageRecordIter(
            path_imgrec         = os.path.join(args.data_dir, "train.rec") if args.data_type == 'cifar10' else
                                  os.path.join(args.data_dir, "train_256_q90.rec") if args.aug_level == 1
                                  else os.path.join(args.data_dir, "train_480_q100.rec"),
            label_width         = 1,
            data_name           = 'data',
            label_name          = 'softmax_label',
            data_shape          = (3, 32, 32) if args.data_type=="cifar10" else (3, 224, 224),
            batch_size          = args.batch_size,
            pad                 = 4 if args.data_type == "cifar10" else 0,
            fill_value          = 127,  # only used when pad is valid
            rand_crop           = True,
            max_random_scale    = 1.0,  # 480 with imagnet, 32 with cifar10
            min_random_scale    = 1.0 if args.data_type == "cifar10" else 1.0 if args.aug_level == 1 else 0.533,  # 256.0/480.0
            max_aspect_ratio    = 0 if args.data_type == "cifar10" else 0 if args.aug_level == 1 else 0.25,
            random_h            = 0 if args.data_type == "cifar10" else 0 if args.aug_level == 1 else 36,  # 0.4*90
            random_s            = 0 if args.data_type == "cifar10" else 0 if args.aug_level == 1 else 50,  # 0.4*127
            random_l            = 0 if args.data_type == "cifar10" else 0 if args.aug_level == 1 else 50,  # 0.4*127
            max_rotate_angle    = 0 if args.aug_level <= 2 else 10,
            max_shear_ratio     = 0 if args.aug_level <= 2 else 0.1,
            rand_mirror         = True,
            shuffle             = True,
            num_parts           = kv.num_workers,
            part_index          = kv.rank)
    

    Are they helpful? @tornadomeet

    opened by longwoo 1
  • Why there is a large validation acc increase at epoch 29 of resnet 152?

    Why there is a large validation acc increase at epoch 29 of resnet 152?

    INFO:root:Epoch[26] Validation-accuracy=0.556103 INFO:root:Epoch[27] Validation-accuracy=0.547513 INFO:root:Epoch[28] Validation-accuracy=0.544842 INFO:root:Epoch[29] Validation-accuracy=0.580855 INFO:root:Epoch[30] Validation-accuracy=0.672632 INFO:root:Epoch[31] Validation-accuracy=0.682677 INFO:root:Epoch[32] Validation-accuracy=0.690908

    I just plot the acc curve today, and find something is strange here. When the epoch num is around 30 or 60, there is a large acc increase, which I have never seen before. it is quite different from the curves from facebook. (see: fb.resnet.torch) I am just curious about the reason behind this.

    opened by shicai 1
  • Why does the ResNext use original Residual Block instead of pre-activation residual block?

    Why does the ResNext use original Residual Block instead of pre-activation residual block?

    In the Identity Mapping, the author claimed that pre-activation is better than post-activation, but i find that in the ResNext , the residual blocks are the original post activation residual blocks, like conv->bn->relu->conv->bn->sum->relu instead of bn->relu->conv->bn->relu->conv->sum. Can you help we? Thanks a lot

    opened by Itsanewday 0
  • Trouble replicating results for ResNet18 on ImageNet 1k

    Trouble replicating results for ResNet18 on ImageNet 1k

    I'm trying to replicate your results for ResNet18 on ImageNet 1k. I'm using the default hyperparameters in your train_resnet.py and all of the same augmenters (for aug-level=2), but can't achieve the accuracy that you report. The most obvious issue is that if I use your default learning rate of 0.1, the net fails to learn anything, even though I'm using the same batch size (256), momentum (0.9), weight decay (0.0001), etc. I have to set a learning rate to 0.001 for it to start learning well, but even then, the accuracy tops out at about 80% for Top 5 and 55% for Top 1.

    1. I see in the code that these are the default parameters for ResNet50. Did you change any of them for ResNet18?

    2. Is the data that you are using standard ImageNet, or did you modify it before training (by normalizing, etc.)?

    opened by dyelax 1
  • Update train_resnet.py

    Update train_resnet.py

    mx.model.FeedForward is deprecated in the latest master. Changing the same with mx.mod.Module. Kindly check and comment. Please feel free to make necessary changes.

    opened by arundasan91 0
  • How to set the retrain parameters of ResNetv2-152?

    How to set the retrain parameters of ResNetv2-152?

    Before retraining the model, I got almost the same accuracy as the log of 152-layers ResNet: 76.63%(Top-1 Validation Accuarcy). Then I retrained the model with lr=0.0005 and wd=0.001. But after one epoch, I found that my top-1 validation doesn't increase like the the log recorded (only increase 0.1% or doesn't increase). I wonder if this setting is wrong? And which setting of lr and wd should I use so that I can the same performance as the log recorded.

    opened by homles11 0
  • Why retrain at about 95 epoch with data aug disabled

    Why retrain at about 95 epoch with data aug disabled

    Hi, I am trying to reproduce the resnet imagenet result on mxnet.

    I noticed that you have successfully reproduced the resnet results from facebook, but you mentioned that

    when epoch is about 95, cancel the scale/color/aspect augmentation during training, this can be done by only comment out 6 lines of the code, like this:

    I didn't quite understand why we need this procedure to get a similar results because I as far as I know Torch/PyTorch don't need this procedure. Is that means if we don't apply this procedure, the result will be suffered (lower than the paper claimed)?

    Thanks

    opened by DeppMeng 3
Owner
Wei Wu
Wei Wu
A PyTorch implementation for PyramidNets (Deep Pyramidal Residual Networks)

A PyTorch implementation for PyramidNets (Deep Pyramidal Residual Networks) This repository contains a PyTorch implementation for the paper: Deep Pyra

Greg Dongyoon Han 262 Jan 3, 2023
PyTorch code for our ECCV 2018 paper "Image Super-Resolution Using Very Deep Residual Channel Attention Networks"

PyTorch code for our ECCV 2018 paper "Image Super-Resolution Using Very Deep Residual Channel Attention Networks"

Yulun Zhang 1.2k Dec 26, 2022
PyTorch version of the paper 'Enhanced Deep Residual Networks for Single Image Super-Resolution' (CVPRW 2017)

About PyTorch 1.2.0 Now the master branch supports PyTorch 1.2.0 by default. Due to the serious version problem (especially torch.utils.data.dataloade

Sanghyun Son 2.1k Jan 1, 2023
Image Super-Resolution Using Very Deep Residual Channel Attention Networks

Image Super-Resolution Using Very Deep Residual Channel Attention Networks

kongdebug 14 Oct 14, 2022
Torch implementation of "Enhanced Deep Residual Networks for Single Image Super-Resolution"

NTIRE2017 Super-resolution Challenge: SNU_CVLab Introduction This is our project repository for CVPR 2017 Workshop (2nd NTIRE). We, Team SNU_CVLab, (B

Bee Lim 625 Dec 30, 2022
MXNet implementation for: Drop an Octave: Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution

Octave Convolution MXNet implementation for: Drop an Octave: Reducing Spatial Redundancy in Convolutional Neural Networks with Octave Convolution Imag

Meta Research 549 Dec 28, 2022
Code to reproduce the experiments from our NeurIPS 2021 paper " The Limitations of Large Width in Neural Networks: A Deep Gaussian Process Perspective"

Code To run: python runner.py new --save <SAVE_NAME> --data <PATH_TO_DATA_DIR> --dataset <DATASET> --model <model_name> [options] --n 1000 - train - t

Geoff Pleiss 5 Dec 12, 2022
MMdnn is a set of tools to help users inter-operate among different deep learning frameworks. E.g. model conversion and visualization. Convert models between Caffe, Keras, MXNet, Tensorflow, CNTK, PyTorch Onnx and CoreML.

MMdnn MMdnn is a comprehensive and cross-framework tool to convert, visualize and diagnose deep learning (DL) models. The "MM" stands for model manage

Microsoft 5.7k Jan 9, 2023
Face Identity Disentanglement via Latent Space Mapping [SIGGRAPH ASIA 2020]

Face Identity Disentanglement via Latent Space Mapping Description Official Implementation of the paper Face Identity Disentanglement via Latent Space

null 150 Dec 7, 2022
Non-Official Pytorch implementation of "Face Identity Disentanglement via Latent Space Mapping" https://arxiv.org/abs/2005.07728 Using StyleGAN2 instead of StyleGAN

Face Identity Disentanglement via Latent Space Mapping - Implement in pytorch with StyleGAN 2 Description Pytorch implementation of the paper Face Ide

Daniel Roich 58 Dec 24, 2022
Official PyTorch Implementation for InfoSwap: Information Bottleneck Disentanglement for Identity Swapping

InfoSwap: Information Bottleneck Disentanglement for Identity Swapping Code usage Please check out the user manual page. Paper Gege Gao, Huaibo Huang,

Grace Hešeri 56 Dec 20, 2022
Rethinking of Pedestrian Attribute Recognition: A Reliable Evaluation under Zero-Shot Pedestrian Identity Setting

Pytorch Pedestrian Attribute Recognition: A strong PyTorch baseline of pedestrian attribute recognition and multi-label classification.

Jian 79 Dec 18, 2022
Complete system for facial identity system. Include one-shot model, database operation, features visualization, monitoring

Complete system for facial identity system. Include one-shot model, database operation, features visualization, monitoring

null 2 Dec 28, 2021
Complete system for facial identity system

Complete system for facial identity system. Include one-shot model, database operation, features visualization, monitoring

null 4 May 2, 2022
PyTorch implementation of Wide Residual Networks with 1-bit weights by McDonnell (ICLR 2018)

1-bit Wide ResNet PyTorch implementation of training 1-bit Wide ResNets from this paper: Training wide residual networks for deployment using a single

Sergey Zagoruyko 122 Dec 7, 2022
Wide Residual Networks (WideResNets) in PyTorch

Wide Residual Networks (WideResNets) in PyTorch WideResNets for CIFAR10/100 implemented in PyTorch. This implementation requires less GPU memory than

Jason Kuen 296 Dec 27, 2022
RMNet: Equivalently Removing Residual Connection from Networks

RM Operation can equivalently convert ResNet to VGG, which is better for pruning; and can help RepVGG perform better when the depth is large.

null 8 Nov 4, 2021
PyTorch Implementation of Fully Convolutional Networks. (Training code to reproduce the original result is available.)

pytorch-fcn PyTorch implementation of Fully Convolutional Networks. Requirements pytorch >= 0.2.0 torchvision >= 0.1.8 fcn >= 6.1.5 Pillow scipy tqdm

Kentaro Wada 1.6k Jan 7, 2023
Pytorch implementation of Deep Recursive Residual Network for Super Resolution (DRRN)

DRRN-pytorch This is an unofficial implementation of "Deep Recursive Residual Network for Super Resolution (DRRN)", CVPR 2017 in Pytorch. [Paper] You

yun_yang 192 Dec 12, 2022