This commit is contained in:
D-X-Y
2019-02-01 01:27:38 +11:00
commit 13e908f4df
104 changed files with 102494 additions and 0 deletions

49
data/Get-PTB-WT2.sh Normal file
View File

@@ -0,0 +1,49 @@
# https://github.com/salesforce/awd-lstm-lm
echo "=== Acquiring datasets ==="
echo "---"
mkdir -p save
mkdir -p data
cd data
echo "- Downloading WikiText-2 (WT2)"
wget --quiet --continue https://s3.amazonaws.com/research.metamind.io/wikitext/wikitext-2-v1.zip
unzip -q wikitext-2-v1.zip
cd wikitext-2
mv wiki.train.tokens train.txt
mv wiki.valid.tokens valid.txt
mv wiki.test.tokens test.txt
cd ..
echo "- Downloading WikiText-103 (WT2)"
wget --continue https://s3.amazonaws.com/research.metamind.io/wikitext/wikitext-103-v1.zip
unzip -q wikitext-103-v1.zip
cd wikitext-103
mv wiki.train.tokens train.txt
mv wiki.valid.tokens valid.txt
mv wiki.test.tokens test.txt
cd ..
echo "- Downloading Penn Treebank (PTB)"
wget --quiet --continue http://www.fit.vutbr.cz/~imikolov/rnnlm/simple-examples.tgz
tar -xzf simple-examples.tgz
mkdir -p penn
cd penn
mv ../simple-examples/data/ptb.train.txt train.txt
mv ../simple-examples/data/ptb.test.txt test.txt
mv ../simple-examples/data/ptb.valid.txt valid.txt
cd ..
echo "- Downloading Penn Treebank (Character)"
mkdir -p pennchar
cd pennchar
mv ../simple-examples/data/ptb.char.train.txt train.txt
mv ../simple-examples/data/ptb.char.test.txt test.txt
mv ../simple-examples/data/ptb.char.valid.txt valid.txt
cd ..
rm -rf simple-examples/
echo "---"
echo "Happy language modeling :)"

90
data/README.BACK Executable file
View File

@@ -0,0 +1,90 @@
# EraseReLU: A Simple Way to Ease the Training of Deep Convolution Neural Networks
This project implements [this paper](https://arxiv.org/abs/1709.07634) in [PyTorch](pytorch.org). The implementation refers to [ResNeXt-DenseNet](https://github.com/D-X-Y/ResNeXt-DenseNet)
## Usage
All the model definations are located in the directory `models`.
All the training scripts are located in the directory `scripts` and `Xscripts`.
To train the ResNet-110 with EraseReLU on CIFAR-10:
```bash
sh scripts/warmup_train_2gpu.sh resnet110_erase cifar10
```
To train the original ResNet-110 on CIFAR-10:
```bash
sh scripts/warmup_train_2gpu.sh resnet110 cifar10
```
### MiniImageNet for PatchShuffle
```
sh scripts-shuffle/train_resnet_00000.sh ResNet18
sh scripts-shuffle/train_resnet_10000.sh ResNet18
sh scripts-shuffle/train_resnet_11000.sh ResNet18
```
```
sh scripts-shuffle/train_pmd_00000.sh PMDNet18_300
sh scripts-shuffle/train_pmd_00000.sh PMDNet34_300
sh scripts-shuffle/train_pmd_00000.sh PMDNet50_300
sh scripts-shuffle/train_pmd_11000.sh PMDNet18_300
sh scripts-shuffle/train_pmd_11000.sh PMDNet34_300
sh scripts-shuffle/train_pmd_11000.sh PMDNet50_300
```
### ImageNet
- Use the scripts `train_imagenet.sh` to train models in PyTorch.
- Or you can use the codes in `extra_torch` to train models in Torch.
#### Group Noramlization
```
sh Xscripts/train_vgg_gn.sh 0,1,2,3,4,5,6,7 vgg16_gn 256
sh Xscripts/train_vgg_gn.sh 0,1,2,3,4,5,6,7 vgg16_gn 64
sh Xscripts/train_vgg_gn.sh 0,1,2,3,4,5,6,7 vgg16_gn 16
sh Xscripts/train_res_gn.sh 0,1,2,3,4,5,6,7 resnext50_32_4_gn 16
```
| Model | Batch Size | Top-1 Error | Top-5 Errpr |
|:--------------:|:----------:|:-----------:|:-----------:|
| VGG16-GN | 256 | 28.82 | 9.64 |
## Results
| Model | Error on CIFAR-10 | Error on CIFAR-100|
|:--------------:|:-----------------:|:-----------------:|
| ResNet-56 | 6.97 | 30.60 |
| ResNet-56 (ER) | 6.23 | 28.56 |
## Citation
If you find this project helos your research, please consider cite the paper:
```
@article{dong2017eraserelu,
title={EraseReLU: A Simple Way to Ease the Training of Deep Convolution Neural Networks},
author={Dong, Xuanyi and Kang, Guoliang and Zhan, Kun and Yang, Yi},
journal={arXiv preprint arXiv:1709.07634},
year={2017}
}
```
## Download the ImageNet dataset
The ImageNet Large Scale Visual Recognition Challenge (ILSVRC) dataset has 1000 categories and 1.2 million images. The images do not need to be preprocessed or packaged in any database, but the validation images need to be moved into appropriate subfolders.
1. Download the images from http://image-net.org/download-images
2. Extract the training data:
```bash
mkdir train && mv ILSVRC2012_img_train.tar train/ && cd train
tar -xvf ILSVRC2012_img_train.tar && rm -f ILSVRC2012_img_train.tar
find . -name "*.tar" | while read NAME ; do mkdir -p "${NAME%.tar}"; tar -xvf "${NAME}" -C "${NAME%.tar}"; rm -f "${NAME}"; done
cd ..
```
3. Extract the validation data and move images to subfolders:
```bash
mkdir val && mv ILSVRC2012_img_val.tar val/ && cd val && tar -xvf ILSVRC2012_img_val.tar
wget -qO- https://raw.githubusercontent.com/soumith/imagenetloader.torch/master/valprep.sh | bash
```

5
data/README.md Normal file
View File

@@ -0,0 +1,5 @@
# Tiny-ImageNet
The official website is [here](https://tiny-imagenet.herokuapp.com/). Please run `python tiny-imagenet.py` to generate the correct format of Tiny ImageNet for training.
# PTB and WT2
`bash Get-PTB-WT2.sh`

1000
data/classes.txt Normal file

File diff suppressed because it is too large Load Diff

3761
data/data/penn/test.txt Normal file

File diff suppressed because it is too large Load Diff

42068
data/data/penn/train.txt Normal file

File diff suppressed because it is too large Load Diff

3370
data/data/penn/valid.txt Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

36718
data/data/wikitext-2/train.txt Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

53
data/tiny-imagenet.py Normal file
View File

@@ -0,0 +1,53 @@
import os, sys
from pathlib import Path
url = "http://cs231n.stanford.edu/tiny-imagenet-200.zip"
def load_val():
path = 'tiny-imagenet-200/val/val_annotations.txt'
cfile = open(path, 'r')
content = cfile.readlines()
content = [x.strip().split('\t') for x in content]
cfile.close()
images = [x[0] for x in content]
labels = [x[1] for x in content]
return images, labels
def main():
os.system("wget {:}".format(url))
os.system("rm -rf tiny-imagenet-200")
os.system("unzip -o tiny-imagenet-200.zip")
images, labels = load_val()
savedir = 'tiny-imagenet-200/new_val'
if not os.path.exists(savedir): os.makedirs(savedir)
for image, label in zip(images, labels):
cdir = savedir + '/' + label
if not os.path.exists(cdir): os.makedirs(cdir)
ori_path = 'tiny-imagenet-200/val/images/' + image
os.system("cp {:} {:}".format(ori_path, cdir))
os.system("rm -rf tiny-imagenet-200/val")
os.system("mv {:} tiny-imagenet-200/val".format(savedir))
def generate_salt_pepper():
targetdir = Path('tiny-imagenet-200/val')
noisedir = Path('tiny-imagenet-200/val-noise')
assert targetdir.exists(), '{:} does not exist'.format(targetdir)
from imgaug import augmenters as iaa
import cv2
aug = iaa.SaltAndPepper(p=0.2)
for sub in targetdir.iterdir():
if not sub.is_dir(): continue
subdir = noisedir / sub.name
if not subdir.exists(): os.makedirs('{:}'.format(subdir))
images = sub.glob('*.JPEG')
for image in images:
I = cv2.imread(str(image))
Inoise = aug.augment_image(I)
savepath = subdir / image.name
cv2.imwrite(str(savepath), Inoise)
print ('{:} done'.format(sub))
if __name__ == "__main__":
#main()
generate_salt_pepper()