Dieses Repo implementiert SSD (Single -Shot -Multibox -Detektor). Die Implementierung wird stark von den Projekten SSD.Pytorch und DETECTRON beeinflusst. Das Designziel ist Modularität und Erweiterbarkeit.
Derzeit verfügt es über Mobilenetv1-, Mobilenetv2- und VGG-basierte SSD/SSD-Lite-Implementierungen.
Außerdem unterstützt es außerhalb des Box-Supports für die Umschulung in Google Open Images-Datensatz.

Bitte laden Sie die Modelle herunter und legen Sie sie in den Ordner "./Models". Die folgenden Abschnitte benötigen sie. 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 Sie können einen anständigen Geschwindigkeitsschub sehen, indem Sie Caffe2 verwenden.
# 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 Das obige Mobilenetv2-SSD-Lite-Modell ist nicht auf nx-kompatibel, da es Relu6 verwendet, das nicht von ONNX unterstützt wird. Der Code unterstützt die OnNX-kompatible Version. Sobald ich ein Mobilenetv2 -Modell mit Relu ausreichend ausgebildet habe, werde ich die entsprechenden Pytorch- und Caffe2 -Modelle hochladen.
Sie können feststellen, dass Mobilenetv2 SSD/SSD-Lite langsamer ist als Mobilenetv1 SSD/Lite auf dem PC. Mobilenetv2 ist jedoch auf mobilen Geräten schneller.
Wenn Sie die Modelle nicht heruntergeladen haben, laden Sie bitte von https://drive.google.com/drive/Folders/1pkn-Rifvjgwiox0zcrltcxm5gt5Laluu?usp=sharing herunter.
Modell: 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
Wenn Sie die Modelle nicht heruntergeladen haben, laden Sie bitte von https://drive.google.com/drive/Folders/1pkn-Rifvjgwiox0zcrltcxm5gt5Laluu?usp=sharing herunter.
Modell: 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
Der Code, um das Modell neu zu produzieren:
# 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 200Modell: 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
Der Code, um das Modell neu zu produzieren:
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 200Der Dataset -Pfad ist das übergeordnete Verzeichnis der Ordner: Annotationen, Imagesets, JPegimages, SegmentationClass und SegmentationObject. Sie können mehrere Datensätze zum Training verwenden.
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 Die konvertierten Modelle sind Modelle/Mobilenet-V1-SSD.onnx, Modelle/Mobilenet-V1-ssd_init_net.pb und Modelle/Mobilenet-V1-SSD_PREDICT_NET.PB. Die Modelle im Format von PBTXT werden ebenfalls als Referenz gespeichert.
Wir bauen ein Modell auf, um Waffen für Sicherheitszwecke zu erkennen.
Bevor Sie beginnen, können Sie die Demo ausprobieren.
python run_ssd_example.py mb1-ssd models/gun_model_2.21.pth models/open-images-model-labels.txt ~ /Downloads/big.JPG
Wenn Sie es schaffen, kommentierte Daten zu erhalten, könnte die Genauigkeit viel höher werden.
python open_images_downloader.py --root ~ /data/open_images --class_names " Handgun,Shotgun " --num_workers 20Es wird Daten in den Ordner ~/data/open_images heruntergeladen.
Der Inhalt des Datenverzeichnisses sieht wie folgt aus.
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
Die Ordner Train, Test, Validierung enthalten die Bilder. Die Dateien wie Sub-Train-Annotations-Bbox.csv sind die Annotationsdatei.
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 5Sie können das Grundnetz oder alle Schichten mit Ausnahme der Vorhersageköpfe einfrieren.
--freeze_base_net Freeze base net layers.
--freeze_net Freeze all the layers except the prediction head.
Sie können auch unterschiedliche Lernraten für das Basisnetz, die zusätzlichen Schichten und die Vorhersageköpfe verwenden.
--lr LR, --learning-rate LR
--base_net_lr BASE_NET_LR
initial learning rate for base net.
--extra_layers_lr EXTRA_LAYERS_LR
Da Untergruppen von offenen Bildern sehr unausgeglichen werden können, bietet sie auch eine praktische Option, um die Daten grob auszugleichen.
--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! Das Modell ist nicht wirklich auf nx-freundlicherweise aufgrund des hier erwähnten Problems "#33 (Kommentar)".
Die skalierte L2 -Normschicht wurde durch Batchnorm ersetzt, um das Netz -ONNX -kompatibel zu machen.
Das vorbereitete Basis wird von https://s3.amazonaws.com/amdegroot-models/vgg16_reducedfc.pth ausgeliehen.
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