Это репо реализует SSD (один выстрел Multibox Detector). На реализацию сильно влияют проекты SSD.Pytorch и Detectron. Целью дизайна является модульность и расширяемость.
В настоящее время он имеет реализации SSD/SSD-LITE на основе MobilEnetV1, MobilenETV2 и VGG.
Он также обладает поддержкой для переподготовки в наборе данных Google Open Images.

Пожалуйста, загрузите модели и поместите их в папку "./models". В следующих разделах они понадобятся. 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 Вы можете увидеть приличное повышение скорости, используя 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 Вышеуказанная модель MobilEnetV2 SSD-Lite не совместима с ONNX, поскольку использует RELU6, который не поддерживается ONNX. Код поддерживает ONNX-совместимую версию. Как только я обучил достаточно хорошую модель MobilenETV2 с RELU, я загружу соответствующие модели Pytorch и Caffe2.
Вы можете заметить, что MobilEnetV2 SSD/SSD-Lite медленнее, чем MobilEnetv1 SSD/Lite на ПК. Тем не менее, MobilEnetV2 быстрее на мобильных устройствах.
Если вы не загрузили модели, пожалуйста, скачайте с https://drive.google.com/drive/folders/1pkn-rifvjgwiox0zcrltcxm5gt5laluu?usp=sharing.
Модель: 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
Если вы не загрузили модели, пожалуйста, скачайте с https://drive.google.com/drive/folders/1pkn-rifvjgwiox0zcrltcxm5gt5laluu?usp=sharing.
Модель: 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
Код для повторного производства модели:
# 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 200Модель: 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
Код для повторного производства модели:
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 200Путь набора данных является родительским каталогом папок: аннотации, изображения, Jpegimages, сегментация и сегментация. Вы можете использовать несколько наборов данных для обучения.
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 Конвертированными моделями являются модели/mobilenet-v1-ssd.onnx, модели/mobilenet-v1-ssd_init_net.pb и модели/mobilenet-v1-ssd_predict_net.pb. Модели в формате PBTXT также сохраняются для справки.
Давайте создадим модель для обнаружения оружия для целей безопасности.
Прежде чем начать, вы можете попробовать демо.
python run_ssd_example.py mb1-ssd models/gun_model_2.21.pth models/open-images-model-labels.txt ~ /Downloads/big.JPG
Если вам удастся получить более аннотированные данные, точность может стать намного выше.
python open_images_downloader.py --root ~ /data/open_images --class_names " Handgun,Shotgun " --num_workers 20Он будет загружать данные в папку ~/data/open_images.
Содержание каталога данных выглядит следующим образом.
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
Папки тренируются, тест, проверка содержат изображения. Файлы, такие как субъект-аннотация-bbox.csv, являются файлом аннотации.
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 5Вы можете заморозить базовую сеть, или все слои, кроме голов предсказания.
--freeze_base_net Freeze base net layers.
--freeze_net Freeze all the layers except the prediction head.
Вы также можете использовать различные ставки обучения для базовой сети, дополнительных слоев и головок прогнозирования.
--lr LR, --learning-rate LR
--base_net_lr BASE_NET_LR
initial learning rate for base net.
--extra_layers_lr EXTRA_LAYERS_LR
Поскольку подмножества данных открытых изображений могут быть очень несбалансированными, это также предоставляет удобную опцию для примерно сбалансировки данных.
--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! Модель на самом деле не подходит для Onnx из-за вопроса, упомянутая здесь «#33 (Комментарий)»
Масштабированный слой L2 норм был заменен пакетом, чтобы сделать сетевой ONNX совместимым.
Предварительно основанная на базе заимствовано с https://s3.amazonaws.com/amdegroot-models/vgg16_rededfc.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