def load_my_data(data_path=None, ret_extras=False):
    if data_path is None:
        data_path = data_in

    cc = utils.loadmat(os.path.join(data_path, 'C_raw.mat'))
    nw = utils.loadmat(os.path.join(data_path, 'NW_raw.mat'))
    ne = utils.loadmat(os.path.join(data_path, 'NE_raw.mat'))
    se = utils.loadmat(os.path.join(data_path, 'SE_raw.mat'))
    sw = utils.loadmat(os.path.join(data_path, 'SW_raw.mat'))

    moorings = [cc, nw, ne, se, sw]

    for m in moorings:
        m['tdt'] = utils.datenum_to_datetime(m['t'])

    if ret_extras:
        dt_min = 15.
        extras = {
            "dt_min": dt_min,
            "dt_sec": dt_min*60.,
            "dt_day": dt_min/1440.,
            "N_per_day": 96,
            }
        return moorings, extras
    else:
        return moorings
def load_my_data_alt(data_path=None):
    if data_path is None:
        data_path = data_in

    ca = utils.loadmat(os.path.join(data_path, 'C_alt.mat'))
    cw = utils.loadmat(os.path.join(data_path, 'C_altw.mat'))

    ca['tdt'] = utils.datenum_to_datetime(ca['t'])
    cw['tdt'] = utils.datenum_to_datetime(cw['t'])

    return ca, cw
Ejemplo n.º 3
0
    def __getitem__(self, index):
        name = self.img_names[index]

        # LOAD IMG, POINT, and ROI
        image = imread(self.path + "/images/" + name)
        if image.ndim == 2:
            image = image[:, :, None].repeat(3, 2)
        pointList = ut.loadmat(self.path + "/ground-truth/GT_" +
                               name.replace(".jpg", "") + ".mat")
        pointList = pointList["image_info"][0][0][0][0][0]

        points = np.zeros(image.shape[:2], "uint8")[:, :, None]
        for x, y in pointList:
            points[int(y), int(x)] = 1

        counts = torch.LongTensor(np.array([pointList.shape[0]]))

        collection = list(map(FT.to_pil_image, [image, points]))
        if self.transform_function is not None:
            image, points = self.transform_function(collection)

        return {
            "images": image,
            "points": points,
            "counts": counts,
            "index": index,
            "image_path": self.path + "/images/" + name
        }
Ejemplo n.º 4
0
def return_datasets(filename):
    data = utils.loadmat('../data/{}'.format(filename))
    trainSet, testSet, valSet = 1, 2, 3

    x_train = reformat(data['x'][:, :, data['set'] == trainSet])
    y_train = (data['y'][data['set'] == trainSet])
    x_val = reformat(data['x'][:, :, data['set'] == valSet])
    y_val = (data['y'][data['set'] == valSet])
    x_test = reformat(data['x'][:, :, data['set'] == testSet])
    y_test = (data['y'][data['set'] == testSet])

    x_train, y_train = get_random_data(x_train, y_train, 0, x_train.shape[0],
                                       x_train.shape[0])
    x_val, y_val = get_random_data(x_val, y_val, 0, x_val.shape[0],
                                   x_val.shape[0])
    x_test, y_test = get_random_data(x_test, y_test, 0, x_test.shape[0],
                                     x_test.shape[0])

    return (x_train, y_train, x_val, y_val, x_test, y_test)
Ejemplo n.º 5
0
import scipy.io as io
import utils
import TKED as tked
import gsw
import seawater
from oceans.sw_extras import gamma_GP_from_SP_pt
import utm
import mixsea as mx

data_in = "../raw_data"

glob1 = glob.glob(os.path.join(data_in, "sp14-towyo-*"))
glob2 = glob.glob(os.path.join(data_in, "rr1209_gridded_towyo*"))
towyo_files = np.sort(np.hstack((glob1, glob2)))

TOWYOs = [utils.loadmat(file)["tm"] for file in towyo_files]

# %%
# Sill lat boundaries (very roughly)

P5_lat = -8.5  # Greater than this
P2_lat = -9.5  # Less than this
# P4 is between these

# Reprocessing parameters
acc = 5e-4
R0 = 0.25
save_dir = "../proc_data"
Nsq_method = "bulk"
c1 = 0.9  # The coefficient that multiplies the Thorpe scales... e.g. 0.64, 0.9
sig4b = 1045.9  # The potential density used in the buoyancy estimate
############### PRELIMINARIES ################
# Parse command line arguments
args = clargs.parse_check_args()

sdroot = args.save

files = utils.find_files(args, "sep2018kayak")

params = utils.load_parameters()

print("Loading data may trigger Dropbox download!")

############### LOAD DATA ################
print("Loading kayak data.")
kayak = utils.loadmat(files.kayak, check_arrays=True)
adcps = kayak["adcp"]
ctds = kayak["ctd"]
secs = kayak["xsec"]

############### CTD ################
print("Processing CTD")
ctd_depth_min = params.kayak.ctd_depth_min
ctd_depth_max = params.kayak.ctd_depth_max
ctd_depth_spacing = params.kayak.ctd_depth_spacing

ctd_datasets = []
sec_tstart = []
sec_tend = []
npfls = []
Ejemplo n.º 7
0
# %%
import xarray as xr
import matplotlib.pyplot as plt
import numpy as np
import munch
import utils
import glob

# %% [markdown]
# Load data.

# %%
# Towyos separate
data_files = glob.glob("../proc_data/TY*.mat")
TYs = np.asarray([munch.munchify(utils.loadmat(file)) for file in data_files])
P5TYs = [TY for TY in TYs if ((TY.sill == "P5") and (TY.year == 2014))]
# Bathymetry
bathy = xr.open_dataset("../raw_data/merged_200_-171.5_-167.5_-11_-6.5.nc")
bathyP5 = bathy.isel(lon=(bathy.lon < -168.5) & (bathy.lon > -168.8),
                     lat=(bathy.lat > -8.3) & (bathy.lat < -7.9))
# Towyos together
ds = xr.open_dataset("../proc_data/stacked_towyos.nc")
ds

# %% [markdown]
# Single layer Froude number,
#
# \begin{equation}
# Fr = \frac{U}{\sqrt{g'h}},
# \end{equation}
Ejemplo n.º 8
0
############### PRELIMINARIES ################
# Parse command line arguments
args = clargs.parse_check_args()

sdroot = args.save

files = utils.find_files(args, "sep2018")

params = utils.load_parameters()

print("Loading data may trigger Dropbox download!")

############### LOAD DATA ################
print("Loading sections.")
secs = utils.loadmat(files.vmp_sections, check_arrays=True,
                     mat_dtype=True)["vmp"]
secs = np.array([munchify(ds) for ds in secs])
print("Loading VMP.")
ds = utils.loadmat(files.vmp, check_arrays=True, mat_dtype=True)
vmp = munchify(ds["vmp"])
gps = munchify(ds["gps"])
print("Loading SADCP.")
sadcp = munchify(mat73.loadmat(files.sadcp)["adcp"])

############### CTD ################
print("Processing CTD")
bin_width = params.ctd.adiabatic_level_bin_width
depth_min = params.ctd.depth_min
depth_max = params.ctd.depth_max
depth_spacing = params.ctd.depth_spacing
Ejemplo n.º 9
0
############### PRELIMINARIES ################
# Parse command line arguments
args = clargs.parse_check_args()

sdroot = args.save

files = utils.find_files(args, "aug2016")

params = utils.load_parameters()

print("Loading data may trigger Dropbox download!")

############### CTD ################
print("Loading CTD")
ctds = utils.loadmat(files.ctd, check_arrays=True, mat_dtype=True)["ctd"]
ctds = [munchify(ctd) for ctd in ctds]
print("Processing CTD")
bin_width = params.ctd.adiabatic_level_bin_width
depth_min = params.ctd.depth_min
depth_max = params.ctd.depth_max
depth_spacing = params.ctd.depth_spacing

ctd = CTD.generate_CTD_Munch_from_list(ctds,
                                       depth_min=depth_min,
                                       depth_max=depth_max,
                                       depth_spacing=depth_spacing)

ctd = CTD.apply_thermodynamics(ctd)

ctd = CTD.apply_adiabatic_level(ctd, bin_width)
save_figs = True

pdd = "../data"
fsd = "../figures"
data_in = pdd

moorings = load_data.load_my_data()
ca, cw = load_data.load_my_data_alt()
ca = munch.munchify(ca)
cw = munch.munchify(cw)

moorings = [munch.munchify(m) for m in moorings]

cc, nw, ne, se, sw = moorings

VMP = utils.loadmat(os.path.join(data_in, "VMP.mat"))
VMP = munch.munchify(VMP)

# %% [markdown]
# ## Total flux full time series cumulative

# %%
rho0 = 1025.0
m = ca
#####################################

fig = plt.figure(figsize=(6.5, 4.5))
gs = GridSpec(ca.N_levels * 2, 2, width_ratios=[5, 1], hspace=0.1, wspace=0.06)
axs = [plt.subplot(gs[i * 2 : (i + 1) * 2, 0]) for i in range(ca.N_levels)]
axp = plt.subplot(gs[:, 1])
axp.yaxis.set_ticks_position("right")
Ejemplo n.º 11
0
def main():
    # root_dir for the files
    root_dir = '../../data/AVA/files/'

    # Erase previous models from GPU memory
    K.clear_session()

    # Load list of action classes and separate them (from utils_stream)
    classes = utils.get_AVA_classes(root_dir + 'ava_action_list_custom.csv')

    # Parameters for training (batch size 32 is supposed to be the best?)
    params = {
        'dim': (224, 224),
        'batch_size': 64,
        'n_classes': len(classes['label_id']),
        'n_channels': 10,
        'nb_epochs': 157,
        'model': "inceptionv3",
        'email': True,
        'freeze_all': True,
        'conv_fusion': False,
        'train_chunk_size': 2**10,
        'validation_chunk_size': 2**10
    }
    minValLoss = 9999990.0
    soft_sigmoid = True
    warp = False  # TODO Use warped (camera motion corrected) flow or not
    crop = False  # TODO Use crop flow or not
    encoding = "rgb"  # TODO Are flows stored as rgb or as 2 grayscales

    # Get ID's and labels from the actual dataset
    partition = {}
    partition['train'] = get_AVA_set(
        classes=classes,
        filename=root_dir + "AVA_Train_Custom_Corrected.csv",
        soft_sigmoid=soft_sigmoid)  # IDs for training
    partition['validation'] = get_AVA_set(
        classes=classes,
        filename=root_dir + "AVA_Val_Custom_Corrected.csv",
        soft_sigmoid=soft_sigmoid)  # IDs for validation

    # Labels
    labels_train = get_AVA_labels(classes,
                                  partition,
                                  "train",
                                  filename=root_dir +
                                  "AVA_Train_Custom_Corrected.csv",
                                  soft_sigmoid=soft_sigmoid)
    labels_val = get_AVA_labels(classes,
                                partition,
                                "validation",
                                filename=root_dir +
                                "AVA_Val_Custom_Corrected.csv",
                                soft_sigmoid=soft_sigmoid)

    # Create + compile model, load saved weights if they exist
    # saved_weights = "saved_models/RGB_Stream_Softmax_inceptionv3.hdf5"
    saved_weights = "../models/flow_kineticsinit_inceptionv3_1808282350.hdf5"
    ucf_weights = "../models/ucf_keras/keras-ucf101-TVL1flow-" + params[
        'model'] + "-newsplit.hdf5"  # Outdated model
    # ucf_weights = None

    # ucf_weights = None
    model, keras_layer_names = flow_create_model(
        classes=classes['label_id'],
        model_name=params['model'],
        soft_sigmoid=soft_sigmoid,
        image_shape=(224, 224),
        opt_flow_len=10,
        freeze_all=params['freeze_all'],
        conv_fusion=params['conv_fusion'])
    model = compile_model(model, soft_sigmoid=soft_sigmoid)

    # TODO Experiment: 1. no initialization, 2. ucf initialization 3. kinetics initialization
    initialization = True  # Set to True to use initialization
    kinetics_weights = None
    ucf_weights = ""

    if saved_weights is not None:
        model.load_weights(saved_weights)
    else:
        if initialization is True:
            if kinetics_weights is None:
                if params['model'] == "inceptionv3":
                    print("Loading kinetics weights: ")
                    keras_weights = [
                        "../models/kinetics_keras/tsn_flow_params_names.pkl",
                        "../models/kinetics_keras/tsn_flow_params.pkl"
                    ]
                    utils.convert_inceptionv3(model, keras_weights,
                                              keras_layer_names)
                    model.save(
                        "../models/kinetics_keras/keras-kinetics-flow-inceptionv3.hdf5"
                    )

            if ucf_weights is None:
                print("Loading UCF weights: ")
                if params['model'] == "resnet50":
                    # TODO Better initialization, average UCF models overt he 3 splits provided
                    ucf_weights = utils.loadmat(
                        "../models/ucf_matconvnet/ucf101-TVL1flow-resnet-50-split1.mat"
                    )
                    utils.convert_resnet(model, ucf_weights)
                    model.save(
                        "../models/ucf_keras/keras-ucf101-TVL1flow-resnet50-newsplit.hdf5"
                    )
            else:
                if ucf_weights != "":
                    model.load_weights(ucf_weights)

    # Try to train on more than 1 GPU if possible
    # try:
    #    print("Trying MULTI-GPU")
    #    model = multi_gpu_model(model)
    print("Training set size: " + str(len(partition['train'])))

    # Load first train_size of partition{'train'}
    train_splits = utils.make_chunks(original_list=partition['train'],
                                     size=len(partition['train']),
                                     chunk_size=params['train_chunk_size'])
    val_splits = utils.make_chunks(original_list=partition['validation'],
                                   size=len(partition['validation']),
                                   chunk_size=params['validation_chunk_size'])

    time_str = time.strftime("%y%m%d%H%M", time.localtime())
    if crop is True:
        bestModelPath = "../models/flowcrop_" + params[
            'model'] + "_" + time_str + ".hdf5"
        traincsvPath = "../loss_acc_plots/flowcrop_customcsv_train_plot_" + params[
            'model'] + "_" + time_str + ".csv"
        valcsvPath = "../loss_acc_plots/flowcrop_customcsv_val_plot_" + params[
            'model'] + "_" + time_str + ".csv"
    else:
        if warp is True:
            bestModelPath = "../models/flow_warp_" + params[
                'model'] + "_" + time_str + ".hdf5"
            traincsvPath = "../loss_acc_plots/flow_warp_customcsv_train_plot_" + params[
                'model'] + "_" + time_str + ".csv"
            valcsvPath = "../loss_acc_plots/flow_warp_customcsv_val_plot_" + params[
                'model'] + "_" + time_str + ".csv"
        else:
            bestModelPath = "../models/flow_kineticsinit_" + params[
                'model'] + "_" + time_str + ".hdf5"
            traincsvPath = "../loss_acc_plots/flow_kineticsinit_customcsv_train_plot_" + params[
                'model'] + "_" + time_str + ".csv"
            valcsvPath = "../loss_acc_plots/flow_kineticsinit_customcsv_val_plot_" + params[
                'model'] + "_" + time_str + ".csv"
    first_epoch = True

    with tf.device('/gpu:0'):  # TODO Multi GPU
        for epoch in range(params['nb_epochs']):
            epoch_chunks_count = 0
            if epoch > 0:
                first_epoch = False
            for trainIDS in train_splits:
                start_time = timeit.default_timer()
                # -----------------------------------------------------------
                x_val = y_val_pose = y_val_object = y_val_human = x_train = y_train_pose = y_train_object = y_train_human = None
                x_train, y_train_pose, y_train_object, y_train_human = load_split(
                    trainIDS,
                    labels_train,
                    params['dim'],
                    params['n_channels'],
                    "train",
                    5,
                    first_epoch,
                    encoding=encoding,
                    soft_sigmoid=soft_sigmoid,
                    crop=True)

                y_t = []
                y_t.append(
                    to_categorical(y_train_pose,
                                   num_classes=utils.POSE_CLASSES))
                y_t.append(
                    utils.to_binary_vector(y_train_object,
                                           size=utils.OBJ_HUMAN_CLASSES,
                                           labeltype='object-human'))
                y_t.append(
                    utils.to_binary_vector(y_train_human,
                                           size=utils.HUMAN_HUMAN_CLASSES,
                                           labeltype='human-human'))
                history = model.fit(x_train,
                                    y_t,
                                    batch_size=params['batch_size'],
                                    epochs=1,
                                    verbose=0)
                utils.learning_rate_schedule(model, epoch, params['nb_epochs'])
                # ------------------------------------------------------------
                elapsed = timeit.default_timer() - start_time

                print("Epoch " + str(epoch) + " chunk " +
                      str(epoch_chunks_count) + " (" + str(elapsed) +
                      ") acc[pose,obj,human] = [" +
                      str(history.history['pred_pose_categorical_accuracy']) +
                      "," +
                      str(history.
                          history['pred_obj_human_categorical_accuracy']) +
                      "," +
                      str(history.
                          history['pred_human_human_categorical_accuracy']) +
                      "] loss: " + str(history.history['loss']))
                with open(traincsvPath, 'a') as f:
                    writer = csv.writer(f)
                    avg_acc = (
                        history.history['pred_pose_categorical_accuracy'][0] +
                        history.history['pred_obj_human_categorical_accuracy']
                        [0] + history.history[
                            'pred_human_human_categorical_accuracy'][0]) / 3
                    writer.writerow([
                        str(avg_acc),
                        history.history['pred_pose_categorical_accuracy'],
                        history.history['pred_obj_human_categorical_accuracy'],
                        history.
                        history['pred_human_human_categorical_accuracy'],
                        history.history['loss']
                    ])

                epoch_chunks_count += 1
            # Load val_data
            print("Validating data: ")
            loss_acc_list = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
            for valIDS in val_splits:
                x_val = y_val_pose = y_val_object = y_val_human = x_train = y_train_pose = y_train_object = y_train_human = None
                x_val, y_val_pose, y_val_object, y_val_human = load_split(
                    valIDS,
                    labels_val,
                    params['dim'],
                    params['n_channels'],
                    "val",
                    5,
                    first_epoch,
                    encoding=encoding,
                    soft_sigmoid=soft_sigmoid,
                    crop=True)

                y_v = []
                y_v.append(
                    to_categorical(y_val_pose, num_classes=utils.POSE_CLASSES))
                y_v.append(
                    utils.to_binary_vector(y_val_object,
                                           size=utils.OBJ_HUMAN_CLASSES,
                                           labeltype='object-human'))
                y_v.append(
                    utils.to_binary_vector(y_val_human,
                                           size=utils.HUMAN_HUMAN_CLASSES,
                                           labeltype='human-human'))
                vglobal_loss, vpose_loss, vobject_loss, vhuman_loss, vpose_acc, vobject_acc, vhuman_acc = model.evaluate(
                    x_val, y_v, batch_size=params['batch_size'])
                loss_acc_list[0] += vglobal_loss
                loss_acc_list[1] += vpose_loss
                loss_acc_list[2] += vobject_loss
                loss_acc_list[3] += vhuman_loss
                loss_acc_list[4] += vpose_acc
                loss_acc_list[5] += vobject_acc
                loss_acc_list[6] += vhuman_acc
            loss_acc_list = [x / len(val_splits) for x in loss_acc_list]
            with open(valcsvPath, 'a') as f:
                writer = csv.writer(f)
                acc = (loss_acc_list[4] + loss_acc_list[5] +
                       loss_acc_list[6]) / 3
                writer.writerow([
                    str(acc), loss_acc_list[4], loss_acc_list[5],
                    loss_acc_list[6], loss_acc_list[0], loss_acc_list[1],
                    loss_acc_list[2], loss_acc_list[3]
                ])
            if loss_acc_list[0] < minValLoss:
                print("New best loss " + str(loss_acc_list[0]))
                model.save(bestModelPath)
                minValLoss = loss_acc_list[0]

    if params['email']:
        utils.sendemail(from_addr='*****@*****.**',
                        to_addr_list=['*****@*****.**'],
                        subject='Finished training OF-stream ',
                        message='Training OF with following params: ' +
                        str(params),
                        login='******',
                        password='******')
import numpy as np
import scipy.io as io
import utils
import TKED as tked
import gsw
import seawater
from oceans.sw_extras import gamma_GP_from_SP_pt

M_dir = '../raw_data/m*_original_data.mat'
Mmoorings_paths = np.sort(glob.glob(M_dir))
P_dir = '../raw_data/p*_original_data.mat'
Pmoorings_paths = np.sort(glob.glob(P_dir))
T_dir = '../raw_data/t*_original_data.mat'
Tmoorings_paths = np.sort(glob.glob(T_dir))

Mmoorings = [utils.loadmat(file) for file in Mmoorings_paths]
Pmoorings = [utils.loadmat(file) for file in Pmoorings_paths]
Tmoorings = [utils.loadmat(file) for file in Tmoorings_paths]
for array in [Mmoorings, Pmoorings, Tmoorings]:
    for i, m in enumerate(array):
        keys = m.keys()
        k = [k for k in keys if '__' not in k][0]
        array[i] = m[k]

MMPs = [Mmoorings[4]['mp'], Mmoorings[5]['mp']]
PMPs = [m['mp'] for m in Pmoorings if m['name'] != 'P2']
TMPs = [m['mp'] for m in Tmoorings]
MPs = MMPs + PMPs + TMPs

altMPs = utils.loadmat('../raw_data/sp_process_moorings_mp.mat',
                       check_arrays=True)['mp']
Ejemplo n.º 13
0
# %% [markdown]
# # Low mode phase speed
#
# The analysis is performed in matlab 'low_mode_criticality_all.m'.

# %%
import xarray as xr
import matplotlib.pyplot as plt
import numpy as np
import munch
import utils
import glob

# %%
# Matlab analysis
dm = utils.loadmat("../proc_data/TG_phase_speed.mat")
angles = dm["angles"]
cp_us = dm["cp_us"]
cp_ds = dm["cp_ds"]
# Towyos separate
data_files = glob.glob("../proc_data/TY*.mat")
TYs = np.asarray([munch.munchify(utils.loadmat(file)) for file in data_files])
P5TYs = [TY for TY in TYs if ((TY.sill == "P5") and (TY.year == 2014))]
# Bathymetry
bathy = xr.open_dataset("../raw_data/merged_200_-171.5_-167.5_-11_-6.5.nc")
bathyP5 = bathy.isel(lon=(bathy.lon < -168.5) & (bathy.lon > -168.8),
                     lat=(bathy.lat > -8.3) & (bathy.lat < -7.9))
# Towyos together
ds = xr.open_dataset("../proc_data/stacked_towyos.nc")
ds
Ejemplo n.º 14
0
# Parse command line arguments
args = clargs.parse_check_args()

sdroot = args.save

files = utils.find_files(args, "sep2018moorings")

params = utils.load_parameters()

print("Loading data may trigger Dropbox download!")

############### COMBINE ################
print("Combining ADCP and CTD datasets")
print("Loading ADCP data")
adcp = munchify(
    utils.loadmat(files.deep_adcp, check_arrays=True, mat_dtype=True)["V"])
print("Loading CTD data")
ctd = munchify(
    utils.loadmat(files.deep_ctd, check_arrays=True,
                  mat_dtype=True)["mooring"])
print("Loading coordinates")
coords = munchify(
    utils.loadmat(files.coords, check_arrays=True,
                  mat_dtype=True)["mooringCoord"])

rho0 = 1025.
g = 9.81

ctd.p = np.flipud(ctd.pop("P"))
ctd.lon = coords.moorD[1]
ctd.lat = coords.moorD[0]
Ejemplo n.º 15
0
def main():
    # root_dir = '../../../AVA2.1/' # root_dir for the files
    root_dir = '../../data/AVA/files/'

    # Erase previous models from GPU memory
    K.clear_session()

    # Load list of action classes and separate them
    classes = utils.get_AVA_classes(root_dir + 'ava_action_list_custom.csv')

    # Parameters for training
    params = {
        'dim': (224, 224),
        'batch_size': 32,
        'n_classes': len(classes['label_id']),
        'n_channels': 3,
        'shuffle': False,
        'nb_epochs': 200,
        'model': 'inceptionv3',
        'email': True,
        'freeze_all': True,
        'conv_fusion': False,
        'train_chunk_size': 2**12,
        'validation_chunk_size': 2**12
    }
    soft_sigmoid = True
    minValLoss = 9999990.0

    # Get ID's and labels from the actual dataset
    partition = {}
    partition['train'] = get_AVA_set(
        classes=classes,
        filename=root_dir + "AVA_Train_Custom_Corrected.csv",
        soft_sigmoid=soft_sigmoid)  # IDs for training
    partition['validation'] = get_AVA_set(
        classes=classes,
        filename=root_dir + "AVA_Val_Custom_Corrected.csv",
        soft_sigmoid=soft_sigmoid)  # IDs for validation

    # Labels
    labels_train = get_AVA_labels(classes,
                                  partition,
                                  "train",
                                  filename=root_dir +
                                  "AVA_Train_Custom_Corrected.csv",
                                  soft_sigmoid=soft_sigmoid)
    labels_val = get_AVA_labels(classes,
                                partition,
                                "validation",
                                filename=root_dir +
                                "AVA_Val_Custom_Corrected.csv",
                                soft_sigmoid=soft_sigmoid)

    # Create + compile model, load saved weights if they exist
    saved_weights = None
    # saved_weights = "../models/rgbextra_gauss_resnet50_1807250030.hdf5"
    model, keras_layer_names = rgb_create_model(
        classes=classes['label_id'],
        soft_sigmoid=soft_sigmoid,
        model_name=params['model'],
        freeze_all=params['freeze_all'],
        conv_fusion=params['conv_fusion'])
    model = compile_model(model, soft_sigmoid=soft_sigmoid)

    # TODO Experiment: 1. no initialization, 2. ucf initialization 3. kinetics initialization
    initialization = True  # Set to True to use initialization
    kinetics_weights = None
    ucf_weights = "a"

    if saved_weights is not None:
        model.load_weights(saved_weights)
    else:
        if initialization is True:
            if ucf_weights is None:
                print("Loading MConvNet weights: ")
                if params['model'] == "resnet50":
                    ucf_weights = utils.loadmat(
                        "../models/ucf_matconvnet/ucf101-img-resnet-50-split1.mat"
                    )
                    utils.convert_resnet(model, ucf_weights)
                    model.save(
                        "../models/ucf_keras/keras-ucf101-rgb-resnet50-newsplit.hdf5"
                    )
            if kinetics_weights is None:
                if params['model'] == "inceptionv3":
                    print("Loading Keras weights: ")
                    keras_weights = [
                        "../models/kinetics_keras/tsn_rgb_params_names.pkl",
                        "../models/kinetics_keras/tsn_rgb_params.pkl"
                    ]
                    utils.convert_inceptionv3(model, keras_weights,
                                              keras_layer_names)
                    model.save(
                        "../models/kinetics_keras/keras-kinetics-rgb-inceptionv3.hdf5"
                    )
    # Try to train on more than 1 GPU if    possible
    # try:
    #    print("Trying MULTI-GPU")
    #    model = multi_gpu_model(model)

    print("Training set size: " + str(len(partition['train'])))

    # Make spltis
    train_splits = utils.make_chunks(original_list=partition['train'],
                                     size=len(partition['train']),
                                     chunk_size=params['train_chunk_size'])
    val_splits = utils.make_chunks(original_list=partition['validation'],
                                   size=len(partition['validation']),
                                   chunk_size=params['validation_chunk_size'])

    time_str = time.strftime("%y%m%d%H%M", time.localtime())

    # TODO Don't forget to change your names :)
    filter_type = "gauss"
    bestModelPath = "../models/rgb_kininit_" + filter_type + \
        "_" + params['model'] + "_" + time_str + ".hdf5"
    traincsvPath = "../loss_acc_plots/rgb_kininit_train_" + filter_type + \
        "_plot_" + params['model'] + "_" + time_str + ".csv"
    valcsvPath = "../loss_acc_plots/rgb_kininit_val_" + filter_type + \
        "_plot_" + params['model'] + "_" + time_str + ".csv"

    with tf.device('/gpu:0'):  # NOTE Not using multi gpu
        for epoch in range(params['nb_epochs']):
            epoch_chunks_count = 0
            for trainIDS in train_splits:
                # Load and train
                start_time = timeit.default_timer()
                # -----------------------------------------------------------
                x_val = y_val_pose = y_val_object = y_val_human = x_train = y_train_pose = y_train_object = y_train_human = None
                x_train, y_train_pose, y_train_object, y_train_human = load_split(
                    trainIDS,
                    labels_train,
                    params['dim'],
                    params['n_channels'],
                    "train",
                    filter_type,
                    soft_sigmoid=soft_sigmoid)

                y_t = []
                y_t.append(
                    to_categorical(y_train_pose,
                                   num_classes=utils.POSE_CLASSES))
                y_t.append(
                    utils.to_binary_vector(y_train_object,
                                           size=utils.OBJ_HUMAN_CLASSES,
                                           labeltype='object-human'))
                y_t.append(
                    utils.to_binary_vector(y_train_human,
                                           size=utils.HUMAN_HUMAN_CLASSES,
                                           labeltype='human-human'))

                history = model.fit(x_train,
                                    y_t,
                                    batch_size=params['batch_size'],
                                    epochs=1,
                                    verbose=0)
                utils.learning_rate_schedule(model, epoch, params['nb_epochs'])

                # TODO Repeat samples of unrepresented classes?

                # ------------------------------------------------------------
                elapsed = timeit.default_timer() - start_time

                print("Epoch " + str(epoch) + " chunk " +
                      str(epoch_chunks_count) + " (" + str(elapsed) +
                      ") acc[pose,obj,human] = [" +
                      str(history.history['pred_pose_categorical_accuracy']) +
                      "," +
                      str(history.
                          history['pred_obj_human_categorical_accuracy']) +
                      "," +
                      str(history.
                          history['pred_human_human_categorical_accuracy']) +
                      "] loss: " + str(history.history['loss']))
                with open(traincsvPath, 'a') as f:
                    writer = csv.writer(f)
                    avg_acc = (
                        history.history['pred_pose_categorical_accuracy'][0] +
                        history.history['pred_obj_human_categorical_accuracy']
                        [0] + history.history[
                            'pred_human_human_categorical_accuracy'][0]) / 3
                    writer.writerow([
                        str(avg_acc),
                        history.history['pred_pose_categorical_accuracy'],
                        history.history['pred_obj_human_categorical_accuracy'],
                        history.
                        history['pred_human_human_categorical_accuracy'],
                        history.history['loss']
                    ])
                epoch_chunks_count += 1
            # Load val_data
            print("Validating data: ")
            # global_loss, pose_loss, object_loss, human_loss, pose_acc, object_acc, human_acc
            loss_acc_list = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
            for valIDS in val_splits:
                x_val = y_val_pose = y_val_object = y_val_human = x_train = y_train_pose = y_train_object = y_train_human = None
                x_val, y_val_pose, y_val_object, y_val_human = load_split(
                    valIDS,
                    labels_val,
                    params['dim'],
                    params['n_channels'],
                    "val",
                    filter_type,
                    soft_sigmoid=soft_sigmoid)
                y_v = []
                y_v.append(
                    to_categorical(y_val_pose, num_classes=utils.POSE_CLASSES))
                y_v.append(
                    utils.to_binary_vector(y_val_object,
                                           size=utils.OBJ_HUMAN_CLASSES,
                                           labeltype='object-human'))
                y_v.append(
                    utils.to_binary_vector(y_val_human,
                                           size=utils.HUMAN_HUMAN_CLASSES,
                                           labeltype='human-human'))

                vglobal_loss, vpose_loss, vobject_loss, vhuman_loss, vpose_acc, vobject_acc, vhuman_acc = model.evaluate(
                    x_val, y_v, batch_size=params['batch_size'])
                loss_acc_list[0] += vglobal_loss
                loss_acc_list[1] += vpose_loss
                loss_acc_list[2] += vobject_loss
                loss_acc_list[3] += vhuman_loss
                loss_acc_list[4] += vpose_acc
                loss_acc_list[5] += vobject_acc

                loss_acc_list[6] += vhuman_acc
            # Average over all validation chunks
            loss_acc_list = [x / len(val_splits) for x in loss_acc_list]
            with open(valcsvPath, 'a') as f:
                writer = csv.writer(f)
                # We consider accuracy as the average accuracy over the three
                # types of accuracy
                acc = (loss_acc_list[4] + loss_acc_list[5] +
                       loss_acc_list[6]) / 3
                writer.writerow([
                    str(acc), loss_acc_list[4], loss_acc_list[5],
                    loss_acc_list[6], loss_acc_list[0], loss_acc_list[1],
                    loss_acc_list[2], loss_acc_list[3]
                ])
            if loss_acc_list[0] < minValLoss:
                print("New best loss " + str(loss_acc_list[0]))
                model.save(bestModelPath)
                minValLoss = loss_acc_list[0]

    if params['email']:
        utils.sendemail(from_addr='*****@*****.**',
                        to_addr_list=['*****@*****.**'],
                        subject='Finished training RGB-stream ',
                        message='Training RGB with following params: ' +
                        str(params),
                        login='******',
                        password='******')
# Tidal frequencies (cpd)
M2 = 24.0 / 12.4206012
S2 = 24.0 / 12.0
K1 = 24.0 / 23.93447213

moorings = load_data.load_my_data()
ca, cw = load_data.load_my_data_alt()
ca = munch.munchify(ca)
cw = munch.munchify(cw)

moorings = [munch.munchify(m) for m in moorings]

cc, nw, ne, se, sw = moorings

ADCP = utils.loadmat(os.path.join(data_in, "ADCP.mat"))
ADCP = munch.munchify(ADCP)

topo = utils.loadmat(os.path.join(data_in, "topo_info.mat"))
topo = munch.munchify(topo)

VMP = utils.loadmat(os.path.expanduser("../data/jc054_vmp_cleaned.mat"))["d"]
VMP = munch.munchify(VMP)

alt_file = os.path.expanduser(
    "../data/dataset-duacs-rep-global-merged-allsat-phy-l4-v3_1514910227973.nc"
)
alt = xr.open_dataset(alt_file)

# %% [markdown]
# ## Map
    mm = (60 * (hh % 1)).astype(int)
    hh = np.floor(hh).astype(int)
    w[:, i] = W / 100
    dates = []
    for j in range(len(YY)):
        dates.append(datetime.datetime(YY[j], MM[j], DD[j], hh[j], mm[j]))
    dates = np.asarray(dates)
    datenum[:, i] = utils.datetime_to_datenum(dates)

idx_start = np.searchsorted(datenum[:, 0], t_start)
w = w[idx_start:idx_start + max_len]

# Start prepping raw data from the mat file.
print("Loading raw data file.")
data_path = os.path.join(data_in, raw_data_file)
ds = utils.loadmat(data_path)

cc = ds.pop("c")
nw = ds.pop("nw")
ne = ds.pop("ne")
se = ds.pop("se")
sw = ds.pop("sw")

cc["id"] = "cc"
nw["id"] = "nw"
ne["id"] = "ne"
se["id"] = "se"
sw["id"] = "sw"

moorings = [cc, nw, ne, se, sw]
Ejemplo n.º 18
0
import utils

############### PRELIMINARIES ################
# Parse command line arguments
args = clargs.parse_check_args()

sdroot = args.save

files = utils.find_files(args, "bathymetry")

params = utils.load_parameters()

############### LOAD DATA ################
print("Loading data. (---> This may trigger Dropbox download <---)")
print("Loading September 2018 bathymetry.")
b18 = munchify(utils.loadmat(files.sep2018, check_arrays=True, mat_dtype=True)["bathy"])
print("Loading September 2017 bathymetry.")
b17 = munchify(utils.loadmat(files.sep2017, check_arrays=True, mat_dtype=True)["bathy"])
print("Loading August 2016 bathymetry.")
b16 = munchify(utils.loadmat(files.aug2016, check_arrays=True, mat_dtype=True)["bathy"])

############### SEP 2018 ################
print("Processing September 2018.")
datavars = {
    "H": (["lat", "lon"], b18.z, {"Variable": "Bottom depth"}),
}

coords = {
    "lon": (["lon"], b18.lon),
    "lat": (["lat"], b18.lat),
    "x": (["lat", "lon"], b18.x, {"Variable": "UTM zonal distance"}),
Ejemplo n.º 19
0
def maybe_preprocess(config, data_path, sample_path=None):
    if config.max_synthetic_num < 0:
        max_synthetic_num = None
    else:
        max_synthetic_num = config.max_synthetic_num

    # MPIIGaze dataset(real data)
    base_path = os.path.join(
        data_path, '{}/Data/Normalized'.format(config.real_image_dir))
    npz_path = os.path.join(data_path, DATA_FNAME)

    if not os.path.exists(npz_path):
        mat_paths = []
        for root, dirnames, filenames in os.walk(base_path):
            for filename in fnmatch.filter(filenames, '*.mat'):
                mat_paths.append(os.path.join(root, filename))

        print("[*] Preprocessing real `gaze` data...")

        real_images = []
        for mat_path in tqdm(mat_paths):
            mat = loadmat(mat_path)
            # Left eye (batch_size, height, width)
            real_images.extend(mat['data'][0][0][0][0][0][1])
            # Right eye
            real_images.extend(mat['data'][0][0][1][0][0][1])

        #join a sequence of arrays along a new axis
        real_data = np.stack(real_images, axis=0)
        #save several arrays into a single file in uncompressed .npz format
        np.savez(npz_path, real=real_data)

    #====================End of processing real images================================

    # UnityEyes dataset(synthetic data)
    synthetic_image_path_candidates = [
        config.synthetic_image_dir,
        os.path.join(data_path, config.synthetic_image_dir),
    ]
    for synthetic_image_path in synthetic_image_path_candidates:
        #glob module finds all the pathnames matching a specified pattern according to
        #the rules used by the Unix shell
        jpg_paths = glob(os.path.join(synthetic_image_path, '*.jpg'))
        cropped_jpg_paths = glob(
            os.path.join(synthetic_image_path, '*_cropped.png'))

        if len(jpg_paths) == 0:
            print("[!] No images in ./{}. Skip.".format(synthetic_image_path))
            continue
        else:
            print("[!] Found images in ./{}.".format(synthetic_image_path))

            #enter this if statement only if number of jpg and cropped jpg are equal
            if len(cropped_jpg_paths) != len(jpg_paths):
                json_paths = glob(
                    os.path.join(
                        data_path,
                        '{}/*.json'.format(config.synthetic_image_dir)))

                assert len(jpg_paths) >= max_synthetic_num, \
                    "[!] # of synthetic data ({}) is smaller than max_synthetic_num ({})". \
                        format(len(jpg_paths), max_synthetic_num)

                json_paths = json_paths[:max_synthetic_num]
                for json_path in tqdm(json_paths):
                    #replace 'json' to 'jpg'
                    jpg_path = json_path.replace('json', 'jpg')

                    #skip iteration if path name is not found
                    if not os.path.exists(jpg_path):
                        continue

                    with open(json_path) as json_f:
                        #read jpg file
                        img = imread(jpg_path)
                        #load information stored in json file
                        j = json.loads(json_f.read())

                        key = "interior_margin_2d"
                        j[key] = process_json_list(j[key], img)

                        x_min, x_max = int(min(j[key][:, 0])), int(
                            max(j[key][:, 0]))
                        y_min, y_max = int(min(j[key][:, 1])), int(
                            max(j[key][:, 1]))

                        x_center, y_center = (x_min + x_max) / 2, (y_min +
                                                                   y_max) / 2

                        cropped_img = img[y_center - 42:y_center + 42,
                                          x_center - 70:x_center + 70]
                        img_path = jpg_path.replace(".jpg", "_cropped.png")

                        save_array_to_grayscale_image(cropped_img, img_path)

            jpg_paths = glob(os.path.join(synthetic_image_path, '*.jpg'))
            cropped_jpg_paths = glob(
                os.path.join(synthetic_image_path, '*_cropped.png'))

            print("[*] # of synthetic data: {}, # of cropped_data: {}". \
                format(len(jpg_paths), len(cropped_jpg_paths)))
            print("[*] Finished preprocessing synthetic `gaze` data.")

            return synthetic_image_path

    raise Exception("[!] Failed to found proper synthetic_image_path in {}" \
        .format(synthetic_image_path_candidates))
Ejemplo n.º 20
0
        out = self.fc2(out)
        return out


# Hyperparameters
num_epochs = 6
num_classes = 10
batch_size = 100
learning_rate = 0.001
#dataTypes = ['digits-normal.mat', 'digits-scaled.mat', 'digits-jitter.mat']
dataTypes = ['digits-normal.mat']
MODEL_STORE_PATH = '../data/'

for dataType in dataTypes:
    path = os.path.join('..', 'data', dataType)
    data = loadmat(path)
    # Data loader
    train_loader = DataLoader(dataset=train_dataset,
                              batch_size=batch_size,
                              shuffle=True)
    test_loader = DataLoader(dataset=test_dataset,
                             batch_size=batch_size,
                             shuffle=False)
    model = ConvNet()

    # Loss and optimizer
    criterion = nn.CrossEntropyLoss()
    optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)

    # Train the model
    total_step = len(train_loader)
# You have to implement three types of features
#featureTypes = ['pixel', 'hog', 'lbp']
featureTypes = ['hog']

# Accuracy placeholder
accuracy = np.zeros((len(dataTypes), len(featureTypes)))
trainSet = 1
valSet = 2
testSet = 3

for i in range(len(dataTypes)):
    dataType = dataTypes[i]
    #Load data
    path = os.path.join('..', 'data', dataType)
    data = utils.loadmat(path)
    print('+++ Loading digits of dataType: {}'.format(dataType))
    print(data['x'].shape, data['y'].shape)

    #data['x'] = (data['x'] - np.mean(data['x'], axis = 2,
    #    keepdims= True))/(np.std(data['x'], axis = 2, keepdims=True)+0.0001)
    print(data['x'].shape)

    # Optionally montage the digits in the val set
    #montageDigits(data['x'][:, :, data['set']==2])

    for j in range(len(featureTypes)):
        featureType = featureTypes[j]

        # Extract features
        tic = time.time()
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import munch
import utils
import glob
import utm
import os

fig_dir = "../figures"
matplotlib.rc("font", size=7)

# %%
# Towyos separate
data_files = glob.glob("../proc_data/TY*.mat")
TYs = np.asarray([munch.munchify(utils.loadmat(file)) for file in data_files])
P5TYs = [TY for TY in TYs if ((TY.sill == "P5") and (TY.year == 2014))]
# Bathymetry
bathy = xr.open_dataset("../raw_data/merged_200_-171.5_-167.5_-11_-6.5.nc")
bathyP5 = bathy.isel(lon=(bathy.lon < -168.5) & (bathy.lon > -168.8), lat=(bathy.lat > -8.3) & (bathy.lat < -7.9))

data_file = "../raw_data/samoan_passage_bathymetry_200m_merged.mat"
B = munch.munchify(utils.loadmat(data_file)["bathy2"])
long, latg = np.meshgrid(B.lon, B.lat)
B.xg, B.yg, _, _ = utm.from_latlon(latg, long)

# Towyos together
ds = xr.open_dataset("../proc_data/stacked_towyos.nc")
OI = xr.open_dataset("../raw_data/non_divergent_OI_fields.nc")

# TG long wave analysis
pdd = "../data"
fsd = "../figures"
data_in = pdd

M2 = 24.0 / 12.4206012

moorings = load_data.load_my_data()
ca, cw = load_data.load_my_data_alt()
ca = munch.munchify(ca)
cw = munch.munchify(cw)

moorings = [munch.munchify(m) for m in moorings]

cc, nw, ne, se, sw = moorings

ADCP = utils.loadmat(os.path.join(data_in, "ADCP.mat"))
ADCP = munch.munchify(ADCP)

topo = utils.loadmat(os.path.join(data_in, "topo_info.mat"))
topo = munch.munchify(topo)

# %% [markdown]
# ## Time series and time mean of horizontal energy flux

# %% Horizontal energy flux estimates
t0 = 734619
t1 = 734639
#####################################
m = ca

fig = plt.figure(figsize=(6.5, 4.5))
def main():

    # root_dir = '../../../AVA2.1/' # root_dir for the files
    root_dir = '../../data/AVA/files/'

    # Erase previous models from GPU memory
    K.clear_session()

    # Load list of action classes and separate them
    classes = utils.get_AVA_classes(root_dir + 'ava_action_list_custom.csv')

    # Parameters for training
    params = {
        'dim': (224, 224),
        'batch_size': 32,
        'n_classes': len(classes['label_id']),
        'n_channels': 3,
        'shuffle': False,
        'nb_epochs': 200,
        'model': 'resnet50',
        'email': True,
        'freeze_all': True,
        'conv_fusion': False,
        'train_chunk_size': 2**12,
        'validation_chunk_size': 2**12
    }
    soft_sigmoid = True
    minValLoss = 9999990.0

    # Get ID's and labels from the actual dataset
    partition = {}
    partition['train'] = get_AVA_set(
        classes=classes,
        filename=root_dir + "AVA_Train_Custom_Corrected.csv",
        soft_sigmoid=soft_sigmoid)  # IDs for training
    partition['validation'] = get_AVA_set(
        classes=classes,
        filename=root_dir + "AVA_Val_Custom_Corrected.csv",
        soft_sigmoid=soft_sigmoid)  # IDs for validation

    # Labels
    labels_train = get_AVA_labels(classes,
                                  partition,
                                  "train",
                                  filename=root_dir +
                                  "AVA_Train_Custom_Corrected.csv",
                                  soft_sigmoid=soft_sigmoid)
    labels_val = get_AVA_labels(classes,
                                partition,
                                "validation",
                                filename=root_dir +
                                "AVA_Val_Custom_Corrected.csv",
                                soft_sigmoid=soft_sigmoid)

    # http://scikit-learn.org/stable/modules/generated/sklearn.utils.class_weight.compute_class_weight.html
    # Logistic Regression in Rare Events Data, Gary King, Langche Zeng
    # Keras needs a dict though
    # From documentation: class_weight: Optional dictionary mapping class indices (integers) to a weight (float) value, used for weighting the loss function (during training only).
    # This can be useful to tell the model to "pay more attention" to samples from an under-represented class.
    y = labels_to_numpy(labels_train)

    penalizing_method = 'balanced'
    mu = 0.7
    # penalizing_method = 'weighted_log'
    class_weights = np.zeros(30)
    for i in y:
        class_weights[i] += 1
    max_class = max(class_weights)
    for i in range(len(class_weights)):
        if class_weights[i] != 0.0:
            if penalizing_method == 'balanced':
                print(
                    str(i) + " " + str(class_weights[i]) + " " +
                    str(len(y) / (class_weights[i])))
                #class_weights[i] = len(y) / (class_weights[i])
                class_weights[i] = max_class / (class_weights[i])
            elif penalizing_method == 'weighted_log':
                print(
                    str(i) + " " + str(class_weights[i]) + " " +
                    str(math.log(mu * len(y) / (class_weights[i]))))
                class_weights[i] = math.log(mu * len(y) / (class_weights[i]))
        else:
            print(str(i) + " " + str(class_weights[i]) + " inf ")
            class_weights[i] = 0.0
    g = sns.barplot(x=[str(i) for i in range(len(class_weights))],
                    y=class_weights)
    plt.xticks(rotation=-90)
    plt.title("Class weights " + penalizing_method)
    plt.grid(True)
    plt.show()

    class_dictionary = {}
    print(len(class_weights))
    for i in range(len(class_weights)):
        class_dictionary[i] = class_weights[i]
    print(class_dictionary)

    it = iter(class_weights)
    seclist = [
        utils.POSE_CLASSES, utils.OBJ_HUMAN_CLASSES, utils.HUMAN_HUMAN_CLASSES
    ]
    class_lists = [list(islice(it, 0, i)) for i in seclist]
    print(class_lists)

    # Create + compile model, load saved weights if they exist
    saved_weights = None
    # saved_weights = "../models/rgbextra_gauss_resnet50_1807250030.hdf5"
    model, keras_layer_names = rgb_create_model(
        classes=classes['label_id'],
        soft_sigmoid=soft_sigmoid,
        model_name=params['model'],
        freeze_all=params['freeze_all'],
        conv_fusion=params['conv_fusion'])
    model = compile_model(model, soft_sigmoid=soft_sigmoid)

    # TODO Experiment: 1. no initialization, 2. ucf initialization 3. kinetics initialization
    initialization = True  # Set to True to use initialization
    kinetics_weights = ""
    ucf_weights = "../models/ucf_keras/keras-ucf101-rgb-resnet50-newsplit.hdf5"

    if saved_weights is not None:
        model.load_weights(saved_weights)
    else:
        if initialization is True:
            if ucf_weights is None:
                print("Loading MConvNet weights: ")
                if params['model'] == "resnet50":
                    ucf_weights = utils.loadmat(
                        "../models/ucf_matconvnet/ucf101-img-resnet-50-split1.mat"
                    )
                    utils.convert_resnet(model, ucf_weights)
                    model.save(
                        "../models/ucf_keras/keras-ucf101-rgb-resnet50-newsplit.hdf5"
                    )
            if kinetics_weights is None:
                if params['model'] == "inceptionv3":
                    print("Loading Keras weights: ")
                    keras_weights = [
                        "../models/kinetics_keras/tsn_rgb_params_names.pkl",
                        "../models/kinetics_keras/tsn_rgb_params.pkl"
                    ]
                    utils.convert_inceptionv3(model, keras_weights,
                                              keras_layer_names)
                    model.save(
                        "../models/kinetics_keras/keras-kinetics-rgb-inceptionv3.hdf5"
                    )
    # Try to train on more than 1 GPU if    possible
    # try:
    #    print("Trying MULTI-GPU")
    #    model = multi_gpu_model(model)

    print("Training set size: " + str(len(partition['train'])))

    # Make spltis
    train_splits = utils.make_chunks(original_list=partition['train'],
                                     size=len(partition['train']),
                                     chunk_size=params['train_chunk_size'])
    val_splits = utils.make_chunks(original_list=partition['validation'],
                                   size=len(partition['validation']),
                                   chunk_size=params['validation_chunk_size'])

    time_str = time.strftime("%y%m%d%H%M", time.localtime())

    # TODO Don't forget to change your names :)
    filter_type = "gauss"
    bestModelPath = "../models/rgb_weightsfinal_" + filter_type + "_" + params[
        'model'] + "_" + time_str + ".hdf5"
    traincsvPath = "../loss_acc_plots/rgb_weightsfinal_train_" + filter_type + "_plot_" + params[
        'model'] + "_" + time_str + ".csv"
    valcsvPath = "../loss_acc_plots/rgb_weightsfinal_val_" + filter_type + "_plot_" + params[
        'model'] + "_" + time_str + ".csv"

    for epoch in range(params['nb_epochs']):
        epoch_chunks_count = 0
        for trainIDS in train_splits:
            # Load and train
            start_time = timeit.default_timer()
            # -----------------------------------------------------------
            x_val = y_val_pose = y_val_object = y_val_human = x_train = y_train_pose = y_train_object = y_train_human = None
            x_train, y_train_pose, y_train_object, y_train_human = load_split(
                trainIDS,
                labels_train,
                params['dim'],
                params['n_channels'],
                "train",
                filter_type,
                soft_sigmoid=soft_sigmoid)

            y_t = []
            y_t.append(
                to_categorical(y_train_pose, num_classes=utils.POSE_CLASSES))
            y_t.append(
                utils.to_binary_vector(y_train_object,
                                       size=utils.OBJ_HUMAN_CLASSES,
                                       labeltype='object-human'))
            y_t.append(
                utils.to_binary_vector(y_train_human,
                                       size=utils.HUMAN_HUMAN_CLASSES,
                                       labeltype='human-human'))

            history = model.fit(x_train,
                                y_t,
                                class_weight=class_lists,
                                batch_size=params['batch_size'],
                                epochs=1,
                                verbose=0)
            utils.learning_rate_schedule(model, epoch, params['nb_epochs'])

            # ------------------------------------------------------------
            elapsed = timeit.default_timer() - start_time

            print(
                "Epoch " + str(epoch) + " chunk " + str(epoch_chunks_count) +
                " (" + str(elapsed) + ") acc[pose,obj,human] = [" +
                str(history.history['pred_pose_categorical_accuracy']) + "," +
                str(history.history['pred_obj_human_categorical_accuracy']) +
                "," +
                str(history.history['pred_human_human_categorical_accuracy']) +
                "] loss: " + str(history.history['loss']))
            with open(traincsvPath, 'a') as f:
                writer = csv.writer(f)
                avg_acc = (
                    history.history['pred_pose_categorical_accuracy'][0] +
                    history.history['pred_obj_human_categorical_accuracy'][0] +
                    history.history['pred_human_human_categorical_accuracy'][0]
                ) / 3
                writer.writerow([
                    str(avg_acc),
                    history.history['pred_pose_categorical_accuracy'],
                    history.history['pred_obj_human_categorical_accuracy'],
                    history.history['pred_human_human_categorical_accuracy'],
                    history.history['loss']
                ])
            epoch_chunks_count += 1
        # Load val_data
        print("Validating data: ")
        # global_loss, pose_loss, object_loss, human_loss, pose_acc, object_acc, human_acc
        loss_acc_list = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
        for valIDS in val_splits:
            x_val = y_val_pose = y_val_object = y_val_human = x_train = y_train_pose = y_train_object = y_train_human = None
            x_val, y_val_pose, y_val_object, y_val_human = load_split(
                valIDS,
                labels_val,
                params['dim'],
                params['n_channels'],
                "val",
                filter_type,
                soft_sigmoid=soft_sigmoid)
            y_v = []
            y_v.append(
                to_categorical(y_val_pose, num_classes=utils.POSE_CLASSES))
            y_v.append(
                utils.to_binary_vector(y_val_object,
                                       size=utils.OBJ_HUMAN_CLASSES,
                                       labeltype='object-human'))
            y_v.append(
                utils.to_binary_vector(y_val_human,
                                       size=utils.HUMAN_HUMAN_CLASSES,
                                       labeltype='human-human'))

            # NOTE Can't have weights on validation
            vglobal_loss, vpose_loss, vobject_loss, vhuman_loss, vpose_acc, vobject_acc, vhuman_acc = model.evaluate(
                x_val, y_v, batch_size=params['batch_size'])
            loss_acc_list[0] += vglobal_loss
            loss_acc_list[1] += vpose_loss
            loss_acc_list[2] += vobject_loss
            loss_acc_list[3] += vhuman_loss
            loss_acc_list[4] += vpose_acc
            loss_acc_list[5] += vobject_acc
            loss_acc_list[6] += vhuman_acc
        # Average over all validation chunks
        loss_acc_list = [x / len(val_splits) for x in loss_acc_list]
        with open(valcsvPath, 'a') as f:
            writer = csv.writer(f)
            # We consider accuracy as the average accuracy over the three
            # types of accuracy
            acc = (loss_acc_list[4] + loss_acc_list[5] + loss_acc_list[6]) / 3
            writer.writerow([
                str(acc), loss_acc_list[4], loss_acc_list[5], loss_acc_list[6],
                loss_acc_list[0], loss_acc_list[1], loss_acc_list[2],
                loss_acc_list[3]
            ])
        if loss_acc_list[0] < minValLoss:
            print("New best loss " + str(loss_acc_list[0]))
            model.save(bestModelPath)
            minValLoss = loss_acc_list[0]

    if params['email']:
        utils.sendemail(
            from_addr='*****@*****.**',
            to_addr_list=['*****@*****.**'],
            subject='Finished training RGB-stream with class_weights ' +
            penalizing_method,
            message='Training RGB with following params: ' + str(params),
            login='******',
            password='******')
def maybe_preprocess(config, data_path, sample_path=None):
    if config.max_synthetic_num < 0:
        max_synthetic_num = None
    else:
        max_synthetic_num = config.max_synthetic_num

    # MPIIGaze dataset
    base_path = os.path.join(
        data_path, '{}/Data/Normalized'.format(config.real_image_dir))
    npz_path = os.path.join(data_path, DATA_FNAME)

    if not os.path.exists(npz_path):
        mat_paths = []
        for root, dirnames, filenames in os.walk(base_path):
            for filename in fnmatch.filter(filenames, '*.mat'):
                mat_paths.append(os.path.join(root, filename))

        print("[*] Preprocessing real `gaze` data...")

        real_images = []
        for mat_path in tqdm(mat_paths):
            mat = loadmat(mat_path)
            # Left eye (batch_size, height, width)
            real_images.extend(mat['data'][0][0][0][0][0][1])
            # Right eye
            real_images.extend(mat['data'][0][0][1][0][0][1])

        real_data = np.stack(real_images, axis=0)
        np.savez(npz_path, real=real_data)

    # UnityEyes dataset
    synthetic_image_path_candidates = [
        config.synthetic_image_dir,
        os.path.join(data_path, config.synthetic_image_dir),
    ]
    for synthetic_image_path in synthetic_image_path_candidates:
        jpg_paths = glob(os.path.join(synthetic_image_path, '*.jpg'))
        cropped_jpg_paths = glob(
            os.path.join(synthetic_image_path, '*_cropped.png'))

        if len(jpg_paths) == 0:
            print("[!] No images in ./{}. Skip.".format(synthetic_image_path))
            continue
        else:
            print("[!] Found images in ./{}.".format(synthetic_image_path))
            if len(cropped_jpg_paths) != len(jpg_paths):
                json_paths = glob(
                    os.path.join(
                        data_path,
                        '{}/*.json'.format(config.synthetic_image_dir)))

                #assert len(jpg_paths) >= max_synthetic_num, \
                #"[!] # of synthetic data ({}) is smaller than max_synthetic_num ({})". \
                #format(len(jpg_paths), max_synthetic_num)

                json_paths = json_paths[:max_synthetic_num]
                for json_path in tqdm(json_paths):
                    jpg_path = json_path.replace('json', 'jpg')

                    if not os.path.exists(jpg_path):
                        continue

                    with open(json_path) as json_f:
                        img = imread(jpg_path)
                        j = json.loads(json_f.read())

                        key = "interior_margin_2d"
                        j[key] = process_json_list(j[key], img)

                        x_min, x_max = int(min(j[key][:, 0])), int(
                            max(j[key][:, 0]))
                        y_min, y_max = int(min(j[key][:, 1])), int(
                            max(j[key][:, 1]))

                        x_center, y_center = int((x_min + x_max) / 2), int(
                            (y_min + y_max) / 2)

                        cropped_img = img[y_center - 42:y_center + 42,
                                          x_center - 70:x_center + 70]
                        img_path = jpg_path.replace(".jpg", "_cropped.png")

                        save_array_to_grayscale_image(cropped_img, img_path)

            jpg_paths = glob(os.path.join(synthetic_image_path, '*.jpg'))
            cropped_jpg_paths = glob(
                os.path.join(synthetic_image_path, '*_cropped.png'))

            print("[*] # of synthetic data: {}, # of cropped_data: {}". \
                format(len(jpg_paths), len(cropped_jpg_paths)))
            print("[*] Finished preprocessing synthetic `gaze` data.")

            return synthetic_image_path

    raise Exception("[!] Failed to found proper synthetic_image_path in {}" \
        .format(synthetic_image_path_candidates))
Ejemplo n.º 26
0
            [-z0, -z1
             ])  # Minus needed because z array is monotonically decreasing.

        # Fill stacked array, the +1 is needed because of the way searchsorted returns indices on the left.
        vara[i0:i1 + 1, j0:j1] = TY[var]
        j0 = j1

    return vara


if __name__ == "__main__":
    # Load processed towyos.
    data_dir = "../proc_data"
    data_files = glob.glob(data_dir + "/TY*.mat")
    TYs = np.asarray(
        [munch.munchify(utils.loadmat(file)) for file in data_files])

    # Get P5 towyos from 2014.
    TYs_ = [TY for TY in TYs if ((TY.sill == "P5") and (TY.year == 2014))]

    zmin = np.min([TY.z.min() for TY in TYs_])
    zmax = np.max([TY.z.max() for TY in TYs_])
    npfls = np.sum([TY.mlon.shape[0] for TY in TYs_])

    idxa = np.arange(npfls)
    dz = -1.
    z = np.arange(zmax, zmin + dz, dz)
    nz = len(z)

    datavars = {}