Guest User

Untitled

a guest
Jul 16th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.44 KB | None | 0 0
  1. from keras.models import Sequential
  2. from keras.layers import Conv2D, ZeroPadding2D, Activation, Input, concatenate
  3. from keras.models import Model
  4. from keras.layers.normalization import BatchNormalization
  5. from keras.layers.pooling import MaxPooling2D, AveragePooling2D
  6. from keras.layers.merge import Concatenate
  7. from keras.layers.core import Lambda, Flatten, Dense
  8. from keras.engine.topology import Layer
  9. from keras import backend as K
  10. import cv2
  11. import os
  12. import numpy as np
  13. from numpy import genfromtxt
  14. import pandas as pd
  15. import tensorflow as tf
  16. from utils import LRN2D
  17. import utils
  18.  
  19. def facenet():
  20. myInput = Input(shape=(96, 96, 3))
  21.  
  22. x = ZeroPadding2D(padding=(3, 3), input_shape=(96, 96, 3))(myInput)
  23. x = Conv2D(64, (7, 7), strides=(2, 2), name='conv1')(x)
  24. x = BatchNormalization(axis=3, epsilon=0.00001, name='bn1')(x)
  25. x = Activation('relu')(x)
  26. x = ZeroPadding2D(padding=(1, 1))(x)
  27. x = MaxPooling2D(pool_size=3, strides=2)(x)
  28. x = Lambda(LRN2D, name='lrn_1')(x)
  29. x = Conv2D(64, (1, 1), name='conv2')(x)
  30. x = BatchNormalization(axis=3, epsilon=0.00001, name='bn2')(x)
  31. x = Activation('relu')(x)
  32. x = ZeroPadding2D(padding=(1, 1))(x)
  33. x = Conv2D(192, (3, 3), name='conv3')(x)
  34. x = BatchNormalization(axis=3, epsilon=0.00001, name='bn3')(x)
  35. x = Activation('relu')(x)
  36. x = Lambda(LRN2D, name='lrn_2')(x)
  37. x = ZeroPadding2D(padding=(1, 1))(x)
  38. x = MaxPooling2D(pool_size=3, strides=2)(x)
  39.  
  40. # Inception3a
  41. inception_3a_3x3 = Conv2D(96, (1, 1), name='inception_3a_3x3_conv1')(x)
  42. inception_3a_3x3 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3a_3x3_bn1')(inception_3a_3x3)
  43. inception_3a_3x3 = Activation('relu')(inception_3a_3x3)
  44. inception_3a_3x3 = ZeroPadding2D(padding=(1, 1))(inception_3a_3x3)
  45. inception_3a_3x3 = Conv2D(128, (3, 3), name='inception_3a_3x3_conv2')(inception_3a_3x3)
  46. inception_3a_3x3 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3a_3x3_bn2')(inception_3a_3x3)
  47. inception_3a_3x3 = Activation('relu')(inception_3a_3x3)
  48.  
  49. inception_3a_5x5 = Conv2D(16, (1, 1), name='inception_3a_5x5_conv1')(x)
  50. inception_3a_5x5 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3a_5x5_bn1')(inception_3a_5x5)
  51. inception_3a_5x5 = Activation('relu')(inception_3a_5x5)
  52. inception_3a_5x5 = ZeroPadding2D(padding=(2, 2))(inception_3a_5x5)
  53. inception_3a_5x5 = Conv2D(32, (5, 5), name='inception_3a_5x5_conv2')(inception_3a_5x5)
  54. inception_3a_5x5 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3a_5x5_bn2')(inception_3a_5x5)
  55. inception_3a_5x5 = Activation('relu')(inception_3a_5x5)
  56.  
  57. inception_3a_pool = MaxPooling2D(pool_size=3, strides=2)(x)
  58. inception_3a_pool = Conv2D(32, (1, 1), name='inception_3a_pool_conv')(inception_3a_pool)
  59. inception_3a_pool = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3a_pool_bn')(inception_3a_pool)
  60. inception_3a_pool = Activation('relu')(inception_3a_pool)
  61. inception_3a_pool = ZeroPadding2D(padding=((3, 4), (3, 4)))(inception_3a_pool)
  62.  
  63. inception_3a_1x1 = Conv2D(64, (1, 1), name='inception_3a_1x1_conv')(x)
  64. inception_3a_1x1 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3a_1x1_bn')(inception_3a_1x1)
  65. inception_3a_1x1 = Activation('relu')(inception_3a_1x1)
  66.  
  67. inception_3a = concatenate([inception_3a_3x3, inception_3a_5x5, inception_3a_pool, inception_3a_1x1], axis=3)
  68.  
  69. # Inception3b
  70. inception_3b_3x3 = Conv2D(96, (1, 1), name='inception_3b_3x3_conv1')(inception_3a)
  71. inception_3b_3x3 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3b_3x3_bn1')(inception_3b_3x3)
  72. inception_3b_3x3 = Activation('relu')(inception_3b_3x3)
  73. inception_3b_3x3 = ZeroPadding2D(padding=(1, 1))(inception_3b_3x3)
  74. inception_3b_3x3 = Conv2D(128, (3, 3), name='inception_3b_3x3_conv2')(inception_3b_3x3)
  75. inception_3b_3x3 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3b_3x3_bn2')(inception_3b_3x3)
  76. inception_3b_3x3 = Activation('relu')(inception_3b_3x3)
  77.  
  78. inception_3b_5x5 = Conv2D(32, (1, 1), name='inception_3b_5x5_conv1')(inception_3a)
  79. inception_3b_5x5 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3b_5x5_bn1')(inception_3b_5x5)
  80. inception_3b_5x5 = Activation('relu')(inception_3b_5x5)
  81. inception_3b_5x5 = ZeroPadding2D(padding=(2, 2))(inception_3b_5x5)
  82. inception_3b_5x5 = Conv2D(64, (5, 5), name='inception_3b_5x5_conv2')(inception_3b_5x5)
  83. inception_3b_5x5 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3b_5x5_bn2')(inception_3b_5x5)
  84. inception_3b_5x5 = Activation('relu')(inception_3b_5x5)
  85.  
  86. inception_3b_pool = Lambda(lambda x: x**2, name='power2_3b')(inception_3a)
  87. inception_3b_pool = AveragePooling2D(pool_size=(3, 3), strides=(3, 3))(inception_3b_pool)
  88. inception_3b_pool = Lambda(lambda x: x*9, name='mult9_3b')(inception_3b_pool)
  89. inception_3b_pool = Lambda(lambda x: K.sqrt(x), name='sqrt_3b')(inception_3b_pool)
  90. inception_3b_pool = Conv2D(64, (1, 1), name='inception_3b_pool_conv')(inception_3b_pool)
  91. inception_3b_pool = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3b_pool_bn')(inception_3b_pool)
  92. inception_3b_pool = Activation('relu')(inception_3b_pool)
  93. inception_3b_pool = ZeroPadding2D(padding=(4, 4))(inception_3b_pool)
  94.  
  95. inception_3b_1x1 = Conv2D(64, (1, 1), name='inception_3b_1x1_conv')(inception_3a)
  96. inception_3b_1x1 = BatchNormalization(axis=3, epsilon=0.00001, name='inception_3b_1x1_bn')(inception_3b_1x1)
  97. inception_3b_1x1 = Activation('relu')(inception_3b_1x1)
  98.  
  99. inception_3b = concatenate([inception_3b_3x3, inception_3b_5x5, inception_3b_pool, inception_3b_1x1], axis=3)
  100.  
  101. # Inception3c
  102. inception_3c_3x3 = utils.conv2d_bn(inception_3b,
  103. layer='inception_3c_3x3',
  104. cv1_out=128,
  105. cv1_filter=(1, 1),
  106. cv2_out=256,
  107. cv2_filter=(3, 3),
  108. cv2_strides=(2, 2),
  109. padding=(1, 1))
  110.  
  111. inception_3c_5x5 = utils.conv2d_bn(inception_3b,
  112. layer='inception_3c_5x5',
  113. cv1_out=32,
  114. cv1_filter=(1, 1),
  115. cv2_out=64,
  116. cv2_filter=(5, 5),
  117. cv2_strides=(2, 2),
  118. padding=(2, 2))
  119.  
  120. inception_3c_pool = MaxPooling2D(pool_size=3, strides=2)(inception_3b)
  121. inception_3c_pool = ZeroPadding2D(padding=((0, 1), (0, 1)))(inception_3c_pool)
  122.  
  123. inception_3c = concatenate([inception_3c_3x3, inception_3c_5x5, inception_3c_pool], axis=3)
  124.  
  125. #inception 4a
  126. inception_4a_3x3 = utils.conv2d_bn(inception_3c,
  127. layer='inception_4a_3x3',
  128. cv1_out=96,
  129. cv1_filter=(1, 1),
  130. cv2_out=192,
  131. cv2_filter=(3, 3),
  132. cv2_strides=(1, 1),
  133. padding=(1, 1))
  134. inception_4a_5x5 = utils.conv2d_bn(inception_3c,
  135. layer='inception_4a_5x5',
  136. cv1_out=32,
  137. cv1_filter=(1, 1),
  138. cv2_out=64,
  139. cv2_filter=(5, 5),
  140. cv2_strides=(1, 1),
  141. padding=(2, 2))
  142.  
  143. inception_4a_pool = Lambda(lambda x: x**2, name='power2_4a')(inception_3c)
  144. inception_4a_pool = AveragePooling2D(pool_size=(3, 3), strides=(3, 3))(inception_4a_pool)
  145. inception_4a_pool = Lambda(lambda x: x*9, name='mult9_4a')(inception_4a_pool)
  146. inception_4a_pool = Lambda(lambda x: K.sqrt(x), name='sqrt_4a')(inception_4a_pool)
  147. inception_4a_pool = utils.conv2d_bn(inception_4a_pool,
  148. layer='inception_4a_pool',
  149. cv1_out=128,
  150. cv1_filter=(1, 1),
  151. padding=(2, 2))
  152. inception_4a_1x1 = utils.conv2d_bn(inception_3c,
  153. layer='inception_4a_1x1',
  154. cv1_out=256,
  155. cv1_filter=(1, 1))
  156. inception_4a = concatenate([inception_4a_3x3, inception_4a_5x5, inception_4a_pool, inception_4a_1x1], axis=3)
  157.  
  158. #inception4e
  159. inception_4e_3x3 = utils.conv2d_bn(inception_4a,
  160. layer='inception_4e_3x3',
  161. cv1_out=160,
  162. cv1_filter=(1, 1),
  163. cv2_out=256,
  164. cv2_filter=(3, 3),
  165. cv2_strides=(2, 2),
  166. padding=(1, 1))
  167. inception_4e_5x5 = utils.conv2d_bn(inception_4a,
  168. layer='inception_4e_5x5',
  169. cv1_out=64,
  170. cv1_filter=(1, 1),
  171. cv2_out=128,
  172. cv2_filter=(5, 5),
  173. cv2_strides=(2, 2),
  174. padding=(2, 2))
  175. inception_4e_pool = MaxPooling2D(pool_size=3, strides=2)(inception_4a)
  176. inception_4e_pool = ZeroPadding2D(padding=((0, 1), (0, 1)))(inception_4e_pool)
  177.  
  178. inception_4e = concatenate([inception_4e_3x3, inception_4e_5x5, inception_4e_pool], axis=3)
  179.  
  180. #inception5a
  181. inception_5a_3x3 = utils.conv2d_bn(inception_4e,
  182. layer='inception_5a_3x3',
  183. cv1_out=96,
  184. cv1_filter=(1, 1),
  185. cv2_out=384,
  186. cv2_filter=(3, 3),
  187. cv2_strides=(1, 1),
  188. padding=(1, 1))
  189.  
  190. inception_5a_pool = Lambda(lambda x: x**2, name='power2_5a')(inception_4e)
  191. inception_5a_pool = AveragePooling2D(pool_size=(3, 3), strides=(3, 3))(inception_5a_pool)
  192. inception_5a_pool = Lambda(lambda x: x*9, name='mult9_5a')(inception_5a_pool)
  193. inception_5a_pool = Lambda(lambda x: K.sqrt(x), name='sqrt_5a')(inception_5a_pool)
  194. inception_5a_pool = utils.conv2d_bn(inception_5a_pool,
  195. layer='inception_5a_pool',
  196. cv1_out=96,
  197. cv1_filter=(1, 1),
  198. padding=(1, 1))
  199. inception_5a_1x1 = utils.conv2d_bn(inception_4e,
  200. layer='inception_5a_1x1',
  201. cv1_out=256,
  202. cv1_filter=(1, 1))
  203.  
  204. inception_5a = concatenate([inception_5a_3x3, inception_5a_pool, inception_5a_1x1], axis=3)
  205.  
  206. #inception_5b
  207. inception_5b_3x3 = utils.conv2d_bn(inception_5a,
  208. layer='inception_5b_3x3',
  209. cv1_out=96,
  210. cv1_filter=(1, 1),
  211. cv2_out=384,
  212. cv2_filter=(3, 3),
  213. cv2_strides=(1, 1),
  214. padding=(1, 1))
  215. inception_5b_pool = MaxPooling2D(pool_size=3, strides=2)(inception_5a)
  216. inception_5b_pool = utils.conv2d_bn(inception_5b_pool,
  217. layer='inception_5b_pool',
  218. cv1_out=96,
  219. cv1_filter=(1, 1))
  220. inception_5b_pool = ZeroPadding2D(padding=(1, 1))(inception_5b_pool)
  221.  
  222. inception_5b_1x1 = utils.conv2d_bn(inception_5a,
  223. layer='inception_5b_1x1',
  224. cv1_out=256,
  225. cv1_filter=(1, 1))
  226. inception_5b = concatenate([inception_5b_3x3, inception_5b_pool, inception_5b_1x1], axis=3)
  227.  
  228. av_pool = AveragePooling2D(pool_size=(3, 3), strides=(1, 1))(inception_5b)
  229. reshape_layer = Flatten()(av_pool)
  230. dense_layer = Dense(128, name='dense_layer')(reshape_layer)
  231. norm_layer = Lambda(lambda x: K.l2_normalize(x, axis=1), name='norm_layer')(dense_layer)
  232.  
  233.  
  234. # Final Model
  235. model = Model(inputs=[myInput], outputs=norm_layer)
  236. return model
  237.  
  238. if __name__ == '__main__':
  239. facenet()
Add Comment
Please, Sign In to add comment