このレポはSSD(シングルショットマルチボックス検出器)を実装します。この実装は、プロジェクトSSD.PytorchおよびDetectronのプロジェクトの影響を強く受けています。設計目標は、モジュール性と拡張性です。
現在、MobileNETV1、MobileNETV2、およびVGGベースのSSD/SSD-LITE実装があります。
また、Google Open Images Datasetで再訓練するためのボックス外のサポートもあります。

モデルをダウンロードして、フォルダー「./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互換バージョンをサポートしています。 Reluを使用して十分なMobileNetv2モデルをトレーニングしたら、対応するPytorchおよびCaffe2モデルをアップロードします。
MobileNETV2 SSD/SSD-LITEがPCの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
フォルダーには、トレーニング、テスト、検証が含まれています。 Sub-Train-Annotations-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!このモデルは、ここに記載されている問題について「#33(コメント)」に基づいて、実際にはonnxに優しいものではありません。
スケーリングされたL2ノルム層は、batchnormに置き換えられており、正味のONNXを互換性のあるものにします。
前提条件のベースは、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 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