Skip to main content

"Automatic Feature Extraction in Images and Texts using Transfer Learning"

Project description

deepfeatx: Deep Learning Feature Extractor of Images using Transfer Learning Models

Helper for automatic extraction of features from images (and soon text as well) from transfer learning models like ResNet, VGG16 and EfficientNet.

Install

#hide_output
!pip install deepfeatx

Why this project has been created

  • Fill the gap between ML and DL thus allowing estimators beyond only neural networks for computer vision and NLP problems
  • Neural network models are too painful to setup and train - data generators, optimizers, learning rates, loss functions, training loops, batch size, etc.
  • State of the art results are possible thanks to pretrained models that allows feature extraction
  • With this library we can handle those problems as they were traditional machine learning problems
  • Possibility of using low-code APIs like scikit-learn for computer vision and NLP problems

Usage

Extracting features from an image

from deepfeatx.image import ImageFeatureExtractor
fe = ImageFeatureExtractor()
2021-10-06 11:27:12.595100: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:305] Could not identify NUMA node of platform GPU ID 0, defaulting to 0. Your kernel may not have been built with NUMA support.
2021-10-06 11:27:12.595191: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:271] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 0 MB memory) -> physical PluggableDevice (device: 0, name: METAL, pci bus id: <undefined>)


Metal device set to: Apple M1
im_url='https://raw.githubusercontent.com/WittmannF/deepfeatx/master/sample_data/cats_vs_dogs/valid/dog/dog.124.jpg'
fe.read_img_url(im_url)

png

fe.url_to_vector(im_url)
2021-10-06 11:27:13.679687: I tensorflow/compiler/mlir/mlir_graph_optimization_pass.cc:185] None of the MLIR Optimization Passes are enabled (registered 2)
2021-10-06 11:27:13.679874: W tensorflow/core/platform/profile_utils/cpu_utils.cc:128] Failed to get CPU frequency: 0 Hz
2021-10-06 11:27:13.846942: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:112] Plugin optimizer for device_type GPU is enabled.





array([[0.282272  , 1.0504342 , 0.11333481, ..., 0.18499802, 0.02220213,
        0.06158632]], dtype=float32)

Extracting Features from a Folder with Images

!git clone https://github.com/WittmannF/image-scraper.git
fatal: destination path 'image-scraper' already exists and is not an empty directory.
df=fe.extract_features_from_directory('image-scraper/images/pug',
                                   classes_as_folders=False,
                                   export_vectors_as_df=True)

df.head()
Found 4 validated image filenames.
1/1 [==============================] - 0s 412ms/step


2021-10-06 11:27:16.893822: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:112] Plugin optimizer for device_type GPU is enabled.
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
filepaths 0 1 2 3 4 5 6 7 8 ... 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047
0 image-scraper/images/pug/efd08a2dc5.jpg 0.030705 0.042393 0.422986 1.316509 0.020907 0.000000 0.081956 0.404423 0.489835 ... 0.013765 0.642072 1.818821 0.299441 0.000000 0.419997 0.200106 0.179524 0.026852 0.079208
1 image-scraper/images/pug/24d0f1eee3.jpg 0.068498 0.319734 0.081250 1.248270 0.035602 0.003398 0.000000 0.131528 0.099514 ... 0.258502 1.042543 0.691716 0.264937 0.112621 0.927995 0.050389 0.000000 0.087217 0.066992
2 image-scraper/images/pug/6fb189ce56.jpg 0.373005 0.102008 0.097662 0.362927 0.549803 0.118015 0.000000 0.104320 0.102526 ... 0.210635 0.213147 0.013510 0.574433 0.017234 0.628009 0.000000 0.184550 0.000000 0.248099
3 image-scraper/images/pug/ee815ebc87.jpg 0.263904 0.430294 0.391808 0.033076 0.200174 0.019310 0.002792 0.129120 0.050257 ... 0.048244 0.147806 1.430154 0.266686 0.005126 0.158225 0.097526 0.005045 0.060016 1.109626

4 rows × 2049 columns

Extracting Features from a directory having one sub-folder per class

If the directory structure is the following:

main_directory/
...class_a/
......a_image_1.jpg
......a_image_2.jpg
...class_b/
......b_image_1.jpg
......b_image_2.jpg

We can enter main_directory as input by changing classes_as_folders as True:

df=fe.extract_features_from_directory('image-scraper/images/',
                                      classes_as_folders=True,
                                      export_vectors_as_df=True,
                                      export_class_names=True)

df.head()
Found 504 images belonging to 6 classes.


2021-10-06 11:27:22.669056: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:112] Plugin optimizer for device_type GPU is enabled.


16/16 [==============================] - 6s 358ms/step
<style scoped> .dataframe tbody tr th:only-of-type { vertical-align: middle; }
.dataframe tbody tr th {
    vertical-align: top;
}

.dataframe thead th {
    text-align: right;
}
</style>
filepaths classes 0 1 2 3 4 5 6 7 ... 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047
0 image-scraper/images/chihuahua/00dcf98689.jpg chihuahua 0.640897 0.887126 0.017012 0.723459 0.164907 0.010150 0.042344 0.987457 ... 0.289271 0.182086 0.638064 0.092432 0.212789 0.077480 0.255031 0.006371 0.489620 0.028672
1 image-scraper/images/chihuahua/01ee02c2fb.jpg chihuahua 0.357992 0.128552 0.227736 0.652588 0.014283 0.092680 0.049545 0.319637 ... 0.061090 0.526585 2.363337 0.160859 0.000000 0.008739 0.401081 1.377398 0.383465 0.434211
2 image-scraper/images/chihuahua/040df01fb4.jpg chihuahua 0.163308 0.383921 0.029490 0.985443 0.866045 0.098337 0.000000 0.634062 ... 0.188044 0.000000 0.056569 1.115319 0.000000 0.005084 0.072280 0.555855 0.333000 0.413303
3 image-scraper/images/chihuahua/04d8487a97.jpg chihuahua 0.206927 3.128521 0.147507 0.104669 0.554029 2.415109 0.009964 0.171642 ... 0.000000 1.297839 1.165449 0.562891 0.000000 0.395750 0.250796 0.295067 0.534072 0.051334
4 image-scraper/images/chihuahua/0d9fa44dea.jpg chihuahua 0.233232 0.355028 0.453336 0.060354 0.479405 0.000000 0.099390 0.223719 ... 0.308505 0.376597 1.075250 0.416980 0.073678 0.316829 0.620357 0.125714 0.179848 0.110405

5 rows × 2050 columns

The usage of export_class_names=True will add a new column to the dataframe with the classes names.

Examples

Cats vs Dogs using Keras vs deepfeatx

First let's compare the code of one of the simplest deep learning libraries (Keras) with deepfeatx. As example, let's use a subset of Cats vs Dogs:

from deepfeatx.image import download_dataset
download_dataset('https://github.com/dl7days/datasets/raw/master/cats-dogs-data.zip', 'cats-dogs-data.zip')
Downloading Dataset...


--2021-10-06 11:26:20--  https://github.com/dl7days/datasets/raw/master/cats-dogs-data.zip
Resolving github.com (github.com)... 20.201.28.151
Connecting to github.com (github.com)|20.201.28.151|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://raw.githubusercontent.com/dl7days/datasets/master/cats-dogs-data.zip [following]
--2021-10-06 11:26:20--  https://raw.githubusercontent.com/dl7days/datasets/master/cats-dogs-data.zip
Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.109.133, 185.199.110.133, 185.199.108.133, ...
Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.109.133|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 55203029 (53M) [application/zip]
Saving to: ‘cats-dogs-data.zip’

     0K .......... .......... .......... .......... ..........  0% 1,53M 34s
    50K .......... .......... .......... .......... ..........  0% 3,92M 24s
   100K .......... .......... .......... .......... ..........  0% 2,51M 23s
   150K .......... .......... .......... .......... ..........  0% 4,11M 20s
   200K .......... .......... .......... .......... ..........  0% 10,0M 17s
   250K .......... .......... .......... .......... ..........  0% 3,24M 17s
   300K .......... .......... .......... .......... ..........  0% 7,93M 16s
   350K .......... .......... .......... .......... ..........  0% 8,54M 14s
   400K .......... .......... .......... .......... ..........  0% 54,7M 13s
   450K .......... .......... .......... .......... ..........  0% 9,20M 12s
   500K .......... .......... .......... .......... ..........  1% 45,5M 11s
   550K .......... .......... .......... .......... ..........  1% 6,86M 11s
   600K .......... .......... .......... .......... ..........  1% 11,1M 10s
   650K .......... .......... .......... .......... ..........  1% 8,95M 10s
   700K .......... .......... .......... .......... ..........  1% 55,4M 9s
   750K .......... .......... .......... .......... ..........  1% 6,09M 9s
   800K .......... .......... .......... .......... ..........  1%  116M 9s
   850K .......... .......... .......... .......... ..........  1%  148M 8s
   900K .......... .......... .......... .......... ..........  1% 30,5M 8s
   950K .......... .......... .......... .......... ..........  1% 88,6M 8s
  1000K .......... .......... .......... .......... ..........  1% 31,5M 7s
  1050K .......... .......... .......... .......... ..........  2% 20,6M 7s
  1100K .......... .......... .......... .......... ..........  2% 57,6M 7s
  1150K .......... .......... .......... .......... ..........  2% 39,6M 7s
  1200K .......... .......... .......... .......... ..........  2% 50,0M 6s
  1250K .......... .......... .......... .......... ..........  2% 4,18M 7s
  1300K .......... .......... .......... .......... ..........  2% 3,63M 7s
  1350K .......... .......... .......... .......... ..........  2% 20,8M 7s
  1400K .......... .......... .......... .......... ..........  2% 97,7M 6s
  1450K .......... .......... .......... .......... ..........  2% 16,5M 6s
  1500K .......... .......... .......... .......... ..........  2%  108M 6s
  1550K .......... .......... .......... .......... ..........  2% 19,8M 6s
  1600K .......... .......... .......... .......... ..........  3% 21,6M 6s
  1650K .......... .......... .......... .......... ..........  3% 38,8M 6s
  1700K .......... .......... .......... .......... ..........  3% 21,7M 6s
  1750K .......... .......... .......... .......... ..........  3% 48,8M 6s
  1800K .......... .......... .......... .......... ..........  3% 21,4M 5s
  1850K .......... .......... .......... .......... ..........  3%  108M 5s
  1900K .......... .......... .......... .......... ..........  3% 22,6M 5s
  1950K .......... .......... .......... .......... ..........  3% 76,9M 5s
  2000K .......... .......... .......... .......... ..........  3% 18,2M 5s
  2050K .......... .......... .......... .......... ..........  3% 25,6M 5s
  2100K .......... .......... .......... .......... ..........  3% 41,5M 5s
  2150K .......... .......... .......... .......... ..........  4% 66,6M 5s
  2200K .......... .......... .......... .......... ..........  4% 11,5M 5s
  2250K .......... .......... .......... .......... ..........  4%  150M 5s
  2300K .......... .......... .......... .......... ..........  4% 56,8M 5s
  2350K .......... .......... .......... .......... ..........  4% 40,7M 5s
  2400K .......... .......... .......... .......... ..........  4% 23,7M 4s
  2450K .......... .......... .......... .......... ..........  4%  110M 4s
  2500K .......... .......... .......... .......... ..........  4% 16,6M 4s
  2550K .......... .......... .......... .......... ..........  4% 24,0M 4s
  2600K .......... .......... .......... .......... ..........  4% 48,4M 4s
  2650K .......... .......... .......... .......... ..........  5% 16,5M 4s
  2700K .......... .......... .......... .......... ..........  5%  119M 4s
  2750K .......... .......... .......... .......... ..........  5% 19,8M 4s
  2800K .......... .......... .......... .......... ..........  5% 45,4M 4s
  2850K .......... .......... .......... .......... ..........  5% 18,1M 4s
  2900K .......... .......... .......... .......... ..........  5% 68,1M 4s
  2950K .......... .......... .......... .......... ..........  5% 44,6M 4s
  3000K .......... .......... .......... .......... ..........  5% 43,5M 4s
  3050K .......... .......... .......... .......... ..........  5% 20,6M 4s
  3100K .......... .......... .......... .......... ..........  5% 75,4M 4s
  3150K .......... .......... .......... .......... ..........  5% 20,3M 4s
  3200K .......... .......... .......... .......... ..........  6% 66,6M 4s
  3250K .......... .......... .......... .......... ..........  6% 23,5M 4s
  3300K .......... .......... .......... .......... ..........  6% 51,1M 4s
  3350K .......... .......... .......... .......... ..........  6% 20,2M 4s
  3400K .......... .......... .......... .......... ..........  6% 18,2M 4s
  3450K .......... .......... .......... .......... ..........  6% 85,4M 4s
  3500K .......... .......... .......... .......... ..........  6% 23,9M 4s
  3550K .......... .......... .......... .......... ..........  6% 26,5M 3s
  3600K .......... .......... .......... .......... ..........  6% 18,7M 3s
  3650K .......... .......... .......... .......... ..........  6% 66,1M 3s
  3700K .......... .......... .......... .......... ..........  6% 23,7M 3s
  3750K .......... .......... .......... .......... ..........  7% 24,3M 3s
  3800K .......... .......... .......... .......... ..........  7% 44,8M 3s
  3850K .......... .......... .......... .......... ..........  7% 36,2M 3s
  3900K .......... .......... .......... .......... ..........  7% 41,0M 3s
  3950K .......... .......... .......... .......... ..........  7% 57,9M 3s
  4000K .......... .......... .......... .......... ..........  7% 15,1M 3s
  4050K .......... .......... .......... .......... ..........  7%  153M 3s
  4100K .......... .......... .......... .......... ..........  7% 22,2M 3s
  4150K .......... .......... .......... .......... ..........  7% 78,6M 3s
  4200K .......... .......... .......... .......... ..........  7% 21,5M 3s
  4250K .......... .......... .......... .......... ..........  7% 88,6M 3s
  4300K .......... .......... .......... .......... ..........  8% 17,6M 3s
  4350K .......... .......... .......... .......... ..........  8% 77,3M 3s
  4400K .......... .......... .......... .......... ..........  8% 16,8M 3s
  4450K .......... .......... .......... .......... ..........  8% 19,9M 3s
  4500K .......... .......... .......... .......... ..........  8% 48,7M 3s
  4550K .......... .......... .......... .......... ..........  8%  150M 3s
  4600K .......... .......... .......... .......... ..........  8% 22,7M 3s
  4650K .......... .......... .......... .......... ..........  8% 49,5M 3s
  4700K .......... .......... .......... .......... ..........  8% 19,3M 3s
  4750K .......... .......... .......... .......... ..........  8%  171M 3s
  4800K .......... .......... .......... .......... ..........  8% 20,5M 3s
  4850K .......... .......... .......... .......... ..........  9% 19,9M 3s
  4900K .......... .......... .......... .......... ..........  9% 52,4M 3s
  4950K .......... .......... .......... .......... ..........  9% 15,2M 3s
  5000K .......... .......... .......... .......... ..........  9% 58,8M 3s
  5050K .......... .......... .......... .......... ..........  9% 16,6M 3s
  5100K .......... .......... .......... .......... ..........  9%  110M 3s
  5150K .......... .......... .......... .......... ..........  9% 43,6M 3s
  5200K .......... .......... .......... .......... ..........  9% 54,6M 3s
  5250K .......... .......... .......... .......... ..........  9% 22,4M 3s
  5300K .......... .......... .......... .......... ..........  9% 49,3M 3s
  5350K .......... .......... .......... .......... .......... 10% 13,7M 3s
  5400K .......... .......... .......... .......... .......... 10%  114M 3s
  5450K .......... .......... .......... .......... .......... 10% 22,9M 3s
  5500K .......... .......... .......... .......... .......... 10% 85,2M 3s
  5550K .......... .......... .......... .......... .......... 10% 16,4M 3s
  5600K .......... .......... .......... .......... .......... 10%  118M 3s
  5650K .......... .......... .......... .......... .......... 10% 34,8M 3s
  5700K .......... .......... .......... .......... .......... 10% 47,6M 3s
  5750K .......... .......... .......... .......... .......... 10% 15,5M 3s
  5800K .......... .......... .......... .......... .......... 10% 19,1M 3s
  5850K .......... .......... .......... .......... .......... 10% 58,4M 3s
  5900K .......... .......... .......... .......... .......... 11% 21,1M 3s
  5950K .......... .......... .......... .......... .......... 11% 92,5M 3s
  6000K .......... .......... .......... .......... .......... 11% 26,6M 3s
  6050K .......... .......... .......... .......... .......... 11% 58,8M 3s
  6100K .......... .......... .......... .......... .......... 11% 20,3M 3s
  6150K .......... .......... .......... .......... .......... 11% 49,1M 3s
  6200K .......... .......... .......... .......... .......... 11% 18,3M 3s
  6250K .......... .......... .......... .......... .......... 11% 53,2M 3s
  6300K .......... .......... .......... .......... .......... 11% 18,2M 3s
  6350K .......... .......... .......... .......... .......... 11% 79,5M 3s
  6400K .......... .......... .......... .......... .......... 11% 21,9M 3s
  6450K .......... .......... .......... .......... .......... 12% 29,8M 3s
  6500K .......... .......... .......... .......... .......... 12% 31,8M 2s
  6550K .......... .......... .......... .......... .......... 12% 54,2M 2s
  6600K .......... .......... .......... .......... .......... 12% 27,2M 2s
  6650K .......... .......... .......... .......... .......... 12% 70,8M 2s
  6700K .......... .......... .......... .......... .......... 12% 15,6M 2s
  6750K .......... .......... .......... .......... .......... 12% 18,9M 2s
  6800K .......... .......... .......... .......... .......... 12% 77,5M 2s
  6850K .......... .......... .......... .......... .......... 12% 22,4M 2s
  6900K .......... .......... .......... .......... .......... 12% 28,4M 2s
  6950K .......... .......... .......... .......... .......... 12% 23,1M 2s
  7000K .......... .......... .......... .......... .......... 13% 77,4M 2s
  7050K .......... .......... .......... .......... .......... 13% 25,6M 2s
  7100K .......... .......... .......... .......... .......... 13%  127M 2s
  7150K .......... .......... .......... .......... .......... 13% 17,2M 2s
  7200K .......... .......... .......... .......... .......... 13% 82,8M 2s
  7250K .......... .......... .......... .......... .......... 13% 15,9M 2s
  7300K .......... .......... .......... .......... .......... 13%  134M 2s
  7350K .......... .......... .......... .......... .......... 13% 29,7M 2s
  7400K .......... .......... .......... .......... .......... 13% 78,1M 2s
  7450K .......... .......... .......... .......... .......... 13% 16,4M 2s
  7500K .......... .......... .......... .......... .......... 14% 78,5M 2s
  7550K .......... .......... .......... .......... .......... 14% 21,0M 2s
  7600K .......... .......... .......... .......... .......... 14% 32,6M 2s
  7650K .......... .......... .......... .......... .......... 14% 27,7M 2s
  7700K .......... .......... .......... .......... .......... 14% 18,3M 2s
  7750K .......... .......... .......... .......... .......... 14% 41,7M 2s
  7800K .......... .......... .......... .......... .......... 14% 19,2M 2s
  7850K .......... .......... .......... .......... .......... 14%  114M 2s
  7900K .......... .......... .......... .......... .......... 14% 18,5M 2s
  7950K .......... .......... .......... .......... .......... 14% 54,0M 2s
  8000K .......... .......... .......... .......... .......... 14% 25,6M 2s
  8050K .......... .......... .......... .......... .......... 15% 87,3M 2s
  8100K .......... .......... .......... .......... .......... 15% 21,5M 2s
  8150K .......... .......... .......... .......... .......... 15% 26,4M 2s
  8200K .......... .......... .......... .......... .......... 15% 20,6M 2s
  8250K .......... .......... .......... .......... .......... 15% 99,2M 2s
  8300K .......... .......... .......... .......... .......... 15% 20,2M 2s
  8350K .......... .......... .......... .......... .......... 15%  151M 2s
  8400K .......... .......... .......... .......... .......... 15% 17,1M 2s
  8450K .......... .......... .......... .......... .......... 15% 59,6M 2s
  8500K .......... .......... .......... .......... .......... 15% 14,7M 2s
  8550K .......... .......... .......... .......... .......... 15% 87,8M 2s
  8600K .......... .......... .......... .......... .......... 16% 57,2M 2s
  8650K .......... .......... .......... .......... .......... 16% 70,7M 2s
  8700K .......... .......... .......... .......... .......... 16% 14,3M 2s
  8750K .......... .......... .......... .......... .......... 16%  169M 2s
  8800K .......... .......... .......... .......... .......... 16% 20,2M 2s
  8850K .......... .......... .......... .......... .......... 16% 19,2M 2s
  8900K .......... .......... .......... .......... .......... 16% 57,5M 2s
  8950K .......... .......... .......... .......... .......... 16% 54,4M 2s
  9000K .......... .......... .......... .......... .......... 16% 26,1M 2s
  9050K .......... .......... .......... .......... .......... 16% 22,6M 2s
  9100K .......... .......... .......... .......... .......... 16% 78,6M 2s
  9150K .......... .......... .......... .......... .......... 17% 14,3M 2s
  9200K .......... .......... .......... .......... .......... 17% 79,4M 2s
  9250K .......... .......... .......... .......... .......... 17% 16,2M 2s
  9300K .......... .......... .......... .......... .......... 17% 68,1M 2s
  9350K .......... .......... .......... .......... .......... 17% 27,8M 2s
  9400K .......... .......... .......... .......... .......... 17% 43,3M 2s
  9450K .......... .......... .......... .......... .......... 17% 29,3M 2s
  9500K .......... .......... .......... .......... .......... 17% 45,5M 2s
  9550K .......... .......... .......... .......... .......... 17% 21,6M 2s
  9600K .......... .......... .......... .......... .......... 17% 13,5M 2s
  9650K .......... .......... .......... .......... .......... 17%  152M 2s
  9700K .......... .......... .......... .......... .......... 18% 33,2M 2s
  9750K .......... .......... .......... .......... .......... 18% 94,6M 2s
  9800K .......... .......... .......... .......... .......... 18% 19,4M 2s
  9850K .......... .......... .......... .......... .......... 18% 67,9M 2s
  9900K .......... .......... .......... .......... .......... 18% 15,5M 2s
  9950K .......... .......... .......... .......... .......... 18% 52,4M 2s
 10000K .......... .......... .......... .......... .......... 18% 12,6M 2s
 10050K .......... .......... .......... .......... .......... 18%  168M 2s
 10100K .......... .......... .......... .......... .......... 18% 21,4M 2s
 10150K .......... .......... .......... .......... .......... 18%  137M 2s
 10200K .......... .......... .......... .......... .......... 19% 20,5M 2s
 10250K .......... .......... .......... .......... .......... 19% 5,43M 2s
 10300K .......... .......... .......... .......... .......... 19%  105M 2s
 10350K .......... .......... .......... .......... .......... 19%  126M 2s
 10400K .......... .......... .......... .......... .......... 19%  157M 2s
 10450K .......... .......... .......... .......... .......... 19%  157M 2s
 10500K .......... .......... .......... .......... .......... 19% 85,2M 2s
 10550K .......... .......... .......... .......... .......... 19% 87,0M 2s
 10600K .......... .......... .......... .......... .......... 19%  168M 2s
 10650K .......... .......... .......... .......... .......... 19%  156M 2s
 10700K .......... .......... .......... .......... .......... 19% 24,3M 2s
 10750K .......... .......... .......... .......... .......... 20% 80,7M 2s
 10800K .......... .......... .......... .......... .......... 20% 13,7M 2s
 10850K .......... .......... .......... .......... .......... 20% 17,5M 2s
 10900K .......... .......... .......... .......... .......... 20%  183M 2s
 10950K .......... .......... .......... .......... .......... 20% 19,8M 2s
 11000K .......... .......... .......... .......... .......... 20% 39,6M 2s
 11050K .......... .......... .......... .......... .......... 20% 37,5M 2s
 11100K .......... .......... .......... .......... .......... 20% 19,6M 2s
 11150K .......... .......... .......... .......... .......... 20%  152M 2s
 11200K .......... .......... .......... .......... .......... 20% 22,8M 2s
 11250K .......... .......... .......... .......... .......... 20% 44,3M 2s
 11300K .......... .......... .......... .......... .......... 21% 16,1M 2s
 11350K .......... .......... .......... .......... .......... 21% 55,4M 2s
 11400K .......... .......... .......... .......... .......... 21% 20,7M 2s
 11450K .......... .......... .......... .......... .......... 21%  103M 2s
 11500K .......... .......... .......... .......... .......... 21% 23,3M 2s
 11550K .......... .......... .......... .......... .......... 21% 95,4M 2s
 11600K .......... .......... .......... .......... .......... 21% 11,1M 2s
 11650K .......... .......... .......... .......... .......... 21%  175M 2s
 11700K .......... .......... .......... .......... .......... 21% 28,4M 2s
 11750K .......... .......... .......... .......... .......... 21%  103M 2s
 11800K .......... .......... .......... .......... .......... 21% 23,8M 2s
 11850K .......... .......... .......... .......... .......... 22% 68,7M 2s
 11900K .......... .......... .......... .......... .......... 22% 20,9M 2s
 11950K .......... .......... .......... .......... .......... 22% 51,0M 2s
 12000K .......... .......... .......... .......... .......... 22% 5,65M 2s
 12050K .......... .......... .......... .......... .......... 22%  117M 2s
 12100K .......... .......... .......... .......... .......... 22%  141M 2s
 12150K .......... .......... .......... .......... .......... 22%  139M 2s
 12200K .......... .......... .......... .......... .......... 22%  164M 2s
 12250K .......... .......... .......... .......... .......... 22% 54,0M 2s
 12300K .......... .......... .......... .......... .......... 22% 75,5M 2s
 12350K .......... .......... .......... .......... .......... 23% 22,6M 2s
 12400K .......... .......... .......... .......... .......... 23% 8,03M 2s
 12450K .......... .......... .......... .......... .......... 23% 80,7M 2s
 12500K .......... .......... .......... .......... .......... 23%  147M 2s
 12550K .......... .......... .......... .......... .......... 23%  121M 2s
 12600K .......... .......... .......... .......... .......... 23%  143M 2s
 12650K .......... .......... .......... .......... .......... 23% 33,3M 2s
 12700K .......... .......... .......... .......... .......... 23% 17,4M 2s
 12750K .......... .......... .......... .......... .......... 23% 62,4M 2s
 12800K .......... .......... .......... .......... .......... 23% 20,1M 2s
 12850K .......... .......... .......... .......... .......... 23% 82,5M 2s
 12900K .......... .......... .......... .......... .......... 24% 23,9M 2s
 12950K .......... .......... .......... .......... .......... 24% 40,5M 2s
 13000K .......... .......... .......... .......... .......... 24% 16,8M 2s
 13050K .......... .......... .......... .......... .......... 24%  139M 2s
 13100K .......... .......... .......... .......... .......... 24% 22,1M 2s
 13150K .......... .......... .......... .......... .......... 24% 87,8M 2s
 13200K .......... .......... .......... .......... .......... 24% 13,0M 2s
 13250K .......... .......... .......... .......... .......... 24% 95,2M 2s
 13300K .......... .......... .......... .......... .......... 24% 20,0M 2s
 13350K .......... .......... .......... .......... .......... 24%  124M 2s
 13400K .......... .......... .......... .......... .......... 24% 18,1M 2s
 13450K .......... .......... .......... .......... .......... 25%  148M 2s
 13500K .......... .......... .......... .......... .......... 25% 19,0M 2s
 13550K .......... .......... .......... .......... .......... 25% 15,6M 2s
 13600K .......... .......... .......... .......... .......... 25%  131M 2s
 13650K .......... .......... .......... .......... .......... 25%  180M 2s
 13700K .......... .......... .......... .......... .......... 25% 19,5M 2s
 13750K .......... .......... .......... .......... .......... 25% 18,3M 2s
 13800K .......... .......... .......... .......... .......... 25% 70,3M 2s
 13850K .......... .......... .......... .......... .......... 25% 16,2M 2s
 13900K .......... .......... .......... .......... .......... 25% 18,9M 2s
 13950K .......... .......... .......... .......... .......... 25%  141M 2s
 14000K .......... .......... .......... .......... .......... 26%  134M 2s
 14050K .......... .......... .......... .......... .......... 26% 19,0M 2s
 14100K .......... .......... .......... .......... .......... 26% 90,8M 2s
 14150K .......... .......... .......... .......... .......... 26% 18,6M 2s
 14200K .......... .......... .......... .......... .......... 26% 83,5M 2s
 14250K .......... .......... .......... .......... .......... 26% 22,4M 2s
 14300K .......... .......... .......... .......... .......... 26% 48,6M 2s
 14350K .......... .......... .......... .......... .......... 26% 23,4M 2s
 14400K .......... .......... .......... .......... .......... 26% 68,8M 2s
 14450K .......... .......... .......... .......... .......... 26% 15,3M 2s
 14500K .......... .......... .......... .......... .......... 26%  167M 2s
 14550K .......... .......... .......... .......... .......... 27% 15,9M 2s
 14600K .......... .......... .......... .......... .......... 27%  168M 2s
 14650K .......... .......... .......... .......... .......... 27% 18,0M 2s
 14700K .......... .......... .......... .......... .......... 27%  160M 2s
 14750K .......... .......... .......... .......... .......... 27% 15,3M 2s
 14800K .......... .......... .......... .......... .......... 27% 66,4M 2s
 14850K .......... .......... .......... .......... .......... 27% 24,8M 2s
 14900K .......... .......... .......... .......... .......... 27% 24,3M 2s
 14950K .......... .......... .......... .......... .......... 27%  115M 2s
 15000K .......... .......... .......... .......... .......... 27% 19,7M 2s
 15050K .......... .......... .......... .......... .......... 28% 72,0M 2s
 15100K .......... .......... .......... .......... .......... 28% 13,8M 2s
 15150K .......... .......... .......... .......... .......... 28%  110M 2s
 15200K .......... .......... .......... .......... .......... 28% 38,9M 2s
 15250K .......... .......... .......... .......... .......... 28% 54,0M 2s
 15300K .......... .......... .......... .......... .......... 28% 21,5M 2s
 15350K .......... .......... .......... .......... .......... 28% 63,9M 2s
 15400K .......... .......... .......... .......... .......... 28% 19,8M 2s
 15450K .......... .......... .......... .......... .......... 28% 77,4M 2s
 15500K .......... .......... .......... .......... .......... 28% 15,9M 2s
 15550K .......... .......... .......... .......... .......... 28%  107M 2s
 15600K .......... .......... .......... .......... .......... 29% 11,6M 2s
 15650K .......... .......... .......... .......... .......... 29% 75,1M 2s
 15700K .......... .......... .......... .......... .......... 29%  163M 2s
 15750K .......... .......... .......... .......... .......... 29% 16,1M 2s
 15800K .......... .......... .......... .......... .......... 29%  101M 2s
 15850K .......... .......... .......... .......... .......... 29% 16,7M 2s
 15900K .......... .......... .......... .......... .......... 29% 84,8M 2s
 15950K .......... .......... .......... .......... .......... 29% 17,9M 2s
 16000K .......... .......... .......... .......... .......... 29% 84,5M 2s
 16050K .......... .......... .......... .......... .......... 29% 23,1M 2s
 16100K .......... .......... .......... .......... .......... 29% 79,0M 2s
 16150K .......... .......... .......... .......... .......... 30% 19,3M 2s
 16200K .......... .......... .......... .......... .......... 30% 60,4M 2s
 16250K .......... .......... .......... .......... .......... 30% 18,9M 2s
 16300K .......... .......... .......... .......... .......... 30% 99,9M 2s
 16350K .......... .......... .......... .......... .......... 30% 11,8M 2s
 16400K .......... .......... .......... .......... .......... 30% 85,4M 2s
 16450K .......... .......... .......... .......... .......... 30% 63,2M 2s
 16500K .......... .......... .......... .......... .......... 30% 19,3M 2s
 16550K .......... .......... .......... .......... .......... 30% 81,8M 2s
 16600K .......... .......... .......... .......... .......... 30% 12,3M 2s
 16650K .......... .......... .......... .......... .......... 30% 95,4M 2s
 16700K .......... .......... .......... .......... .......... 31% 24,4M 2s
 16750K .......... .......... .......... .......... .......... 31% 78,4M 2s
 16800K .......... .......... .......... .......... .......... 31% 20,7M 1s
 16850K .......... .......... .......... .......... .......... 31% 47,2M 1s
 16900K .......... .......... .......... .......... .......... 31%  172M 1s
 16950K .......... .......... .......... .......... .......... 31% 19,1M 1s
 17000K .......... .......... .......... .......... .......... 31% 21,4M 1s
 17050K .......... .......... .......... .......... .......... 31% 44,0M 1s
 17100K .......... .......... .......... .......... .......... 31% 25,4M 1s
 17150K .......... .......... .......... .......... .......... 31% 74,9M 1s
 17200K .......... .......... .......... .......... .......... 31% 25,1M 1s
 17250K .......... .......... .......... .......... .......... 32% 86,4M 1s
 17300K .......... .......... .......... .......... .......... 32% 18,2M 1s
 17350K .......... .......... .......... .......... .......... 32% 57,9M 1s
 17400K .......... .......... .......... .......... .......... 32% 21,1M 1s
 17450K .......... .......... .......... .......... .......... 32%  101M 1s
 17500K .......... .......... .......... .......... .......... 32% 16,0M 1s
 17550K .......... .......... .......... .......... .......... 32% 22,5M 1s
 17600K .......... .......... .......... .......... .......... 32% 54,6M 1s
 17650K .......... .......... .......... .......... .......... 32% 18,2M 1s
 17700K .......... .......... .......... .......... .......... 32% 95,4M 1s
 17750K .......... .......... .......... .......... .......... 33% 22,4M 1s
 17800K .......... .......... .......... .......... .......... 33% 60,8M 1s
 17850K .......... .......... .......... .......... .......... 33% 21,5M 1s
 17900K .......... .......... .......... .......... .......... 33% 82,1M 1s
 17950K .......... .......... .......... .......... .......... 33% 13,0M 1s
 18000K .......... .......... .......... .......... .......... 33%  109M 1s
 18050K .......... .......... .......... .......... .......... 33% 20,6M 1s
 18100K .......... .......... .......... .......... .......... 33% 73,2M 1s
 18150K .......... .......... .......... .......... .......... 33% 24,2M 1s
 18200K .......... .......... .......... .......... .......... 33%  120M 1s
 18250K .......... .......... .......... .......... .......... 33% 16,9M 1s
 18300K .......... .......... .......... .......... .......... 34% 15,3M 1s
 18350K .......... .......... .......... .......... .......... 34%  116M 1s
 18400K .......... .......... .......... .......... .......... 34% 18,3M 1s
 18450K .......... .......... .......... .......... .......... 34% 51,3M 1s
 18500K .......... .......... .......... .......... .......... 34% 23,1M 1s
 18550K .......... .......... .......... .......... .......... 34%  125M 1s
 18600K .......... .......... .......... .......... .......... 34% 17,2M 1s
 18650K .......... .......... .......... .......... .......... 34% 69,0M 1s
 18700K .......... .......... .......... .......... .......... 34% 20,0M 1s
 18750K .......... .......... .......... .......... .......... 34% 72,9M 1s
 18800K .......... .......... .......... .......... .......... 34% 22,3M 1s
 18850K .......... .......... .......... .......... .......... 35% 50,0M 1s
 18900K .......... .......... .......... .......... .......... 35% 19,9M 1s
 18950K .......... .......... .......... .......... .......... 35%  109M 1s
 19000K .......... .......... .......... .......... .......... 35% 21,1M 1s
 19050K .......... .......... .......... .......... .......... 35% 45,4M 1s
 19100K .......... .......... .......... .......... .......... 35% 19,2M 1s
 19150K .......... .......... .......... .......... .......... 35% 66,7M 1s
 19200K .......... .......... .......... .......... .......... 35% 26,6M 1s
 19250K .......... .......... .......... .......... .......... 35% 72,6M 1s
 19300K .......... .......... .......... .......... .......... 35% 20,8M 1s
 19350K .......... .......... .......... .......... .......... 35% 49,4M 1s
 19400K .......... .......... .......... .......... .......... 36% 17,1M 1s
 19450K .......... .......... .......... .......... .......... 36% 37,7M 1s
 19500K .......... .......... .......... .......... .......... 36% 13,4M 1s
 19550K .......... .......... .......... .......... .......... 36%  151M 1s
 19600K .......... .......... .......... .......... .......... 36% 43,3M 1s
 19650K .......... .......... .......... .......... .......... 36%  143M 1s
 19700K .......... .......... .......... .......... .......... 36% 17,6M 1s
 19750K .......... .......... .......... .......... .......... 36% 55,4M 1s
 19800K .......... .......... .......... .......... .......... 36% 20,7M 1s
 19850K .......... .......... .......... .......... .......... 36% 58,8M 1s
 19900K .......... .......... .......... .......... .......... 37% 19,4M 1s
 19950K .......... .......... .......... .......... .......... 37% 86,9M 1s
 20000K .......... .......... .......... .......... .......... 37% 28,1M 1s
 20050K .......... .......... .......... .......... .......... 37% 13,7M 1s
 20100K .......... .......... .......... .......... .......... 37% 56,4M 1s
 20150K .......... .......... .......... .......... .......... 37% 17,3M 1s
 20200K .......... .......... .......... .......... .......... 37%  130M 1s
 20250K .......... .......... .......... .......... .......... 37% 32,8M 1s
 20300K .......... .......... .......... .......... .......... 37% 51,7M 1s
 20350K .......... .......... .......... .......... .......... 37% 21,0M 1s
 20400K .......... .......... .......... .......... .......... 37% 85,1M 1s
 20450K .......... .......... .......... .......... .......... 38% 19,2M 1s
 20500K .......... .......... .......... .......... .......... 38% 97,3M 1s
 20550K .......... .......... .......... .......... .......... 38% 15,5M 1s
 20600K .......... .......... .......... .......... .......... 38% 59,0M 1s
 20650K .......... .......... .......... .......... .......... 38% 26,7M 1s
 20700K .......... .......... .......... .......... .......... 38% 52,8M 1s
 20750K .......... .......... .......... .......... .......... 38% 17,9M 1s
 20800K .......... .......... .......... .......... .......... 38% 15,5M 1s
 20850K .......... .......... .......... .......... .......... 38%  108M 1s
 20900K .......... .......... .......... .......... .......... 38% 16,3M 1s
 20950K .......... .......... .......... .......... .......... 38% 67,5M 1s
 21000K .......... .......... .......... .......... .......... 39% 50,0M 1s
 21050K .......... .......... .......... .......... .......... 39% 49,2M 1s
 21100K .......... .......... .......... .......... .......... 39% 12,9M 1s
 21150K .......... .......... .......... .......... .......... 39% 64,2M 1s
 21200K .......... .......... .......... .......... .......... 39% 50,2M 1s
 21250K .......... .......... .......... .......... .......... 39% 85,5M 1s
 21300K .......... .......... .......... .......... .......... 39% 18,0M 1s
 21350K .......... .......... .......... .......... .......... 39% 27,5M 1s
 21400K .......... .......... .......... .......... .......... 39% 29,2M 1s
 21450K .......... .......... .......... .......... .......... 39%  144M 1s
 21500K .......... .......... .......... .......... .......... 39% 16,4M 1s
 21550K .......... .......... .......... .......... .......... 40% 21,8M 1s
 21600K .......... .......... .......... .......... .......... 40% 68,2M 1s
 21650K .......... .......... .......... .......... .......... 40% 86,3M 1s
 21700K .......... .......... .......... .......... .......... 40% 22,9M 1s
 21750K .......... .......... .......... .......... .......... 40% 47,5M 1s
 21800K .......... .......... .......... .......... .......... 40% 18,7M 1s
 21850K .......... .......... .......... .......... .......... 40% 64,8M 1s
 21900K .......... .......... .......... .......... .......... 40% 21,8M 1s
 21950K .......... .......... .......... .......... .......... 40% 16,8M 1s
 22000K .......... .......... .......... .......... .......... 40% 85,2M 1s
 22050K .......... .......... .......... .......... .......... 40% 20,3M 1s
 22100K .......... .......... .......... .......... .......... 41%  126M 1s
 22150K .......... .......... .......... .......... .......... 41% 17,0M 1s
 22200K .......... .......... .......... .......... .......... 41% 95,4M 1s
 22250K .......... .......... .......... .......... .......... 41% 25,8M 1s
 22300K .......... .......... .......... .......... .......... 41%  100M 1s
 22350K .......... .......... .......... .......... .......... 41% 15,5M 1s
 22400K .......... .......... .......... .......... .......... 41%  146M 1s
 22450K .......... .......... .......... .......... .......... 41% 28,3M 1s
 22500K .......... .......... .......... .......... .......... 41% 45,5M 1s
 22550K .......... .......... .......... .......... .......... 41% 21,5M 1s
 22600K .......... .......... .......... .......... .......... 42% 74,3M 1s
 22650K .......... .......... .......... .......... .......... 42% 10,0M 1s
 22700K .......... .......... .......... .......... .......... 42% 62,5M 1s
 22750K .......... .......... .......... .......... .......... 42% 68,2M 1s
 22800K .......... .......... .......... .......... .......... 42% 18,1M 1s
 22850K .......... .......... .......... .......... .......... 42% 93,0M 1s
 22900K .......... .......... .......... .......... .......... 42% 25,5M 1s
 22950K .......... .......... .......... .......... .......... 42% 93,2M 1s
 23000K .......... .......... .......... .......... .......... 42% 21,4M 1s
 23050K .......... .......... .......... .......... .......... 42% 61,7M 1s
 23100K .......... .......... .......... .......... .......... 42% 12,4M 1s
 23150K .......... .......... .......... .......... .......... 43%  101M 1s
 23200K .......... .......... .......... .......... .......... 43% 43,2M 1s
 23250K .......... .......... .......... .......... .......... 43% 49,3M 1s
 23300K .......... .......... .......... .......... .......... 43% 17,3M 1s
 23350K .......... .......... .......... .......... .......... 43%  145M 1s
 23400K .......... .......... .......... .......... .......... 43% 24,3M 1s
 23450K .......... .......... .......... .......... .......... 43% 50,2M 1s
 23500K .......... .......... .......... .......... .......... 43% 15,9M 1s
 23550K .......... .......... .......... .......... .......... 43% 19,4M 1s
 23600K .......... .......... .......... .......... .......... 43% 57,4M 1s
 23650K .......... .......... .......... .......... .......... 43% 17,7M 1s
 23700K .......... .......... .......... .......... .......... 44%  148M 1s
 23750K .......... .......... .......... .......... .......... 44% 19,6M 1s
 23800K .......... .......... .......... .......... .......... 44% 59,4M 1s
 23850K .......... .......... .......... .......... .......... 44% 15,7M 1s
 23900K .......... .......... .......... .......... .......... 44%  146M 1s
 23950K .......... .......... .......... .......... .......... 44% 29,2M 1s
 24000K .......... .......... .......... .......... .......... 44% 50,4M 1s
 24050K .......... .......... .......... .......... .......... 44% 21,3M 1s
 24100K .......... .......... .......... .......... .......... 44% 88,1M 1s
 24150K .......... .......... .......... .......... .......... 44% 18,4M 1s
 24200K .......... .......... .......... .......... .......... 44% 97,3M 1s
 24250K .......... .......... .......... .......... .......... 45% 11,2M 1s
 24300K .......... .......... .......... .......... .......... 45% 28,8M 1s
 24350K .......... .......... .......... .......... .......... 45% 85,2M 1s
 24400K .......... .......... .......... .......... .......... 45%  162M 1s
 24450K .......... .......... .......... .......... .......... 45% 22,5M 1s
 24500K .......... .......... .......... .......... .......... 45% 79,9M 1s
 24550K .......... .......... .......... .......... .......... 45% 12,2M 1s
 24600K .......... .......... .......... .......... .......... 45%  123M 1s
 24650K .......... .......... .......... .......... .......... 45% 25,0M 1s
 24700K .......... .......... .......... .......... .......... 45%  146M 1s
 24750K .......... .......... .......... .......... .......... 46% 19,8M 1s
 24800K .......... .......... .......... .......... .......... 46% 40,2M 1s
 24850K .......... .......... .......... .......... .......... 46% 19,5M 1s
 24900K .......... .......... .......... .......... .......... 46%  124M 1s
 24950K .......... .......... .......... .......... .......... 46% 21,9M 1s
 25000K .......... .......... .......... .......... .......... 46%  131M 1s
 25050K .......... .......... .......... .......... .......... 46% 23,3M 1s
 25100K .......... .......... .......... .......... .......... 46% 14,0M 1s
 25150K .......... .......... .......... .......... .......... 46%  135M 1s
 25200K .......... .......... .......... .......... .......... 46% 20,1M 1s
 25250K .......... .......... .......... .......... .......... 46% 62,2M 1s
 25300K .......... .......... .......... .......... .......... 47% 22,6M 1s
 25350K .......... .......... .......... .......... .......... 47% 77,6M 1s
 25400K .......... .......... .......... .......... .......... 47% 18,4M 1s
 25450K .......... .......... .......... .......... .......... 47% 9,80M 1s
 25500K .......... .......... .......... .......... .......... 47%  121M 1s
 25550K .......... .......... .......... .......... .......... 47%  109M 1s
 25600K .......... .......... .......... .......... .......... 47% 71,4M 1s
 25650K .......... .......... .......... .......... .......... 47% 47,5M 1s
 25700K .......... .......... .......... .......... .......... 47% 18,4M 1s
 25750K .......... .......... .......... .......... .......... 47% 46,7M 1s
 25800K .......... .......... .......... .......... .......... 47% 16,3M 1s
 25850K .......... .......... .......... .......... .......... 48%  110M 1s
 25900K .......... .......... .......... .......... .......... 48% 19,3M 1s
 25950K .......... .......... .......... .......... .......... 48%  113M 1s
 26000K .......... .......... .......... .......... .......... 48% 25,9M 1s
 26050K .......... .......... .......... .......... .......... 48% 64,3M 1s
 26100K .......... .......... .......... .......... .......... 48% 16,2M 1s
 26150K .......... .......... .......... .......... .......... 48% 65,1M 1s
 26200K .......... .......... .......... .......... .......... 48% 14,7M 1s
 26250K .......... .......... .......... .......... .......... 48%  129M 1s
 26300K .......... .......... .......... .......... .......... 48% 26,2M 1s
 26350K .......... .......... .......... .......... .......... 48% 55,3M 1s
 26400K .......... .......... .......... .......... .......... 49% 19,5M 1s
 26450K .......... .......... .......... .......... .......... 49% 66,1M 1s
 26500K .......... .......... .......... .......... .......... 49% 17,2M 1s
 26550K .......... .......... .......... .......... .......... 49%  112M 1s
 26600K .......... .......... .......... .......... .......... 49% 16,4M 1s
 26650K .......... .......... .......... .......... .......... 49%  235M 1s
 26700K .......... .......... .......... .......... .......... 49% 13,6M 1s
 26750K .......... .......... .......... .......... .......... 49%  160M 1s
 26800K .......... .......... .......... .......... .......... 49% 22,7M 1s
 26850K .......... .......... .......... .......... .......... 49%  110M 1s
 26900K .......... .......... .......... .......... .......... 49% 22,7M 1s
 26950K .......... .......... .......... .......... .......... 50%  108M 1s
 27000K .......... .......... .......... .......... .......... 50% 19,6M 1s
 27050K .......... .......... .......... .......... .......... 50%  128M 1s
 27100K .......... .......... .......... .......... .......... 50% 17,6M 1s
 27150K .......... .......... .......... .......... .......... 50% 44,7M 1s
 27200K .......... .......... .......... .......... .......... 50% 17,6M 1s
 27250K .......... .......... .......... .......... .......... 50% 30,6M 1s
 27300K .......... .......... .......... .......... .......... 50% 20,9M 1s
 27350K .......... .......... .......... .......... .......... 50% 21,1M 1s
 27400K .......... .......... .......... .......... .......... 50%  129M 1s
 27450K .......... .......... .......... .......... .......... 51%  143M 1s
 27500K .......... .......... .......... .......... .......... 51% 23,0M 1s
 27550K .......... .......... .......... .......... .......... 51% 80,3M 1s
 27600K .......... .......... .......... .......... .......... 51% 15,6M 1s
 27650K .......... .......... .......... .......... .......... 51% 91,6M 1s
 27700K .......... .......... .......... .......... .......... 51% 17,1M 1s
 27750K .......... .......... .......... .......... .......... 51%  105M 1s
 27800K .......... .......... .......... .......... .......... 51% 16,0M 1s
 27850K .......... .......... .......... .......... .......... 51%  265M 1s
 27900K .......... .......... .......... .......... .......... 51% 19,7M 1s
 27950K .......... .......... .......... .......... .......... 51% 92,1M 1s
 28000K .......... .......... .......... .......... .......... 52% 16,3M 1s
 28050K .......... .......... .......... .......... .......... 52% 18,3M 1s
 28100K .......... .......... .......... .......... .......... 52%  167M 1s
 28150K .......... .......... .......... .......... .......... 52% 20,8M 1s
 28200K .......... .......... .......... .......... .......... 52% 66,3M 1s
 28250K .......... .......... .......... .......... .......... 52% 20,8M 1s
 28300K .......... .......... .......... .......... .......... 52%  103M 1s
 28350K .......... .......... .......... .......... .......... 52% 16,3M 1s
 28400K .......... .......... .......... .......... .......... 52% 54,6M 1s
 28450K .......... .......... .......... .......... .......... 52% 36,1M 1s
 28500K .......... .......... .......... .......... .......... 52% 44,8M 1s
 28550K .......... .......... .......... .......... .......... 53% 14,7M 1s
 28600K .......... .......... .......... .......... .......... 53%  114M 1s
 28650K .......... .......... .......... .......... .......... 53% 15,7M 1s
 28700K .......... .......... .......... .......... .......... 53%  102M 1s
 28750K .......... .......... .......... .......... .......... 53% 27,3M 1s
 28800K .......... .......... .......... .......... .......... 53% 56,7M 1s
 28850K .......... .......... .......... .......... .......... 53% 15,2M 1s
 28900K .......... .......... .......... .......... .......... 53% 81,1M 1s
 28950K .......... .......... .......... .......... .......... 53% 19,9M 1s
 29000K .......... .......... .......... .......... .......... 53%  182M 1s
 29050K .......... .......... .......... .......... .......... 53% 29,0M 1s
 29100K .......... .......... .......... .......... .......... 54% 17,0M 1s
 29150K .......... .......... .......... .......... .......... 54% 90,9M 1s
 29200K .......... .......... .......... .......... .......... 54% 21,1M 1s
 29250K .......... .......... .......... .......... .......... 54% 52,8M 1s
 29300K .......... .......... .......... .......... .......... 54% 17,2M 1s
 29350K .......... .......... .......... .......... .......... 54% 72,2M 1s
 29400K .......... .......... .......... .......... .......... 54% 29,3M 1s
 29450K .......... .......... .......... .......... .......... 54% 83,2M 1s
 29500K .......... .......... .......... .......... .......... 54% 23,9M 1s
 29550K .......... .......... .......... .......... .......... 54% 53,5M 1s
 29600K .......... .......... .......... .......... .......... 54% 14,4M 1s
 29650K .......... .......... .......... .......... .......... 55%  242M 1s
 29700K .......... .......... .......... .......... .......... 55% 22,0M 1s
 29750K .......... .......... .......... .......... .......... 55%  106M 1s
 29800K .......... .......... .......... .......... .......... 55% 16,3M 1s
 29850K .......... .......... .......... .......... .......... 55% 68,3M 1s
 29900K .......... .......... .......... .......... .......... 55% 16,2M 1s
 29950K .......... .......... .......... .......... .......... 55% 17,0M 1s
 30000K .......... .......... .......... .......... .......... 55%  111M 1s
 30050K .......... .......... .......... .......... .......... 55% 19,3M 1s
 30100K .......... .......... .......... .......... .......... 55% 57,6M 1s
 30150K .......... .......... .......... .......... .......... 56% 24,2M 1s
 30200K .......... .......... .......... .......... .......... 56%  254M 1s
 30250K .......... .......... .......... .......... .......... 56% 22,7M 1s
 30300K .......... .......... .......... .......... .......... 56% 55,9M 1s
 30350K .......... .......... .......... .......... .......... 56% 15,1M 1s
 30400K .......... .......... .......... .......... .......... 56% 93,2M 1s
 30450K .......... .......... .......... .......... .......... 56% 13,6M 1s
 30500K .......... .......... .......... .......... .......... 56% 59,6M 1s
 30550K .......... .......... .......... .......... .......... 56% 32,4M 1s
 30600K .......... .......... .......... .......... .......... 56% 82,6M 1s
 30650K .......... .......... .......... .......... .......... 56% 17,1M 1s
 30700K .......... .......... .......... .......... .......... 57% 74,8M 1s
 30750K .......... .......... .......... .......... .......... 57% 28,9M 1s
 30800K .......... .......... .......... .......... .......... 57%  108M 1s
 30850K .......... .......... .......... .......... .......... 57% 16,3M 1s
 30900K .......... .......... .......... .......... .......... 57%  127M 1s
 30950K .......... .......... .......... .......... .......... 57% 21,0M 1s
 31000K .......... .......... .......... .......... .......... 57% 13,1M 1s
 31050K .......... .......... .......... .......... .......... 57%  155M 1s
 31100K .......... .......... .......... .......... .......... 57% 26,2M 1s
 31150K .......... .......... .......... .......... .......... 57%  131M 1s
 31200K .......... .......... .......... .......... .......... 57% 16,1M 1s
 31250K .......... .......... .......... .......... .......... 58% 69,2M 1s
 31300K .......... .......... .......... .......... .......... 58% 20,9M 1s
 31350K .......... .......... .......... .......... .......... 58% 29,0M 1s
 31400K .......... .......... .......... .......... .......... 58% 27,1M 1s
 31450K .......... .......... .......... .......... .......... 58%  185M 1s
 31500K .......... .......... .......... .......... .......... 58% 14,9M 1s
 31550K .......... .......... .......... .......... .......... 58%  170M 1s
 31600K .......... .......... .......... .......... .......... 58% 23,9M 1s
 31650K .......... .......... .......... .......... .......... 58% 94,6M 1s
 31700K .......... .......... .......... .......... .......... 58% 17,9M 1s
 31750K .......... .......... .......... .......... .......... 58% 98,8M 1s
 31800K .......... .......... .......... .......... .......... 59% 18,2M 1s
 31850K .......... .......... .......... .......... .......... 59% 23,1M 1s
 31900K .......... .......... .......... .......... .......... 59% 52,7M 1s
 31950K .......... .......... .......... .......... .......... 59% 14,8M 1s
 32000K .......... .......... .......... .......... .......... 59%  158M 1s
 32050K .......... .......... .......... .......... .......... 59% 25,1M 1s
 32100K .......... .......... .......... .......... .......... 59% 70,6M 1s
 32150K .......... .......... .......... .......... .......... 59% 23,3M 1s
 32200K .......... .......... .......... .......... .......... 59% 49,8M 1s
 32250K .......... .......... .......... .......... .......... 59% 19,2M 1s
 32300K .......... .......... .......... .......... .......... 60% 75,4M 1s
 32350K .......... .......... .......... .......... .......... 60% 14,5M 1s
 32400K .......... .......... .......... .......... .......... 60%  185M 1s
 32450K .......... .......... .......... .......... .......... 60% 24,8M 1s
 32500K .......... .......... .......... .......... .......... 60%  150M 1s
 32550K .......... .......... .......... .......... .......... 60% 15,6M 1s
 32600K .......... .......... .......... .......... .......... 60%  168M 1s
 32650K .......... .......... .......... .......... .......... 60% 17,0M 1s
 32700K .......... .......... .......... .......... .......... 60% 90,1M 1s
 32750K .......... .......... .......... .......... .......... 60% 7,01M 1s
 32800K .......... .......... .......... .......... .......... 60% 30,7M 1s
 32850K .......... .......... .......... .......... .......... 61%  208M 1s
 32900K .......... .......... .......... .......... .......... 61%  135M 1s
 32950K .......... .......... .......... .......... .......... 61%  191M 1s
 33000K .......... .......... .......... .......... .......... 61% 86,7M 1s
 33050K .......... .......... .......... .......... .......... 61% 16,6M 1s
 33100K .......... .......... .......... .......... .......... 61%  135M 1s
 33150K .......... .......... .......... .......... .......... 61% 16,7M 1s
 33200K .......... .......... .......... .......... .......... 61% 19,8M 1s
 33250K .......... .......... .......... .......... .......... 61% 92,8M 1s
 33300K .......... .......... .......... .......... .......... 61% 19,6M 1s
 33350K .......... .......... .......... .......... .......... 61% 76,5M 1s
 33400K .......... .......... .......... .......... .......... 62% 31,8M 1s
 33450K .......... .......... .......... .......... .......... 62% 53,1M 1s
 33500K .......... .......... .......... .......... .......... 62% 18,5M 1s
 33550K .......... .......... .......... .......... .......... 62% 67,1M 1s
 33600K .......... .......... .......... .......... .......... 62% 18,4M 1s
 33650K .......... .......... .......... .......... .......... 62% 73,0M 1s
 33700K .......... .......... .......... .......... .......... 62% 25,7M 1s
 33750K .......... .......... .......... .......... .......... 62% 53,6M 1s
 33800K .......... .......... .......... .......... .......... 62% 16,8M 1s
 33850K .......... .......... .......... .......... .......... 62% 20,7M 1s
 33900K .......... .......... .......... .......... .......... 62%  132M 1s
 33950K .......... .......... .......... .......... .......... 63% 13,8M 1s
 34000K .......... .......... .......... .......... .......... 63%  152M 1s
 34050K .......... .......... .......... .......... .......... 63% 29,3M 1s
 34100K .......... .......... .......... .......... .......... 63% 64,8M 1s
 34150K .......... .......... .......... .......... .......... 63% 21,5M 1s
 34200K .......... .......... .......... .......... .......... 63% 53,9M 1s
 34250K .......... .......... .......... .......... .......... 63% 24,4M 1s
 34300K .......... .......... .......... .......... .......... 63% 43,2M 1s
 34350K .......... .......... .......... .......... .......... 63% 24,5M 1s
 34400K .......... .......... .......... .......... .......... 63%  105M 1s
 34450K .......... .......... .......... .......... .......... 63% 14,4M 1s
 34500K .......... .......... .......... .......... .......... 64% 20,0M 1s
 34550K .......... .......... .......... .......... .......... 64%  115M 1s
 34600K .......... .......... .......... .......... .......... 64% 22,3M 1s
 34650K .......... .......... .......... .......... .......... 64%  103M 1s
 34700K .......... .......... .......... .......... .......... 64% 17,4M 1s
 34750K .......... .......... .......... .......... .......... 64% 59,4M 1s
 34800K .......... .......... .......... .......... .......... 64% 20,2M 1s
 34850K .......... .......... .......... .......... .......... 64% 80,3M 1s
 34900K .......... .......... .......... .......... .......... 64% 19,6M 1s
 34950K .......... .......... .......... .......... .......... 64% 66,3M 1s
 35000K .......... .......... .......... .......... .......... 65% 15,3M 1s
 35050K .......... .......... .......... .......... .......... 65%  178M 1s
 35100K .......... .......... .......... .......... .......... 65% 25,0M 1s
 35150K .......... .......... .......... .......... .......... 65%  129M 1s
 35200K .......... .......... .......... .......... .......... 65% 12,6M 1s
 35250K .......... .......... .......... .......... .......... 65% 25,8M 1s
 35300K .......... .......... .......... .......... .......... 65% 75,2M 1s
 35350K .......... .......... .......... .......... .......... 65%  171M 1s
 35400K .......... .......... .......... .......... .......... 65% 13,8M 1s
 35450K .......... .......... .......... .......... .......... 65% 24,9M 1s
 35500K .......... .......... .......... .......... .......... 65% 96,5M 1s
 35550K .......... .......... .......... .......... .......... 66% 20,0M 1s
 35600K .......... .......... .......... .......... .......... 66% 88,9M 1s
 35650K .......... .......... .......... .......... .......... 66% 16,8M 1s
 35700K .......... .......... .......... .......... .......... 66% 22,7M 1s
 35750K .......... .......... .......... .......... .......... 66%  243M 1s
 35800K .......... .......... .......... .......... .......... 66% 37,2M 1s
 35850K .......... .......... .......... .......... .......... 66% 24,2M 1s
 35900K .......... .......... .......... .......... .......... 66% 51,5M 1s
 35950K .......... .......... .......... .......... .......... 66% 16,7M 1s
 36000K .......... .......... .......... .......... .......... 66%  183M 1s
 36050K .......... .......... .......... .......... .......... 66% 21,4M 1s
 36100K .......... .......... .......... .......... .......... 67% 56,3M 1s
 36150K .......... .......... .......... .......... .......... 67% 14,1M 1s
 36200K .......... .......... .......... .......... .......... 67%  107M 1s
 36250K .......... .......... .......... .......... .......... 67% 30,7M 1s
 36300K .......... .......... .......... .......... .......... 67% 51,1M 1s
 36350K .......... .......... .......... .......... .......... 67% 38,3M 1s
 36400K .......... .......... .......... .......... .......... 67% 14,8M 1s
 36450K .......... .......... .......... .......... .......... 67% 75,6M 1s
 36500K .......... .......... .......... .......... .......... 67% 13,6M 1s
 36550K .......... .......... .......... .......... .......... 67%  156M 1s
 36600K .......... .......... .......... .......... .......... 67% 17,8M 1s
 36650K .......... .......... .......... .......... .......... 68%  148M 1s
 36700K .......... .......... .......... .......... .......... 68% 23,0M 1s
 36750K .......... .......... .......... .......... .......... 68% 91,4M 1s
 36800K .......... .......... .......... .......... .......... 68% 9,21M 1s
 36850K .......... .......... .......... .......... .......... 68% 48,7M 1s
 36900K .......... .......... .......... .......... .......... 68% 93,5M 1s
 36950K .......... .......... .......... .......... .......... 68%  111M 1s
 37000K .......... .......... .......... .......... .......... 68% 39,8M 1s
 37050K .......... .......... .......... .......... .......... 68% 51,8M 1s
 37100K .......... .......... .......... .......... .......... 68% 17,0M 1s
 37150K .......... .......... .......... .......... .......... 69% 26,7M 1s
 37200K .......... .......... .......... .......... .......... 69%  135M 1s
 37250K .......... .......... .......... .......... .......... 69% 21,6M 1s
 37300K .......... .......... .......... .......... .......... 69% 38,3M 1s
 37350K .......... .......... .......... .......... .......... 69% 15,5M 1s
 37400K .......... .......... .......... .......... .......... 69% 72,6M 1s
 37450K .......... .......... .......... .......... .......... 69%  212M 1s
 37500K .......... .......... .......... .......... .......... 69% 18,3M 1s
 37550K .......... .......... .......... .......... .......... 69% 19,1M 1s
 37600K .......... .......... .......... .......... .......... 69% 55,5M 1s
 37650K .......... .......... .......... .......... .......... 69% 20,1M 1s
 37700K .......... .......... .......... .......... .......... 70% 60,5M 1s
 37750K .......... .......... .......... .......... .......... 70% 22,2M 1s
 37800K .......... .......... .......... .......... .......... 70% 36,2M 1s
 37850K .......... .......... .......... .......... .......... 70% 20,6M 1s
 37900K .......... .......... .......... .......... .......... 70%  125M 1s
 37950K .......... .......... .......... .......... .......... 70% 29,5M 1s
 38000K .......... .......... .......... .......... .......... 70% 80,7M 1s
 38050K .......... .......... .......... .......... .......... 70% 17,1M 1s
 38100K .......... .......... .......... .......... .......... 70% 58,7M 1s
 38150K .......... .......... .......... .......... .......... 70% 27,5M 1s
 38200K .......... .......... .......... .......... .......... 70% 43,1M 1s
 38250K .......... .......... .......... .......... .......... 71% 13,0M 1s
 38300K .......... .......... .......... .......... .......... 71% 25,0M 1s
 38350K .......... .......... .......... .......... .......... 71% 25,7M 1s
 38400K .......... .......... .......... .......... .......... 71% 58,8M 1s
 38450K .......... .......... .......... .......... .......... 71%  136M 1s
 38500K .......... .......... .......... .......... .......... 71% 18,6M 1s
 38550K .......... .......... .......... .......... .......... 71% 52,3M 1s
 38600K .......... .......... .......... .......... .......... 71% 14,9M 1s
 38650K .......... .......... .......... .......... .......... 71%  147M 1s
 38700K .......... .......... .......... .......... .......... 71% 18,8M 1s
 38750K .......... .......... .......... .......... .......... 71% 61,9M 1s
 38800K .......... .......... .......... .......... .......... 72% 21,1M 1s
 38850K .......... .......... .......... .......... .......... 72% 59,4M 1s
 38900K .......... .......... .......... .......... .......... 72% 20,1M 1s
 38950K .......... .......... .......... .......... .......... 72% 61,4M 1s
 39000K .......... .......... .......... .......... .......... 72% 15,6M 1s
 39050K .......... .......... .......... .......... .......... 72%  135M 1s
 39100K .......... .......... .......... .......... .......... 72% 29,2M 1s
 39150K .......... .......... .......... .......... .......... 72% 63,7M 1s
 39200K .......... .......... .......... .......... .......... 72% 16,3M 1s
 39250K .......... .......... .......... .......... .......... 72%  126M 1s
 39300K .......... .......... .......... .......... .......... 72% 24,4M 1s
 39350K .......... .......... .......... .......... .......... 73% 37,5M 1s
 39400K .......... .......... .......... .......... .......... 73% 17,5M 1s
 39450K .......... .......... .......... .......... .......... 73%  198M 1s
 39500K .......... .......... .......... .......... .......... 73% 20,4M 1s
 39550K .......... .......... .......... .......... .......... 73%  148M 1s
 39600K .......... .......... .......... .......... .......... 73% 16,9M 1s
 39650K .......... .......... .......... .......... .......... 73% 76,8M 1s
 39700K .......... .......... .......... .......... .......... 73% 17,8M 1s
 39750K .......... .......... .......... .......... .......... 73%  164M 1s
 39800K .......... .......... .......... .......... .......... 73% 23,1M 1s
 39850K .......... .......... .......... .......... .......... 74% 92,3M 1s
 39900K .......... .......... .......... .......... .......... 74% 12,9M 1s
 39950K .......... .......... .......... .......... .......... 74% 22,9M 0s
 40000K .......... .......... .......... .......... .......... 74%  220M 0s
 40050K .......... .......... .......... .......... .......... 74% 16,1M 0s
 40100K .......... .......... .......... .......... .......... 74% 76,5M 0s
 40150K .......... .......... .......... .......... .......... 74% 27,7M 0s
 40200K .......... .......... .......... .......... .......... 74% 55,9M 0s
 40250K .......... .......... .......... .......... .......... 74% 17,6M 0s
 40300K .......... .......... .......... .......... .......... 74%  225M 0s
 40350K .......... .......... .......... .......... .......... 74% 24,7M 0s
 40400K .......... .......... .......... .......... .......... 75% 61,7M 0s
 40450K .......... .......... .......... .......... .......... 75% 21,9M 0s
 40500K .......... .......... .......... .......... .......... 75% 49,2M 0s
 40550K .......... .......... .......... .......... .......... 75% 20,0M 0s
 40600K .......... .......... .......... .......... .......... 75% 75,8M 0s
 40650K .......... .......... .......... .......... .......... 75% 17,0M 0s
 40700K .......... .......... .......... .......... .......... 75%  187M 0s
 40750K .......... .......... .......... .......... .......... 75% 16,3M 0s
 40800K .......... .......... .......... .......... .......... 75% 25,0M 0s
 40850K .......... .......... .......... .......... .......... 75% 48,8M 0s
 40900K .......... .......... .......... .......... .......... 75% 22,2M 0s
 40950K .......... .......... .......... .......... .......... 76% 56,1M 0s
 41000K .......... .......... .......... .......... .......... 76% 20,0M 0s
 41050K .......... .......... .......... .......... .......... 76% 15,9M 0s
 41100K .......... .......... .......... .......... .......... 76% 81,5M 0s
 41150K .......... .......... .......... .......... .......... 76% 35,8M 0s
 41200K .......... .......... .......... .......... .......... 76% 20,9M 0s
 41250K .......... .......... .......... .......... .......... 76%  167M 0s
 41300K .......... .......... .......... .......... .......... 76% 18,7M 0s
 41350K .......... .......... .......... .......... .......... 76%  155M 0s
 41400K .......... .......... .......... .......... .......... 76% 26,0M 0s
 41450K .......... .......... .......... .......... .......... 76% 81,5M 0s
 41500K .......... .......... .......... .......... .......... 77% 13,4M 0s
 41550K .......... .......... .......... .......... .......... 77% 20,1M 0s
 41600K .......... .......... .......... .......... .......... 77%  114M 0s
 41650K .......... .......... .......... .......... .......... 77% 14,7M 0s
 41700K .......... .......... .......... .......... .......... 77%  146M 0s
 41750K .......... .......... .......... .......... .......... 77% 32,8M 0s
 41800K .......... .......... .......... .......... .......... 77% 98,6M 0s
 41850K .......... .......... .......... .......... .......... 77% 15,9M 0s
 41900K .......... .......... .......... .......... .......... 77%  144M 0s
 41950K .......... .......... .......... .......... .......... 77% 20,5M 0s
 42000K .......... .......... .......... .......... .......... 78% 70,1M 0s
 42050K .......... .......... .......... .......... .......... 78% 15,9M 0s
 42100K .......... .......... .......... .......... .......... 78%  227M 0s
 42150K .......... .......... .......... .......... .......... 78% 28,2M 0s
 42200K .......... .......... .......... .......... .......... 78% 62,4M 0s
 42250K .......... .......... .......... .......... .......... 78% 19,4M 0s
 42300K .......... .......... .......... .......... .......... 78% 93,9M 0s
 42350K .......... .......... .......... .......... .......... 78% 13,6M 0s
 42400K .......... .......... .......... .......... .......... 78%  103M 0s
 42450K .......... .......... .......... .......... .......... 78% 21,0M 0s
 42500K .......... .......... .......... .......... .......... 78% 43,2M 0s
 42550K .......... .......... .......... .......... .......... 79% 17,7M 0s
 42600K .......... .......... .......... .......... .......... 79%  102M 0s
 42650K .......... .......... .......... .......... .......... 79% 22,3M 0s
 42700K .......... .......... .......... .......... .......... 79%  116M 0s
 42750K .......... .......... .......... .......... .......... 79% 18,3M 0s
 42800K .......... .......... .......... .......... .......... 79% 15,8M 0s
 42850K .......... .......... .......... .......... .......... 79%  103M 0s
 42900K .......... .......... .......... .......... .......... 79% 16,4M 0s
 42950K .......... .......... .......... .......... .......... 79% 93,7M 0s
 43000K .......... .......... .......... .......... .......... 79% 15,4M 0s
 43050K .......... .......... .......... .......... .......... 79%  263M 0s
 43100K .......... .......... .......... .......... .......... 80% 26,9M 0s
 43150K .......... .......... .......... .......... .......... 80% 55,4M 0s
 43200K .......... .......... .......... .......... .......... 80% 20,0M 0s
 43250K .......... .......... .......... .......... .......... 80% 98,8M 0s
 43300K .......... .......... .......... .......... .......... 80% 14,8M 0s
 43350K .......... .......... .......... .......... .......... 80%  208M 0s
 43400K .......... .......... .......... .......... .......... 80% 21,0M 0s
 43450K .......... .......... .......... .......... .......... 80% 19,0M 0s
 43500K .......... .......... .......... .......... .......... 80%  103M 0s
 43550K .......... .......... .......... .......... .......... 80% 23,5M 0s
 43600K .......... .......... .......... .......... .......... 80%  108M 0s
 43650K .......... .......... .......... .......... .......... 81% 14,8M 0s
 43700K .......... .......... .......... .......... .......... 81% 93,0M 0s
 43750K .......... .......... .......... .......... .......... 81% 29,8M 0s
 43800K .......... .......... .......... .......... .......... 81% 63,2M 0s
 43850K .......... .......... .......... .......... .......... 81% 17,4M 0s
 43900K .......... .......... .......... .......... .......... 81%  160M 0s
 43950K .......... .......... .......... .......... .......... 81% 23,4M 0s
 44000K .......... .......... .......... .......... .......... 81% 38,0M 0s
 44050K .......... .......... .......... .......... .......... 81% 25,3M 0s
 44100K .......... .......... .......... .......... .......... 81% 13,4M 0s
 44150K .......... .......... .......... .......... .......... 81% 57,2M 0s
 44200K .......... .......... .......... .......... .......... 82% 26,6M 0s
 44250K .......... .......... .......... .......... .......... 82% 26,0M 0s
 44300K .......... .......... .......... .......... .......... 82% 36,7M 0s
 44350K .......... .......... .......... .......... .......... 82% 37,9M 0s
 44400K .......... .......... .......... .......... .......... 82% 28,9M 0s
 44450K .......... .......... .......... .......... .......... 82% 74,3M 0s
 44500K .......... .......... .......... .......... .......... 82% 18,1M 0s
 44550K .......... .......... .......... .......... .......... 82%  151M 0s
 44600K .......... .......... .......... .......... .......... 82% 13,0M 0s
 44650K .......... .......... .......... .......... .......... 82% 47,4M 0s
 44700K .......... .......... .......... .......... .......... 83% 21,9M 0s
 44750K .......... .......... .......... .......... .......... 83%  221M 0s
 44800K .......... .......... .......... .......... .......... 83% 37,9M 0s
 44850K .......... .......... .......... .......... .......... 83% 99,6M 0s
 44900K .......... .......... .......... .......... .......... 83% 20,3M 0s
 44950K .......... .......... .......... .......... .......... 83% 63,9M 0s
 45000K .......... .......... .......... .......... .......... 83% 19,5M 0s
 45050K .......... .......... .......... .......... .......... 83% 41,4M 0s
 45100K .......... .......... .......... .......... .......... 83% 19,6M 0s
 45150K .......... .......... .......... .......... .......... 83% 17,8M 0s
 45200K .......... .......... .......... .......... .......... 83%  198M 0s
 45250K .......... .......... .......... .......... .......... 84% 17,7M 0s
 45300K .......... .......... .......... .......... .......... 84% 88,9M 0s
 45350K .......... .......... .......... .......... .......... 84% 22,8M 0s
 45400K .......... .......... .......... .......... .......... 84% 60,4M 0s
 45450K .......... .......... .......... .......... .......... 84% 13,8M 0s
 45500K .......... .......... .......... .......... .......... 84%  250M 0s
 45550K .......... .......... .......... .......... .......... 84% 20,1M 0s
 45600K .......... .......... .......... .......... .......... 84% 18,7M 0s
 45650K .......... .......... .......... .......... .......... 84%  122M 0s
 45700K .......... .......... .......... .......... .......... 84% 21,5M 0s
 45750K .......... .......... .......... .......... .......... 84% 61,3M 0s
 45800K .......... .......... .......... .......... .......... 85% 22,3M 0s
 45850K .......... .......... .......... .......... .......... 85% 55,5M 0s
 45900K .......... .......... .......... .......... .......... 85% 17,8M 0s
 45950K .......... .......... .......... .......... .......... 85% 30,5M 0s
 46000K .......... .......... .......... .......... .......... 85% 24,0M 0s
 46050K .......... .......... .......... .......... .......... 85% 73,4M 0s
 46100K .......... .......... .......... .......... .......... 85% 21,0M 0s
 46150K .......... .......... .......... .......... .......... 85% 57,5M 0s
 46200K .......... .......... .......... .......... .......... 85% 14,6M 0s
 46250K .......... .......... .......... .......... .......... 85%  154M 0s
 46300K .......... .......... .......... .......... .......... 85% 25,7M 0s
 46350K .......... .......... .......... .......... .......... 86% 78,1M 0s
 46400K .......... .......... .......... .......... .......... 86% 22,1M 0s
 46450K .......... .......... .......... .......... .......... 86% 72,0M 0s
 46500K .......... .......... .......... .......... .......... 86% 18,2M 0s
 46550K .......... .......... .......... .......... .......... 86%  138M 0s
 46600K .......... .......... .......... .......... .......... 86% 26,0M 0s
 46650K .......... .......... .......... .......... .......... 86% 57,0M 0s
 46700K .......... .......... .......... .......... .......... 86% 16,6M 0s
 46750K .......... .......... .......... .......... .......... 86% 64,2M 0s
 46800K .......... .......... .......... .......... .......... 86% 21,5M 0s
 46850K .......... .......... .......... .......... .......... 86% 14,1M 0s
 46900K .......... .......... .......... .......... .......... 87% 82,8M 0s
 46950K .......... .......... .......... .......... .......... 87% 41,9M 0s
 47000K .......... .......... .......... .......... .......... 87% 75,5M 0s
 47050K .......... .......... .......... .......... .......... 87% 16,9M 0s
 47100K .......... .......... .......... .......... .......... 87% 61,7M 0s
 47150K .......... .......... .......... .......... .......... 87% 26,2M 0s
 47200K .......... .......... .......... .......... .......... 87% 39,4M 0s
 47250K .......... .......... .......... .......... .......... 87% 25,9M 0s
 47300K .......... .......... .......... .......... .......... 87% 95,6M 0s
 47350K .......... .......... .......... .......... .......... 87% 19,4M 0s
 47400K .......... .......... .......... .......... .......... 88% 80,3M 0s
 47450K .......... .......... .......... .......... .......... 88% 16,3M 0s
 47500K .......... .......... .......... .......... .......... 88% 59,4M 0s
 47550K .......... .......... .......... .......... .......... 88% 15,0M 0s
 47600K .......... .......... .......... .......... .......... 88%  201M 0s
 47650K .......... .......... .......... .......... .......... 88% 17,0M 0s
 47700K .......... .......... .......... .......... .......... 88%  242M 0s
 47750K .......... .......... .......... .......... .......... 88% 20,6M 0s
 47800K .......... .......... .......... .......... .......... 88% 29,5M 0s
 47850K .......... .......... .......... .......... .......... 88% 22,1M 0s
 47900K .......... .......... .......... .......... .......... 88%  279M 0s
 47950K .......... .......... .......... .......... .......... 89% 24,6M 0s
 48000K .......... .......... .......... .......... .......... 89% 16,6M 0s
 48050K .......... .......... .......... .......... .......... 89%  286M 0s
 48100K .......... .......... .......... .......... .......... 89% 63,4M 0s
 48150K .......... .......... .......... .......... .......... 89% 19,3M 0s
 48200K .......... .......... .......... .......... .......... 89% 21,8M 0s
 48250K .......... .......... .......... .......... .......... 89% 57,7M 0s
 48300K .......... .......... .......... .......... .......... 89% 14,3M 0s
 48350K .......... .......... .......... .......... .......... 89% 98,2M 0s
 48400K .......... .......... .......... .......... .......... 89% 11,7M 0s
 48450K .......... .......... .......... .......... .......... 89%  151M 0s
 48500K .......... .......... .......... .......... .......... 90% 32,9M 0s
 48550K .......... .......... .......... .......... .......... 90%  159M 0s
 48600K .......... .......... .......... .......... .......... 90% 18,9M 0s
 48650K .......... .......... .......... .......... .......... 90%  118M 0s
 48700K .......... .......... .......... .......... .......... 90% 18,7M 0s
 48750K .......... .......... .......... .......... .......... 90% 60,3M 0s
 48800K .......... .......... .......... .......... .......... 90% 19,8M 0s
 48850K .......... .......... .......... .......... .......... 90% 55,0M 0s
 48900K .......... .......... .......... .......... .......... 90% 20,4M 0s
 48950K .......... .......... .......... .......... .......... 90%  128M 0s
 49000K .......... .......... .......... .......... .......... 90% 14,7M 0s
 49050K .......... .......... .......... .......... .......... 91%  107M 0s
 49100K .......... .......... .......... .......... .......... 91% 21,0M 0s
 49150K .......... .......... .......... .......... .......... 91%  103M 0s
 49200K .......... .......... .......... .......... .......... 91% 25,1M 0s
 49250K .......... .......... .......... .......... .......... 91%  130M 0s
 49300K .......... .......... .......... .......... .......... 91% 16,2M 0s
 49350K .......... .......... .......... .......... .......... 91% 99,2M 0s
 49400K .......... .......... .......... .......... .......... 91% 13,1M 0s
 49450K .......... .......... .......... .......... .......... 91% 38,3M 0s
 49500K .......... .......... .......... .......... .......... 91% 66,3M 0s
 49550K .......... .......... .......... .......... .......... 92% 16,6M 0s
 49600K .......... .......... .......... .......... .......... 92%  121M 0s
 49650K .......... .......... .......... .......... .......... 92% 25,9M 0s
 49700K .......... .......... .......... .......... .......... 92% 53,1M 0s
 49750K .......... .......... .......... .......... .......... 92% 20,4M 0s
 49800K .......... .......... .......... .......... .......... 92% 65,1M 0s
 49850K .......... .......... .......... .......... .......... 92% 17,1M 0s
 49900K .......... .......... .......... .......... .......... 92%  229M 0s
 49950K .......... .......... .......... .......... .......... 92% 20,1M 0s
 50000K .......... .......... .......... .......... .......... 92% 79,5M 0s
 50050K .......... .......... .......... .......... .......... 92% 14,0M 0s
 50100K .......... .......... .......... .......... .......... 93% 16,5M 0s
 50150K .......... .......... .......... .......... .......... 93% 62,6M 0s
 50200K .......... .......... .......... .......... .......... 93% 29,8M 0s
 50250K .......... .......... .......... .......... .......... 93% 53,4M 0s
 50300K .......... .......... .......... .......... .......... 93% 19,2M 0s
 50350K .......... .......... .......... .......... .......... 93% 80,8M 0s
 50400K .......... .......... .......... .......... .......... 93% 18,2M 0s
 50450K .......... .......... .......... .......... .......... 93% 37,3M 0s
 50500K .......... .......... .......... .......... .......... 93% 25,5M 0s
 50550K .......... .......... .......... .......... .......... 93%  159M 0s
 50600K .......... .......... .......... .......... .......... 93% 18,6M 0s
 50650K .......... .......... .......... .......... .......... 94%  156M 0s
 50700K .......... .......... .......... .......... .......... 94% 20,1M 0s
 50750K .......... .......... .......... .......... .......... 94% 19,6M 0s
 50800K .......... .......... .......... .......... .......... 94%  180M 0s
 50850K .......... .......... .......... .......... .......... 94%  193M 0s
 50900K .......... .......... .......... .......... .......... 94% 16,5M 0s
 50950K .......... .......... .......... .......... .......... 94% 13,9M 0s
 51000K .......... .......... .......... .......... .......... 94% 87,7M 0s
 51050K .......... .......... .......... .......... .......... 94% 34,2M 0s
 51100K .......... .......... .......... .......... .......... 94% 55,4M 0s
 51150K .......... .......... .......... .......... .......... 94% 17,1M 0s
 51200K .......... .......... .......... .......... .......... 95% 45,1M 0s
 51250K .......... .......... .......... .......... .......... 95% 17,1M 0s
 51300K .......... .......... .......... .......... .......... 95%  119M 0s
 51350K .......... .......... .......... .......... .......... 95% 26,2M 0s
 51400K .......... .......... .......... .......... .......... 95% 80,2M 0s
 51450K .......... .......... .......... .......... .......... 95% 18,6M 0s
 51500K .......... .......... .......... .......... .......... 95% 69,3M 0s
 51550K .......... .......... .......... .......... .......... 95% 19,2M 0s
 51600K .......... .......... .......... .......... .......... 95% 53,2M 0s
 51650K .......... .......... .......... .......... .......... 95% 25,9M 0s
 51700K .......... .......... .......... .......... .......... 95% 24,2M 0s
 51750K .......... .......... .......... .......... .......... 96% 53,8M 0s
 51800K .......... .......... .......... .......... .......... 96% 49,7M 0s
 51850K .......... .......... .......... .......... .......... 96% 23,2M 0s
 51900K .......... .......... .......... .......... .......... 96% 61,0M 0s
 51950K .......... .......... .......... .......... .......... 96% 15,9M 0s
 52000K .......... .......... .......... .......... .......... 96% 19,0M 0s
 52050K .......... .......... .......... .......... .......... 96% 69,9M 0s
 52100K .......... .......... .......... .......... .......... 96%  146M 0s
 52150K .......... .......... .......... .......... .......... 96% 16,1M 0s
 52200K .......... .......... .......... .......... .......... 96% 92,5M 0s
 52250K .......... .......... .......... .......... .......... 97% 22,3M 0s
 52300K .......... .......... .......... .......... .......... 97% 46,5M 0s
 52350K .......... .......... .......... .......... .......... 97% 18,3M 0s
 52400K .......... .......... .......... .......... .......... 97% 25,9M 0s
 52450K .......... .......... .......... .......... .......... 97% 69,9M 0s
 52500K .......... .......... .......... .......... .......... 97% 13,4M 0s
 52550K .......... .......... .......... .......... .......... 97% 86,4M 0s
 52600K .......... .......... .......... .......... .......... 97% 27,6M 0s
 52650K .......... .......... .......... .......... .......... 97% 84,5M 0s
 52700K .......... .......... .......... .......... .......... 97% 19,4M 0s
 52750K .......... .......... .......... .......... .......... 97%  104M 0s
 52800K .......... .......... .......... .......... .......... 98% 22,4M 0s
 52850K .......... .......... .......... .......... .......... 98% 74,7M 0s
 52900K .......... .......... .......... .......... .......... 98% 20,3M 0s
 52950K .......... .......... .......... .......... .......... 98% 66,6M 0s
 53000K .......... .......... .......... .......... .......... 98% 17,5M 0s
 53050K .......... .......... .......... .......... .......... 98%  149M 0s
 53100K .......... .......... .......... .......... .......... 98% 14,0M 0s
 53150K .......... .......... .......... .......... .......... 98% 97,7M 0s
 53200K .......... .......... .......... .......... .......... 98% 15,1M 0s
 53250K .......... .......... .......... .......... .......... 98%  226M 0s
 53300K .......... .......... .......... .......... .......... 98% 24,2M 0s
 53350K .......... .......... .......... .......... .......... 99% 12,8M 0s
 53400K .......... .......... .......... .......... .......... 99%  231M 0s
 53450K .......... .......... .......... .......... .......... 99% 23,0M 0s
 53500K .......... .......... .......... .......... .......... 99%  213M 0s
 53550K .......... .......... .......... .......... .......... 99% 16,5M 0s
 53600K .......

Unzipping Dataset
Archive:  cats-dogs-data.zip
Removing .zip file


... .......... .......... .......... .......... 99% 47,1M 0s
 53650K .......... .......... .......... .......... .......... 99% 20,0M 0s
 53700K .......... .......... .......... .......... .......... 99% 73,2M 0s
 53750K .......... .......... .......... .......... .......... 99% 26,8M 0s
 53800K .......... .......... .......... .......... .......... 99% 56,3M 0s
 53850K .......... .......... .......... .......... .......... 99% 6,71M 0s
 53900K .........                                             100%  132M=1,9s

2021-10-06 11:26:22 (27,8 MB/s) - ‘cats-dogs-data.zip’ saved [55203029/55203029]

replace cats-dogs-data/.DS_Store? [y]es, [n]o, [A]ll, [N]one, [r]ename:  NULL
(EOF or read error, treating as "[N]one" ...)

Here's the keras implementation for a great performance result:

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Flatten, Dense, GlobalAveragePooling2D
from tensorflow.keras.applications.resnet50 import ResNet50, preprocess_input
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.optimizers import Adam

TARGET_SHAPE = (224, 224, 3)
TRAIN_PATH = 'cats-dogs-data/train'
VALID_PATH = 'cats-dogs-data/valid'

datagen = ImageDataGenerator(preprocessing_function=preprocess_input)
train_gen = datagen.flow_from_directory(TRAIN_PATH, 
                                        target_size=TARGET_SHAPE[:2], 
                                        class_mode='sparse')
valid_gen = datagen.flow_from_directory(VALID_PATH, 
                                        target_size=TARGET_SHAPE[:2], 
                                        class_mode='sparse',
                                        shuffle=False)

base_model = ResNet50(include_top=False, input_shape=TARGET_SHAPE)

for layer in base_model.layers:
    layer.trainable=False
    
model = Sequential([base_model,
                    GlobalAveragePooling2D(),
                    Dense(1024, activation='relu'),
                    Dense(2, activation='softmax')])
Found 2000 images belonging to 2 classes.
Found 400 images belonging to 2 classes.
model.compile(optimizer=Adam(learning_rate=1e-4), loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model.fit(train_gen, epochs=3, validation_data=valid_gen)
Epoch 1/3


2021-10-06 11:29:26.088412: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:112] Plugin optimizer for device_type GPU is enabled.
2021-10-06 11:29:26.256 python[95381:1139332] -[MPSGraph adamUpdateWithLearningRateTensor:beta1Tensor:beta2Tensor:epsilonTensor:beta1PowerTensor:beta2PowerTensor:valuesTensor:momentumTensor:velocityTensor:maximumVelocityTensor:gradientTensor:name:]: unrecognized selector sent to instance 0x2a93793b0

By looking at val_accuracy we can confirm the results seems great. Let's also plot some other metrics:

from sklearn.metrics import roc_auc_score, classification_report, confusion_matrix
import seaborn as sns
y_pred = model.predict(valid_gen)
y_test = valid_gen.classes
roc = roc_auc_score(y_test, y_pred[:, 1])
print("ROC AUC Score", roc)
ROC AUC Score 0.9989
cm=confusion_matrix(y_test, y_pred.argmax(axis=1))
sns.heatmap(cm, annot=True, fmt='g')
<matplotlib.axes._subplots.AxesSubplot at 0x7fcc41c57090>

png

Although we got an almost perfect clssifier, there are multiple details that someone who is coming from sklearn has to be careful when using Keras, for example:

  • Correctly setup the Data Generator
  • Fine tune the learning rate
  • Adjust the batch size

Now let's replicate the same results using deepfeatx:

from deepfeatx.image import ImageFeatureExtractor
from sklearn.linear_model import LogisticRegression

TRAIN_PATH = 'cats-dogs-data/train'
VALID_PATH = 'cats-dogs-data/valid'

fe = ImageFeatureExtractor()

train=fe.extract_features_from_directory(TRAIN_PATH, 
                                         classes_as_folders=True,
                                         export_class_names=True)
test=fe.extract_features_from_directory(VALID_PATH, 
                                         classes_as_folders=True,
                                         export_class_names=True)

X_train, y_train = train.drop(['filepaths', 'classes'], axis=1), train['classes']
X_test, y_test = test.drop(['filepaths', 'classes'], axis=1), test['classes']
lr = LogisticRegression().fit(X_train, y_train)
Found 2000 images belonging to 2 classes.


2021-10-06 11:27:40.528937: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:112] Plugin optimizer for device_type GPU is enabled.


63/63 [==============================] - 22s 350ms/step
Found 400 images belonging to 2 classes.
13/13 [==============================] - 4s 351ms/step


/Users/wittmann/miniforge3/envs/mlp/lib/python3.8/site-packages/sklearn/linear_model/_logistic.py:814: ConvergenceWarning: lbfgs failed to converge (status=1):
STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.

Increase the number of iterations (max_iter) or scale the data as shown in:
    https://scikit-learn.org/stable/modules/preprocessing.html
Please also refer to the documentation for alternative solver options:
    https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression
  n_iter_i = _check_optimize_result(
roc_auc_score(y_test, lr.predict_proba(X_test)[:, 1])
0.9996
import seaborn as sns
cm=confusion_matrix(y_test, lr.predict(X_test))
sns.heatmap(cm, annot=True, fmt='g')
<AxesSubplot:>

png

Even though the code is smaller, is still as powerful as the keras code and also very flexible. The most important part is the feature extraction, which deepfeatx take care for us, and the rest can be performed as any other ML problem.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

deepfeatx-0.1.2.tar.gz (50.9 kB view hashes)

Uploaded Source

Built Distribution

deepfeatx-0.1.2-py3-none-any.whl (22.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page