Responder a: Ajuste de sensibilidade do detector na hora de treinar arquivo!

Home Fóruns Fórum Reconhecimento de Faces e de Objetos com Python e Dlib Ajuste de sensibilidade do detector na hora de treinar arquivo! Responder a: Ajuste de sensibilidade do detector na hora de treinar arquivo!

#28233
Léo Silva
Moderador

    Felipe,

    Pelo que entendi, sua pergunta é sobre o preditor de forma usado com a base de treinamento no Dlib.

    Inicialmente separe as bases de treinamento e de teste.

    Em princípio não sei o que está ocorrendo com o seu detector, uma primeira hipótese seria o número de imagens de treinamento.

    Na literatura do Dlib consta que o número de imagens para treinamento do preditor de forma é pequeno se comparado a outros algoritmos.

    Este número é empírico e podemos alterar dependendo do caso, sendo que o numero que tenho em memória é a partir de 20 amostras.

    Uma segunda hipótese seria a escolha dos pontos do objeto a ser detectado,  pois o preditor de forma pode confundir formas parecidas, por este motivo também deve-se escolher bem os pontos na imagem.

    As opções utilizadas neste treinamento são bem importantes.

    Inicialmente, veja o famoso artigo do Kazemi de 2014 que indicamos no curso:

    Algoritmo do Vahid Kazemi e Josephine Sullivan baseado no paper “One Millisecond Face Alignment with an Ensemble of Regression Trees”.

    O algorítmo de detecção de pontos de referência faciais do Dlib e Preditor de Forma utiliza este algorítmo.

    https://pdfs.semanticscholar.org/d78b/6a5b0dcaa81b1faea5fb0000045a62513567.pdf

    É um artigo um tanto complexo na minha opinião, pois eu precisei ler quatro vezes para começar a entender.

    Veja em http://dlib.net/train_shape_predictor.py.html na documentação do Dlib:

    options = dlib.shape_predictor_training_options()

    # Now make the object responsible for training the model.

    # This algorithm has a bunch of parameters you can mess with. The

    # documentation for the shape_predictor_trainer explains all of them.

    # You should also read Kazemi’s paper which explains all the parameters

    # in great detail. However, here I’m just setting three of them

    # differently than their default values. I’m doing this because we

    # have a very small dataset. In particular, setting the oversampling

    # to a high amount (300) effectively boosts the training set size, so

    # that helps this example.

    options.oversampling_amount = 300

    # I’m also reducing the capacity of the model by explicitly increasing

    # the regularization (making nu smaller) and by using trees with

    # smaller depths.

    options.nu = 0.05

    options.tree_depth = 2

    options.be_verbose = True

    Os parametros nu e oversamplampling_amount correspondem aos parametros learning rate ν e R no paper do Kazemi. É um assunto um pouco mais avançado, mas vale a pena entender.

    Veja a documentação da classe dlib.shape_predictor_training_options em:

    http://dlib.net/python/index.html#dlib.shape_predictor_training_options

    Veja estes posts interessantíssimos do Dr. Adrian do site pyimagesearch.com, principalmente o último que acredito que tenha muita relação com a sua dúvida:

    https://www.pyimagesearch.com/2020/01/13/optimizing-dlib-shape-predictor-accuracy-with-find_min_global/

    https://www.pyimagesearch.com/2019/12/16/training-a-custom-dlib-shape-predictor/

    https://www.pyimagesearch.com/2019/12/23/tuning-dlib-shape-predictor-hyperparameters-to-balance-speed-accuracy-and-model-size/

    Espero que tenha ajudado.