repo นี้ใช้ SSD (เครื่องตรวจจับ multibox shot single) การดำเนินการได้รับอิทธิพลอย่างมากจากโครงการ SSD.Pytorch และ Detectron เป้าหมายการออกแบบคือโมดูลาร์และการขยายความสามารถ
ปัจจุบันมี Mobilenetv1, Mobilenetv2 และ VGG ที่ใช้การใช้งาน SSD/SSD-Lite
นอกจากนี้ยังมีการสนับสนุนนอกกรอบสำหรับการฝึกอบรมใหม่ในชุดข้อมูล 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, segmentationClass และ segmentationObject คุณสามารถใช้ชุดข้อมูลหลายชุดเพื่อฝึกอบรม
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-sd.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
เนื่องจากข้อมูลส่วนย่อยของข้อมูล Open Images สามารถไม่สมดุลมากจึงมีตัวเลือกที่มีประโยชน์ในการปรับสมดุลข้อมูล
--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 ที่ปรับขนาดได้ถูกแทนที่ด้วย 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