Tensorflow-implementation-of-LCNN icon indicating copy to clipboard operation
Tensorflow-implementation-of-LCNN copied to clipboard

Welcome to raise issues and your requests here

Open yxu0611 opened this issue 7 years ago • 14 comments

yxu0611 avatar Jan 17 '18 14:01 yxu0611

is there any code to try the implementation to verify either it's an image or not? your help is really appreciated

AdhamGouda avatar May 09 '18 12:05 AdhamGouda

Hi, I assume that you have several different format files, e.g jpg, png, txt, doc, there may be two possible ways to verify the file is a image format or not. Solution 1:

from os import listdir
import os

img_format = ['.jpg', '.jpeg', '.png', '.tif']
list_img = listdir(path_img_folder)
for img_name in list_img:
     extension = os.path.splitext(img_name)[1]
     if extension in img_format:
         print("It's image")
     else:
     	print("It's not image")

Solution 2: You can probably use opencv function. e.g. cv2.imread(img_path), if the output returns NULL, it means your input file is not basically image format

yxu0611 avatar May 11 '18 07:05 yxu0611

Sorry I meant a code to verify if this is the person or not to verify the face not to recognize ,any tips ? thank you so much

AdhamGouda avatar May 11 '18 12:05 AdhamGouda

@AdhamGouda the input_size of model is 1281283,but why you need to resize to 144144?

tensorflowt avatar May 19 '18 07:05 tensorflowt

@tensorflowt It's because we did randomly cropping from 144x144 to 128x128

yxu0611 avatar May 20 '18 04:05 yxu0611

what half means in the function MFMfc? def MFMfc(x,half,name): with tf.variable_scope(name): shape = x.get_shape().as_list() res = tf.reduce_max(tf.reshape(x,[-1,2,shape[-1]//2]),reduction_indices=[1]) return res

tensorflowt avatar May 28 '18 13:05 tensorflowt

@tensorflowt MFMfc is represented as an active function( similar to maxout), meanwhile, it also can perform feature dimension reduction. See the explanation from paper[1]: wechat screenshot_20180601135131

[1] Wu, Xiang, et al. "A light CNN for deep face representation with noisy labels." arXiv preprint arXiv:1511.02683 (2015).

yxu0611 avatar Jun 01 '18 05:06 yxu0611

@yxu0611 How is image pre-processing performed? The paper states that images are transformed to greyscale and rotated based upon facial features; there doesn't seem to be any function in the code to perform this.

fraserprice avatar Jun 26 '18 16:06 fraserprice

@fraserprice These pre-processing codes can be found as below. We did the rotation and transformation based on 3 facial points (left eye, right eye, and mouth)

# get grey scale image
img = cv2.imread(img_path, 0)

# get the left/right center eye position 
leye = np.float32([points[0], points[1]])
reye = np.float32([points[2], points[3]])

# get the center mouth position 
lmouth = np.float32([points[6], points[7]])
rmouth = np.float32([points[8], points[9]])
mouth = [(lmouth[0]+rmouth[0])/2., (lmouth[1]+rmouth[1])/2.]

# set eye to eye pixel distance 90, eye to mouth pixel distance 87 (template image size: 256x300) 
src = np.float32([leye, reye, mouth])
dst = np.float32([[88, 125], [178, 125], [133, 212]])
M = cv2.getAffineTransform(src, dst)
crop_image = cv2.warpAffine(img, M, (256, 300))

# resize cropped image from 256x300 to 122x144
crop_image2  = cv2.resize(crop_image , (122, 144))

yxu0611 avatar Jun 28 '18 09:06 yxu0611

Don't understand sum function in you code,could you please explain it ,thx

ehion avatar Aug 29 '18 10:08 ehion

def sum(self, layerin):
		layer1_size = self.res_size
		layer2_size = layerin[1]
		print (layer1_size[2], layer1_size[3])
		print (layer2_size[2], layer2_size[3])
		assert layer1_size[1] == layer2_size[1]
		assert layer1_size[2] == layer2_size[2] and layer1_size[3] == layer2_size[3]

		inp_size = self.res_size
		with tf.name_scope('sum_' + str(self.layer_num)):
			self.res = self.res + layerin[0]
			self.res_size = self.res.get_shape()

		print ('sum_'+str(self.layer_num), inp_size, self.res_size)
		return [self.res, self.res_size]

ehion avatar Aug 29 '18 10:08 ehion

mod = M.Model(img_holder, [None, 128, 128, 3])

	mod.conv_layer(5, 96, activation=1)
	mod.maxpooling_layer(2, 2) #pool1

	# 
	a = mod.get_current_layer()
	mod.conv_layer(3, 96, activation=1)
	mod.conv_layer(3, 96, activation=1)
	# print (mod.get_shape())

	mod.sum(a)

ehion avatar Aug 29 '18 10:08 ehion

@ehion It seems to be the residual shortcuts, see

gdescamps avatar Jan 12 '19 23:01 gdescamps

hello,I am sorry to disturb you,but I encountered such a problem during training. Limited by my graphics card memory, I changed BAZIE to 200. there were an error on the 1803th iteration of epoch1: indexerror:too many indices for arry When I modified the batchsize to 240, I got another error: index 80 is out of the bounds for axis 0 with size 80. Both error locations are near line 126 of lcnn29.py. I have no idea. Hope to get help. thanks a lot

shi-xingping avatar Jan 14 '19 10:01 shi-xingping