Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
117 changes: 58 additions & 59 deletions cnn.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,123 +6,122 @@

#!/usr/bin/python

from util import batch_norm_conv, conv2d, max_pool, weight_variable
from config import cfg
import math
import tensorflow.compat.v1 as tf

tf.compat.v1.disable_eager_execution()

import math

from config import cfg
from util import batch_norm_conv
from util import weight_variable
from util import conv2d
from util import max_pool

####################################################################
#CNN-specific architecture configuration
# CNN-specific architecture configuration
####################################################################
WND_HEIGHT = 64 #Extraction window height
WND_WIDTH = 64 #Extraction window width
WND_SHIFT = WND_WIDTH - 2 #Window shift
WND_HEIGHT = 64 # Extraction window height
WND_WIDTH = 64 # Extraction window width
WND_SHIFT = WND_WIDTH - 2 # Window shift

MPoolLayers_ALL = 5 #Nbr of all maxpool layers
MPoolLayers_H = 2 #Nbr of maxpool in horizontal dimension
LastFilters = 512 #Nbr of feature maps at the last conv layer
MPoolLayers_ALL = 5 # Nbr of all maxpool layers
MPoolLayers_H = 2 # Nbr of maxpool in horizontal dimension
LastFilters = 512 # Nbr of feature maps at the last conv layer
####################################################################

FV = int(WND_HEIGHT / math.pow(2, MPoolLayers_ALL))

NFeatures = FV * LastFilters


def CNNLight(X, Training, Scope):

with tf.variable_scope(Scope):
with tf.variable_scope(Scope):

ConvLayer1 = ConvLayer(X, 1, 64, Training, 'ConvLayer1')
ConvLayer1 = ConvLayer(X, 1, 64, Training, 'ConvLayer1')

MPool1 = max_pool(ConvLayer1, ksize=(2, 2), stride=(2, 2))
MPool1 = max_pool(ConvLayer1, ksize=(2, 2), stride=(2, 2))

ConvLayer2 = ConvLayer(MPool1, 64, 128, Training, 'ConvLayer2')
ConvLayer2 = ConvLayer(MPool1, 64, 128, Training, 'ConvLayer2')

MPool2 = max_pool(ConvLayer2, ksize=(2, 2), stride=(2, 2))
MPool2 = max_pool(ConvLayer2, ksize=(2, 2), stride=(2, 2))

ConvLayer3 = ConvLayer(MPool2, 128, 256, Training, 'ConvLayer3')
ConvLayer3 = ConvLayer(MPool2, 128, 256, Training, 'ConvLayer3')

ConvLayer4 = ConvLayer(ConvLayer3, 256, 256, Training, 'ConvLayer4')
ConvLayer4 = ConvLayer(ConvLayer3, 256, 256, Training, 'ConvLayer4')

MPool4 = max_pool(ConvLayer4, ksize=(2, 1), stride=(2, 1))
MPool4 = max_pool(ConvLayer4, ksize=(2, 1), stride=(2, 1))

ConvLayer5 = ConvLayer(MPool4, 256, 512, Training, 'ConvLayer5')
ConvLayer5 = ConvLayer(MPool4, 256, 512, Training, 'ConvLayer5')

ConvLayer6 = ConvLayer(ConvLayer5, 512, 512, Training, 'ConvLayer6')
ConvLayer6 = ConvLayer(ConvLayer5, 512, 512, Training, 'ConvLayer6')

MPool6 = max_pool(ConvLayer6, ksize=(2, 1), stride=(2, 1))
MPool6 = max_pool(ConvLayer6, ksize=(2, 1), stride=(2, 1))

ConvLayer7 = ConvLayer(MPool6, 512, 512, Training, 'ConvLayer7')
ConvLayer7 = ConvLayer(MPool6, 512, 512, Training, 'ConvLayer7')

MPool7 = max_pool(ConvLayer7, ksize=(2, 1), stride=(2, 1))
MPool7 = max_pool(ConvLayer7, ksize=(2, 1), stride=(2, 1))

MPool7_T = tf.transpose(MPool7, perm=[0,2,1,3])
MPool7_T = tf.transpose(MPool7, perm=[0, 2, 1, 3])

MPool7_T_RSH = tf.reshape(MPool7_T, [-1, FV, LastFilters])
MPool7_T_RSH = tf.reshape(MPool7_T, [-1, FV, LastFilters])

return tf.reshape(MPool7_T_RSH, [-1, NFeatures])
return tf.reshape(MPool7_T_RSH, [-1, NFeatures])


def CNN(X, Training, Scope):

with tf.variable_scope(Scope):
with tf.variable_scope(Scope):

ConvLayer1 = ConvLayer(X, 1, 64, Training, 'ConvLayer1')
ConvLayer1 = ConvLayer(X, 1, 64, Training, 'ConvLayer1')

ConvLayer2 = ConvLayer(ConvLayer1, 64, 64, Training, 'ConvLayer2')
ConvLayer2 = ConvLayer(ConvLayer1, 64, 64, Training, 'ConvLayer2')

MPool2 = max_pool(ConvLayer2, ksize=(2, 2), stride=(2, 2))
MPool2 = max_pool(ConvLayer2, ksize=(2, 2), stride=(2, 2))

ConvLayer3 = ConvLayer(MPool2, 64, 128, Training, 'ConvLayer3')
ConvLayer3 = ConvLayer(MPool2, 64, 128, Training, 'ConvLayer3')

ConvLayer4 = ConvLayer(ConvLayer3, 128, 128, Training, 'ConvLayer4')
ConvLayer4 = ConvLayer(ConvLayer3, 128, 128, Training, 'ConvLayer4')

MPool4 = max_pool(ConvLayer4, ksize=(2, 2), stride=(2, 2))
MPool4 = max_pool(ConvLayer4, ksize=(2, 2), stride=(2, 2))

ConvLayer5 = ConvLayer(MPool4, 128, 256, Training, 'ConvLayer5')
ConvLayer5 = ConvLayer(MPool4, 128, 256, Training, 'ConvLayer5')

ConvLayer6 = ConvLayer(ConvLayer5, 256, 256, Training, 'ConvLayer6')
ConvLayer6 = ConvLayer(ConvLayer5, 256, 256, Training, 'ConvLayer6')

ConvLayer7 = ConvLayer(ConvLayer6, 256, 256, Training, 'ConvLayer7')
ConvLayer7 = ConvLayer(ConvLayer6, 256, 256, Training, 'ConvLayer7')

MPool7 = max_pool(ConvLayer7, ksize=(2, 1), stride=(2, 1))
MPool7 = max_pool(ConvLayer7, ksize=(2, 1), stride=(2, 1))

ConvLayer8 = ConvLayer(MPool7, 256, 512, Training, 'ConvLayer8')
ConvLayer8 = ConvLayer(MPool7, 256, 512, Training, 'ConvLayer8')

ConvLayer9 = ConvLayer(ConvLayer8, 512, 512, Training, 'ConvLayer9')
ConvLayer9 = ConvLayer(ConvLayer8, 512, 512, Training, 'ConvLayer9')

ConvLayer10 = ConvLayer(ConvLayer9, 512, 512, Training, 'ConvLayer10')
ConvLayer10 = ConvLayer(ConvLayer9, 512, 512, Training, 'ConvLayer10')

MPool10 = max_pool(ConvLayer10, ksize=(2, 1), stride=(2, 1))
MPool10 = max_pool(ConvLayer10, ksize=(2, 1), stride=(2, 1))

ConvLayer11 = ConvLayer(MPool10, 512, 512, Training, 'ConvLayer11')
ConvLayer11 = ConvLayer(MPool10, 512, 512, Training, 'ConvLayer11')

ConvLayer12 = ConvLayer(ConvLayer11, 512, 512, Training, 'ConvLayer12')
ConvLayer12 = ConvLayer(ConvLayer11, 512, 512, Training, 'ConvLayer12')

ConvLayer13 = ConvLayer(ConvLayer12, 512, LastFilters, Training, 'ConvLayer13')
ConvLayer13 = ConvLayer(
ConvLayer12, 512, LastFilters, Training, 'ConvLayer13')

MPool13 = max_pool(ConvLayer13, ksize=(2, 1), stride=(2, 1))
MPool13 = max_pool(ConvLayer13, ksize=(2, 1), stride=(2, 1))

MPool13_T = tf.transpose(MPool13, perm=[0,2,1,3])
MPool13_T = tf.transpose(MPool13, perm=[0, 2, 1, 3])

MPool13_T_RSH = tf.reshape(MPool13_T, [-1, FV, LastFilters])
MPool13_T_RSH = tf.reshape(MPool13_T, [-1, FV, LastFilters])

return tf.reshape(MPool13_T_RSH, [-1, NFeatures])
return tf.reshape(MPool13_T_RSH, [-1, NFeatures])

def ConvLayer(Input, FilterIn, FilterOut, Training, Scope):

with tf.variable_scope(Scope):
def ConvLayer(Input, FilterIn, FilterOut, Training, Scope):

Weight = weight_variable([3, 3, FilterIn, FilterOut])
with tf.variable_scope(Scope):

if cfg.LeakyReLU == True:
Weight = weight_variable([3, 3, FilterIn, FilterOut])

return tf.nn.leaky_relu(batch_norm_conv(conv2d(Input, Weight), FilterOut, Training))
else:
return tf.nn.relu(batch_norm_conv(conv2d(Input, Weight), FilterOut, Training))
if cfg.LeakyReLU == True:

return tf.nn.leaky_relu(batch_norm_conv(conv2d(Input, Weight), FilterOut, Training))
else:
return tf.nn.relu(batch_norm_conv(conv2d(Input, Weight), FilterOut, Training))
111 changes: 53 additions & 58 deletions compute_probs.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,28 +6,23 @@

#!/usr/bin/python

import tensorflow.compat.v1 as tf
tf.compat.v1.disable_eager_execution()

from util import LoadClasses, LoadList, LoadModel, ReadData
from rnn import RNN
from config import cfg
from cnn import CNN, WND_HEIGHT, WND_WIDTH, MPoolLayers_H
import numpy as np
import cv2
import sys
import os
import cv2
import numpy as np
import codecs
import math
import codecs
import tensorflow.compat.v1 as tf

tf.compat.v1.disable_eager_execution()

from config import cfg
from util import LoadClasses
from util import LoadModel
from util import ReadData
from util import LoadList
from cnn import CNN
from cnn import WND_HEIGHT
from cnn import WND_WIDTH
from cnn import MPoolLayers_H
from rnn import RNN

if (os.path.exists(cfg.Probs) == False): os.makedirs(cfg.Probs)
if (os.path.exists(cfg.Probs) == False):
os.makedirs(cfg.Probs)

Classes = LoadClasses(cfg.CHAR_LIST)

Expand All @@ -53,8 +48,9 @@

logits = tf.nn.softmax(logits, dim=-1, name=None)

#Reading test data...
InputListTest, SeqLensTest, _ = ReadData(cfg.TEST_LOCATION, cfg.TEST_LIST, cfg.TEST_NB, WND_HEIGHT, WND_WIDTH, WND_SHIFT, VEC_PER_WND, '')
# Reading test data...
InputListTest, SeqLensTest, _ = ReadData(
cfg.TEST_LOCATION, cfg.TEST_LIST, cfg.TEST_NB, WND_HEIGHT, WND_WIDTH, WND_SHIFT, VEC_PER_WND, '')

print('Initializing...')

Expand All @@ -65,60 +61,59 @@
LoadModel(session, cfg.SaveDir+'/')

try:
session.run(tf.assign(phase_train, False))
session.run(tf.assign(phase_train, False))

randIxs = range(0, len(InputListTest))
randIxs = range(0, len(InputListTest))

start, end = (0, cfg.BatchSize)
start, end = (0, cfg.BatchSize)

batch = 0
while end <= len(InputListTest):
batchInputs = []
batchSeqLengths = []
for batchI, origI in enumerate(randIxs[start:end]):
batchInputs.extend(InputListTest[origI])
batchSeqLengths.append(SeqLensTest[origI])
batch = 0
while end <= len(InputListTest):
batchInputs = []
batchSeqLengths = []
for batchI, origI in enumerate(randIxs[start:end]):
batchInputs.extend(InputListTest[origI])
batchSeqLengths.append(SeqLensTest[origI])

feed = {x: batchInputs, SeqLens: batchSeqLengths}
del batchInputs, batchSeqLengths
feed = {x: batchInputs, SeqLens: batchSeqLengths}
del batchInputs, batchSeqLengths

Logits = session.run([logits], feed_dict=feed)
del feed
Logits = session.run([logits], feed_dict=feed)
del feed

_,sLen,_,_ = np.shape(Logits)
_, sLen, _, _ = np.shape(Logits)

for i in range(0, cfg.BatchSize):
for i in range(0, cfg.BatchSize):

fileIndex = cfg.BatchSize * batch + i
filename = "./"+cfg.Probs+"/" + os.path.basename(FilesList[fileIndex].strip()) + ".txt"
fileIndex = cfg.BatchSize * batch + i
filename = "./"+cfg.Probs+"/" + \
os.path.basename(FilesList[fileIndex].strip()) + ".txt"

file = codecs.open(filename, "a", "utf-8")
file = codecs.open(filename, "a", "utf-8")

for seqn in range(0, sLen):
for seqn in range(0, sLen):

seq = Logits[0][seqn][i]
seq = Logits[0][seqn][i]

file.write(str(seq[NClasses-1]))
file.write(" ")
file.write(str(seq[NClasses-1]))
file.write(" ")

for c in range(0, NClasses-1):
val = seq[c]
file.write(str(val))
file.write(" ")
for c in range(0, NClasses-1):
val = seq[c]
file.write(str(val))
file.write(" ")

file.write("\n")
file.write("\n")

file.close
file.close

start += cfg.BatchSize
end += cfg.BatchSize
batch += 1
start += cfg.BatchSize
end += cfg.BatchSize
batch += 1

except (KeyboardInterrupt, SystemExit, Exception) as e:
print("[Error/Interruption] %s" % str(e))
print("Clossing TF Session...")
session.close()
print("Terminating Program...")
sys.exit(0)


print(f"[Error/Interruption] {str(e)}")
print("Clossing TF Session...")
session.close()
print("Terminating Program...")
sys.exit(0)
Loading