tropcomplique / faceboxes-tensorflow Goto Github PK
View Code? Open in Web Editor NEWA fast face detector
License: MIT License
A fast face detector
License: MIT License
FaceBoxes-tensorflow/create_tfrecords.py
Line 70 in 0dde35e
According to the paper, Faceboxes seems a good replacement of MTCNN in Face Detection Area. But MTCNN has a built in landmark detection, I wonder it is applicable to change faceboxes into a joint multi task network just like MTCNN?
Also Any idea about filling the performance gap between this implementation and the caffe one?
Thanks
I cannot see any files in the google drive. Could you share the pre-trained models?
I used tf with version 1.4 before,but when I run the try_detector.py, it raised the error:
ValueError: No op named NonMaxSuppressionV3 in defined operations.
Then I updated my tf version from 1.4 to 1.8, but it raises another error:
ValueError: NodeDef mentions attr 'Truncate' not in Op<name=Cast; signature=x:SrcT -> y:DstT; attr=SrcT:type; attr=DstT:type>; NodeDef: import/anchor_generator/ToFloat_34 = CastDstT=DT_FLOAT, SrcT=DT_INT32, Truncate=false.
Some people with the some issue suggest that the lower version of tf 1.10 can resolve the problem.But it will bring the issue before. How can i reslove the issue? Is it related with the system? I use win and the model was created on linux?
I want to train my dataset. What format should i make for it if i want to use your code?
Would it be possible to do transfer learning to detect cars with this model ?
How much data would be necessary to do so?
I am trying to train the model on new data, after training I save the model into .pb file using save.py and create_pb.py but I am facing a problem, whenever I use the new .pb file I get this error
InvalidArgumentError: Graph execution error:
Op type not registered 'nms_map_while_cond_2048' in binary running on 3cece289dc39. Make sure the Op and Kernel are registered in the binary running in this process. Note that if you are loading a saved graph which used ops from tf.contrib, accessing (e.g.) tf.contrib.resampler
should be done before importing the graph, as contrib ops are lazily registered when the module is first accessed. while building NodeDef 'import/nms/map/while/cond/_0'
Note that I am not using tf.contrib as it's deprecated so I use tf.slim instead
Can you please help me with this error? I don't understand the cause of it or how to solve it
Hellol,.i have some qusetion about the file evaluation_utils.py
You use py_func API to write your own metric, but i don't see any global variable to contain the history information about the evaluation, which can be used to calculate the accuracy on the whole evaluation set.
So is the evaluation output only refer to one random image in the evaluation set?
Please help me, thank you.
Hello, can you say me please, i've detected a face. but it's to slow about 0,6-1.1 secs. If is it the a general problem of faceboxes or just my code is wrong?
Currently I am trying to understand the inference part of the Faceboxes. I actually tried visualizing it using Tensorboard as well as the frozen graph. But I was only able to get the overall picture, but not the entire scenario. So I am trying to understand this with some print statements that output the tensor values. I am feeding images from the wider face dataset as prescribed while training. For the inference to happen, I have changed def get_input_fn(is_training=True): to def get_input_fn(is_training=False): . But in both the cases all the nodes are getting executed. I am not able to differentiate between the training and evaluation nodes. How to do that?
Any help would be appreciated!!!!
Can someone help me ?I got this problem when I was running try_detector.ipynb.
how can i train images from my own dataset based on pretrain models?
你好模型能分享到百度网盘吗?谢谢。
Hi there! Thanks for this repo! I'm trying to reimplement everything from scratch in my own repository (https://github.com/96imranahmed/faceboxes_tf) but I've been running into some difficulties and was wondering if you had come across any of these errors before?
Essentially, my main problem is that the model seems to train normally for the first 2000 iterations (with similar magnitudes to the plot that you have in the repo README). However, after a certain point, the regression losses explode - with the model predicting very large values for bounding box offsets + heights/widths (i.e. with values in the 1000s). This causes the model's loss to effectively spiral out of control and the model requires another few thousand iterations to 'reset' back to the same point (before the same problem re-occurs).
I was wondering whether you had experienced this while training your version of Faceboxes? The occurrence of this issue is really stumping me, as the model does seem to be learning relatively well until this failure occurs. It'd be great to hear if you've run into this before/how you got around it!
Thanks! :)
Under reshaping scope:
FaceBoxes-tensorflow/src/detector.py
Line 286 in 545ec4f
Why is 2 reshapes is needed here:
FaceBoxes-tensorflow/src/detector.py
Line 297 in 545ec4f
And why list is stacked via tf.stack
?
y = tf.reshape(y, tf.stack([batch_size, height_i, width_i, num_predictions_per_location, 4]))
And here:
FaceBoxes-tensorflow/src/detector.py
Line 301 in 545ec4f
Order of with tf.stack
and without is different.
I'm trying to find out endpoints of model like is done here:
https://github.com/tf-coreml/tf-coreml/blob/master/examples/ssd_example.ipynb
Cause using default input/output node names produce error:
input_tensor_shapes {'image_tensor:0': [1, 256, 256, 3]}
output_tensor_names ['boxes:0', 'scores:0', 'num_boxes:0']
Loading the TF graph...
Graph Loaded.
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-15-3268ebb54f92> in <module>
18 mlmodel_path=coreml_model_file,
19 input_name_shape_dict=input_tensor_shapes,
---> 20 output_feature_names=output_tensor_names)
/usr/local/lib/python3.6/site-packages/tfcoreml/_tf_coreml_converter.py in convert(tf_model_path, mlmodel_path, output_feature_names, input_name_shape_dict, image_input_names, is_bgr, red_bias, green_bias, blue_bias, gray_bias, image_scale, class_labels, predicted_feature_name, predicted_probabilities_output, add_custom_layers, custom_conversion_functions)
584 predicted_probabilities_output=predicted_probabilities_output,
585 add_custom_layers=add_custom_layers,
--> 586 custom_conversion_functions=custom_conversion_functions)
/usr/local/lib/python3.6/site-packages/tfcoreml/_tf_coreml_converter.py in _convert_pb_to_mlmodel(tf_model_path, mlmodel_path, output_feature_names, input_name_shape_dict, image_input_names, is_bgr, red_bias, green_bias, blue_bias, gray_bias, image_scale, class_labels, predicted_feature_name, predicted_probabilities_output, add_custom_layers, custom_conversion_functions)
165 print('Graph Loaded.')
166 # Sort the ops in topological order and check whether the graph has cycles, if yes, error out
--> 167 OPS = _topological_sort_ops(OPS)
168
169 SHAPE_DICT = {} #Tensor name --> shape ({str: list})
/usr/local/lib/python3.6/site-packages/tfcoreml/_tf_graph_transform.py in _topological_sort_ops(ops)
192 node = _get_unvisited_child(G, stack[-1], not_visited)
193 if node != -1:
--> 194 _push_stack(stack, node, in_stack)
195 else:
196 node = stack.pop()
/usr/local/lib/python3.6/site-packages/tfcoreml/_tf_graph_transform.py in _push_stack(stack, node, in_stack)
36 stack.append(node)
37 if node in in_stack:
---> 38 raise ValueError('Graph has cycles.')
39 else:
40 in_stack[node] = True
ValueError: Graph has cycles.
On graph last block before nms
is preprocessing
, but I'm not sure what is output_tensor_names
should be used.
I have tried to print node dimensions:
with tf.Graph().as_default() as graph:
tf.import_graph_def(original_gdef, name='')
for op in graph.get_operations():
if 'postprocessing' in op.name:
print('-'*60)
print('str(op.name)', str(op.name))
print('len(op.values())', len(op.values()))
try:
for i in range(len(op.values())):
print('op.values()[i].get_shape().as_list()', op.values()[i].get_shape().as_list())
except:
for i in range(len(op.values())):
print('op.values()[i].get_shape()', op.values()[i].get_shape())
Output:
------------------------------------------------------------
str(op.name) postprocessing/Shape
len(op.values()) 1
op.values()[i].get_shape().as_list() [3]
------------------------------------------------------------
str(op.name) postprocessing/strided_slice/stack
len(op.values()) 1
op.values()[i].get_shape().as_list() [1]
------------------------------------------------------------
str(op.name) postprocessing/strided_slice/stack_1
len(op.values()) 1
op.values()[i].get_shape().as_list() [1]
------------------------------------------------------------
str(op.name) postprocessing/strided_slice/stack_2
len(op.values()) 1
op.values()[i].get_shape().as_list() [1]
------------------------------------------------------------
str(op.name) postprocessing/strided_slice
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/Shape_1
len(op.values()) 1
op.values()[i].get_shape().as_list() [3]
------------------------------------------------------------
str(op.name) postprocessing/strided_slice_1/stack
len(op.values()) 1
op.values()[i].get_shape().as_list() [1]
------------------------------------------------------------
str(op.name) postprocessing/strided_slice_1/stack_1
len(op.values()) 1
op.values()[i].get_shape().as_list() [1]
------------------------------------------------------------
str(op.name) postprocessing/strided_slice_1/stack_2
len(op.values()) 1
op.values()[i].get_shape().as_list() [1]
------------------------------------------------------------
str(op.name) postprocessing/strided_slice_1
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/ExpandDims/dim
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/ExpandDims
len(op.values()) 1
op.values()[i].get_shape().as_list() [1, 1364, 4]
------------------------------------------------------------
str(op.name) postprocessing/Tile/multiples/1
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/Tile/multiples/2
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/Tile/multiples
len(op.values()) 1
op.values()[i].get_shape().as_list() [3]
------------------------------------------------------------
str(op.name) postprocessing/Tile
len(op.values()) 1
op.values()[i].get_shape().as_list() [None, 1364, 4]
------------------------------------------------------------
str(op.name) postprocessing/Reshape/shape
len(op.values()) 1
op.values()[i].get_shape().as_list() [2]
------------------------------------------------------------
str(op.name) postprocessing/Reshape
len(op.values()) 1
op.values()[i].get_shape().as_list() [None, 4]
------------------------------------------------------------
str(op.name) postprocessing/Reshape_1/shape
len(op.values()) 1
op.values()[i].get_shape().as_list() [2]
------------------------------------------------------------
str(op.name) postprocessing/Reshape_1
len(op.values()) 1
op.values()[i].get_shape().as_list() [None, 4]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/unstack
len(op.values()) 4
op.values()[i].get_shape().as_list() [None]
op.values()[i].get_shape().as_list() [None]
op.values()[i].get_shape().as_list() [None]
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_center_coordinates/sub
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_center_coordinates/sub_1
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_center_coordinates/mul/x
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_center_coordinates/mul
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_center_coordinates/add
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_center_coordinates/mul_1/x
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_center_coordinates/mul_1
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_center_coordinates/add_1
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/unstack_1
len(op.values()) 4
op.values()[i].get_shape().as_list() [None]
op.values()[i].get_shape().as_list() [None]
op.values()[i].get_shape().as_list() [None]
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/truediv/y
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/truediv
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/truediv_1/y
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/truediv_1
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/truediv_2/y
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/truediv_2
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/truediv_3/y
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/truediv_3
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/Exp
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/mul
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/Exp_1
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/mul_1
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/mul_2
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/add
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/mul_3
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/add_1
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_minmax_coordinates/mul/x
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_minmax_coordinates/mul
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_minmax_coordinates/sub
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_minmax_coordinates/mul_1/x
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_minmax_coordinates/mul_1
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_minmax_coordinates/sub_1
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_minmax_coordinates/mul_2/x
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_minmax_coordinates/mul_2
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_minmax_coordinates/add
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_minmax_coordinates/mul_3/x
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_minmax_coordinates/mul_3
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/to_minmax_coordinates/add_1
len(op.values()) 1
op.values()[i].get_shape().as_list() [None]
------------------------------------------------------------
str(op.name) postprocessing/decode_predictions/stack
len(op.values()) 1
op.values()[i].get_shape().as_list() [None, 4]
------------------------------------------------------------
str(op.name) postprocessing/Reshape_2/shape/2
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/Reshape_2/shape
len(op.values()) 1
op.values()[i].get_shape().as_list() [3]
------------------------------------------------------------
str(op.name) postprocessing/Reshape_2
len(op.values()) 1
op.values()[i].get_shape().as_list() [None, None, 4]
------------------------------------------------------------
str(op.name) postprocessing/clip_by_value/Minimum/y
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/clip_by_value/Minimum
len(op.values()) 1
op.values()[i].get_shape().as_list() [None, None, 4]
------------------------------------------------------------
str(op.name) postprocessing/clip_by_value/y
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/clip_by_value
len(op.values()) 1
op.values()[i].get_shape().as_list() [None, None, 4]
------------------------------------------------------------
str(op.name) postprocessing/truediv
len(op.values()) 1
op.values()[i].get_shape().as_list() [None, None, 4]
------------------------------------------------------------
str(op.name) postprocessing/clip_by_value_1/Minimum/y
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/clip_by_value_1/Minimum
len(op.values()) 1
op.values()[i].get_shape().as_list() [None, None, 4]
------------------------------------------------------------
str(op.name) postprocessing/clip_by_value_1/y
len(op.values()) 1
op.values()[i].get_shape().as_list() []
------------------------------------------------------------
str(op.name) postprocessing/clip_by_value_1
len(op.values()) 1
op.values()[i].get_shape().as_list() [None, None, 4]
------------------------------------------------------------
str(op.name) postprocessing/Softmax
len(op.values()) 1
op.values()[i].get_shape().as_list() [None, None, 2]
------------------------------------------------------------
str(op.name) postprocessing/strided_slice_2/stack
len(op.values()) 1
op.values()[i].get_shape().as_list() [3]
------------------------------------------------------------
str(op.name) postprocessing/strided_slice_2/stack_1
len(op.values()) 1
op.values()[i].get_shape().as_list() [3]
------------------------------------------------------------
str(op.name) postprocessing/strided_slice_2/stack_2
len(op.values()) 1
op.values()[i].get_shape().as_list() [3]
------------------------------------------------------------
str(op.name) postprocessing/strided_slice_2
len(op.values()) 1
op.values()[i].get_shape().as_list() [None, None]
But I can't find out any meaningfull node name:
These looks like bboxes:
str(op.name) postprocessing/Tile
len(op.values()) 1
op.values()[i].get_shape().as_list() [None, 1364, 4]
str(op.name) postprocessing/ExpandDims
len(op.values()) 1
op.values()[i].get_shape().as_list() [1, 1364, 4]
Is it true that for 256x256 image we have 1364 bboxes?
With same approach I found node:
------------------------------------------------------------
str(op.name) postprocessing/Softmax
len(op.values()) 1
op.values()[i].get_shape().as_list() [None, None, 2]
But not sure why it have shape [None, None, 2]
?
Also here is postprocessing
scope:
FaceBoxes-tensorflow/src/detector.py
Line 70 in 545ec4f
It should have output boxes with [batch_size, num_anchors, 4]
shape and scores with [batch_size, num_anchors]
shape.
File "main.py", line 11, in
face_detector = FaceDetector(MODEL_PATH, gpu_memory_fraction=0.6, visible_device_list='0')
File "F:\FaceBoxes-tensorflow\face_detector.py", line 19, in init
graph_def.ParseFromString(f.read())
File "D:\Anaconda3\envs\tensorflow1.1\lib\site-packages\tensorflow\python\lib\io\file_io.py", line 125, in read
self._preread_check()
File "D:\Anaconda3\envs\tensorflow1.1\lib\site-packages\tensorflow\python\lib\io\file_io.py", line 85, in _preread_check
compat.as_bytes(self.__name), 1024 * 512, status)
File "D:\Anaconda3\envs\tensorflow1.1\lib\site-packages\tensorflow\python\framework\errors_impl.py", line 519, in exit
c_api.TF_GetCode(self.status.status))
tensorflow.python.framework.errors_impl.NotFoundError: NewRandomAccessFile failed to Create/Open: model/model.pb : \u03f5\u0373\udcd5\u04b2\udcbb\udcb5\udcbd\u05b8\udcb6\udca8\udcb5\udcc4·\udcbe\udcb6\udca1\udca3
; No such process
I can obtain the pb file by save.py and the create_pb.py with the model.ckpt-240000 (downloading).
But, I can not get the right prediction results by try_detector.ipynb and face_detector.py with the pb file.
However, I can get the right prediction results with the model-step-240000.pb (downloading).
So, when obtain the pb file by save.py and the create_pb.py, any tricks or special operations need to be paid attention to?
Thanks!
In pipeline.py / def _augmentation_fn(self, image, boxes):
The function random_image_crop() outputs the cropped image and boxes, then you resize the image without adjust the boxes. I think the resize op leads to mismatch.
Hi @TropComplique I have a question about the preprocess as follows:
FaceBoxes-tensorflow/src/network.py
Line 66 in 0dde35e
HI,
Why its not needed to perform NMS after getting bounding?
How the model is performing so well?
Thanks!!
I what to use my dataset to train the mode .In order to shorter the time please tell me how to load pretrain mode,thanks!
In model.pb NMS used is different from that of the conventional one. Usually, we choose a score threshold of 0.5 to select the boxes and then will perform NMS to get rid of the redundant boxes with some predefined NMS threshold. But here we will be doing NMS first and then will select the boxes with scores greater than 0.5. Why it is done like that?. Also how are you selecting 200 boxes after NMS? Can you please enlighten us about the process being followed for the NMS. What is the importance of the Tensorarray with 149 values like 10,44,47 and so on? How it affects the NMS?
Any help would be appreciated!!!
After running create_tfrecords.py,I tried to run train.py,but its speed was very slow,just 40000+ steps for three days,was there something that i didn't realize?
assert failed [height must be<=target-offset
FaceBoxes-tensorflow/src/anchor_generator.py
Line 121 in 545ec4f
I wonder why we make division in one case, but do multiplication in another case?
ratio_sqrt = tf.sqrt(aspect_ratio)
unnormalized_height = scale / ratio_sqrt
unnormalized_width = scale * ratio_sqrt
Hi I get the following error:
TypeError: Values passed to parameter 'x' has a DataType of int32 not in the list of allowed values: bfloat16, float16, float32, float64
Anyone else faced a similar issue? Any pointers will really help.
Regards,
Harsh
Hi @TropComplique ,
Have you ever tried to quantize the model by Quantization-aware training? If so, how is the result?
I am trying to create_training_graph in model.py at line 72 like this.
assert mode == tf.estimator.ModeKeys.TRAIN tf.contrib.quantize.create_training_graph(quant_delay=100000)
Since I am not familiar with tf.estimator. I don't quite know where to add
tf.contrib.quantize.create_eval_graph()
to export a quantized graph before a savedmodel.
Or do I need to rewrite the project without tf.estimator.
If you get any ideas, please let me know.
Thanks a lot.
Is it right that model image input size is [None, 1024, 1024, 3]
or it's just during training? i.e. at test time it can be [None,None,None,3]
?
Line 21 in 1da7d8d
FaceBoxes-tensorflow/config.json
Line 20 in 1da7d8d
Hi,
I have been working on the implementation of faceboxes in pytorch.
The most confusing part is the densification part for me.
So output of first layer is 21 anchors.
So for 32 scale they have 16 anchors, but how is each anchor steps defined?
like for 32 its written 32 steps between each anchor, but that makes density low, so they densify it 4 (or 16?) times but at what steps?
Thanks for sharing your codes. After reading your codes, I can not find multi-gpu operations, does the code support mulit-gpu? thanks!
Has anyone migrated the code to TF 2.0?
thanks for your jobs! the faceboxes doesn't work well on small face as you warning in Notes 1, it's kind of you for advice of 'But you can improve its performance if you upscale images before feeding them to the network.For example, resize an image keeping its aspect ratio so its smaller dimension is 768.', I can't understand well about this, do you have some Literature or code about this? thank you very much
I saw so many people are struggling in running the pre-trained model so i wrote a detailed blog on faceboxes and it's implementation.
https://www.datadiscuss.com/deep-learning-project-face-detection/
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.