Este repo implementa SSD (detector multibox de tiro único). A implementação é fortemente influenciada pelos projetos ssd.pytorch e Detectron. O objetivo do design é modularidade e extensibilidade.
Atualmente, possui implementações MobileNetv1, MobileNetv2 e VGG SSD/SSD-Lite.
Ele também possui suporte fora da caixa para reciclagem no conjunto de dados do Google Open Images.

Faça o download dos modelos e coloque -os na pasta "./Models". As seções a seguir precisarão delas. URL: https://drive.google.com/drive/folders/1pkn-rifvjgwiox0zcrltcxm5gt5laluu?usp=sharing
# If you haven't downloaded the models, please download from https://drive.google.com/drive/folders/1pKn-RifvJGWiOx0ZCRLtCXM5GT5lAluu?usp=sharing.
python run_ssd_live_demo.py mb1-ssd models/mobilenet-v1-ssd-mp-0_675.pth models/voc-model-labels.txt # If you haven't downloaded the models, please download from https://drive.google.com/drive/folders/1pKn-RifvJGWiOx0ZCRLtCXM5GT5lAluu?usp=sharing.
python run_ssd_live_caffe2.py models/mobilenet-v1-ssd_init_net.pb models/mobilenet-v1-ssd_predict_net.pb models/voc-model-labels.txt Você pode ver um aumento de velocidade decente usando o CAFFE2.
# If you haven't downloaded the models, please download from https://drive.google.com/drive/folders/1pKn-RifvJGWiOx0ZCRLtCXM5GT5lAluu?usp=sharing.
python run_ssd_live_demo.py mb2-ssd-lite models/mb2-ssd-lite-mp-0_686.pth models/voc-model-labels.txt O modelo SSD-Lite acima do MobileNetv2 não é compatível com ONNX, pois usa Relu6, que não é suportado pelo ONNX. O código suporta a versão compatível com ONNX. Depois de treinar um modelo MobileNetv2 bom o suficiente com o Relu, carregarei os modelos correspondentes de Pytorch e Caffe2 correspondentes.
Você pode notar que o MobileNetv2 SSD/SSD-LITE é mais lento que o MobileNetv1 SSD/Lite no PC. No entanto, o MobileNetv2 é mais rápido em dispositivos móveis.
Se você não baixou os modelos, faça o download de https://drive.google.com/drive/folders/1pkn-rifvjgwiox0zcrltcxm5gt5laluu?usp=sharing.
Modelo: MobileNet-V1-SSD-MP-0_675.PTH
Average Precision Per-class:
aeroplane: 0.6742489426027927
bicycle: 0.7913672875238116
bird: 0.612096015101108
boat: 0.5616407126931772
bottle: 0.3471259064860268
bus: 0.7742298893362103
car: 0.7284171192326804
cat: 0.8360675520354323
chair: 0.5142295855384792
cow: 0.6244090341627014
diningtable: 0.7060035669312754
dog: 0.7849252606216821
horse: 0.8202146617282785
motorbike: 0.793578272243471
person: 0.7042670984734087
pottedplant: 0.40257147509774405
sheep: 0.6071252282334352
sofa: 0.7549120254763918
train: 0.8270992920206008
tvmonitor: 0.6459903029666852
Average Precision Across All Classes:0.6755
Se você não baixou os modelos, faça o download de https://drive.google.com/drive/folders/1pkn-rifvjgwiox0zcrltcxm5gt5laluu?usp=sharing.
Modelo: MB2-SSD-LITE-MP-0_686.PTH
Average Precision Per-class:
aeroplane: 0.6973327307871002
bicycle: 0.7823755921687233
bird: 0.6342429230125619
boat: 0.5478160937380846
bottle: 0.3564069147093762
bus: 0.7882037885117419
car: 0.7444122242934775
cat: 0.8198865557991936
chair: 0.5378973422880109
cow: 0.6186076149254742
diningtable: 0.7369559500950861
dog: 0.7848265495754562
horse: 0.8222948787839229
motorbike: 0.8057808854619948
person: 0.7176976451996411
pottedplant: 0.42802932547480066
sheep: 0.6259124005994047
sofa: 0.7840368059271103
train: 0.8331588002612781
tvmonitor: 0.6555051795079904
Average Precision Across All Classes:0.6860690100560214
O código para reproduzir o modelo:
# If you haven't downloaded the models, please download from https://drive.google.com/drive/folders/1pKn-RifvJGWiOx0ZCRLtCXM5GT5lAluu?usp=sharing.
python train_ssd.py --dataset_type voc --datasets ~ /data/VOC0712/VOC2007 ~ /data/VOC0712/VOC2012 --validation_dataset ~ /data/VOC0712/test/VOC2007/ --net mb2-ssd-lite --base_net models/mb2-imagenet-71_8.pth --scheduler cosine --lr 0.01 --t_max 200 --validation_epochs 5 --num_epochs 200Modelo: VGG16-SSD-MP-0_7726.PTH
Average Precision Per-class:
aeroplane: 0.7957406334737802
bicycle: 0.8305351156180996
bird: 0.7570969203281721
boat: 0.7043869846367731
bottle: 0.5151666571756393
bus: 0.8375121237865507
car: 0.8581508869699901
cat: 0.8696185705648963
chair: 0.6165431194526735
cow: 0.8066422244852381
diningtable: 0.7629391213959706
dog: 0.8444541531856452
horse: 0.8691922094815812
motorbike: 0.8496564646906418
person: 0.793785185549561
pottedplant: 0.5233462463152305
sheep: 0.7786762429478917
sofa: 0.8024887701948746
train: 0.8713861172265407
tvmonitor: 0.7650514925384194
Average Precision Across All Classes:0.7726184620009084
O código para reproduzir o modelo:
wget -P models https://s3.amazonaws.com/amdegroot-models/vgg16_reducedfc.pth
python train_ssd.py --datasets ~ /data/VOC0712/VOC2007/ ~ /data/VOC0712/VOC2012/ --validation_dataset ~ /data/VOC0712/test/VOC2007/ --net vgg16-ssd --base_net models/vgg16_reducedfc.pth --batch_size 24 --num_epochs 200 --scheduler " multi-step” —-milestones “120,160” python train_ssd.py --datasets ~ /data/VOC0712/VOC2007/ ~ /data/VOC0712/VOC2012/ --validation_dataset ~ /data/VOC0712/test/VOC2007/ --net mb1-ssd --base_net models/mobilenet_v1_with_relu_69_5.pth --batch_size 24 --num_epochs 200 --scheduler cosine --lr 0.01 --t_max 200O caminho do conjunto de dados é o diretório pai das pastas: anotações, imagenssets, jpegimages, segmentationclass e segmentationObject. Você pode usar vários conjuntos de dados para treinar.
python eval_ssd.py --net mb1-ssd --dataset ~ /data/VOC0712/test/VOC2007/ --trained_model models/mobilenet-v1-ssd-mp-0_675.pth --label_file models/voc-model-labels.txt python convert_to_caffe2_models.py mb1-ssd models/mobilenet-v1-ssd-mp-0_675.pth models/voc-model-labels.txt Os modelos convertidos são modelos/mobileNet-v1-ssd.onnx, modelos/mobileNet-v1-ssd_init_net.pb e modelos/mobileNet-v1-ssd_predict_net.pb. Os modelos no formato do PBTXT também são salvos para referência.
Vamos construir um modelo para detectar armas para fins de segurança.
Antes de começar, você pode experimentar a demonstração.
python run_ssd_example.py mb1-ssd models/gun_model_2.21.pth models/open-images-model-labels.txt ~ /Downloads/big.JPG
Se você conseguir obter mais dados anotados, a precisão poderá se tornar muito maior.
python open_images_downloader.py --root ~ /data/open_images --class_names " Handgun,Shotgun " --num_workers 20Ele baixará dados na pasta ~/data/open_images.
O conteúdo do diretório de dados parece a seguir.
class-descriptions-boxable.csv test validation
sub-test-annotations-bbox.csv test-annotations-bbox.csv validation-annotations-bbox.csv
sub-train-annotations-bbox.csv train
sub-validation-annotations-bbox.csv train-annotations-bbox.csv
As pastas trem, teste e validação contêm as imagens. Os arquivos como Sub-Train-Annotações-Bbox.csv são o arquivo de anotação.
python train_ssd.py --dataset_type open_images --datasets ~ /data/open_images --net mb1-ssd --pretrained_ssd models/mobilenet-v1-ssd-mp-0_675.pth --scheduler cosine --lr 0.01 --t_max 100 --validation_epochs 5 --num_epochs 100 --base_net_lr 0.001 --batch_size 5Você pode congelar a rede base ou todas as camadas, exceto as cabeças de previsão.
--freeze_base_net Freeze base net layers.
--freeze_net Freeze all the layers except the prediction head.
Você também pode usar taxas de aprendizado diferentes para a rede básica, as camadas extras e as cabeças de previsão.
--lr LR, --learning-rate LR
--base_net_lr BASE_NET_LR
initial learning rate for base net.
--extra_layers_lr EXTRA_LAYERS_LR
Como os subconjuntos de dados de imagens abertas podem ser muito desequilibradas, eles também oferecem uma opção útil para equilibrar aproximadamente os dados.
--balance_data Balance training data by down-sampling more frequent
labels.
python run_ssd_example.py mb1-ssd models/mobilenet-v1-ssd-Epoch-99-Loss-2.2184619531035423.pth models/open-images-model-labels.txt ~ /Downloads/gun.JPG! O modelo não é realmente amigável ao ONNX, devido à questão mencionada aqui "#33 (comentário)"
A camada de norma L2 em escala foi substituída pelo BatchNorm para tornar a rede compatível com ONNX.
A base pré-criada é emprestada de https://s3.amazonaws.com/amdegroot-models/vgg16_reductfc.pth.
python train_ssd.py --datasets ~ /data/VOC0712/VOC2007/ ~ /data/VOC0712/VOC2012/ --validation_dataset ~ /data/VOC0712/test/VOC2007/ --net " vgg16-ssd " --base_net models/vgg16_reducedfc.pth --batch_size 24 --num_epochs 150 --scheduler cosine --lr 0.0012 --t_max 150 --validation_epochs 5python eval_ssd.py --net vgg16-ssd --dataset ~ /data/VOC0712/test/VOC2007/ --trained_model models/vgg16-ssd-Epoch-115-Loss-2.819455094383535.pth --label_file models/voc-model-labels.txt