Respostas no Fórum

Visualizando 9 posts - 1 até 9 (de 9 do total)
  • Autor
    Posts
  • em resposta a: Erro ao digitar o comando cmake .. #44072
    Léo Silva
    Moderador

      Ailton,

      Bom dia.

      Os links do imglab e das ferramentas de anotação citadas por vezes são alterados, os novos links seguem abaixo:

      https://www.vinca.de/igem/label/

      https://supervisely.com e https://www.superannotate.com/annotation-tool

      Não conhecia o link do imglab que você encontrou. Parabéns por ter seguido o curso e resolvido seu problema.

      Quanto a atualização do curso, grato pela sugestão, mas em princípio creio que o Dlib é uma tecnologia considerada já antiga, porém na minha humilde opinião, é muita válida para um aprendizado nesta área.

      Espero que tenha ajudado.

      Léo Silva
      Moderador

        UFPA, Boa noite. Como nao consegui restaurar meu ambiente de teste deste curso de forma correta e rapida, passei para o Colab e fiz um pequeno teste, que se encontra no link abaixo no Dropbox. Provavelmente seu erro deve ser de path. Verifique o fonte no link abaixo.

        Desculpe por nao ser um codigo elegante, pois foi um teste bem rapido.

        https://www.dropbox.com/s/fvpsbkjgu88ri0f/deteccao_relogio_teste_colab.py?dl=0

        Por via das duvidas, segue abaixo o mesmo codigo mas nao identado

        <hr />

        import os
        import dlib
        import cv2
        import glob
        from google.colab.patches import cv2_imshow # cv2.imshow() no Colab

        ROOT_DIR = r”/content/Curso Dlib-Udemy/” # coloque seu diretorio raiz aqui…

        print(dlib.test_simple_object_detector(ROOT_DIR + “recursos/teste_relogios.xml”, ROOT_DIR + “recursos/detector_relogios.svm”))

        detectorRelogio = dlib.simple_object_detector(ROOT_DIR + “recursos/detector_relogios.svm”)
        for imagem in glob.glob(os.path.join(ROOT_DIR + “relogios_teste”, “*.jpg”)):
        print(imagem)
        img = cv2.imread(imagem)
        objetosDetectados = detectorRelogio(img)
        for d in objetosDetectados:
        e, t, d, b = (int(d.left()), int(d.top()), int(d.right()), int(d.bottom()))
        print(e,t,d,b)
        cv2.rectangle(img, (e,t), (d, b), (0,0,255), 2)

        cv2_imshow(img)
        cv2.waitKey(0)

        cv2.destroyAllWindows()

         

        Léo Silva
        Moderador

          Em tempo, quando é submetido este formulário, a identação do código fonte se perde. Obtenha o fonte do local onde você fez download dos fontes do curso.

          Léo Silva
          Moderador

            UFPA, Boa tarde. Já faz um bom tempo que não lido com estes códigos e o meu ambiente de teste tem que ser refeito em parte para tentar reproduzir seu erro. Aparentemente o código está Ok.  Peguei o código abaixo do curso. Você pode obter este código também donde fez o download dos fontes deste curso.

            Só não tenho certeza que isso vai resolver seu problema. Quando fizemos o curso, algum tempo atrás, recordo que às vezes ocorria esse erro e era devido a algum path errado ou instalação das bibliotecas. Verifique novamente todo o ambiente.

            Tente também dar um print em algumas variáveis, por exemplo print(img.shape) ou  print(e,t,d,b) .

            Espero que tenha ajudado.

            import os
            import dlib
            import cv2
            import glob

            print(dlib.test_simple_object_detector(“recursos/teste_relogios.xml”, “recursos/detector_relogios.svm”))

            detectorRelogio = dlib.simple_object_detector(“recursos/detector_relogios.svm”)
            for imagem in glob.glob(os.path.join(“relogios_teste”, “*.jpg”)):
            img = cv2.imread(imagem)
            objetosDetectados = detectorRelogio(img)
            for d in objetosDetectados:
            e, t, d, b = (int(d.left()), int(d.top()), int(d.right()), int(d.bottom()))
            cv2.rectangle(img, (e,t), (d, b), (0,0,255), 2)

            cv2.imshow(“Detector de relógios”, img)
            cv2.waitKey(0)

            cv2.destroyAllWindows()

            em resposta a: Uso de GPU em CNNs #29380
            Léo Silva
            Moderador

              Mateus,

              Inicialmente vamos comentar um pouco sobre GPUs.

              GPUs (Graphics Processing Units) são muito utilizadas em deep learning devido a arquitetura de processamento paralelo e a NVIDIA é o líder de mercado em hardware de deep learning.

              Veja em https://developer.nvidia.com/cuda-gpus

              Você precisa saber se seu equipamento já tem uma GPU. No caso de Linux tem um link que explica bem todos os detalhes: https://www.binarytides.com/linux-get-gpu-information/

              Os drivers da NVIDIA devem estar instalados em seu sistema para utilizar as GPUs, portanto existe a necessidade de fazer algumas configurações e instalar alguns drives para fazer funcionar uma GPU em sua máquina.

              Não tenho uma GPU instalada na minha máquina e pode ser um custo relativamente alto, porém uma outra opção é utilizar uma máquina virtual na nuvem, por exemplo, a AWS  da Amazon, Microsoft Azure e Google Colab.

              Agora vamos a sua pergunta propriamente dita, caso a sua máquina não tenha uma GPU ou não tenha os drives corretamente instalados, o processamento foi feito usando uma CPU mesmo.

              No caso deste curso, há um detector facial do Dlib treinado pelo HOG e é feita uma comparação com um outro detector do Dlib treinado em uma CNN, portanto não estamos treinando uma CNN neste curso, apenas utilizando um modelo de detecção facial já treinado.

              Realmente não sei se o autor do Dlib, o Davis King, utilizou uma GPU para treinar o detector CNN dele, mas em principio, acredito que sim.

              Não encontrei nem na documentação do Dlib nem na internet, como o autor efetivamente montou este modelo utilizando CNN. Na minha opinião, o autor quis mostrar que pode ser utilizado tanto um detector do Dlib quanto um de CNN, sendo que o modelo CNN é mais preciso que o HOG do Dlib, porém usa muito mais poder computacional para executar.

              Sugiro inicialmente você utilizar o Hog do Dlib tanto para detecção quanto para detecção de pontos de referência, pois é bem rápido e dá bons resultados.

              Não há como criar um modelo CNN a partir do Dlib, mas há outras ferramentas excelentes para fazer tal tarefa. Para se trabalhar com imagens, uma das ferramentas mais utilizadas é o Tensorflow (a IAExpert tem cursos excelentes sobre este tema) ou mesmo utilizando Keras tendo o Tensorflow como backend.  O PyTorch também é uma ferramenta excelente.

              O python 2.7 ou 3.5 e adiante é instalado normalmente sem precisar mencionar a GPU.

              Diferentemente, no caso da biblioteca tensorflow do Google, muito utilizada na área de deep learning, deve ser instalada com ou sem o suporte do GPU. Quando você executa uma aplicação com tensorflow, você é informado se está usando GPU ou não.

              Veja o link abaixo, que é uma resposta do autor do Dlib, o Davis King sobre o uso de GPUs no Dlib:

              https://github.com/davisking/dlib/issues/522

              Tanto no caso do Tensorflow quanto no PyTorch você consegue facilmente habilitar o uso de GPUs.

              Espero que tenha ajudado.

              em resposta a: boa tarde Jones #28359
              Léo Silva
              Moderador

                Luciano,

                Erros de instalação são meio maçantes mesmo de se tratar e podemos tentar resolver de diversas formas.

                Alguns alunos deste curso tem problemas com a instalação das ferramentas principalmente no ambiente Windows 10.

                Há vários modos de instalar o OpenCV, Dlib e as bibliotecas necessárias para execução deste curso, algumas bem complexas, e o modo mais simples que eu e o professor Jones encontramos que funcionou em todos os principais sistemas operacionais (Linux, Windows e Mac) foi o Anaconda mesmo, bem como optamos também pela utilização do PyCharm, que é uma das IDEs mais utilizadas em python.

                Quanto ao problema especificamente, uma idéia  inicial  é que pode ser que a sua instalação esteja correta mas o seu projeto esteja apontando para um python incorreto que não tenha a alguma biblioteca necessária instalada,  a qual o PyCharm não está conseguindo carregar.

                É muito importante carregar o interpretador onde foram instaladas as bibliotecas Dlib, OpenCV e Pillow quando da criação de um novo projeto, porém você pode acertar este caminho depois.

                O problema é que às vezes por default, o PyCharm assume algum outro python existente na máquina.

                No PyCharm, veja em File —> Settings —> Project Interpreter o endereço do interpretador no lado direito em cima na tela, e na parte debaixo desta tela verifique se as bibliotecas já estão instaladas e sua respectiva versão.

                Se não encontrar as bibliotecas, troque o endereço do interpretador e verifique novamente.

                Caso alguma biblioteca não esteja instalada, você pode instalar as bibliotecas pelo Anaconda  usando a interface do anaconda-navigator (chame pelo prompt $anaconda-navigator), selecionando o environment (clique em Environment e selecione o ambiente virtual criado), colocar Not Installed na caixa mais a esquerda acima, selecionar a lib que falta e dar apply.

                Obs:  às vezes pode ser necessário adicionar o canal conda-forge, o que pode ser feito dentro do anaconda-navigator mesmo.

                Na maioria dos casos, este procedimento já resolve.

                No caso do OpenCV já tiver instalado e mesmo assim não funcionar, uma nova tentativa seria desinstalar e instalar novamente selecionando Not instalei no combo e clicando em OpenCV.

                Realmente não me recordo bem se há necessidade de instalar primeiramente o OpenCV e depois o Dlib. Acredito que o ambiente consegue se resolver, porém se começar a aparecer erros, um outro workaround seria criar um novo ambiente virtual e instalar as bibliotecas como ensinado no curso.

                Se não funcionar e você estiver no Windows 10,  sugiro reinstalar as bibliotecas, “limpando” a sua máquina das instalações anteriores,  apagando os diretórios das bibliotecas instaladas sem mexer no Registry conforme orientação da Microsoft e faça novamente o download e instale conforme a aula 4.

                Porém há outros modos de executar os fontes do curso sem a necessidade do PyCharm.

                Você pode utilizar o Spyder que já está dentro do Anaconda que é excelente ou usar o  Visual Studio Code para ver e editar os fontes em python e executar o python pelo prompt dentro do ambiente virtual.

                Normalmente eu vou para o diretório raiz onde se encontram os fontes em python do curso, dou um activate no ambiente virtual criado e a seguir executo o python chamando o código fonte a ser executado.

                Espero que tenha ajudado.

                em resposta 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.

                   

                  em resposta a: Erro ao gerar aquivo svm #23491
                  Léo Silva
                  Moderador

                    Felipe,

                    Problema de erro de alocação de memória.

                    Pode ser memoria insuficiente para executar esta tarefa.

                    Tente usar imagens menores, menos imagens  ou coloque mais RAM na sua máquina.

                    Procurei por “MemoryError: bad allocation dlib” e encontrei alguns posts interessantes que talvez possam te ajudar:

                    Veja uma explicação do Davis King, autor do Dlib, sobre este tipo de erro no treinamento:

                    https://github.com/davisking/dlib/issues/1334

                    Verifique o link abaixo para tratar deste erro de maneira geral:

                    https://www.techinpost.com/memory-allocation-error/

                    Um outro caminho seria executar o treinamento utilizando o prompt do python, ou seja, não utilizando o pyCharm.

                    > python treinamento_deteccao_bovinos.py

                    Veja as opções do treinamento em

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

                    Tente estas opções também:

                    opcoes.num_threads = 4

                    opcoes_be_verbose = True

                    Espero que tenha ajudado de algum modo.

                    em resposta a: Erro ao digitar o comando cmake .. #23476
                    Léo Silva
                    Moderador

                      Alguns alunos deste curso tem encontrado dificuldade em instalar o cmake ou o imglab principalmente no Windows, em especial na versão 10.

                      Neste curso, só  existe a necessidade do cmake para gerar o imglab.

                      O problema com o cmake  ou com o imglab é que dependem da configuração da máquina do aluno, ou seja, no caso dependem das versões das bibliotecas utilizadas principalmente do python e das suas dependências.

                      Neste curso, por uma questão didática optamos por instalar o imglab a partir do seu código fonte utilizando o CMake.

                      No entanto, alguns alunos indicaram o site abaixo que já tem imglab pronto para execução dependendo do sistema operacional da máquina. Veja em:

                      https://github.com/futurice/intro-to-object-detection/tree/master/imglab

                      Se sua máquina for 32 bits utilize o executável imglab_win32.exe

                      Se sua máquina for 64 bits utilize o executável imglab_win64.exe

                      Também existem versões para o Mac e o Ubuntu.

                      Também a ferramenta imglab está disponível na internet em  https://imglab.in/#

                      Quando elaboramos este curso, provavelmente não existiam ou não tínhamos conhecimento nem dos executáveis citados acima nem do imglab que executa na web.

                      Portanto, seguimos a orientação no site do autor do Dlib, Davis King,  para fazer a ‘compilação’ da ferramenta imglab utilizando o cmake.

                      Atualmente eu concordo em utilizar a ferramenta pronta, mas para quem quiser, não deixa de ser um exercício interessante utilizar o cmake, que dependendo do caso pode ser necessário na vida profissional.

                      O imglab é uma ferramenta de anotação, que foi elaborada pelo autor do Dlib, Davis King, que a utilizou para fazer alguns dos modelos que foram vistos no curso.

                      A grosso modo, ela pode marcar retângulos em uma imagem para utilizar na fase de detecção ou marcar diversos pontos de referência na imagem para usar na fase de detecção de pontos de referência de um objeto na imagem, como no exemplo dos relógios citado no curso.

                      Você pode com certeza utilizar alguma outra ferramenta de anotação, sendo que existem várias disponíveis na internet.

                      Um site interessante para ver este tipo de ferramenta é o supervise.ly ou superannotate.com.

                    Visualizando 9 posts - 1 até 9 (de 9 do total)