Respostas no Fórum

Visualizando 15 posts - 226 até 240 (de 402 do total)
  • Autor
    Posts
  • em resposta a: Treinamento personalizado – balões 8 #39094
    Gabriel Alves
    Moderador

      Olá!

      Antes de iniciar o treinamento, execute o seguinte comando:

      !nvidia-smi

      e então me passe aqui as informações, que contém o nome da GPU que foi atribuída à sua sessão.

       

      Para otimizar o uso da memória você pode tentar algumas coisas:

      Mudar a rede de backbone, por padrão é a resnet101 porém você pode mudar para a resnet50 e assim reduzir o uso da memória, além de treinar mais rápido.

      Outra possível causa do problema é o tamanho das imagens do dataset, que estão grandes para processar. você pode tentar diminuir o tamanho das imagens. O tamanho é controlado pelos seguintes parâmetros:

      IMAGE_MIN_DIM = 800
      IMAGE_MAX_DIM = 1024

      Tente mudar o max_dim para 768 por exemplo e o outro (min_dim) deixa um tamanho menor ainda.

       

      Em último caso a opção seria reduzir mais ainda o batch size, que por padrão já é baixo (2) mas pode tentar reduzir para 1.

      BATCH_SIZE = 1

       

      Obs: Esses parâmetros você define lá na classe ConfigRede 

      Veja que lá já tem alguns parâmetros definidos, como o IMAGES_PER_GPU = 2

      para definir esses outros basta colocar ele dentro da classe, entre o “class ConfigRede(Config):” e o “config = ConfigRede()”. É igual ao padrão que estão nos outros ([Parâmetro] = [Valor]), por exemplo assim:

      BACKBONE = ‘resnet50’

       

      Tente essas mudanças e qualquer coisa avise

      em resposta a: Método de Otsu – implementação 1 – Dúvidas #38993
      Gabriel Alves
      Moderador

        Olá Mathews!

        Estranho esse comportamento, você executou os comandos anteriores na ordem certa, correto? Analisando o que você mandou, parece estar de acordo com o código da aula (mas qualquer coisa, confira aqui).

        Como está o seu código da função “mostrar()”?

        Aliás, caso você tenha executado o código novamente e continue desse jeito peço que por favor compartilhe aqui o seu Colab pois desse modo consigo verificar melhor, as vezes pode ter outra coisa no código interferindo.

        em resposta a: código fonte do google Colab #38962
        Gabriel Alves
        Moderador

          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”.

          em resposta a: Treinamento personalizado – balões 8 #38961
          Gabriel Alves
          Moderador

            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)
            em resposta a: transferencia de parendizagem #38937
            Gabriel Alves
            Moderador

              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
              Moderador

                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.

                em resposta a: função de ativação #38913
                Gabriel Alves
                Moderador

                  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.

                  em resposta a: não encontrei esse notebook #38912
                  Gabriel Alves
                  Moderador

                    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

                    em resposta a: Quantidade de neurônios na camada oculta #38910
                    Gabriel Alves
                    Moderador

                      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.

                      • Esta resposta foi modificada 2 anos, 6 meses atrás por Gabriel Alves.
                      Gabriel Alves
                      Moderador

                        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
                        Moderador

                          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.

                          em resposta a: Uso de BB para armazenar os dados #38799
                          Gabriel Alves
                          Moderador

                            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
                            Moderador

                              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).

                              em resposta a: Treinamento personalizado – balões 3 #38780
                              Gabriel Alves
                              Moderador

                                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
                                Moderador

                                  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.

                                Visualizando 15 posts - 226 até 240 (de 402 do total)