Full Code of yu4u/cutout-random-erasing for AI

master 60972bcbe2e6 cached
6 files
67.8 KB
40.9k tokens
1 symbols
1 requests
Download .txt
Repository: yu4u/cutout-random-erasing
Branch: master
Commit: 60972bcbe2e6
Files: 6
Total size: 67.8 KB

Directory structure:
gitextract_6b5d8koa/

├── .gitignore
├── LICENSE
├── README.md
├── cifar10_resnet.py
├── example.ipynb
└── random_eraser.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .gitignore
================================================
### https://raw.github.com/github/gitignore/f57304e9762876ae4c9b02867ed0cb887316387e/Python.gitignore

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*,cover
.hypothesis/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# dotenv
.env

# virtualenv
.venv
venv/
ENV/

# Spyder project settings
.spyderproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

/.idea/

.DS_Store


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2017 Yusuke Uchida

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
# Cutout / Random Erasing
This is a Cutout [1] / Random Erasing [2] implementation.
In particular, it is easily used with ImageDataGenerator in Keras.
Please check [random_eraser.py](random_eraser.py) for implementation details.

## About Cutout / Random Erasing
Cutout or Random Erasing is a kind of image augmentation methods
for convolutional neural networks (CNN).
They are very similar methods and were proposed almost at the same time.

They try to regularize models using training images
that are randomly masked with random values.

<img src="example.png" width="480px">

<img src="example2.png" width="480px">

## Usage
### With ImageDataGenerator in Keras
It is very easy to use if you are using ImageDataGenerator in Keras;
get `eraser` function by `get_random_eraser()`,
and then pass it to `ImageDataGenerator` as `preprocessing_function`.
By doing so, all images are randomly erased *before* standard augmentation
done by ImageDataGenerator.

Please check [cifar10_resnet.py](cifar10_resnet.py),
which is imported from [official Keras examples](https://github.com/fchollet/keras/tree/master/examples).

What I did is adding only two lines:

```python
...
from random_eraser import get_random_eraser  # added
...

    datagen = ImageDataGenerator(
    ...
        preprocessing_function=get_random_eraser(v_l=0, v_h=1))  # added
```

### Erase a single image
Of cause, you can erase a single image using `eraser` function.
Please note that `eraser` function works in inplace mode;
the input image itself will be modified (therefore, `img = eraser(img)` can be replaced by `eraser(img)` in the following example).

```python
from random_eraser import get_random_eraser
eraser = get_random_eraser()

# load image to img
img = eraser(img)
```

Pleae check [example.ipynb](example.ipynb) for complete example.

### Parameters
Parameters are fully configurable as:

```
get_random_eraser(p=0.5, s_l=0.02, s_h=0.4, r_1=0.3, r_2=1/0.3,
                  v_l=0, v_h=255, pixel_level=False)
```

- `p` : the probability that random erasing is performed
- `s_l`, `s_h` : minimum / maximum proportion of erased area against input image
- `r_1`, `r_2` : minimum / maximum aspect ratio of erased area
- `v_l`, `v_h` : minimum / maximum value for erased area
- `pixel_level` : pixel-level randomization for erased area


## Results
The original `cifar10_resnet.py` result (w/o cutout / random erasing):

```
Test loss: 0.539187009859
Test accuracy: 0.9077
```

With cutout / random erasing:

```
Test loss: 0.445597583055
Test accuracy: 0.9182
```

With cutout / random erasing (pixel-level):

```
Test loss: 0.446407950497
Test accuracy: 0.9213
```


## References
[1] T. DeVries and G. W. Taylor, "Improved Regularization of Convolutional Neural Networks with Cutout," in arXiv:1708.04552, 2017.

[2] Z. Zhong, L. Zheng, G. Kang, S. Li, and Y. Yang, "Random Erasing Data Augmentation," in arXiv:1708.04896, 2017.


================================================
FILE: cifar10_resnet.py
================================================
"""Trains a ResNet on the CIFAR10 dataset.

Greater than 91% test accuracy (0.52 val_loss) after 50 epochs
48sec per epoch on GTX 1080Ti

Deep Residual Learning for Image Recognition
https://arxiv.org/pdf/1512.03385.pdf
"""

from __future__ import print_function
import keras
from keras.layers import Dense, Conv2D, BatchNormalization, Activation
from keras.layers import MaxPooling2D, AveragePooling2D, Input, Flatten
from keras.optimizers import Adam
from keras.callbacks import ModelCheckpoint, ReduceLROnPlateau
from keras.preprocessing.image import ImageDataGenerator
from keras.regularizers import l2
from keras import backend as K
from keras.models import Model
from keras.datasets import cifar10
import numpy as np
import os
from random_eraser import get_random_eraser

# Training params.
batch_size = 32
epochs = 100
data_augmentation = True
random_erasing = True
pixel_level = False

# Network architecture params.
num_classes = 10
num_filters = 64
num_blocks = 4
num_sub_blocks = 2
use_max_pool = False

# Load the CIFAR10 data.
(x_train, y_train), (x_test, y_test) = cifar10.load_data()

# Input image dimensions.
# We assume data format "channels_last".
img_rows = x_train.shape[1]
img_cols = x_train.shape[2]
channels = x_train.shape[3]

if K.image_data_format() == 'channels_first':
    img_rows = x_train.shape[2]
    img_cols = x_train.shape[3]
    channels = x_train.shape[1]
    x_train = x_train.reshape(x_train.shape[0], channels, img_rows, img_cols)
    x_test = x_test.reshape(x_test.shape[0], channels, img_rows, img_cols)
    input_shape = (channels, img_rows, img_cols)
else:
    img_rows = x_train.shape[1]
    img_cols = x_train.shape[2]
    channels = x_train.shape[3]
    x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, channels)
    x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, channels)
    input_shape = (img_rows, img_cols, channels)

# Normalize data.
x_train = x_train.astype('float32') / 255
x_test = x_test.astype('float32') / 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')
print('y_train shape:', y_train.shape)

# Convert class vectors to binary class matrices.
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

# Start model definition.
inputs = Input(shape=input_shape)
x = Conv2D(num_filters,
           kernel_size=7,
           padding='same',
           strides=2,
           kernel_initializer='he_normal',
           kernel_regularizer=l2(1e-4))(inputs)
x = BatchNormalization()(x)
x = Activation('relu')(x)

# Orig paper uses max pool after 1st conv.
# Reaches up 87% acc if use_max_pool = True.
# Cifar10 images are already too small at 32x32 to be maxpooled. So, we skip.
if use_max_pool:
    x = MaxPooling2D(pool_size=3, strides=2, padding='same')(x)
    num_blocks = 3

# Instantiate convolutional base (stack of blocks).
for i in range(num_blocks):
    for j in range(num_sub_blocks):
        strides = 1
        is_first_layer_but_not_first_block = j == 0 and i > 0
        if is_first_layer_but_not_first_block:
            strides = 2
        y = Conv2D(num_filters,
                   kernel_size=3,
                   padding='same',
                   strides=strides,
                   kernel_initializer='he_normal',
                   kernel_regularizer=l2(1e-4))(x)
        y = BatchNormalization()(y)
        y = Activation('relu')(y)
        y = Conv2D(num_filters,
                   kernel_size=3,
                   padding='same',
                   kernel_initializer='he_normal',
                   kernel_regularizer=l2(1e-4))(y)
        y = BatchNormalization()(y)
        if is_first_layer_but_not_first_block:
            x = Conv2D(num_filters,
                       kernel_size=1,
                       padding='same',
                       strides=2,
                       kernel_initializer='he_normal',
                       kernel_regularizer=l2(1e-4))(x)
        x = keras.layers.add([x, y])
        x = Activation('relu')(x)

    num_filters = 2 * num_filters

# Add classifier on top.
x = AveragePooling2D()(x)
y = Flatten()(x)
outputs = Dense(num_classes,
                activation='softmax',
                kernel_initializer='he_normal')(y)

# Instantiate and compile model.
model = Model(inputs=inputs, outputs=outputs)
model.compile(loss='categorical_crossentropy',
              optimizer=Adam(),
              metrics=['accuracy'])
model.summary()

# Prepare model model saving directory.
save_dir = os.path.join(os.getcwd(), 'saved_models')
model_name = 'cifar10_resnet_model.h5'
if not os.path.isdir(save_dir):
    os.makedirs(save_dir)
filepath = os.path.join(save_dir, model_name)

# Prepare callbacks for model saving and for learning rate decaying.
checkpoint = ModelCheckpoint(filepath=filepath,
                             verbose=1,
                             save_best_only=True)
lr_reducer = ReduceLROnPlateau(factor=np.sqrt(0.1),
                               cooldown=0,
                               patience=5,
                               min_lr=0.5e-6)
callbacks = [checkpoint, lr_reducer]

# Run training, with or without data augmentation.
if not data_augmentation:
    print('Not using data augmentation.')
    model.fit(x_train, y_train,
              batch_size=batch_size,
              epochs=epochs,
              validation_data=(x_test, y_test),
              shuffle=True,
              callbacks=callbacks)
else:
    print('Using real-time data augmentation.')
    # This will do preprocessing and realtime data augmentation:
    datagen = ImageDataGenerator(
        featurewise_center=False,  # set input mean to 0 over the dataset
        samplewise_center=False,  # set each sample mean to 0
        featurewise_std_normalization=False,  # divide inputs by std of the dataset
        samplewise_std_normalization=False,  # divide each input by its std
        zca_whitening=False,  # apply ZCA whitening
        rotation_range=0,  # randomly rotate images in the range (degrees, 0 to 180)
        width_shift_range=0.1,  # randomly shift images horizontally (fraction of total width)
        height_shift_range=0.1,  # randomly shift images vertically (fraction of total height)
        horizontal_flip=True,  # randomly flip images
        vertical_flip=False,  # randomly flip images
        preprocessing_function=get_random_eraser(v_l=0, v_h=1, pixel_level=pixel_level))

    # Compute quantities required for featurewise normalization
    # (std, mean, and principal components if ZCA whitening is applied).
    datagen.fit(x_train)

    # Fit the model on the batches generated by datagen.flow().
    model.fit_generator(datagen.flow(x_train, y_train, batch_size=batch_size),
                        steps_per_epoch=x_train.shape[0] // batch_size,
                        validation_data=(x_test, y_test),
                        epochs=epochs, verbose=1, workers=4,
                        callbacks=callbacks)

# Score trained model.
scores = model.evaluate(x_test, y_test, verbose=1)
print('Test loss:', scores[0])
print('Test accuracy:', scores[1])


================================================
FILE: example.ipynb
================================================
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from random_eraser import get_random_eraser\n",
    "\n",
    "cols, rows = 5, 4\n",
    "img_num = cols * rows"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAfQAAAFiCAYAAAAA6SrUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAAPYQAAD2EBqD+naQAABytJREFUeJzt3UFOG0sUQNGuiA3A0KtgMUxYIRMWwyo89BYqoy/x4wzA\nmC7ncs4wQu7S67SuXkTcY865AQD/tl+rDwAAfJ2gA0CAoANAgKADQICgA0CAoANAgKADQICgA0CA\noANAgKADQICgA0CAoANAgKADQICgA0DA3eoDbNu2jTG8w/WdOefY83rmf27Pe2D+5zwDa5n/WpfO\n34YOAAGCDgABgg4AAYIOAAGCDgABgg4AAYIOAAGCDgABgg4AAYIOAAGCDgABgg4AAYIOAAGCDgAB\ngg4AAYIOAAGCDgABgg4AAYIOAAGCDgABgg4AAYIOAAGCDgABgg4AAYIOAAGCDgABgg4AAYIOAAGC\nDgABgg4AAYIOAAGCDgABgg4AAYIOAAGCDgABgg4AAYIOAAGCDgABgg4AAYIOAAGCDgABgg4AAYIO\nAAGCDgABgg4AAYIOAAGCDgABgg4AAYIOAAGCDgABgg4AAYIOAAGCDgABgg4AAYIOAAGCDgABgg4A\nAYIOAAGCDgABgg4AAYIOAAGCDgABgg4AAYIOAAGCDgABgg4AAYIOAAFjzrn6DADAF9nQASBA0AEg\nQNABIEDQASBA0AEgQNABIEDQASBA0AEgQNABIEDQASBA0AEgQNABIOBu9QG2bdvGGN4Q886cc+x5\nPfM/t+c9MP9znoG1zH+tS+dvQweAAEEHgABBB4AAQQeAAEEHgABBB4AAQQeAAEEHgABBB4AAQQeA\nAEEHgABBB4AAQQeAAEEHgABBB4AAQQeAAEEHgABBB4AAQQeAAEEHgABBB4AAQQeAAEEHgABBB4AA\nQQeAAEEHgABBB4AAQQeAAEEHgABBB4AAQQeAAEEHgABBB4AAQQeAAEEHgABBB4AAQQeAAEEHgABB\nB4AAQQeAAEEHgABBB4AAQQeAAEEHgABBB4AAQQeAAEEHgABBB4AAQQeAAEEHgABBB4AAQQeAAEEH\ngABBB4AAQQeAAEEHgABBB4AAQQeAAEEHgABBB4AAQQeAAEEHgABBB4AAQQeAAEEHgABBB4AAQQeA\ngDHnXH0GAOCLbOgAECDoABAg6AAQIOgAECDoABAg6AAQIOgAECDoABAg6AAQIOgAECDoABAg6AAQ\ncLf6ANu2bWMMb4h5Z8459rye+Z/b8x6Y/znPwFrmv9al87ehA0DATWzo8BFvb2/f8rmPj4/f8rkA\ne7KhA0CAoANAgKADQICgA0CAoANAgKADQICgA0CAoANAgKADQICgA0CAoANAgKADQICgA0CAoANA\ngKADQICgA0CAoANAgKADQICgA0CAoANAgKADQICgA0CAoANAwJhzrj7DNsZYf4gbMucce17P/M/t\neQ/M/5xnYC3zX+vS+dvQASBA0AEgQNABIEDQASBA0AEgQNABIEDQASDgbvUBAODanp6edr3e6+vr\nrtf7Gxs6AAQIOgAECDoABAg6AAQIOgAECDoABAg6AAT4f+gAcafTafUR2IENHQACBB0AAgQdAAIE\nHQACBB0AAgQdAAIEHQACBB0AAgQdAAIEHQACBB0AAgQdAAIEHQACBB0AAgQdAAIEHQACBB0AAgQd\nAAIEHQACBB0AAgQdAALGnHP1GbYxxvpD3JA559jzeuZ/bs97YP7nPAPXdTqdPvXz9/f35r/QpX//\nbegAEGBDv0G2k/Vs6Gt5BtYy/7Vs6ADwg93Ehg4AfI0NHQACBB0AAgQdAAIEHQACBB0AAgQdAAIE\nHQACBB0AAgQdAAIEHQACBB0AAgQdAALuVh9g27w6709eXbie16eu5RlYy/zX8vpUAPjBBB0AAgQd\nAAIEHQACBB0AAgQdAAIEHQACBB0AAgQdAAIEHQACBB0AAgQdAAJu4uUsAPCdXl5eVh/hf56fn6/+\nmTZ0AAgQdAAIEHQACBB0AAgQdAAI8FvuwIccDoerf+bxeLz6Z8JPZUMHgABBB4AAQQeAAEEHgABB\nB4AAv+XOpz08PHzo506n0zefBID/2NABIEDQASBA0AEgQNABIEDQASBA0AEgQNABIEDQASDAF8vw\nab4wBuD22NABIEDQASBA0AEgQNABIEDQASBA0AEgQNABIEDQASBA0AEgQNABIEDQASBA0AEgQNAB\nIEDQASBA0AEgQNABIEDQASBgzDlXn2EbY6w/xA2Zc449r2f+5/a8B//K/A+Hw9U/83g8/vXPPQNr\nmf9al87fhg4AAYIOAAGCDgABgg4AAYIOAAGCDgABgg4AAYIOAAGCDgABgg4AAYIOAAG+y/0G+R7l\n9XyX+1qegbXMfy3f5Q4AP5igA0DATfyTOwDwNTZ0AAgQdAAIEHQACBB0AAgQdAAIEHQACBB0AAgQ\ndAAIEHQACBB0AAgQdAAIEHQACBB0AAgQdAAIEHQACBB0AAgQdAAIEHQACBB0AAgQdAAIEHQACBB0\nAAgQdAAIEHQACBB0AAgQdAAIEHQACBB0AAj4DfkT7EcwPn54AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11098d278>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.zeros((img_num, 64, 64, 3), dtype=np.uint8)\n",
    "\n",
    "eraser = get_random_eraser()\n",
    "\n",
    "for i in range(img_num):\n",
    "    plt.subplot(rows, cols, i + 1)\n",
    "    plt.imshow(eraser(x[i]), interpolation=\"nearest\")\n",
    "    plt.axis('off')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x110f88080>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = np.zeros((img_num, 64, 64, 3), dtype=np.uint8)\n",
    "\n",
    "eraser = get_random_eraser(pixel_level=True)\n",
    "\n",
    "for i in range(img_num):\n",
    "    plt.subplot(rows, cols, i + 1)\n",
    "    plt.imshow(eraser(x[i]), interpolation=\"nearest\")\n",
    "    plt.axis('off')\n",
    "    plt.savefig(\"example2.png\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    ""
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2.0
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}

================================================
FILE: random_eraser.py
================================================
import numpy as np


def get_random_eraser(p=0.5, s_l=0.02, s_h=0.4, r_1=0.3, r_2=1/0.3, v_l=0, v_h=255, pixel_level=False):
    def eraser(input_img):
        if input_img.ndim == 3:
            img_h, img_w, img_c = input_img.shape
        elif input_img.ndim == 2:
            img_h, img_w = input_img.shape

        p_1 = np.random.rand()

        if p_1 > p:
            return input_img

        while True:
            s = np.random.uniform(s_l, s_h) * img_h * img_w
            r = np.random.uniform(r_1, r_2)
            w = int(np.sqrt(s / r))
            h = int(np.sqrt(s * r))
            left = np.random.randint(0, img_w)
            top = np.random.randint(0, img_h)

            if left + w <= img_w and top + h <= img_h:
                break

        if pixel_level:
            if input_img.ndim == 3:
                c = np.random.uniform(v_l, v_h, (h, w, img_c))
            if input_img.ndim == 2:
                c = np.random.uniform(v_l, v_h, (h, w))
        else:
            c = np.random.uniform(v_l, v_h)

        input_img[top:top + h, left:left + w] = c

        return input_img

    return eraser
Download .txt
gitextract_6b5d8koa/

├── .gitignore
├── LICENSE
├── README.md
├── cifar10_resnet.py
├── example.ipynb
└── random_eraser.py
Download .txt
SYMBOL INDEX (1 symbols across 1 files)

FILE: random_eraser.py
  function get_random_eraser (line 4) | def get_random_eraser(p=0.5, s_l=0.02, s_h=0.4, r_1=0.3, r_2=1/0.3, v_l=...
Condensed preview — 6 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (71K chars).
[
  {
    "path": ".gitignore",
    "chars": 1247,
    "preview": "### https://raw.github.com/github/gitignore/f57304e9762876ae4c9b02867ed0cb887316387e/Python.gitignore\n\n# Byte-compiled /"
  },
  {
    "path": "LICENSE",
    "chars": 1070,
    "preview": "MIT License\n\nCopyright (c) 2017 Yusuke Uchida\n\nPermission is hereby granted, free of charge, to any person obtaining a c"
  },
  {
    "path": "README.md",
    "chars": 2914,
    "preview": "# Cutout / Random Erasing\nThis is a Cutout [1] / Random Erasing [2] implementation.\nIn particular, it is easily used wit"
  },
  {
    "path": "cifar10_resnet.py",
    "chars": 7175,
    "preview": "\"\"\"Trains a ResNet on the CIFAR10 dataset.\n\nGreater than 91% test accuracy (0.52 val_loss) after 50 epochs\n48sec per epo"
  },
  {
    "path": "example.ipynb",
    "chars": 55915,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {\n    \"collapsed\": false\n   },\n   \"out"
  },
  {
    "path": "random_eraser.py",
    "chars": 1131,
    "preview": "import numpy as np\n\n\ndef get_random_eraser(p=0.5, s_l=0.02, s_h=0.4, r_1=0.3, r_2=1/0.3, v_l=0, v_h=255, pixel_level=Fal"
  }
]

About this extraction

This page contains the full source code of the yu4u/cutout-random-erasing GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 6 files (67.8 KB), approximately 40.9k tokens, and a symbol index with 1 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!