In [28]:
from work.models.decoder import RecurrentFeedbackActivityDetectionNetwork
model = RecurrentFeedbackActivityDetectionNetwork(1, 1, stateful=True)
model.load_weights('../models/training/lstm_activity_classification/lstm_activity_classification_v2_01_e050.hdf5')
model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy'])
In [29]:
from work.dataset.activitynet import ActivityNetDataset
dataset = ActivityNetDataset(
videos_path='../dataset/videos.json',
labels_path='../dataset/labels.txt'
)
In [30]:
video = None
for v in dataset.videos:
if v.video_id == 'kt3hzGla8r4':
video = v
print(video.serialize())
video_path = '../downloads/dataset/validation/'+video.video_id+'.mp4'
In [31]:
import numpy as np
features = np.load('../downloads/features/'+video.video_id+'.npy')
print(features[:,:].shape)
nb_instances = features.shape[0]
features = features.reshape(nb_instances, 1, 4096)
model.reset_states()
Y = np.zeros((nb_instances, 201))
prev_output = np.zeros((1, 202))
prev_output[0,201] = 1
for i in range(nb_instances):
X = np.zeros((1, 1, 4298))
X[0,0,4096:] = prev_output
y = model.predict_on_batch(X)
y = y.reshape(201)
Y[i,:] = y
prev_output = np.zeros((1, 202))
prev_output[0,:201] = y
print(np.argmax(prev_output))
In [32]:
video.get_video_instances(16, 0)
ground_trouth = np.array([instance.output for instance in video.instances])
print(ground_trouth)
In [33]:
print(Y.shape)
YY = np.argmax(Y, axis=-1)
print(YY)
print(ground_trouth)
In [10]:
dataset.get_output_index(video.label)
Out[10]:
In [11]:
print(video.subset)
In [12]:
print(ground_trouth==YY)
In [12]:
In [13]:
predicted_class = np.argmax(np.bincount(YY)[1:])+1
In [14]:
print(predicted_class)
In [15]:
k_3 = np.argsort(counts[1:])[::-1][:3] + 1
print(k_3)
(counts[k_3]/np.sum(counts[1:]))
Out[15]:
In [16]:
from work.processing.output import get_top_k_predictions, get_top_k_predictions_score
top_3 = get_top_k_predictions(YY, 3)
print(top_3)
_, scores = get_top_k_predictions_score(YY, 3)
print(scores)
for index in top_3:
print(scores, dataset.labels[index][1])
In [17]:
print(ground_trouth)
In [18]:
import matplotlib.pyplot as plt
%matplotlib inline
import matplotlib
normalize = matplotlib.colors.Normalize(vmin=0, vmax=201)
plt.figure(num=None, figsize=(18, 1), dpi=100)
plt.contourf(np.broadcast_to(ground_trouth, (2, nb_instances)), norm=normalize)
plt.title('Ground Truth')
#plt.imshow(ground_trouth.reshape(1,nb_instances).astype(np.float32))
plt.show()
In [19]:
plt.figure(num=None, figsize=(18, 1), dpi=100)
plt.contourf(np.broadcast_to(YY, (2, nb_instances)), norm=normalize)
plt.title('Prediction')
#plt.imshow(ground_trouth.reshape(1,nb_instances).astype(np.float32))
plt.show()
In [20]:
from work.processing.visualization import plot_sequence
plot_sequence(YY, title='Prediction')
In [74]:
print(video.label)
In [19]:
print(video.url)
In [20]:
score = np.sum(YY==ground_trouth)/len(YY)
In [21]:
print(score)
In [56]:
import random
videos = dataset.get_subset_videos('validation')
v = random.choice(videos)
print(v.video_id)
In [23]:
print(YY)
In [24]:
np.save('YY', YY)
In [ ]:
In [25]:
from work.dataset.activitynet import ActivityNetDataset
dataset = ActivityNetDataset(
videos_path='../dataset/videos.json',
labels_path='../dataset/labels.txt'
)
video = None
for v in dataset.videos:
if v.video_id == 'Zn84iOuIkDs':
video = v
import numpy as np
from work.processing.output import get_temporal_predictions
YY = np.load('YY.npy')
print(YY)
predictions = get_temporal_predictions(YY, fps=video.num_frames/video.duration, clip_length=16)
print(predictions)
In [4]:
import numpy as np
instances = np.array([video.num_frames//16 for video in dataset.videos])
In [5]:
print(np.min(instances))
print(np.max(instances))
In [6]:
np.argmin(instances)
Out[6]:
In [7]:
dataset.videos[_].serialize()
Out[7]:
In [ ]: