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.