Forum Replies Created

Viewing 15 posts - 241 through 255 (of 415 total)
  • Author
    Posts
  • in reply to: código fonte do google Colab #38962
    Gabriel Alves
    Keymaster

      Olá!

      O link para o Colab se encontra sempre na aba “Materiais” da primeira aula onde o conteúdo é apresentado. Então por exemplo, para o primeiro conteúdo prático desse curso você vai encontrar o Colab acessando a aula “Carregamento da imagem”, o link vai aparecer ao selecionar a aba “Materiais”, ao lado de “Tópico”.

      in reply to: Treinamento personalizado – balões 8 #38961
      Gabriel Alves
      Keymaster

        Olá Carla!

        Para não ocorrer esse erro, tem que deixar nas configurações o use_mini_mask igual à False, vi que no seu código não tem essa parte.

        Ou seja, adicione como parâmetro na função load_image_gt() o parâmetro use_mini_mask=False, ficando assim:

        img, img_meta, gt_class_id, gt_bbox, gt_mask = modellib.load_image_gt(dataset_val, inference_config, img_id, use_mini_mask=False)
        in reply to: transferencia de parendizagem #38937
        Gabriel Alves
        Keymaster

          Olá Caio!

          Sim, você poderia usar para isso o DataGenerator, que inclusive é abordado nessas próximas aulas da seção sobre Transferência de aprendizagem.

          Se você está tendo problemas de memória em sua máquina ou no Colab então pode ser devido ao tamanho das imagens que estão sendo carregadas (pode ser tanto no tamanho em bytes quando em quantidade). Não sei se o seu problema que se refere seria apenas quanto à inferência ou seria pro treinamento também, mas você já tentou definir um valor diferente para o batch size? Você vai precisar testar com outros valores de batch caso esteja trabalhando com um dataset muito extenso, já que para o valor em questão é muito grande para a memória disponível dar conta.

          Gabriel Alves
          Keymaster

            Olá, pelo que vi o erro que interrompe a execução não está na célula contendo o código que inicializa o treinamento, mas sim na célula seguinte (onde tem o código model.find_last()), correto?

            Por quanto tempo ficou rodando o treinamento mais ou menos?

            Isso parece estar acontecendo porque ele não localizou o modelo salvo no diretório logs, consegue executar o treinamento novamente e ver se após finalizar aparece os arquivos nessa pasta? (o caminho do subdiretório final aparece ali no resultado da célula do código de treinamento, logo ao lado onde diz “Checkpoint path:”)

            Ou, se puder, compartilhe aqui o seu dataset para eu conseguir reproduzir o problema usando seu código, eu precisaria dele para conseguir reproduzir e chegar ao mesmo problema e assim conseguir verificar mais, pois a princípio quanto ao código estaria ok.

            in reply to: função de ativação #38913
            Gabriel Alves
            Keymaster

              Olá Maiara!

              Poderia sim, para classificação binária é indicado ativação sigmoide inclusive, porém nesse caso foi abordado direto o uso da ReLU, que é amplamente usada atualmente para se trabalhar com problemas mais complexos que esses do exemplo, que é um estudo de caso mais simples  (já adiantando o próximo módulo desse curso, sobre redes neurais convolucionais, que é o foco pois o curso se trata de visão computacional).

              E sim você pode usar diferentes funções de ativação, nesse mesmo projeto mostra como usar sigmoide. Para se aprofundar mais, sugiro seguir a Trilha Redes Neurais e Deep Learning aqui da plataforma pois lá você encontrará mais exemplos específicos contendo outros estudos de caso onde é mostrado uso de outras funções, além de se aprofundar mais na teoria das redes neurais.

              in reply to: não encontrei esse notebook #38912
              Gabriel Alves
              Keymaster

                Olá Maiara,

                O notebook se encontra na aba “Materiais” na primeira aula onde ele é abordado (nesse caso, na aula “Introdução” dessa mesma seção).

                Segue o link abaixo:

                https://colab.research.google.com/drive/12x-fvkVRo1SBUHgJ-XYSatNz2MXMYSzv?usp=sharing

                in reply to: Quantidade de neurônios na camada oculta #38910
                Gabriel Alves
                Keymaster

                  Olá Maiara!

                  Existem algumas “regras gerais” para determinar um número correto de neurônios a serem usados nas camadas ocultas, por exemplo:

                  •  deve estar entre o tamanho da camada de entrada e o tamanho da camada de saída.
                  •  deve ser 2/3 do tamanho da camada de entrada, mais o tamanho da camada de saída.
                  •  deve ser menor que o dobro do tamanho da camada de entrada.

                  Além disso, o número de neurônios necessários para a camada oculta também depende dos casos de treinamento, da complexidade dos dados que devem ser aprendidos e do tipo de funções de ativação que serão usadas.

                  • This reply was modified 2 years, 10 months ago by Gabriel Alves.
                  Gabriel Alves
                  Keymaster

                    Olá, dei uma analisada aqui.

                    Primeiramente, você pode mudar ali de: mask[rr, cc, i] = 3

                    para: mask[rr, cc, i] = 1

                    O certo seria atribuir o valor 1 ao invés de 3, caso você continue trabalhando com máscaras binárias (pois os valores só podem ser 1 ou 0)

                    Porém pela mensagem de erro, parece que esse problema em questão ocorre porque durante o treinamento a máscara não pôde ser carregada, o que faz ele emitir essa mensagem. Isso provavelmente ocorre porque algum ponto do polígono usado para anotação ficou fora da imagem.
                    Ou seja, o ponto marcado na anotação está “fora” dos limites (largura e altura máximo) da imagem, tem alguma ponto/coordenada cujo valor excede o limite máximo do eixo x (largura) ou y (altura). Isso pode ter sido devido a um bug da ferramenta de anotação, onde provavelmente para essa imagem que ocorreu o problema o objeto se encontrava bem encostado na borda da imagem, então quando foi fazer a anotação acabou pegando no limite e o programa considerou como um ponto válido embora esteja tecnicamente fora do limite da imagem, pois como pegou bem na borda alguma parte ficou “fora” da imagem, 1 pixel fora já o suficiente para ocorrer isso (e o programa não faz uma checagem posterior para certificar que o ponto não ficou fora da imagem, ele apenas gera os pontos).

                    Então a solução mais óbvia seria percorrer manualmente por cada amostra do dataset e ver em qual delas a máscara se encontra fora dos limites da imagem, e fazer a correção da anotação. Pela mensagem de erro (index 781 is out of bounds for axis 1 with size 781), você poderia filtrar pelas imagens de 781 px de largura ou altura e checar elas, pois sabe que é esse o tamanho limite da imagem com problema.

                    Porém, percorrer imagem por imagem do dataset e corrigir manualmente pode ser trabalhoso, por isso o que pode te ajudar seria programar direto em seu código para que caso o ponto da máscara exceda esse limite do tamanho da imagem então ele coloque como sendo um ponto dentro da imagem, usando a largura/altura máxima ou minima para saber onde deve colocar o ponto. Ao invés de codificar isso sozinha, encontrei um código que vai te facilitar bastante o trabalho: https://github.com/matterport/Mask_RCNN/issues/636#issuecomment-447751080
                    É um código que não testamos mas pelo que vimos parece funcionar, e talvez você precise fazer algum ou outro ajuste para que se adeque à sua função (mas a princípio ele deve funcionar para outra forma de anotação além dos polígonos, como é o seu caso).

                    Gabriel Alves
                    Keymaster

                      Olá Carla, quando puder mude a permissão do Colab (lá no botão Compartilhar, no canto superior direito) para que fique acessível pelo link, pois assim consigo visualizar por aqui.

                      in reply to: Uso de BB para armazenar os dados #38799
                      Gabriel Alves
                      Keymaster

                        Olá Carlos!

                        Para o caso de detecção de imagens e reconhecimento facial não temos um curso que aborde a implementação de um projeto real que use banco de dados, já que o foco se concentrou mais na implementação e exploração das abordagens em si.

                        Mas se deseja usar banco de dados em seu projeto, recomendo que dê uma olhada nesse vídeo aqui: https://www.youtube.com/watch?v=6gWS2CdtZrs

                        Ele explica bem como você pode usar seu projeto com um banco de dados.

                        Também sugiro ver esse material aqui, onde ele usa SQLite.

                        Se prefere MySQL por exemplo, também tem esse outro exemplo aqui que será bastante útil.

                        Gabriel Alves
                        Keymaster

                          Olá, fizemos a atualização do código no Colab oficial do curso, dê uma olhada: https://colab.research.google.com/drive/1CEu9aKbtM0jDZMUN2282fMwV4c-fEn5O

                          Lá já se encontra a linha de código necessária para deixar compatível com essas versões mais recentes do Tensorflow.

                          Dentro da próxima semana provavelmente colocaremos uma aula de aviso, explicando mais sobre essa mudança.

                          Portanto, por enquanto se baseie no código do link acima, caso encontre algum problema para executar nos avise por favor (e se possível compartilhe o seu Colab, para verificarmos por aqui).

                          in reply to: Treinamento personalizado – balões 3 #38780
                          Gabriel Alves
                          Keymaster

                            Olá Carla!

                            Se você fez a anotação com o VIA (ou outra ferramenta que retorne as anotações para essas formas no formato .json) então você pode fazer a adaptação da forma sugerida. Ou seja, ao invés de

                            rr, cc = skimage.draw.polygon(p['all_points_y'], p['all_points_x'], mask.shape)

                            vai ficar assim

                            if p['name'] == 'polygon':
                              rr, cc = skimage.draw.polygon(p['all_points_y'], p['all_points_x'], mask.shape)            
                            elif p['name'] == 'circle':
                              rr, cc = skimage.draw.circle(p['cx'], p['cy'], p['r'])
                            else: 
                              rr, cc = skimage.draw.ellipse(p['cx'], p['cy'], p['rx'], p['ry'], rotation=np.deg2rad(p['theta']))  
                            
                            

                            (isso dentro do laço de repetição for i, p in enumerate(info[“polygons”]))

                             

                            Caso não funcione, peço que compartilhe aqui a mensagem de erro exata que aparece para você, assim conseguimos te auxiliar melhor.

                             

                            Gabriel Alves
                            Keymaster

                              Olá Carla!

                              Isso parece estar associado à mudança recente no Colab nessas 2 ultimas semanas, onde ele passou a atribuir às novas sessões uma versão do Python onde o pip não consegue baixar uma versão inferior à 2.x., que é necessário para o repositório oficial do Mask R-CNN.

                              Estamos analisando se há uma maneira de solucionar isso executando algumas poucas linhas de comando e assim conseguir usar a mesma versão do tensorflow, mas caso não funcione faremos uma aula contendo as mudanças de código necessárias para poder implementar a segmentação com o tensorflow 2.

                              Por enquanto, para rodar no Colab a segmentação com o Mask R-CNN você pode usar esse repositório auxiliar, no lugar do repositório que usamos (o github.com/matterport/Mask_RCNN), ele foi desenvolvido para ser compatível com essas novas versões. Ou, se preferir você pode seguir os passos desse artigo aqui, que explica como fazer tanto o treinamento quanto a inferência.

                              in reply to: Como aumentar a quantidade de classes para treinamento do balloon. #38670
                              Gabriel Alves
                              Keymaster

                                Olá Getulio!

                                Verifique se lá na variável class_names (que você alterou para colocar as classes do seu modelo) está assim:

                                class_names = [‘BG’, ‘Lata’, ‘Cigarro’]

                                 

                                Se estiver, então faça um teste: coloque print(r[‘class_ids’]) logo abaixo de r = resultados[0], dentro da função processa_frame (nessa parte aqui). E veja os IDs que aparecem para você após testar em uma foto onde há lata e cigarro. Tem que aparecer o ID da classe ‘lata’ e da classe ‘cigarro’, se aparecer o mesmo ID para todas as segmentações na imagem então pode ter acontecido algum problema ao definir as configurações de treinamento. No caso, você precisa certificar que lá dentro da função load_object o código fica por exemplo assim

                                self.add_class(“objetos”, 1, “lata”)

                                self.add_class(“objetos”, 2, “cigarro”)

                                certificando que sejam passados IDs distintos, para cada classe, no caso, 1 e 2.

                                in reply to: Cor das imagens do dataset montado #38669
                                Gabriel Alves
                                Keymaster

                                  Olá Jardel!

                                  Não precisa inicialmente estar em escala de cinza, mas depois convertemos para esse espaço de cor porque as funções de reconhecimento e detecção esperam uma imagem em escala de cinza, já que os algoritmos abordados no curso trabalham com imagens assim.

                                  Se não converter antes ele vai converter dentro da função de reconhecimento. Ou seja, se você usar mais de um método que trabalhe com imagem em tons de cinza ele vai fazer a conversão mais de uma vez. Por isso que, por motivos de performance, se faz a conversão antes de passar como parâmetro (embora seja uma melhora praticamente imperceptível para nós). Pois lembrando, a imagem em escala de cinza possui menos dados e o processamento tende a demorar bem menos.

                                Viewing 15 posts - 241 through 255 (of 415 total)