The problem is that you are assuming that the vector will corrospond to "tranny" features, which isn't necessarily the case. You can check if those features are good by just creating a very small network that gets the features as an input (pre-process the images through the first network and save their output to save time) and returns a classification.
That is a good question, the central question even, probably. I think it will correspond to or contain such features because if the features can be reliably used to identify a person, in various pictures, then it should also be good enough to identify transgender facial features. In the conception of what it means to be transgender that you would like to teach to the machin learning algorithm, a person cannot look transgender and not transgender at the same time. Then, I think, it would also not be able to match the person reliably, and the reliably of the method they use appears very high.
I mean, damn ... even I have some trouble telling if this is the same person or not in some of those images. So, this library, if it really delivers what it says the underlying neural network delivers, appears pretty robust against a variety of image manipulations. Still, I would do a few image flips, or some other simple manipulations. If the similarity metric you can get out of the library is good enough to reliably tell apart two people, then I think it should also be good enough to extract what makes a face look transgender. I hope my logic is sound on this, but maybe I am mistaken and I am being really dense right now. The only other possibility would be, perhaps, that transgender people surprisingly mess up the basic identification of a face somehow and transgender people cannot be told apart, through this method, from cis-gender people people that look different to us but are classified as being "the same person" (i.e. get a similarity score that is very high).
Again, the gist of my logic is: The same person cannot look both transgender and not transgender, or it's not the same person, or you have not reliably learned what it means to "look transgender". That is a contradiction with the image library reliably identifying people.
Sigmoid gives you a 0 to 1 range value. In classification terms >0.5 is true and <0.5 is false. Because you have only a single output node instead of 2 for softmax it gives the network a far easier time since it needs to backpropogate a single value rather than do a balancing act for two.
Yes, typically, although that's not always the case. You also have layer and node weights after that. You can normalize those, of course, but then you are practically just doing what a softmax function would have done, i.e. scale the values in such a manner that they add to one, as in a probability distribution. Either way, if we mean the same thing, and we are on the same page here, I do not really care how he gets that distribution. Which activation function he uses is probably a minor detail at this point.
If you use the embedding there is no point in data augmentation since you can be sure the original framework was already trained on far more lighting examples. If you use the method of making a new small network for faces then you should augment and see if it makes a difference.
Right. I think we are on the same page now. That is what I meant. The facial features, i.e. the embeddings that are currently loaded from the numpy files (.npy), should already be robust against that. Do some basic smoke tests that they really are, and that should be fine.
The new neural network I was talking about were the extra layers that could be added through transfer learning. In Keras, for example, one would remove the last few layers from a neural network (as those are generally the most specific), mark the remaining weights as fixed, and only train the weights of the layer one has just added. That way, for example, a neural network like AlexNet that is already trained to recognize crows, but cannot distinguish them from ravens perhaps, can be trained to further discriminate between those two classes of birds, and then one adds the new softmax layer/binary cross entropy layer with the N+1 classes at the end, so that it know also knows about ravens, in addition to crows (which is also why it does not generally make sense to use a sigmoid activation in the final layer for a classification problem).
There is no problem in putting them in regardless on either of the networks I proposed since they at worst make the convergence faster without improvement in accuracy.
No, probably not. I just thought it would add too much complexity and additional variables.
Either way, the approach seems basically sound, to me at least. If the facial features are good enough to recognize the same person this reliably, from their face, then it should also be usable to extract transgender status somehow. The approach makes perfect sense to me. The embeddings that he appears to have generated already should be all that is needed and he is using a support vector machine to do a (non-linear) classification on those feature vectors.
I would play with the hyperparameters of the classification algorithm you are using a bit (SVM). Sorry, but even after all this time I still cannot give you anything better than a rule of thumb how to choose some of those hyperparameters. I think that is still a common criticism in most fields of machine learning. I see that you are already defining a Python list and are naming the various configurations for the classifiers, which is a thing I like doing as well. Try a few different classifiers and twiddle with their settings a bit, then see what accuracy you can get. Sorry for this trial and error approach.
The default appears to be an RBMF kernel. The scikit documentation suggest grid search, which, to me, sorry to be cynical somehwhat, is little more than fancy trial and error.
If everything else, i.e. the facial identification/recognition library, is basically working, you are really only left with tweaking the scikit classifier and its hyperparameters.
But, as always, perhaps I had a brainfart somewhere. I am very smol brain, so if I made an error in logic somewhere, do not feel shy to point it out. I will neg-rate your comment and seethe, but I promise to admit a mistake where I am wrong.