Minha implementação de BiseNetv1 e BiseNetv2.
Mious e FPS nas paisagens da cidade Val Set:
| nenhum | ss | sc | msf | MSCF | FPS (fp32/fp16/int8) | link |
|---|---|---|---|---|---|---|
| BiseNetv1 | 75.44 | 76.94 | 77.45 | 78.86 | 112/239/435 | download |
| BiseNetv2 | 74.95 | 75.58 | 76.53 | 77.08 | 103/161/198 | download |
Mious no cocostuff Val2017 Conjunto:
| nenhum | ss | sc | msf | MSCF | link |
|---|---|---|---|---|---|
| BiseNetv1 | 31.49 | 31.42 | 32.46 | 32.55 | download |
| BiseNetv2 | 30.49 | 30.55 | 31.81 | 31.73 | download |
Mious no Ade20k Val Set:
| nenhum | ss | sc | msf | MSCF | link |
|---|---|---|---|---|---|
| BiseNetv1 | 36.15 | 36.04 | 37.27 | 36.58 | download |
| BiseNetv2 | 32.53 | 32.43 | 33.23 | 31.72 | download |
Pontas:
SS significa avaliação de escala única, SSC significa avaliação de culturas em escala única, MSF significa avaliação em várias escalas com aumento de flip e MSCF significa avaliação de culturas em várias escalas com avaliação de flip. As escalas de avaliação e o tamanho da colheita da avaliação de várias escalas podem ser encontradas em configurações.
O FPS é testado de maneira diferente do papel. Para mais informações, consulte aqui.
Os autores do BiseNetv2 usaram o cocosf-10K, enquanto eu usava cocosfuff-123k (não sei como dizer, o mesmo trem de 118k e imagens de 5k Val como detecção de objetos). Assim, os resultados talvez sejam diferentes do papel.
Os autores não relataram resultados sobre o Ade20K, portanto, não há configurações oficiais de treinamento, aqui eu simplesmente forneço um resultado de "fazer funcionar". Talvez os resultados do ADE20K possam ser impulsionados com melhores configurações.
O modelo tem uma grande variação, o que significa que os resultados do treinamento por muitas vezes variariam dentro de uma margem relativamente grande. Por exemplo, se você treinar BiseNetv2 em paisagens da cidade por muitas vezes, observará que o resultado da avaliação da SS do BiseNetv2 varia entre 73.1-75.1.
Tensorrt
Você pode ir ao Tensorrt para obter detalhes.
ncnn
Você pode ir ao NCNN para obter detalhes.
Openvino
Você pode ir ao OpenVino para obter detalhes.
tis
O Triton Inference Server (TIS) fornece uma solução de serviço de implantação. Você pode ir ao TIS para obter detalhes.
Minha plataforma é assim:
Com um peso pré -terenciado, você pode obter inferência em uma única imagem como esta:
$ python tools/demo.py --config configs/bisenetv2_city.py --weight-path /path/to/your/weights.pth --img-path ./example.png
Isso executaria inferência na imagem e salvaria a imagem do resultado em ./res.jpg .
Ou você pode executar inferência em um vídeo como este:
$ python tools/demo_video.py --config configs/bisenetv2_coco.py --weight-path res/model_final.pth --input ./video.mp4 --output res.mp4
Isso geraria arquivo de segmentação como res.mp4 . Se você deseja ler da câmera, pode definir --input camera_id em vez de input ./video.mp4 .
1.CityScapes
Registre -se e faça o download do conjunto de dados no site oficial. Em seguida, descompacte -os no diretório datasets/cityscapes :
$ mv /path/to/leftImg8bit_trainvaltest.zip datasets/cityscapes
$ mv /path/to/gtFine_trainvaltest.zip datasets/cityscapes
$ cd datasets/cityscapes
$ unzip leftImg8bit_trainvaltest.zip
$ unzip gtFine_trainvaltest.zip
2.Cocostuff
Faça o download train2017.zip , val2017.zip e stuffthingmaps_trainval2017.zip dividido no site oficial. Então faça o seguinte:
$ unzip train2017.zip
$ unzip val2017.zip
$ mv train2017/ /path/to/BiSeNet/datasets/coco/images
$ mv val2017/ /path/to/BiSeNet/datasets/coco/images
$ unzip stuffthingmaps_trainval2017.zip
$ mv train2017/ /path/to/BiSeNet/datasets/coco/labels
$ mv val2017/ /path/to/BiSeNet/datasets/coco/labels
$ cd /path/to/BiSeNet
$ python tools/gen_dataset_annos.py --dataset coco
3.ade20k
Faça o download ADEChallengeData2016.zip deste site e descompacte -o. Em seguida, podemos mover as pastas não compactadas para datasets/ade20k e gerar os arquivos TXT com o script que eu preparei para você:
$ unzip ADEChallengeData2016.zip
$ mv ADEChallengeData2016/images /path/to/BiSeNet/datasets/ade20k/
$ mv ADEChallengeData2016/annotations /path/to/BiSeNet/datasets/ade20k/
$ python tools/gen_dataset_annos.py --dataset ade20k
4. Custom DataSet
Se você deseja treinar em seu próprio conjunto de dados, você deve gerar arquivos de anotação primeiro com o formato como este:
munster_000002_000019_leftImg8bit.png,munster_000002_000019_gtFine_labelIds.png
frankfurt_000001_079206_leftImg8bit.png,frankfurt_000001_079206_gtFine_labelIds.png
...
Cada linha é um par de amostra de treinamento e caminho da imagem da verdade, que são separados por uma única vírgula , .
Eu recomendo que você verifique as informações do seu conjunto de dados com o script:
$ python tools/check_dataset_info.py --im_root /path/to/your/data_root --im_anns /path/to/your/anno_file
Isso imprimirá algumas das informações do seu conjunto de dados.
Então você precisa alterar o campo de im_root e train/val_im_anns no arquivo de configuração. Eu preparei um arquivo de configuração de demonstração para você chamado bisenet_customer.py . Você pode começar neste arquivo Conig.
Os comandos de treinamento que eu costumava treinar os modelos podem ser encontrados aqui.
Observação:
bisenetv2 tenha menos flops, ele requer muito mais iterações de treinamento. O tempo de treinamento do bisenetv1 é mais curto.Você também pode carregar os pesos do modelo treinado e o Finetune, assim:
$ export CUDA_VISIBLE_DEVICES=0,1
$ torchrun --nproc_per_node=2 tools/train_amp.py --finetune-from ./res/model_final.pth --config ./configs/bisenetv2_city.py # or bisenetv1
Você também pode avaliar um modelo treinado como este:
$ python tools/evaluate.py --config configs/bisenetv1_city.py --weight-path /path/to/your/weight.pth
Ou você pode usar Multi GPUs:
$ torchrun --nproc_per_node=2 tools/evaluate.py --config configs/bisenetv1_city.py --weight-path /path/to/your/weight.pth
old para implementação original, se precisar, embora eu acredite que não precisará dele.