First, lets explore the fisheries data¶

In [1]:
import json
import os
import keras
from keras.models import Sequential, Model
from keras.layers import Dense, InputLayer, Input, Flatten, Conv2D, MaxPooling2D, GlobalMaxPool2D, GlobalAveragePooling2D, BatchNormalization
from keras.preprocessing.image import ImageDataGenerator
from keras.layers.core import Activation

import PIL.Image

import os
from shutil import move , copy
from os.path import join
from os.path import split
path = join( 'data')
classes = os.listdir(join(path, 'train'))
classes
Using TensorFlow backend.
Out[1]:
['.DS_Store', 'ALB', 'BET', 'DOL', 'LAG', 'NoF', 'OTHER', 'SHARK', 'YFT']
In [4]:
boxes = os.listdir('./data/boxes/')
boxes
Out[4]:
['alb_labels.json',
 'bet_labels.json',
 'dol_labels.json',
 'lag_labels.json',
 'NoF_labels.json',
 'other_labels.json',
 'shark_labels.json']
In [5]:
classes = [c for c in classes if c[0] != '.']
classes
Out[5]:
['ALB', 'BET', 'DOL', 'LAG', 'NoF', 'OTHER', 'SHARK', 'YFT']
In [6]:
import numpy as np
from numpy.random import choice

import glob

valid_ratio = 0.2
num_sample_images = 10
valid_path = join(path, 'valid')
if not os.path.exists(valid_path):
    os.makedirs(valid_path)

    for c in classes:
        cl_valid_path = join(valid_path, c)
        cl_train_path = join(path, 'train', c)
        cl_sample_path = join(path, 'sample', c)
        files = glob.glob(join(cl_train_path, '*.jpg'))
        os.makedirs(cl_valid_path)
        valid = choice(files, int(np.floor(0.2*len(files))), replace=False)
        [move(v, join(cl_valid_path, split(v)[1])) for v in valid]
        # We don't want the sample to contain the validation data, so redo the glob after moving. 
        files = glob.glob(join(cl_train_path, '*.jpg'))
        os.makedirs(cl_sample_path)
        sample = choice(files, num_sample_images, replace=False)
        [copy(s, join(cl_sample_path, split(s)[1])) for s in sample]
In [12]:
bs = 1
gen = ImageDataGenerator()
train_gen = gen.flow_from_directory(join(path,'train'), batch_size=bs, shuffle=False)
valid_gen = gen.flow_from_directory(join(path,'valid'), batch_size=bs, shuffle=False)
sample_gen = gen.flow_from_directory(join(path,'sample'), batch_size=bs, shuffle=False)
Found 3025 images belonging to 8 classes.
Found 752 images belonging to 8 classes.
Found 80 images belonging to 8 classes.
In [7]:
import bcolz
from tqdm import tqdm
import os.path

def save_generator(gen, data_dir, labels_dir):
    """
    Save the output from a generator without loading all images into memory. 
    
    Does not return anything, instead writes data to disk.
    
    :gen: A Keras ImageDataGenerator object
    :data_dir: The folder name to store the bcolz array representing the features in. 
    :labels_dir: The folder name to store the bcolz array representing the labels in.
    :mode: the write mode. Set to 'a' for append, set to 'w' to overwrite existing data and 'r' to read only. 
    
    """
    for directory in [data_dir, labels_dir]:
        if not os.path.exists(directory):
            os.makedirs(directory)
    
    num_samples = gen.samples
    
    d,l = gen.__next__()
    
    data = bcolz.carray(d, rootdir=data_dir, mode='w')
    labels = bcolz.carray(l, rootdir=labels_dir, mode='w')

    for i in tqdm(range(num_samples-1)):
        d, l = gen.__next__()
        data.append(d)
        labels.append(l)
    data.flush()
    labels.flush()


trn_data = join('bdat','train','data')
trn_label = join('bdat','train','label')
val_data = join('bdat','valid','data')
val_label = join('bdat','valid','label')
samp_data = join('bdat','sample','data')
samp_label = join('bdat','sample','label')

#save_generator(train_gen, trn_data, trn_label)
#save_generator(valid_gen, val_data, val_label)
#save_generator(sample_gen, samp_data, samp_label)

data = bcolz.open(trn_data)
labels = bcolz.open(trn_label)
val_data = bcolz.open(val_data)
val_labels = bcolz.open(val_label)
In [8]:
import re
boxes
Out[8]:
['alb_labels.json',
 'bet_labels.json',
 'dol_labels.json',
 'lag_labels.json',
 'NoF_labels.json',
 'other_labels.json',
 'shark_labels.json']
In [9]:
re.findall('[a-zA-Z]*', boxes[0])
Out[9]:
['alb', '', 'labels', '', 'json', '']

To convert the coordinates to our resized size we will need to know the original image size.

Note: If you are running windows you will want to split on '\' instead of '/'

In [24]:
train_sizes = {f.split('\\')[-1] :PIL.Image.open(join(path,'train',f)).size for f in train_gen.filenames}
valid_sizes = {f.split('\\')[-1] :PIL.Image.open(join(path,'valid',f)).size for f in valid_gen.filenames}
sample_sizes = {f.split('\\')[-1] :PIL.Image.open(join(path,'sample',f)).size for f in sample_gen.filenames}
In [25]:
all_sizes = {}
[all_sizes.update(d) for d in [train_sizes, valid_sizes, sample_sizes]]
all_sizes
Out[25]:
{'img_03675.jpg': (1280, 974),
 'img_02591.jpg': (1280, 750),
 'img_05880.jpg': (1276, 718),
 'img_05281.jpg': (1280, 720),
 'img_05758.jpg': (1192, 670),
 'img_06724.jpg': (1280, 974),
 'img_01942.jpg': (1280, 720),
 'img_04093.jpg': (1280, 720),
 'img_02910.jpg': (1280, 750),
 'img_03081.jpg': (1280, 720),
 'img_05762.jpg': (1280, 974),
 'img_06048.jpg': (1280, 720),
 'img_06284.jpg': (1280, 750),
 'img_01757.jpg': (1280, 720),
 'img_04158.jpg': (1280, 974),
 'img_00143.jpg': (1280, 720),
 'img_06112.jpg': (1280, 750),
 'img_05065.jpg': (1280, 720),
 'img_01660.jpg': (1192, 670),
 'img_01000.jpg': (1280, 720),
 'img_00756.jpg': (1280, 720),
 'img_02758.jpg': (1280, 720),
 'img_00866.jpg': (1280, 720),
 'img_04693.jpg': (1280, 720),
 'img_01246.jpg': (1280, 720),
 'img_02875.jpg': (1192, 670),
 'img_07239.jpg': (1280, 720),
 'img_05511.jpg': (1276, 718),
 'img_00191.jpg': (1280, 720),
 'img_02348.jpg': (1280, 720),
 'img_04644.jpg': (1280, 750),
 'img_07227.jpg': (1280, 720),
 'img_02468.jpg': (1192, 670),
 'img_07712.jpg': (1280, 720),
 'img_07608.jpg': (1280, 750),
 'img_07545.jpg': (1280, 750),
 'img_06116.jpg': (1518, 854),
 'img_01934.jpg': (1280, 720),
 'img_02418.jpg': (1276, 718),
 'img_07435.jpg': (1280, 720),
 'img_07114.jpg': (1280, 720),
 'img_03710.jpg': (1280, 720),
 'img_02138.jpg': (1280, 720),
 'img_00911.jpg': (1280, 720),
 'img_04633.jpg': (1280, 720),
 'img_00788.jpg': (1280, 720),
 'img_05827.jpg': (1280, 720),
 'img_01464.jpg': (1280, 720),
 'img_01307.jpg': (1280, 974),
 'img_07077.jpg': (1280, 720),
 'img_02431.jpg': (1280, 720),
 'img_00531.jpg': (1280, 974),
 'img_06826.jpg': (1280, 720),
 'img_02689.jpg': (1280, 750),
 'img_00348.jpg': (1280, 750),
 'img_07240.jpg': (1280, 720),
 'img_02491.jpg': (1280, 720),
 'img_06578.jpg': (1280, 720),
 'img_00624.jpg': (1280, 720),
 'img_03505.jpg': (1280, 750),
 'img_01400.jpg': (1280, 720),
 'img_05886.jpg': (1280, 750),
 'img_07557.jpg': (1280, 720),
 'img_07649.jpg': (1280, 720),
 'img_01973.jpg': (1280, 720),
 'img_04463.jpg': (1280, 720),
 'img_01772.jpg': (1280, 720),
 'img_05535.jpg': (1280, 720),
 'img_01833.jpg': (1280, 720),
 'img_06152.jpg': (1280, 974),
 'img_01241.jpg': (1280, 750),
 'img_02737.jpg': (1280, 750),
 'img_01558.jpg': (1280, 720),
 'img_00831.jpg': (1280, 720),
 'img_05315.jpg': (1280, 750),
 'img_04336.jpg': (1280, 720),
 'img_07221.jpg': (1280, 720),
 'img_07275.jpg': (1280, 720),
 'img_01817.jpg': (1280, 720),
 'img_03022.jpg': (1280, 720),
 'img_04542.jpg': (1280, 750),
 'img_03453.jpg': (1280, 720),
 'img_07710.jpg': (1280, 720),
 'img_05112.jpg': (1280, 720),
 'img_01993.jpg': (1280, 720),
 'img_02128.jpg': (1280, 720),
 'img_06307.jpg': (1280, 750),
 'img_01916.jpg': (1280, 750),
 'img_01201.jpg': (1280, 720),
 'img_01654.jpg': (1280, 720),
 'img_00038.jpg': (1280, 720),
 'img_02283.jpg': (1280, 720),
 'img_07728.jpg': (1280, 974),
 'img_06063.jpg': (1280, 720),
 'img_03244.jpg': (1280, 720),
 'img_07365.jpg': (1280, 720),
 'img_01497.jpg': (1280, 720),
 'img_00558.jpg': (1280, 720),
 'img_05902.jpg': (1192, 670),
 'img_07429.jpg': (1280, 974),
 'img_06092.jpg': (1280, 720),
 'img_04806.jpg': (1280, 750),
 'img_06960.jpg': (1280, 720),
 'img_06714.jpg': (1280, 720),
 'img_05557.jpg': (1280, 720),
 'img_00165.jpg': (1280, 720),
 'img_03535.jpg': (1280, 720),
 'img_01422.jpg': (1280, 720),
 'img_04352.jpg': (1280, 720),
 'img_02034.jpg': (1276, 718),
 'img_05097.jpg': (1280, 720),
 'img_03997.jpg': (1280, 720),
 'img_01335.jpg': (1280, 974),
 'img_03480.jpg': (1280, 720),
 'img_02825.jpg': (1280, 720),
 'img_02301.jpg': (1280, 750),
 'img_01276.jpg': (1280, 720),
 'img_00725.jpg': (1280, 720),
 'img_01086.jpg': (1280, 720),
 'img_00352.jpg': (1280, 974),
 'img_01135.jpg': (1280, 720),
 'img_01160.jpg': (1280, 720),
 'img_01514.jpg': (1192, 670),
 'img_04756.jpg': (1280, 974),
 'img_02386.jpg': (1192, 670),
 'img_03246.jpg': (1280, 720),
 'img_04875.jpg': (1280, 720),
 'img_03278.jpg': (1280, 720),
 'img_07850.jpg': (1280, 720),
 'img_02364.jpg': (1244, 700),
 'img_05716.jpg': (1280, 750),
 'img_03025.jpg': (1280, 720),
 'img_07287.jpg': (1280, 974),
 'img_01333.jpg': (1280, 750),
 'img_01560.jpg': (1280, 720),
 'img_04873.jpg': (1280, 720),
 'img_00337.jpg': (1280, 720),
 'img_05783.jpg': (1280, 720),
 'img_07204.jpg': (1280, 720),
 'img_02324.jpg': (1280, 750),
 'img_02595.jpg': (1280, 720),
 'img_06672.jpg': (1280, 974),
 'img_01163.jpg': (1280, 750),
 'img_06591.jpg': (1280, 750),
 'img_01264.jpg': (1280, 720),
 'img_02053.jpg': (1280, 720),
 'img_01835.jpg': (1280, 974),
 'img_00881.jpg': (1276, 718),
 'img_04009.jpg': (1280, 720),
 'img_06821.jpg': (1280, 720),
 'img_07134.jpg': (1280, 750),
 'img_07168.jpg': (1280, 720),
 'img_01628.jpg': (1280, 974),
 'img_06719.jpg': (1280, 720),
 'img_06386.jpg': (1280, 720),
 'img_00055.jpg': (1280, 750),
 'img_00261.jpg': (1280, 720),
 'img_07530.jpg': (1280, 720),
 'img_07729.jpg': (1280, 720),
 'img_04229.jpg': (1280, 750),
 'img_03917.jpg': (1280, 720),
 'img_06656.jpg': (1280, 750),
 'img_02463.jpg': (1280, 720),
 'img_04967.jpg': (1280, 720),
 'img_05190.jpg': (1276, 718),
 'img_01806.jpg': (1280, 720),
 'img_03938.jpg': (1280, 750),
 'img_02530.jpg': (1280, 720),
 'img_07633.jpg': (1280, 974),
 'img_07518.jpg': (1280, 974),
 'img_07847.jpg': (1192, 670),
 'img_03979.jpg': (1280, 720),
 'img_03560.jpg': (1280, 720),
 'img_04231.jpg': (1280, 720),
 'img_05550.jpg': (1280, 750),
 'img_07397.jpg': (1280, 720),
 'img_02151.jpg': (1276, 718),
 'img_06443.jpg': (1280, 750),
 'img_05680.jpg': (1280, 720),
 'img_03374.jpg': (1280, 720),
 'img_07775.jpg': (1280, 720),
 'img_07017.jpg': (1280, 750),
 'img_07252.jpg': (1280, 750),
 'img_04052.jpg': (1518, 854),
 'img_05745.jpg': (1280, 720),
 'img_00391.jpg': (1280, 974),
 'img_07282.jpg': (1280, 720),
 'img_00696.jpg': (1280, 750),
 'img_04022.jpg': (1280, 720),
 'img_05022.jpg': (1280, 720),
 'img_03787.jpg': (1280, 974),
 'img_00295.jpg': (1280, 750),
 'img_02534.jpg': (1280, 750),
 'img_01820.jpg': (1280, 720),
 'img_01485.jpg': (1280, 720),
 'img_01143.jpg': (1280, 720),
 'img_02562.jpg': (1280, 720),
 'img_00237.jpg': (1192, 670),
 'img_02710.jpg': (1280, 720),
 'img_03585.jpg': (1280, 750),
 'img_02505.jpg': (1280, 974),
 'img_00321.jpg': (1280, 974),
 'img_04779.jpg': (1280, 720),
 'img_03154.jpg': (1280, 720),
 'img_05494.jpg': (1280, 720),
 'img_06996.jpg': (1732, 974),
 'img_01482.jpg': (1280, 720),
 'img_02745.jpg': (1280, 720),
 'img_04501.jpg': (1244, 700),
 'img_04154.jpg': (1280, 720),
 'img_01265.jpg': (1280, 720),
 'img_06069.jpg': (1280, 720),
 'img_05868.jpg': (1280, 750),
 'img_06323.jpg': (1244, 700),
 'img_05892.jpg': (1280, 720),
 'img_03714.jpg': (1280, 720),
 'img_02185.jpg': (1280, 720),
 'img_07109.jpg': (1280, 750),
 'img_00715.jpg': (1280, 720),
 'img_01064.jpg': (1280, 974),
 'img_03336.jpg': (1732, 974),
 'img_02018.jpg': (1280, 924),
 'img_02025.jpg': (1280, 720),
 'img_06532.jpg': (1280, 720),
 'img_05239.jpg': (1280, 720),
 'img_07197.jpg': (1280, 720),
 'img_07533.jpg': (1280, 720),
 'img_04854.jpg': (1280, 720),
 'img_01185.jpg': (1280, 720),
 'img_03918.jpg': (1280, 974),
 'img_07567.jpg': (1280, 750),
 'img_02112.jpg': (1192, 670),
 'img_06006.jpg': (1280, 974),
 'img_07544.jpg': (1244, 700),
 'img_03343.jpg': (1280, 750),
 'img_00678.jpg': (1280, 720),
 'img_02958.jpg': (1280, 750),
 'img_07228.jpg': (1192, 670),
 'img_01766.jpg': (1280, 720),
 'img_00299.jpg': (1280, 720),
 'img_05800.jpg': (1732, 974),
 'img_02399.jpg': (1280, 750),
 'img_06467.jpg': (1280, 720),
 'img_02633.jpg': (1280, 720),
 'img_07747.jpg': (1280, 924),
 'img_07898.jpg': (1280, 720),
 'img_03067.jpg': (1280, 720),
 'img_06523.jpg': (1280, 720),
 'img_07773.jpg': (1280, 750),
 'img_02113.jpg': (1276, 718),
 'img_01615.jpg': (1280, 974),
 'img_05973.jpg': (1280, 720),
 'img_06404.jpg': (1280, 974),
 'img_03253.jpg': (1280, 720),
 'img_07826.jpg': (1280, 750),
 'img_03893.jpg': (1280, 720),
 'img_00869.jpg': (1280, 720),
 'img_02635.jpg': (1280, 720),
 'img_01927.jpg': (1280, 720),
 'img_04605.jpg': (1732, 974),
 'img_05890.jpg': (1280, 720),
 'img_02997.jpg': (1732, 974),
 'img_06610.jpg': (1280, 720),
 'img_06847.jpg': (1280, 974),
 'img_04309.jpg': (1280, 720),
 'img_03051.jpg': (1280, 974),
 'img_07767.jpg': (1280, 720),
 'img_03817.jpg': (1280, 974),
 'img_01796.jpg': (1280, 720),
 'img_02433.jpg': (1276, 718),
 'img_06200.jpg': (1280, 750),
 'img_00848.jpg': (1280, 974),
 'img_02816.jpg': (1280, 750),
 'img_07268.jpg': (1280, 750),
 'img_00105.jpg': (1280, 720),
 'img_04880.jpg': (1280, 720),
 'img_02254.jpg': (1280, 720),
 'img_04678.jpg': (1280, 720),
 'img_06156.jpg': (1280, 720),
 'img_07547.jpg': (1280, 720),
 'img_06471.jpg': (1280, 720),
 'img_05645.jpg': (1280, 974),
 'img_01255.jpg': (1280, 720),
 'img_01841.jpg': (1280, 720),
 'img_01193.jpg': (1732, 974),
 'img_05375.jpg': (1280, 720),
 'img_02630.jpg': (1280, 720),
 'img_01763.jpg': (1280, 750),
 'img_06204.jpg': (1280, 720),
 'img_07390.jpg': (1280, 974),
 'img_05641.jpg': (1192, 670),
 'img_06057.jpg': (1276, 718),
 'img_00997.jpg': (1280, 750),
 'img_00819.jpg': (1280, 750),
 'img_07344.jpg': (1280, 974),
 'img_00278.jpg': (1280, 720),
 'img_06142.jpg': (1280, 720),
 'img_07749.jpg': (1280, 720),
 'img_01822.jpg': (1280, 720),
 'img_04090.jpg': (1280, 924),
 'img_01003.jpg': (1280, 974),
 'img_04471.jpg': (1192, 670),
 'img_00888.jpg': (1192, 670),
 'img_05689.jpg': (1280, 750),
 'img_03908.jpg': (1518, 854),
 'img_07223.jpg': (1280, 720),
 'img_02727.jpg': (1280, 720),
 'img_06134.jpg': (1280, 720),
 'img_04927.jpg': (1280, 974),
 'img_05490.jpg': (1280, 720),
 'img_02343.jpg': (1280, 974),
 'img_02017.jpg': (1280, 750),
 'img_05332.jpg': (1192, 670),
 'img_01677.jpg': (1732, 974),
 'img_06566.jpg': (1280, 720),
 'img_06421.jpg': (1280, 750),
 'img_04139.jpg': (1732, 974),
 'img_05553.jpg': (1280, 974),
 'img_05658.jpg': (1280, 974),
 'img_01291.jpg': (1280, 974),
 'img_00494.jpg': (1280, 720),
 'img_02940.jpg': (1280, 750),
 'img_02946.jpg': (1280, 720),
 'img_04249.jpg': (1280, 720),
 'img_05472.jpg': (1280, 720),
 'img_01233.jpg': (1280, 720),
 'img_04851.jpg': (1280, 720),
 'img_02698.jpg': (1280, 720),
 'img_02765.jpg': (1280, 720),
 'img_02976.jpg': (1280, 974),
 'img_04495.jpg': (1280, 720),
 'img_01165.jpg': (1334, 750),
 'img_01390.jpg': (1280, 720),
 'img_01011.jpg': (1280, 720),
 'img_00158.jpg': (1280, 720),
 'img_07558.jpg': (1280, 720),
 'img_01396.jpg': (1280, 720),
 'img_03713.jpg': (1280, 720),
 'img_05227.jpg': (1192, 670),
 'img_00481.jpg': (1192, 670),
 'img_01029.jpg': (1280, 720),
 'img_02446.jpg': (1280, 720),
 'img_05408.jpg': (1280, 720),
 'img_00014.jpg': (1280, 974),
 'img_02728.jpg': (1280, 720),
 'img_01578.jpg': (1280, 720),
 'img_04837.jpg': (1280, 974),
 'img_03451.jpg': (1280, 720),
 'img_00803.jpg': (1280, 974),
 'img_00546.jpg': (1276, 718),
 'img_04968.jpg': (1192, 670),
 'img_03842.jpg': (1280, 720),
 'img_01890.jpg': (1276, 718),
 'img_03356.jpg': (1280, 720),
 'img_06334.jpg': (1280, 974),
 'img_06493.jpg': (1280, 720),
 'img_01433.jpg': (1276, 718),
 'img_00406.jpg': (1732, 974),
 'img_06114.jpg': (1192, 670),
 'img_06338.jpg': (1280, 974),
 'img_07500.jpg': (1280, 720),
 'img_04578.jpg': (1280, 720),
 'img_00178.jpg': (1280, 720),
 'img_02341.jpg': (1280, 750),
 'img_01306.jpg': (1276, 718),
 'img_04524.jpg': (1280, 720),
 'img_04026.jpg': (1280, 720),
 'img_01601.jpg': (1280, 750),
 'img_01076.jpg': (1280, 974),
 'img_01721.jpg': (1280, 974),
 'img_02643.jpg': (1280, 720),
 'img_05094.jpg': (1280, 720),
 'img_02456.jpg': (1280, 720),
 'img_00397.jpg': (1280, 720),
 'img_04373.jpg': (1280, 974),
 'img_06503.jpg': (1280, 720),
 'img_04627.jpg': (1280, 750),
 'img_05373.jpg': (1280, 924),
 'img_04083.jpg': (1280, 974),
 'img_01603.jpg': (1280, 750),
 'img_02439.jpg': (1280, 720),
 'img_01087.jpg': (1280, 974),
 'img_03090.jpg': (1280, 720),
 'img_07923.jpg': (1280, 720),
 'img_06252.jpg': (1280, 720),
 'img_02186.jpg': (1280, 720),
 'img_07200.jpg': (1280, 720),
 'img_00984.jpg': (1280, 720),
 'img_00993.jpg': (1280, 750),
 'img_03984.jpg': (1280, 974),
 'img_04544.jpg': (1280, 720),
 'img_05116.jpg': (1280, 750),
 'img_04952.jpg': (1280, 720),
 'img_00197.jpg': (1280, 720),
 'img_00032.jpg': (1192, 670),
 'img_06260.jpg': (1280, 720),
 'img_00482.jpg': (1280, 720),
 'img_00545.jpg': (1280, 720),
 'img_01686.jpg': (1280, 720),
 'img_00998.jpg': (1280, 750),
 'img_01812.jpg': (1280, 720),
 'img_00653.jpg': (1280, 924),
 'img_04583.jpg': (1280, 720),
 'img_03755.jpg': (1280, 720),
 'img_03612.jpg': (1280, 720),
 'img_06537.jpg': (1280, 720),
 'img_06226.jpg': (1280, 974),
 'img_07657.jpg': (1280, 720),
 'img_05275.jpg': (1280, 720),
 'img_05592.jpg': (1280, 974),
 'img_02492.jpg': (1280, 750),
 'img_04289.jpg': (1280, 974),
 'img_06014.jpg': (1280, 720),
 'img_04150.jpg': (1280, 750),
 'img_05637.jpg': (1280, 924),
 'img_06695.jpg': (1280, 750),
 'img_02621.jpg': (1280, 750),
 'img_01744.jpg': (1276, 718),
 'img_06299.jpg': (1280, 974),
 'img_05560.jpg': (1280, 720),
 'img_05075.jpg': (1192, 670),
 'img_06589.jpg': (1276, 718),
 'img_02858.jpg': (1280, 720),
 'img_02377.jpg': (1280, 720),
 'img_06374.jpg': (1280, 750),
 'img_05480.jpg': (1280, 750),
 'img_03479.jpg': (1280, 720),
 'img_02499.jpg': (1280, 720),
 'img_05810.jpg': (1280, 720),
 'img_02605.jpg': (1280, 750),
 'img_02378.jpg': (1280, 750),
 'img_04041.jpg': (1280, 750),
 'img_00201.jpg': (1192, 670),
 'img_05249.jpg': (1280, 974),
 'img_00574.jpg': (1280, 720),
 'img_01707.jpg': (1280, 974),
 'img_06929.jpg': (1280, 720),
 'img_01455.jpg': (1280, 720),
 'img_06228.jpg': (1280, 720),
 'img_02981.jpg': (1280, 974),
 'img_02642.jpg': (1280, 974),
 'img_04032.jpg': (1280, 720),
 'img_03700.jpg': (1280, 720),
 'img_01093.jpg': (1280, 720),
 'img_07334.jpg': (1280, 720),
 'img_01083.jpg': (1280, 720),
 'img_00428.jpg': (1280, 720),
 'img_03544.jpg': (1280, 974),
 'img_02272.jpg': (1280, 720),
 'img_04848.jpg': (1192, 670),
 'img_05347.jpg': (1280, 720),
 'img_01767.jpg': (1280, 720),
 'img_03887.jpg': (1276, 718),
 'img_02201.jpg': (1280, 720),
 'img_06081.jpg': (1280, 720),
 'img_00713.jpg': (1280, 720),
 'img_01992.jpg': (1280, 750),
 'img_06428.jpg': (1280, 720),
 'img_03376.jpg': (1280, 720),
 'img_05310.jpg': (1280, 720),
 'img_06935.jpg': (1192, 670),
 'img_05676.jpg': (1280, 750),
 'img_00409.jpg': (1280, 720),
 'img_02033.jpg': (1280, 720),
 'img_02174.jpg': (1276, 718),
 'img_00903.jpg': (1280, 720),
 'img_07806.jpg': (1280, 720),
 'img_01411.jpg': (1334, 750),
 'img_05122.jpg': (1518, 854),
 'img_07911.jpg': (1280, 720),
 'img_06995.jpg': (1280, 750),
 'img_01021.jpg': (1280, 750),
 'img_02148.jpg': (1280, 720),
 'img_07170.jpg': (1280, 750),
 'img_02696.jpg': (1280, 974),
 'img_01520.jpg': (1280, 750),
 'img_07359.jpg': (1280, 720),
 'img_06464.jpg': (1280, 720),
 'img_00461.jpg': (1280, 720),
 'img_05143.jpg': (1280, 720),
 'img_07643.jpg': (1280, 720),
 'img_04283.jpg': (1280, 750),
 'img_00687.jpg': (1280, 720),
 'img_05507.jpg': (1280, 750),
 'img_07020.jpg': (1280, 750),
 'img_01466.jpg': (1276, 718),
 'img_00043.jpg': (1280, 720),
 'img_07265.jpg': (1280, 974),
 'img_03179.jpg': (1280, 720),
 'img_03774.jpg': (1280, 720),
 'img_02557.jpg': (1280, 750),
 'img_02828.jpg': (1280, 720),
 'img_00354.jpg': (1732, 974),
 'img_02198.jpg': (1280, 720),
 'img_00281.jpg': (1280, 720),
 'img_02199.jpg': (1280, 924),
 'img_05957.jpg': (1280, 750),
 'img_00815.jpg': (1280, 720),
 'img_07730.jpg': (1280, 750),
 'img_00284.jpg': (1280, 720),
 'img_04711.jpg': (1280, 720),
 'img_07018.jpg': (1280, 720),
 'img_03530.jpg': (1280, 720),
 'img_02760.jpg': (1280, 720),
 'img_00523.jpg': (1280, 720),
 'img_04899.jpg': (1280, 720),
 'img_00317.jpg': (1192, 670),
 'img_00821.jpg': (1280, 720),
 'img_07670.jpg': (1276, 718),
 'img_05070.jpg': (1280, 720),
 'img_03712.jpg': (1280, 720),
 'img_07871.jpg': (1280, 720),
 'img_00218.jpg': (1280, 720),
 'img_04444.jpg': (1280, 750),
 'img_02149.jpg': (1280, 750),
 'img_05711.jpg': (1280, 720),
 'img_07226.jpg': (1280, 720),
 'img_01783.jpg': (1280, 974),
 'img_00193.jpg': (1280, 750),
 'img_04235.jpg': (1280, 720),
 'img_05226.jpg': (1280, 720),
 'img_07864.jpg': (1280, 720),
 'img_00015.jpg': (1280, 750),
 'img_04441.jpg': (1280, 720),
 'img_05067.jpg': (1280, 720),
 'img_00774.jpg': (1280, 974),
 'img_02583.jpg': (1280, 720),
 'img_07687.jpg': (1280, 750),
 'img_07015.jpg': (1280, 974),
 'img_06636.jpg': (1280, 720),
 'img_06708.jpg': (1280, 720),
 'img_05243.jpg': (1280, 720),
 'img_02461.jpg': (1276, 718),
 'img_05685.jpg': (1280, 720),
 'img_07424.jpg': (1280, 720),
 'img_02448.jpg': (1280, 720),
 'img_07072.jpg': (1280, 720),
 'img_00535.jpg': (1280, 720),
 'img_02007.jpg': (1280, 974),
 'img_01668.jpg': (1192, 670),
 'img_03315.jpg': (1280, 750),
 'img_07222.jpg': (1280, 750),
 'img_00890.jpg': (1280, 924),
 'img_07560.jpg': (1280, 720),
 'img_07684.jpg': (1192, 670),
 'img_07118.jpg': (1280, 720),
 'img_03807.jpg': (1280, 720),
 'img_04217.jpg': (1280, 750),
 'img_03708.jpg': (1280, 720),
 'img_01008.jpg': (1280, 720),
 'img_04866.jpg': (1280, 750),
 'img_01810.jpg': (1280, 750),
 'img_05397.jpg': (1280, 720),
 'img_03884.jpg': (1280, 720),
 'img_03424.jpg': (1280, 720),
 'img_04736.jpg': (1280, 720),
 'img_06527.jpg': (1192, 670),
 'img_07437.jpg': (1280, 720),
 'img_05554.jpg': (1280, 720),
 'img_07761.jpg': (1280, 974),
 'img_01461.jpg': (1276, 718),
 'img_00891.jpg': (1280, 974),
 'img_04738.jpg': (1280, 720),
 'img_05114.jpg': (1280, 720),
 'img_07463.jpg': (1280, 720),
 'img_00592.jpg': (1276, 718),
 'img_07167.jpg': (1280, 720),
 'img_03596.jpg': (1280, 974),
 'img_03119.jpg': (1280, 720),
 'img_01044.jpg': (1280, 720),
 'img_03949.jpg': (1280, 750),
 'img_02938.jpg': (1280, 720),
 'img_07408.jpg': (1280, 750),
 'img_06445.jpg': (1280, 720),
 'img_07414.jpg': (1280, 750),
 'img_04948.jpg': (1280, 720),
 'img_06868.jpg': (1280, 720),
 'img_01823.jpg': (1276, 718),
 'img_02805.jpg': (1732, 974),
 'img_05041.jpg': (1280, 720),
 'img_05733.jpg': (1280, 720),
 'img_07693.jpg': (1280, 720),
 'img_03092.jpg': (1280, 720),
 'img_04163.jpg': (1280, 720),
 'img_03565.jpg': (1280, 720),
 'img_07648.jpg': (1280, 974),
 'img_07136.jpg': (1280, 750),
 'img_04391.jpg': (1280, 720),
 'img_03174.jpg': (1280, 720),
 'img_03257.jpg': (1280, 750),
 'img_07039.jpg': (1280, 720),
 'img_00387.jpg': (1280, 720),
 'img_02802.jpg': (1280, 720),
 'img_00041.jpg': (1280, 720),
 'img_01218.jpg': (1280, 720),
 'img_01052.jpg': (1280, 720),
 'img_01139.jpg': (1280, 750),
 'img_06298.jpg': (1280, 720),
 'img_02435.jpg': (1280, 720),
 'img_01402.jpg': (1280, 720),
 'img_02809.jpg': (1280, 974),
 'img_06619.jpg': (1280, 720),
 'img_06706.jpg': (1280, 720),
 'img_04914.jpg': (1244, 700),
 'img_03429.jpg': (1280, 720),
 'img_02250.jpg': (1280, 924),
 'img_05617.jpg': (1280, 720),
 'img_01768.jpg': (1280, 720),
 'img_04917.jpg': (1280, 720),
 'img_02115.jpg': (1518, 854),
 'img_03860.jpg': (1192, 670),
 'img_00011.jpg': (1280, 720),
 'img_04630.jpg': (1192, 670),
 'img_07075.jpg': (1280, 750),
 'img_05928.jpg': (1732, 974),
 'img_01886.jpg': (1280, 720),
 'img_00400.jpg': (1280, 720),
 'img_07274.jpg': (1244, 700),
 'img_00478.jpg': (1280, 720),
 'img_04708.jpg': (1280, 720),
 'img_06406.jpg': (1280, 720),
 'img_06792.jpg': (1280, 750),
 'img_00338.jpg': (1280, 720),
 'img_03599.jpg': (1280, 720),
 'img_06422.jpg': (1280, 750),
 'img_05283.jpg': (1280, 750),
 'img_04365.jpg': (1280, 720),
 'img_05532.jpg': (1280, 974),
 'img_03833.jpg': (1280, 974),
 'img_00471.jpg': (1276, 718),
 'img_02886.jpg': (1280, 750),
 'img_02768.jpg': (1280, 720),
 'img_00840.jpg': (1276, 718),
 'img_03383.jpg': (1280, 720),
 'img_01243.jpg': (1280, 720),
 'img_01620.jpg': (1280, 720),
 'img_00021.jpg': (1280, 720),
 'img_02105.jpg': (1280, 720),
 'img_07081.jpg': (1192, 670),
 'img_03158.jpg': (1280, 720),
 'img_07857.jpg': (1280, 720),
 'img_00490.jpg': (1280, 720),
 'img_03048.jpg': (1280, 720),
 'img_02340.jpg': (1280, 750),
 'img_00184.jpg': (1280, 750),
 'img_00744.jpg': (1280, 720),
 'img_07285.jpg': (1192, 670),
 'img_04008.jpg': (1280, 720),
 'img_01855.jpg': (1280, 720),
 'img_00595.jpg': (1276, 718),
 'img_01071.jpg': (1280, 720),
 'img_04977.jpg': (1280, 750),
 'img_03549.jpg': (1280, 720),
 'img_05350.jpg': (1192, 670),
 'img_06827.jpg': (1280, 720),
 'img_05353.jpg': (1280, 720),
 'img_02558.jpg': (1280, 974),
 'img_03185.jpg': (1280, 974),
 'img_04486.jpg': (1280, 750),
 'img_00209.jpg': (1280, 720),
 'img_02680.jpg': (1280, 974),
 'img_06313.jpg': (1280, 720),
 'img_01343.jpg': (1280, 974),
 'img_02494.jpg': (1280, 720),
 'img_04793.jpg': (1280, 720),
 'img_00769.jpg': (1280, 974),
 'img_02744.jpg': (1280, 720),
 'img_01826.jpg': (1276, 718),
 'img_05158.jpg': (1280, 720),
 'img_00510.jpg': (1280, 974),
 'img_01271.jpg': (1280, 750),
 'img_02376.jpg': (1192, 670),
 'img_02897.jpg': (1280, 750),
 'img_05101.jpg': (1192, 670),
 'img_00023.jpg': (1280, 720),
 'img_05481.jpg': (1280, 720),
 'img_06360.jpg': (1280, 720),
 'img_02784.jpg': (1280, 720),
 'img_05694.jpg': (1280, 750),
 'img_04475.jpg': (1280, 750),
 'img_06686.jpg': (1280, 720),
 'img_02863.jpg': (1280, 720),
 'img_02592.jpg': (1280, 750),
 'img_02776.jpg': (1280, 720),
 'img_05818.jpg': (1276, 718),
 'img_06303.jpg': (1280, 974),
 'img_03131.jpg': (1280, 720),
 'img_07673.jpg': (1280, 720),
 'img_03607.jpg': (1280, 924),
 'img_01678.jpg': (1280, 720),
 'img_02008.jpg': (1280, 720),
 'img_01749.jpg': (1280, 750),
 'img_05855.jpg': (1280, 720),
 'img_00677.jpg': (1280, 750),
 'img_06567.jpg': (1280, 750),
 'img_05765.jpg': (1280, 720),
 'img_05625.jpg': (1276, 718),
 'img_05503.jpg': (1280, 720),
 'img_00368.jpg': (1280, 720),
 'img_05345.jpg': (1280, 720),
 'img_05163.jpg': (1280, 720),
 'img_06903.jpg': (1280, 720),
 'img_03183.jpg': (1280, 720),
 'img_01634.jpg': (1280, 720),
 'img_01311.jpg': (1280, 720),
 'img_02014.jpg': (1280, 720),
 'img_04188.jpg': (1280, 750),
 'img_02919.jpg': (1280, 720),
 'img_02260.jpg': (1280, 750),
 'img_07698.jpg': (1280, 720),
 'img_04950.jpg': (1280, 720),
 'img_05604.jpg': (1280, 750),
 'img_01699.jpg': (1280, 720),
 'img_00536.jpg': (1280, 750),
 'img_01118.jpg': (1276, 718),
 'img_03636.jpg': (1280, 720),
 'img_03540.jpg': (1280, 720),
 'img_03779.jpg': (1280, 720),
 'img_04567.jpg': (1280, 720),
 'img_07439.jpg': (1280, 720),
 'img_06707.jpg': (1280, 720),
 'img_01001.jpg': (1192, 670),
 'img_05133.jpg': (1280, 720),
 'img_03791.jpg': (1280, 720),
 'img_01323.jpg': (1280, 750),
 'img_06497.jpg': (1280, 720),
 'img_04513.jpg': (1280, 750),
 'img_03567.jpg': (1280, 974),
 'img_07886.jpg': (1280, 720),
 'img_00690.jpg': (1280, 750),
 'img_06818.jpg': (1280, 720),
 'img_06742.jpg': (1280, 750),
 'img_00781.jpg': (1280, 720),
 'img_02996.jpg': (1280, 974),
 'img_07701.jpg': (1280, 720),
 'img_01356.jpg': (1280, 720),
 'img_01398.jpg': (1280, 750),
 'img_07554.jpg': (1192, 670),
 'img_00097.jpg': (1280, 720),
 'img_01469.jpg': (1280, 720),
 'img_01941.jpg': (1280, 924),
 'img_07577.jpg': (1280, 720),
 'img_04124.jpg': (1280, 720),
 'img_03189.jpg': (1280, 974),
 'img_04911.jpg': (1280, 720),
 'img_02721.jpg': (1280, 720),
 'img_05618.jpg': (1280, 720),
 'img_06613.jpg': (1244, 700),
 'img_02107.jpg': (1280, 720),
 'img_04087.jpg': (1280, 720),
 'img_05237.jpg': (1280, 750),
 'img_06843.jpg': (1280, 720),
 'img_03509.jpg': (1280, 974),
 'img_03020.jpg': (1280, 720),
 'img_05024.jpg': (1280, 750),
 'img_01769.jpg': (1280, 974),
 'img_05971.jpg': (1280, 720),
 'img_06239.jpg': (1280, 720),
 'img_07115.jpg': (1244, 700),
 'img_06771.jpg': (1280, 750),
 'img_01375.jpg': (1280, 750),
 'img_07447.jpg': (1280, 720),
 'img_07732.jpg': (1192, 670),
 'img_02365.jpg': (1280, 720),
 'img_03880.jpg': (1280, 750),
 'img_01865.jpg': (1280, 750),
 'img_07883.jpg': (1280, 720),
 'img_06022.jpg': (1280, 720),
 'img_05088.jpg': (1280, 750),
 'img_05048.jpg': (1280, 974),
 'img_06777.jpg': (1280, 750),
 'img_03742.jpg': (1280, 750),
 'img_05089.jpg': (1280, 720),
 'img_05466.jpg': (1280, 720),
 'img_03300.jpg': (1280, 720),
 'img_07059.jpg': (1192, 670),
 'img_04721.jpg': (1280, 720),
 'img_06126.jpg': (1280, 720),
 'img_01194.jpg': (1280, 720),
 'img_05029.jpg': (1280, 720),
 'img_03035.jpg': (1280, 720),
 'img_00286.jpg': (1280, 720),
 'img_05575.jpg': (1280, 720),
 'img_02798.jpg': (1280, 974),
 'img_01912.jpg': (1280, 720),
 'img_03841.jpg': (1280, 720),
 'img_07727.jpg': (1280, 720),
 'img_00771.jpg': (1192, 670),
 'img_05228.jpg': (1280, 720),
 'img_03730.jpg': (1276, 718),
 'img_01304.jpg': (1280, 720),
 'img_06772.jpg': (1518, 854),
 'img_06568.jpg': (1280, 720),
 'img_00206.jpg': (1192, 670),
 'img_07671.jpg': (1280, 720),
 'img_05485.jpg': (1280, 720),
 'img_06884.jpg': (1280, 750),
 'img_00069.jpg': (1280, 974),
 'img_06344.jpg': (1192, 670),
 'img_06383.jpg': (1280, 720),
 'img_06072.jpg': (1280, 974),
 'img_07046.jpg': (1280, 750),
 'img_03643.jpg': (1334, 750),
 'img_06244.jpg': (1280, 720),
 'img_03065.jpg': (1280, 720),
 'img_03654.jpg': (1280, 720),
 'img_00820.jpg': (1280, 720),
 'img_05635.jpg': (1280, 720),
 'img_02915.jpg': (1280, 720),
 'img_02013.jpg': (1334, 750),
 'img_00703.jpg': (1280, 720),
 'img_04681.jpg': (1280, 974),
 'img_02469.jpg': (1280, 720),
 'img_01040.jpg': (1280, 720),
 'img_07916.jpg': (1280, 720),
 'img_06495.jpg': (1334, 750),
 'img_03947.jpg': (1280, 750),
 'img_02541.jpg': (1280, 720),
 'img_01080.jpg': (1280, 720),
 'img_05873.jpg': (1280, 720),
 'img_04547.jpg': (1280, 750),
 'img_00084.jpg': (1276, 718),
 'img_02801.jpg': (1280, 720),
 'img_02695.jpg': (1280, 720),
 'img_07286.jpg': (1280, 720),
 'img_00435.jpg': (1280, 720),
 'img_04878.jpg': (1280, 750),
 'img_01664.jpg': (1280, 720),
 'img_04545.jpg': (1192, 670),
 'img_07785.jpg': (1244, 700),
 'img_03489.jpg': (1280, 750),
 'img_06879.jpg': (1280, 720),
 'img_00247.jpg': (1280, 750),
 'img_07774.jpg': (1280, 720),
 'img_00245.jpg': (1280, 974),
 'img_06434.jpg': (1280, 974),
 'img_06487.jpg': (1280, 750),
 'img_02658.jpg': (1280, 720),
 'img_05106.jpg': (1280, 720),
 'img_06215.jpg': (1280, 750),
 'img_03477.jpg': (1280, 720),
 'img_03543.jpg': (1280, 720),
 'img_00300.jpg': (1276, 718),
 'img_04592.jpg': (1280, 720),
 'img_04259.jpg': (1280, 750),
 'img_07709.jpg': (1280, 750),
 'img_00372.jpg': (1280, 720),
 'img_04350.jpg': (1280, 720),
 'img_02718.jpg': (1280, 720),
 'img_03972.jpg': (1276, 718),
 'img_01111.jpg': (1280, 720),
 'img_07258.jpg': (1334, 750),
 'img_01784.jpg': (1280, 750),
 'img_02926.jpg': (1280, 720),
 'img_02867.jpg': (1280, 720),
 'img_03123.jpg': (1192, 670),
 'img_00008.jpg': (1280, 720),
 'img_00222.jpg': (1280, 720),
 'img_00356.jpg': (1280, 720),
 'img_05040.jpg': (1280, 720),
 'img_06094.jpg': (1280, 750),
 'img_01151.jpg': (1280, 720),
 'img_04316.jpg': (1280, 974),
 'img_06652.jpg': (1280, 720),
 'img_02918.jpg': (1280, 720),
 'img_04568.jpg': (1280, 974),
 'img_00507.jpg': (1280, 720),
 'img_00898.jpg': (1280, 720),
 'img_00926.jpg': (1276, 718),
 'img_01507.jpg': (1280, 720),
 'img_04983.jpg': (1276, 718),
 'img_03623.jpg': (1192, 670),
 'img_01429.jpg': (1280, 974),
 'img_03215.jpg': (1192, 670),
 'img_01403.jpg': (1280, 720),
 'img_01902.jpg': (1280, 720),
 'img_03186.jpg': (1280, 720),
 'img_06220.jpg': (1280, 974),
 'img_06627.jpg': (1280, 720),
 'img_07048.jpg': (1280, 720),
 'img_04366.jpg': (1280, 720),
 'img_04196.jpg': (1280, 720),
 'img_04632.jpg': (1280, 974),
 'img_01959.jpg': (1276, 718),
 'img_03296.jpg': (1280, 720),
 'img_02457.jpg': (1280, 720),
 'img_03699.jpg': (1280, 720),
 'img_04148.jpg': (1280, 720),
 'img_07443.jpg': (1192, 670),
 'img_02719.jpg': (1280, 720),
 'img_02432.jpg': (1280, 974),
 'img_06277.jpg': (1280, 974),
 'img_02410.jpg': (1280, 720),
 'img_07869.jpg': (1276, 718),
 'img_05852.jpg': (1280, 720),
 'img_01128.jpg': (1280, 720),
 'img_05012.jpg': (1280, 720),
 'img_07133.jpg': (1280, 720),
 'img_02308.jpg': (1280, 750),
 'img_07031.jpg': (1280, 924),
 'img_05069.jpg': (1280, 720),
 'img_01056.jpg': (1192, 670),
 'img_02051.jpg': (1280, 720),
 'img_04050.jpg': (1280, 720),
 'img_00187.jpg': (1280, 750),
 'img_00091.jpg': (1280, 720),
 'img_07892.jpg': (1280, 720),
 'img_00219.jpg': (1280, 974),
 'img_02220.jpg': (1280, 750),
 'img_07576.jpg': (1280, 720),
 'img_05252.jpg': (1280, 974),
 'img_00630.jpg': (1280, 720),
 'img_07797.jpg': (1280, 720),
 'img_06347.jpg': (1280, 750),
 'img_01588.jpg': (1276, 718),
 'img_05648.jpg': (1192, 670),
 'img_06061.jpg': (1280, 720),
 'img_05066.jpg': (1276, 718),
 'img_00539.jpg': (1280, 974),
 'img_00022.jpg': (1280, 720),
 'img_05382.jpg': (1280, 750),
 'img_05446.jpg': (1280, 974),
 'img_03963.jpg': (1280, 720),
 'img_06553.jpg': (1280, 720),
 'img_01790.jpg': (1280, 720),
 'img_00359.jpg': (1280, 720),
 'img_01527.jpg': (1280, 720),
 'img_06407.jpg': (1280, 720),
 'img_01492.jpg': (1280, 720),
 'img_07665.jpg': (1280, 720),
 'img_07276.jpg': (1280, 720),
 'img_02084.jpg': (1280, 720),
 'img_00288.jpg': (1280, 720),
 'img_02604.jpg': (1280, 750),
 'img_02360.jpg': (1280, 720),
 'img_00072.jpg': (1280, 720),
 'img_05926.jpg': (1280, 720),
 'img_07770.jpg': (1280, 720),
 'img_05057.jpg': (1280, 750),
 'img_00818.jpg': (1276, 718),
 'img_00502.jpg': (1280, 720),
 'img_04621.jpg': (1280, 720),
 'img_00747.jpg': (1280, 924),
 'img_03150.jpg': (1280, 720),
 'img_04458.jpg': (1280, 750),
 'img_03241.jpg': (1280, 720),
 'img_02785.jpg': (1276, 718),
 'img_05482.jpg': (1280, 720),
 'img_03507.jpg': (1280, 750),
 'img_00365.jpg': (1280, 974),
 'img_00601.jpg': (1280, 974),
 'img_07396.jpg': (1280, 750),
 'img_02427.jpg': (1280, 974),
 'img_01866.jpg': (1280, 720),
 'img_01753.jpg': (1280, 720),
 'img_00783.jpg': (1280, 974),
 'img_07801.jpg': (1280, 720),
 'img_00360.jpg': (1280, 750),
 'img_04762.jpg': (1280, 720),
 'img_01779.jpg': (1280, 720),
 'img_05681.jpg': (1192, 670),
 'img_04680.jpg': (1280, 720),
 'img_01006.jpg': (1280, 750),
 'img_02173.jpg': (1280, 750),
 'img_00437.jpg': (1280, 720),
 'img_03649.jpg': (1280, 720),
 'img_00596.jpg': (1280, 720),
 'img_07472.jpg': (1280, 720),
 'img_07537.jpg': (1280, 924),
 'img_02362.jpg': (1280, 750),
 'img_00843.jpg': (1280, 720),
 'img_01980.jpg': (1280, 720),
 'img_04617.jpg': (1280, 720),
 'img_04236.jpg': (1280, 750),
 'img_02393.jpg': (1280, 720),
 'img_05728.jpg': (1280, 974),
 'img_05152.jpg': (1280, 720),
 'img_02937.jpg': (1280, 974),
 'img_02685.jpg': (1280, 720),
 'img_03686.jpg': (1280, 750),
 'img_03645.jpg': (1280, 720),
 'img_05778.jpg': (1280, 720),
 'img_03347.jpg': (1280, 974),
 'img_06090.jpg': (1280, 720),
 'img_05384.jpg': (1280, 720),
 'img_07810.jpg': (1280, 720),
 'img_05358.jpg': (1280, 720),
 'img_01446.jpg': (1280, 720),
 'img_01516.jpg': (1280, 720),
 'img_00130.jpg': (1280, 750),
 'img_06420.jpg': (1280, 720),
 'img_00085.jpg': (1280, 720),
 'img_00762.jpg': (1280, 750),
 'img_03948.jpg': (1280, 974),
 'img_01415.jpg': (1280, 720),
 'img_07503.jpg': (1280, 720),
 'img_06096.jpg': (1280, 720),
 'img_06105.jpg': (1280, 720),
 'img_06417.jpg': (1280, 750),
 'img_01448.jpg': (1280, 720),
 ...}
In [26]:
with open(join('./data/boxes/', boxes[0])) as fp:
    bxs = json.load(fp)
    print(bxs[0])
    print(bxs[0]['annotations'])
{'filename': 'img_07917.jpg', 'annotations': [{'y': 193.3597426816281, 'width': 383.68430384213445, 'height': 151.06975503141317, 'x': 547.1578480789353, 'class': 'rect'}], 'class': 'image'}
[{'y': 193.3597426816281, 'width': 383.68430384213445, 'height': 151.06975503141317, 'x': 547.1578480789353, 'class': 'rect'}]

So the annotations appear to be a list, the key parameter is the 'filename' parameter. We will also need to transform the coords as we have resized all of the images.

A simple function to transform the coordinates of the bounding boxes.

In [27]:
def convert_bb(item, size, new_size=(224,224)):
    factor_x = new_size[0]/size[0]
    factor_y = new_size[1]/size[1]
    item['height'] = item['height']*factor_y
    item['width'] = item['width']*factor_x
    item['x'] = item['x']*factor_x
    item['y'] = item['y']*factor_y
    return item
    

Here we construct a dictionary whose keys are the filenames. The idea is we can use the filenames to find out the box meta-data.

In [28]:
null_largest = {'width':0,
               'height': 0, 
               'x': 224/2., 
               'y': 224/2.}

file2boxes = {}
for b in boxes:
    with open(join('./data/boxes/', b)) as fp:
        bxs = json.load(fp)
        blabel = re.findall('[a-zA-Z]*', b)[0]
        for item in bxs:
            it = item['annotations']
            
            for i in it:
                i['label'] = blabel
            
            fname = item['filename']
            
            if 'data' in fname:
                fname = os.path.split(fname)[1]
            existing = file2boxes.get(fname)
            
            item['annotations'] = [convert_bb(a, all_sizes[fname]) for a in item['annotations']]
            
            # Inplace sort so that we can find the largest box.
            item['annotations'].sort(key=lambda x: x['width']*x['height'])
            
            # Now lets just take the largest (last one)
            if len(item['annotations']) == 0:
                largest = null_largest
            else:
                largest = item['annotations'][-1]
                
            item['box_loc'] = [largest['width'], largest['height'], largest['x'], largest['y']]
            
            if existing is None:
                file2boxes[fname] = item
            else:
                file2boxes[fname].append(item['annotations'])
                

Some of the files are unrepresented. Let's make sure they have a null largest.

In [29]:
def get_boxes(gen, file2boxes=file2boxes, null_largest=null_largest):
    boxes = []
    nlarge =  [null_largest['width'], null_largest['height'], null_largest['x'], null_largest['y']]
    for f in gen.filenames:
        f = f.split('\\')[-1]
        meta = file2boxes.get(f)
        if meta == None:
            boxes.append(nlarge)
        else:
            largest = meta['box_loc']
            boxes.append(largest)
    return np.array(boxes)

Prepare the second output labels¶

Now we have the labels, we need to line them up with the other data labels for train, valid and sample. The generators from each will help us with this.

In [30]:
train_boxes = get_boxes(train_gen)
valid_boxes = get_boxes(valid_gen)
sample_boxes = get_boxes(sample_gen)

Let's use the previous simple model.¶

In [31]:
simple = Sequential([
    InputLayer((256,256,3)),
    Conv2D(16,(3,3), activation='relu'),
    MaxPooling2D(4),
    Conv2D(16, (3,3), activation='relu'),
  ])
simple.summary()
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
input_3 (InputLayer)         (None, 256, 256, 3)       0         
_________________________________________________________________
conv2d_8 (Conv2D)            (None, 254, 254, 16)      448       
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 63, 63, 16)        0         
_________________________________________________________________
conv2d_9 (Conv2D)            (None, 61, 61, 16)        2320      
=================================================================
Total params: 2,768.0
Trainable params: 2,768.0
Non-trainable params: 0.0
_________________________________________________________________
In [ ]:
inp  = Input((256,256,3))
sim = simple(inp)
c1 = Conv2D(8,(3,3))(sim)
out1 = GlobalMaxPool2D()(c1)
c2 = Conv2D(4, (3,3))(sim)
out2 = GlobalMaxPool2D()(c2)
dualSimple = Model(input=inp, outputs=[out1, out2])
In [ ]:
dualSimple.compile(optimizer='adam',
              loss=['categorical_crossentropy', 'mse'],
              metrics=['accuracy'],
             loss_weights=[1,0.01])

dualSimple.summary()
In [20]:
dualSimple.fit(data[:], [labels[:], train_boxes], epochs=3, batch_size=128, validation_data=(val_data, [val_labels, valid_boxes]))
Train on 3025 samples, validate on 752 samples
Epoch 1/3
3025/3025 [==============================] - 20s - loss: 10.5559 - global_max_pooling2d_1_loss: 1.8870 - global_max_pooling2d_2_loss: 866.8852 - global_max_pooling2d_1_acc: 0.3898 - global_max_pooling2d_2_acc: 0.5676 - val_loss: 3.0985 - val_global_max_pooling2d_1_loss: 1.7335 - val_global_max_pooling2d_2_loss: 136.4989 - val_global_max_pooling2d_1_acc: 0.4561 - val_global_max_pooling2d_2_acc: 0.1077
Epoch 2/3
3025/3025 [==============================] - 16s - loss: 2.8031 - global_max_pooling2d_1_loss: 1.6750 - global_max_pooling2d_2_loss: 112.8190 - global_max_pooling2d_1_acc: 0.4549 - global_max_pooling2d_2_acc: 0.4175 - val_loss: 2.4116 - val_global_max_pooling2d_1_loss: 1.6376 - val_global_max_pooling2d_2_loss: 77.4025 - val_global_max_pooling2d_1_acc: 0.4561 - val_global_max_pooling2d_2_acc: 0.6237
Epoch 3/3
3025/3025 [==============================] - 16s - loss: 2.3125 - global_max_pooling2d_1_loss: 1.6412 - global_max_pooling2d_2_loss: 67.1315 - global_max_pooling2d_1_acc: 0.4549 - global_max_pooling2d_2_acc: 0.5091 - val_loss: 2.2237 - val_global_max_pooling2d_1_loss: 1.6337 - val_global_max_pooling2d_2_loss: 59.0001 - val_global_max_pooling2d_1_acc: 0.4561 - val_global_max_pooling2d_2_acc: 0.5984
Out[20]:

Now Try with pretrained model + convolutions.¶

In [32]:
conv_top = Sequential([InputLayer((8,8,2048)),
                       Conv2D(32, (3,3), padding='same', activation='relu'),
                       BatchNormalization(),
                       Conv2D(32, (3,3), padding='same', activation='relu'),
                       BatchNormalization(),
                       Conv2D(32, (3,3), padding='same', activation='relu'),
                       BatchNormalization(),
                      ])

inp = Input((8,8,2048))
ct = conv_top(inp)

# ct is the convolution top output.
x = Conv2D(8,(3,3), padding='same',activation='relu')(ct)
x = BatchNormalization()(x)
x = Conv2D(8,(3,3), padding='same',activation='relu')(x)
x = BatchNormalization()(x)
x = GlobalAveragePooling2D()(x)
out1 = Activation('softmax',name='class')(x)

x = Conv2D(4,(3,3), padding='same',activation='relu')(ct)
x = BatchNormalization()(x)
x = Conv2D(4,(3,3), padding='same',activation='relu')(x)
x = BatchNormalization()(x)
out2 = GlobalAveragePooling2D(name='box')(x)

conv_model = Model(inputs=inp, outputs=[out1, out2])
conv_model.compile(optimizer='adam', loss=['categorical_crossentropy', 'mse'], 
                 metrics=['accuracy'], loss_weights=[1,0.001])

conv_model.summary()
____________________________________________________________________________________________________
Layer (type)                     Output Shape          Param #     Connected to                     
====================================================================================================
input_5 (InputLayer)             (None, 8, 8, 2048)    0                                            
____________________________________________________________________________________________________
sequential_3 (Sequential)        (None, 8, 8, 32)      608736                                       
____________________________________________________________________________________________________
conv2d_13 (Conv2D)               (None, 8, 8, 8)       2312                                         
____________________________________________________________________________________________________
batch_normalization_11 (BatchNor (None, 8, 8, 8)       32                                           
____________________________________________________________________________________________________
conv2d_15 (Conv2D)               (None, 8, 8, 4)       1156                                         
____________________________________________________________________________________________________
conv2d_14 (Conv2D)               (None, 8, 8, 8)       584                                          
____________________________________________________________________________________________________
batch_normalization_13 (BatchNor (None, 8, 8, 4)       16                                           
____________________________________________________________________________________________________
batch_normalization_12 (BatchNor (None, 8, 8, 8)       32                                           
____________________________________________________________________________________________________
conv2d_16 (Conv2D)               (None, 8, 8, 4)       148                                          
____________________________________________________________________________________________________
global_average_pooling2d_2 (Glob (None, 8)             0                                            
____________________________________________________________________________________________________
batch_normalization_14 (BatchNor (None, 8, 8, 4)       16                                           
____________________________________________________________________________________________________
class (Activation)               (None, 8)             0                                            
____________________________________________________________________________________________________
box (GlobalAveragePooling2D)     (None, 4)             0                                            
====================================================================================================
Total params: 613,032.0
Trainable params: 612,792.0
Non-trainable params: 240.0
____________________________________________________________________________________________________
In [33]:
xCdata = bcolz.open(join('bdat','pretrained','data'))
xValdata = bcolz.open(join('bdat','pretrained','valdata'))
In [42]:
conv_model.optimizer.lr = 1e-1

conv_model.fit(xCdata, [labels, train_boxes], epochs=50, batch_size=128, validation_data=(xValdata, [val_labels, valid_boxes]), verbose=2)
Train on 3025 samples, validate on 752 samples
Epoch 1/50
10s - loss: 7.4551 - class_loss: 1.5769 - box_loss: 5878.2130 - class_acc: 0.6635 - box_acc: 0.2694 - val_loss: 7.8971 - val_class_loss: 2.1183 - val_box_loss: 5778.8451 - val_class_acc: 0.2168 - val_box_acc: 0.2301
Epoch 2/50
10s - loss: 7.4516 - class_loss: 1.5734 - box_loss: 5878.2536 - class_acc: 0.6641 - box_acc: 0.2704 - val_loss: 7.8868 - val_class_loss: 2.1061 - val_box_loss: 5780.6274 - val_class_acc: 0.2261 - val_box_acc: 0.2261
Epoch 3/50
10s - loss: 7.4502 - class_loss: 1.5720 - box_loss: 5878.2218 - class_acc: 0.6671 - box_acc: 0.2701 - val_loss: 7.8781 - val_class_loss: 2.0975 - val_box_loss: 5780.6206 - val_class_acc: 0.2354 - val_box_acc: 0.2314
Epoch 4/50
11s - loss: 7.4472 - class_loss: 1.5691 - box_loss: 5878.1109 - class_acc: 0.6688 - box_acc: 0.2737 - val_loss: 7.8912 - val_class_loss: 2.1106 - val_box_loss: 5780.5943 - val_class_acc: 0.2154 - val_box_acc: 0.2380
Epoch 5/50
10s - loss: 7.4444 - class_loss: 1.5663 - box_loss: 5878.0921 - class_acc: 0.6707 - box_acc: 0.2707 - val_loss: 7.8887 - val_class_loss: 2.1096 - val_box_loss: 5779.1064 - val_class_acc: 0.2247 - val_box_acc: 0.2287
Epoch 6/50
10s - loss: 7.4427 - class_loss: 1.5647 - box_loss: 5877.9837 - class_acc: 0.6740 - box_acc: 0.2760 - val_loss: 7.8926 - val_class_loss: 2.1120 - val_box_loss: 5780.6735 - val_class_acc: 0.2181 - val_box_acc: 0.2367
Epoch 7/50
10s - loss: 7.4380 - class_loss: 1.5601 - box_loss: 5877.9881 - class_acc: 0.6731 - box_acc: 0.2661 - val_loss: 7.8910 - val_class_loss: 2.1102 - val_box_loss: 5780.8347 - val_class_acc: 0.2207 - val_box_acc: 0.2340
Epoch 8/50
10s - loss: 7.4382 - class_loss: 1.5603 - box_loss: 5877.9042 - class_acc: 0.6750 - box_acc: 0.2701 - val_loss: 7.8948 - val_class_loss: 2.1150 - val_box_loss: 5779.7767 - val_class_acc: 0.2247 - val_box_acc: 0.2314
Epoch 9/50
11s - loss: 7.4306 - class_loss: 1.5528 - box_loss: 5877.8457 - class_acc: 0.6737 - box_acc: 0.2731 - val_loss: 7.8943 - val_class_loss: 2.1145 - val_box_loss: 5779.7899 - val_class_acc: 0.2247 - val_box_acc: 0.2394
Epoch 10/50
12s - loss: 7.4321 - class_loss: 1.5543 - box_loss: 5877.7882 - class_acc: 0.6760 - box_acc: 0.2724 - val_loss: 7.8886 - val_class_loss: 2.1077 - val_box_loss: 5780.9016 - val_class_acc: 0.2234 - val_box_acc: 0.2274
Epoch 11/50
11s - loss: 7.4295 - class_loss: 1.5517 - box_loss: 5877.7257 - class_acc: 0.6803 - box_acc: 0.2678 - val_loss: 7.9017 - val_class_loss: 2.1240 - val_box_loss: 5777.7094 - val_class_acc: 0.2261 - val_box_acc: 0.2274
Epoch 12/50
12s - loss: 7.4267 - class_loss: 1.5489 - box_loss: 5877.7502 - class_acc: 0.6754 - box_acc: 0.2671 - val_loss: 7.8666 - val_class_loss: 2.0834 - val_box_loss: 5783.1535 - val_class_acc: 0.2447 - val_box_acc: 0.2274
Epoch 13/50
10s - loss: 7.4266 - class_loss: 1.5490 - box_loss: 5877.6248 - class_acc: 0.6777 - box_acc: 0.2731 - val_loss: 7.8920 - val_class_loss: 2.1125 - val_box_loss: 5779.4986 - val_class_acc: 0.2301 - val_box_acc: 0.2327
Epoch 14/50
10s - loss: 7.4237 - class_loss: 1.5461 - box_loss: 5877.6094 - class_acc: 0.6790 - box_acc: 0.2747 - val_loss: 7.8777 - val_class_loss: 2.0969 - val_box_loss: 5780.7517 - val_class_acc: 0.2407 - val_box_acc: 0.2274
Epoch 15/50
10s - loss: 7.4186 - class_loss: 1.5410 - box_loss: 5877.5319 - class_acc: 0.6840 - box_acc: 0.2727 - val_loss: 7.8908 - val_class_loss: 2.1110 - val_box_loss: 5779.8223 - val_class_acc: 0.2354 - val_box_acc: 0.2354
Epoch 16/50
10s - loss: 7.4162 - class_loss: 1.5387 - box_loss: 5877.4903 - class_acc: 0.6836 - box_acc: 0.2704 - val_loss: 7.8849 - val_class_loss: 2.1032 - val_box_loss: 5781.7840 - val_class_acc: 0.2367 - val_box_acc: 0.2407
Epoch 17/50
10s - loss: 7.4122 - class_loss: 1.5347 - box_loss: 5877.5028 - class_acc: 0.6945 - box_acc: 0.2701 - val_loss: 7.9116 - val_class_loss: 2.1349 - val_box_loss: 5776.7147 - val_class_acc: 0.2141 - val_box_acc: 0.2340
Epoch 18/50
10s - loss: 7.4094 - class_loss: 1.5320 - box_loss: 5877.3756 - class_acc: 0.6869 - box_acc: 0.2707 - val_loss: 7.8986 - val_class_loss: 2.1196 - val_box_loss: 5778.9709 - val_class_acc: 0.2207 - val_box_acc: 0.2434
Epoch 19/50
12s - loss: 7.4095 - class_loss: 1.5321 - box_loss: 5877.3517 - class_acc: 0.6866 - box_acc: 0.2711 - val_loss: 7.8871 - val_class_loss: 2.1068 - val_box_loss: 5780.3197 - val_class_acc: 0.2340 - val_box_acc: 0.2340
Epoch 20/50
12s - loss: 7.4051 - class_loss: 1.5278 - box_loss: 5877.2850 - class_acc: 0.6962 - box_acc: 0.2684 - val_loss: 7.8825 - val_class_loss: 2.1024 - val_box_loss: 5780.0639 - val_class_acc: 0.2407 - val_box_acc: 0.2314
Epoch 21/50
12s - loss: 7.4077 - class_loss: 1.5304 - box_loss: 5877.2550 - class_acc: 0.6949 - box_acc: 0.2678 - val_loss: 7.8906 - val_class_loss: 2.1103 - val_box_loss: 5780.3194 - val_class_acc: 0.2301 - val_box_acc: 0.2287
Epoch 22/50
11s - loss: 7.4054 - class_loss: 1.5282 - box_loss: 5877.1532 - class_acc: 0.6916 - box_acc: 0.2704 - val_loss: 7.9023 - val_class_loss: 2.1232 - val_box_loss: 5779.0454 - val_class_acc: 0.2194 - val_box_acc: 0.2367
Epoch 23/50
11s - loss: 7.3986 - class_loss: 1.5214 - box_loss: 5877.1802 - class_acc: 0.6995 - box_acc: 0.2691 - val_loss: 7.8941 - val_class_loss: 2.1147 - val_box_loss: 5779.3671 - val_class_acc: 0.2301 - val_box_acc: 0.2327
Epoch 24/50
10s - loss: 7.3976 - class_loss: 1.5205 - box_loss: 5877.1672 - class_acc: 0.6942 - box_acc: 0.2688 - val_loss: 7.9036 - val_class_loss: 2.1258 - val_box_loss: 5777.8122 - val_class_acc: 0.2301 - val_box_acc: 0.2340
Epoch 25/50
11s - loss: 7.3936 - class_loss: 1.5165 - box_loss: 5877.0203 - class_acc: 0.7002 - box_acc: 0.2701 - val_loss: 7.9263 - val_class_loss: 2.1496 - val_box_loss: 5776.7462 - val_class_acc: 0.2048 - val_box_acc: 0.2434
Epoch 26/50
11s - loss: 7.3931 - class_loss: 1.5161 - box_loss: 5877.0190 - class_acc: 0.6912 - box_acc: 0.2704 - val_loss: 7.9089 - val_class_loss: 2.1305 - val_box_loss: 5778.3832 - val_class_acc: 0.2207 - val_box_acc: 0.2380
Epoch 27/50
11s - loss: 7.3873 - class_loss: 1.5104 - box_loss: 5876.9228 - class_acc: 0.7018 - box_acc: 0.2698 - val_loss: 7.9006 - val_class_loss: 2.1219 - val_box_loss: 5778.7269 - val_class_acc: 0.2274 - val_box_acc: 0.2447
Epoch 28/50
11s - loss: 7.3868 - class_loss: 1.5099 - box_loss: 5876.8570 - class_acc: 0.7008 - box_acc: 0.2681 - val_loss: 7.9297 - val_class_loss: 2.1546 - val_box_loss: 5775.1525 - val_class_acc: 0.2035 - val_box_acc: 0.2487
Epoch 29/50
11s - loss: 7.3823 - class_loss: 1.5054 - box_loss: 5876.8710 - class_acc: 0.7078 - box_acc: 0.2747 - val_loss: 7.9123 - val_class_loss: 2.1349 - val_box_loss: 5777.3507 - val_class_acc: 0.2154 - val_box_acc: 0.2420
Epoch 30/50
12s - loss: 7.3833 - class_loss: 1.5065 - box_loss: 5876.7657 - class_acc: 0.7041 - box_acc: 0.2744 - val_loss: 7.9080 - val_class_loss: 2.1296 - val_box_loss: 5778.3712 - val_class_acc: 0.2168 - val_box_acc: 0.2473
Epoch 31/50
11s - loss: 7.3783 - class_loss: 1.5016 - box_loss: 5876.7030 - class_acc: 0.7111 - box_acc: 0.2747 - val_loss: 7.9049 - val_class_loss: 2.1258 - val_box_loss: 5779.0690 - val_class_acc: 0.2247 - val_box_acc: 0.2540
Epoch 32/50
12s - loss: 7.3760 - class_loss: 1.4993 - box_loss: 5876.7084 - class_acc: 0.7061 - box_acc: 0.2674 - val_loss: 7.9134 - val_class_loss: 2.1354 - val_box_loss: 5777.9656 - val_class_acc: 0.2168 - val_box_acc: 0.2407
Epoch 33/50
11s - loss: 7.3730 - class_loss: 1.4964 - box_loss: 5876.6351 - class_acc: 0.7117 - box_acc: 0.2714 - val_loss: 7.9110 - val_class_loss: 2.1326 - val_box_loss: 5778.3908 - val_class_acc: 0.2181 - val_box_acc: 0.2460
Epoch 34/50
11s - loss: 7.3686 - class_loss: 1.4920 - box_loss: 5876.5847 - class_acc: 0.7078 - box_acc: 0.2737 - val_loss: 7.9046 - val_class_loss: 2.1251 - val_box_loss: 5779.5100 - val_class_acc: 0.2234 - val_box_acc: 0.2327
Epoch 35/50
11s - loss: 7.3685 - class_loss: 1.4920 - box_loss: 5876.5400 - class_acc: 0.7124 - box_acc: 0.2704 - val_loss: 7.8963 - val_class_loss: 2.1174 - val_box_loss: 5778.9520 - val_class_acc: 0.2314 - val_box_acc: 0.2340
Epoch 36/50
10s - loss: 7.3675 - class_loss: 1.4909 - box_loss: 5876.5216 - class_acc: 0.7071 - box_acc: 0.2734 - val_loss: 7.9050 - val_class_loss: 2.1257 - val_box_loss: 5779.3316 - val_class_acc: 0.2234 - val_box_acc: 0.2500
Epoch 37/50
10s - loss: 7.3629 - class_loss: 1.4865 - box_loss: 5876.3815 - class_acc: 0.7147 - box_acc: 0.2714 - val_loss: 7.8849 - val_class_loss: 2.1042 - val_box_loss: 5780.7195 - val_class_acc: 0.2407 - val_box_acc: 0.2434
Epoch 38/50
10s - loss: 7.3638 - class_loss: 1.4875 - box_loss: 5876.3696 - class_acc: 0.7150 - box_acc: 0.2717 - val_loss: 7.9133 - val_class_loss: 2.1373 - val_box_loss: 5775.9858 - val_class_acc: 0.2181 - val_box_acc: 0.2434
Epoch 39/50
10s - loss: 7.3599 - class_loss: 1.4836 - box_loss: 5876.3230 - class_acc: 0.7147 - box_acc: 0.2721 - val_loss: 7.8962 - val_class_loss: 2.1157 - val_box_loss: 5780.4590 - val_class_acc: 0.2420 - val_box_acc: 0.2434
Epoch 40/50
10s - loss: 7.3540 - class_loss: 1.4777 - box_loss: 5876.2577 - class_acc: 0.7220 - box_acc: 0.2711 - val_loss: 7.9238 - val_class_loss: 2.1471 - val_box_loss: 5776.6997 - val_class_acc: 0.2048 - val_box_acc: 0.2487
Epoch 41/50
10s - loss: 7.3534 - class_loss: 1.4772 - box_loss: 5876.1935 - class_acc: 0.7167 - box_acc: 0.2770 - val_loss: 7.8969 - val_class_loss: 2.1168 - val_box_loss: 5780.1268 - val_class_acc: 0.2247 - val_box_acc: 0.2434
Epoch 42/50
10s - loss: 7.3514 - class_loss: 1.4752 - box_loss: 5876.1586 - class_acc: 0.7134 - box_acc: 0.2737 - val_loss: 7.9024 - val_class_loss: 2.1225 - val_box_loss: 5779.8915 - val_class_acc: 0.2367 - val_box_acc: 0.2487
Epoch 43/50
10s - loss: 7.3498 - class_loss: 1.4738 - box_loss: 5876.0624 - class_acc: 0.7180 - box_acc: 0.2714 - val_loss: 7.9148 - val_class_loss: 2.1380 - val_box_loss: 5776.8075 - val_class_acc: 0.2274 - val_box_acc: 0.2553
Epoch 44/50
10s - loss: 7.3466 - class_loss: 1.4706 - box_loss: 5876.0543 - class_acc: 0.7286 - box_acc: 0.2767 - val_loss: 7.9060 - val_class_loss: 2.1277 - val_box_loss: 5778.2598 - val_class_acc: 0.2301 - val_box_acc: 0.2500
Epoch 45/50
11s - loss: 7.3456 - class_loss: 1.4696 - box_loss: 5876.0799 - class_acc: 0.7217 - box_acc: 0.2727 - val_loss: 7.8981 - val_class_loss: 2.1204 - val_box_loss: 5777.7342 - val_class_acc: 0.2394 - val_box_acc: 0.2420
Epoch 46/50
11s - loss: 7.3451 - class_loss: 1.4691 - box_loss: 5875.9383 - class_acc: 0.7217 - box_acc: 0.2734 - val_loss: 7.9001 - val_class_loss: 2.1212 - val_box_loss: 5778.8415 - val_class_acc: 0.2447 - val_box_acc: 0.2380
Epoch 47/50
10s - loss: 7.3370 - class_loss: 1.4611 - box_loss: 5875.8369 - class_acc: 0.7345 - box_acc: 0.2764 - val_loss: 7.8968 - val_class_loss: 2.1181 - val_box_loss: 5778.7160 - val_class_acc: 0.2447 - val_box_acc: 0.2434
Epoch 48/50
10s - loss: 7.3378 - class_loss: 1.4620 - box_loss: 5875.7889 - class_acc: 0.7336 - box_acc: 0.2707 - val_loss: 7.9004 - val_class_loss: 2.1219 - val_box_loss: 5778.5202 - val_class_acc: 0.2394 - val_box_acc: 0.2354
Epoch 49/50
12s - loss: 7.3326 - class_loss: 1.4568 - box_loss: 5875.7225 - class_acc: 0.7352 - box_acc: 0.2737 - val_loss: 7.8972 - val_class_loss: 2.1180 - val_box_loss: 5779.1113 - val_class_acc: 0.2487 - val_box_acc: 0.2434
Epoch 50/50
9s - loss: 7.3320 - class_loss: 1.4562 - box_loss: 5875.7083 - class_acc: 0.7349 - box_acc: 0.2707 - val_loss: 7.8993 - val_class_loss: 2.1213 - val_box_loss: 5778.0266 - val_class_acc: 0.2447 - val_box_acc: 0.2394
Out[42]:

Wow, 91% accuracy by just adding extra, related information.

In [ ]: