Gunakan ini sebagai gantinya: https://github.com/facebookResearch/maskrcnn-benchmark

Contoh output e2e_mask_rcnn-r-101-fpn_2x menggunakan bobot detectron pretrained.

Contoh yang sesuai output dari detectron.

Contoh output e2e_keypoint_rcnn-r-50-fpn_s1x menggunakan bobot detectron pretrained.
Kode ini mengikuti arsitektur implementasi Detectron. Hanya sebagian fungsi yang didukung. Periksa bagian ini untuk informasi lebih lanjut.
Dengan kode ini, Anda bisa ...
Repositori ini awalnya dibangun di atas jwyang/lebih cepat-rcnn.pytorch. Namun, setelah banyak modifikasi, strukturnya banyak berubah dan sekarang lebih mirip dengan Detectron. Saya sengaja membuat segala sesuatu yang serupa atau identik dengan implementasi Detectron, sehingga dapat mereproduksi hasilnya langsung dari file berat badan pretrained resmi.
Implementasi ini memiliki fitur berikut:
Ini adalah kode pytorch murni . Tentu saja, ada beberapa kode CUDA.
Ini mendukung pelatihan batch multi-gambar .
Ini mendukung beberapa pelatihan GPU .
Ini mendukung tiga metode pengumpulan . Perhatikan bahwa hanya ROI Align yang direvisi agar sesuai dengan implementasi di Caffe2. Jadi, gunakan itu.
Itu efisien memori . Untuk batching data, ada dua techiniques yang tersedia untuk mengurangi penggunaan memori: 1) Pengelompokan aspek : Gambar grup dengan rasio aspek yang serupa dalam batch 2) Aspek CHOPSPING : CHOIL Images yang terlalu panjang. Pengelompokan aspek diimplementasikan di Detectron, jadi digunakan untuk default. Aspek penanaman adalah ide dari jwyang/lebih cepat-rcnn.pytorch, dan tidak digunakan untuk default.
Selain itu, saya menerapkan modul nn.DataParallel yang disesuaikan yang memungkinkan ukuran gumpalan batch yang berbeda pada GPU yang berbeda. Periksa bagian NN.DataParallel saya untuk detail lebih lanjut tentang ini.
Kloning repo:
git clone https://github.com/roytseng-tw/mask-rcnn.pytorch.git
Diuji di bawah Python3.
Kompilasi kode CUDA:
cd lib # please change to this directory
sh make.sh
Jika Anda menggunakan Volta GPU, Uncomment Line ini di lib/mask.sh dan ingat untuk menunda backslash pada garis di atas. CUDA_PATH default ke /usr/loca/cuda . Jika Anda ingin menggunakan perpustakaan CUDA di jalur yang berbeda, ubah baris ini sesuai.
Ini akan menyusun semua modul yang Anda butuhkan, termasuk NMS, ROI_POOING, ROI_CROP dan ROI_ALIGN. (Sebenarnya GPU NMS tidak pernah digunakan ...)
Perhatikan bahwa, jika Anda menggunakan CUDA_VISIBLE_DEVICES untuk mengatur GPU, pastikan setidaknya satu GPU terlihat saat mengkompilasi kode.
Buat folder data di bawah repo,
cd {repo_root}
mkdir data
Coco : Unduh gambar dan anotasi Coco dari situs web Coco.
Dan pastikan untuk menempatkan file sebagai struktur berikut:
coco
├── annotations
| ├── instances_minival2014.json
│ ├── instances_train2014.json
│ ├── instances_train2017.json
│ ├── instances_val2014.json
│ ├── instances_val2017.json
│ ├── instances_valminusminival2014.json
│ ├── ...
|
└── images
├── train2014
├── train2017
├── val2014
├──val2017
├── ...
Unduh Anotasi Mini Coco dari sini. Harap dicatat bahwa Minival persis setara dengan set Val 2017 yang baru saja ditentukan. Demikian pula, Union of Valminusminival dan kereta 2014 setara dengan set kereta 2017.
Jangan ragu untuk meletakkan dataset di tempat mana pun yang Anda inginkan, dan kemudian tautkan dataset di bawah data/ folder:
ln -s path/to/coco data/coco
Merekomendasikan untuk meletakkan gambar pada SSD untuk kemungkinan kinerja pelatihan yang lebih baik
Saya menggunakan bobot pretrained imagenet dari caffe untuk jaringan backbone.
Unduh dan masukkan ke dalam {repo_root}/data/pretrained_model .
Anda dapat perintah berikut untuk mengunduh semuanya:
argparse_color_formater , colorama , requests python tools/download_imagenet_weights.py
Catatan : Bobot pretrained Caffe memiliki kinerja yang sedikit lebih baik daripada pretrained Pytorch. Sarankan untuk menggunakan model pretrained caffe dari tautan di atas untuk mereproduksi hasilnya. Ngomong -ngomong, detectron juga menggunakan bobot pretrained dari caffe.
Jika Anda ingin menggunakan model pra-terlatih Pytorch, harap diingat untuk mengubah gambar dari BGR ke RGB, dan juga menggunakan preprocessing data yang sama (minus rata-rata dan menormalkan) seperti yang digunakan dalam model pretrained Pytorch.
Selain menggunakan bobot pretrained untuk resnet di atas, Anda juga dapat menggunakan bobot dari detectron dengan mengubah baris yang sesuai dalam file konfigurasi model sebagai berikut:
RESNETS:
IMAGENET_PRETRAINED_WEIGHTS: 'data/pretrained_model/R-50.pkl'
R-50-gn.pkl dan R-101-gn.pkl diperlukan untuk GN_BASELINES.
X-101-32x8d.pkl, x-101-64x4d.pkl dan x-152-32x8d-in5k.pkl diperlukan untuk backbones resnext.
Jangan mengubah apa pun di file konfigurasi yang disediakan (configs/**/xxxx.yml) kecuali Anda tahu apa yang Anda lakukan
Gunakan variabel lingkungan CUDA_VISIBLE_DEVICES untuk mengontrol GPU mana yang akan digunakan.
Batch_size: NUM_GPUS x TRAIN.IMS_PER_BATCH
efektif_batch_size: Batch_size x iter_size
Perubahan sesuatu: new value of something / old value of something
Opsi konfigurasi berikut akan disesuaikan secara otomatis sesuai dengan pengaturan pelatihan aktual: 1) Jumlah GPU NUM_GPUS , 2) Ukuran Batch per GPU TRAIN.IMS_PER_BATCH , 3) Periode Pembaruan iter_size
SOLVER.BASE_LR : Sesuaikan secara langsung proposional dengan perubahan batch_size.SOLVER.STEPS , SOLVER.MAX_ITER : Sesuaikan propotional terbalik dengan perubahan efektif_batch_size.Ambil mask-rcnn dengan tulang punggung res50 misalnya.
python tools/train_net_step.py --dataset coco2017 --cfg configs/baselines/e2e_mask_rcnn_R-50-C4.yml --use_tfboard --bs {batch_size} --nw {num_workers}
Gunakan --bs untuk menimpa ukuran batch default dengan nilai yang tepat yang sesuai dengan GPU Anda. Simliar untuk --nw , jumlah utas loader data default ke 4 di config.py.
Tentukan —-use_tfboard untuk mencatat kerugian pada Tensorboard.
Catatan : Gunakan --dataset keypoints_coco2017 Saat pelatihan untuk keypoint-rcnn.
--iter_size Seperti di Caffe, perbarui jaringan sekali ( optimizer.step() ) setiap iteration iter_size (maju + mundur). Cara ini memiliki ukuran batch efektif yang lebih besar untuk pelatihan. Perhatikan bahwa, jumlah langkah hanya meningkat setelah pembaruan jaringan.
python tools/train_net_step.py --dataset coco2017 --cfg configs/baselines/e2e_mask_rcnn_R-50-C4.yml --bs 4 --iter_size 4
iter_size Default ke 1.
python tools/train_net_step.py ... --load_ckpt {path/to/the/checkpoint}
atau menggunakan file pos pemeriksaan detectron
python tools/train_net_step.py ... --load_detectron {path/to/the/checkpoint}
python tools/train_net_step.py ... --load_ckpt {path/to/the/checkpoint} --resume
Saat melanjutkan pelatihan, jumlah langkah dan status pengoptimal juga akan dipulihkan dari pos pemeriksaan. Untuk pengoptimal SGD, status pengoptimal berisi momentum untuk setiap parameter yang dapat dilatih.
Catatan : --resume belum didukung untuk --load_detectron
python tools/train_net_step.py ... --no_save --set {config.name1} {value1} {config.name2} {value2} ...
python tools/train_net_step.py ... --no_save --set DEBUG True
--no_save untuk menghindari menyimpan pos pemeriksaan atau logging apa pun. python train_net_step.py --help
Singkatnya, gunakan train_net_step.py .
Di train_net_step.py :
SOLVER.LR_POLICY: steps_with_decay didukung. (Terdeset) di train_net.py Beberapa opsi konfigurasi tidak memiliki efek dan layak diperhatikan:
SOLVER.LR_POLICY , SOLVER.MAX_ITER , SOLVER.STEPS , SOLVER.LRS : untuk saat ini, kebijakan pelatihan dikendalikan oleh argumen baris perintah ini:
--epochs : Berapa banyak zaman untuk berlatih. Satu zaman berarti satu perjalanan melalui seluruh set pelatihan. Default ke 6.--lr_decay_epochs : zaman untuk membusuk tingkat pembelajaran. Pembusukan terjadi pada awal zaman. Epoch adalah 0-indeks. Default ke [4, 5]. Untuk lebih banyak argumen baris perintah, silakan merujuk ke python train_net.py --help
SOLVER.WARM_UP_ITERS , SOLVER.WARM_UP_FACTOR , SOLVER.WARM_UP_METHOD : Pelatihan pemanasan tidak didukung.
Misalnya, uji topeng-rcnn pada set Val Coco2017
python tools/test_net.py --dataset coco2017 --cfg config/baselines/e2e_mask_rcnn_R-50-FPN_1x.yaml --load_ckpt {path/to/your/checkpoint}
Gunakan --load_detectron untuk memuat pos pemeriksaan Detectron. Jika beberapa GPU tersedia, tambahkan --multi-gpu-testing .
Tentukan directry output yang berbeda, gunakan --output_dir {...} . Default ke {the/parent/dir/of/checkpoint}/test
python tools/infer_simple.py --dataset coco --cfg cfgs/baselines/e2e_mask_rcnn_R-50-C4.yml --load_ckpt {path/to/your/checkpoint} --image_dir {dir/of/input/images} --output_dir {dir/to/save/visualizations}
--output_dir default ke infer_outputs .
Tulang punggung:
ResNet50_conv4_body , ResNet50_conv5_body , ResNet101_Conv4_Body , ResNet101_Conv5_Body , ResNet152_Conv5_Body[fpn_]ResNet101_Conv4_Body , [fpn_]ResNet101_Conv5_Body , [fpn_]ResNet152_Conv5_Bodyfpn_ResNet50_conv5_body , fpn_ResNet50_conv5_P2only_body , fpn_ResNet101_conv5_body , fpn_resnet101_conv5_p2only_body, fpn_ResNet101_conv5_P2only_body , fpn_resnet152_conv5_p2only_body, fpn_ResNet152_conv5_body , fpn_ResNet152_conv5_P2only_body Kotak kepala: ResNet_roi_conv5_head , roi_2mlp_head , roi_Xconv1fc_head , roi_Xconv1fc_gn_head
Kepala mask: mask_rcnn_fcn_head_v0upshare , mask_rcnn_fcn_head_v0up , mask_rcnn_fcn_head_v1up , mask_rcnn_fcn_head_v1up4convs , mask_rcnn_fcn_head_v1up4convs_gn
Kepala keypoints: roi_pose_head_v1convX
CATATAN : Penamaannya mirip dengan yang digunakan dalam detectron. Hapus saja add_ prepending.
Hanya Coco yang didukung untuk saat ini. Namun, seluruh implementasi perpustakaan dataset hampir identik dengan detectron, sehingga harus mudah untuk menambahkan lebih banyak dataset yang didukung oleh Detectron.
File konfigurasi spesifik arsitektur diletakkan di bawah konfigurasi. File konfigurasi umum lib/core/config.py memiliki hampir semua opsi dengan nilai default yang sama seperti di Detectron , jadi mudah untuk mengubah konfigurasi spesifik arsitektur dari Detectron.
Beberapa opsi dari Detectron tidak digunakan karena fungsionalitas yang sesuai belum diimplementasikan. Misalnya, augmentasi data pada pengujian.
MODEL.LOAD_IMAGENET_PRETRAINED_WEIGHTS = True : apakah akan memuat bobot pretrained imagenet.RESNETS.IMAGENET_PRETRAINED_WEIGHTS = '' : jalur ke bobot jaringan residual pretrained. Jika mulai dengan '/' , maka itu diperlakukan sebagai jalur absolut. Jika tidak, perlakukan sebagai jalur relatif ke ROOT_DIR .TRAIN.ASPECT_CROPPING = False , TRAIN.ASPECT_HI = 2 , TRAIN.ASPECT_LO = 0.5 : Opsi untuk aspek penanaman untuk membatasi rentang rasio aspek gambar.RPN.OUT_DIM_AS_IN_DIM = True , RPN.OUT_DIM = 512 , RPN.CLS_ACTIVATION = 'sigmoid' : implement resmi RPN memiliki saluran fitur input dan output yang sama dan menggunakan sigmoid sebagai fungsi aktivasi untuk prediksi kelas FG/BG. Dalam implementasi Jwyang, ia memperbaiki nomor saluran output ke 512 dan menggunakan Fungsi Aktivasi Softmax.MODEL.NUM_CLASSES . Ini akan diatur sesuai dengan dataset yang ditentukan oleh --dataset .TRAIN.WEIGHTS , TRAIN.DATASETS , dan TEST.DATASETSMODEL.CONV_BODY , FAST_RCNN.ROI_BOX_HEAD ...), hapus add_ di string jika ada.RESNETS.IMAGENET_PRETRAINED_WEIGHTS yang menunjuk ke file berat pra -pretrained. Jika tidak, atur MODEL.LOAD_IMAGENET_PRETRAINED_WEIGHTS ke False .OUTPUT_DIR: . Di baris terakhirNUM_GPUS di file config. Ini digunakan untuk menyimpulkan ukuran batch asli untuk pelatihan, dan tingkat pembelajaran akan ditingkatkan secara linier sesuai dengan perubahan ukuran batch. Penyesuaian tingkat pembelajaran yang tepat penting untuk pelatihan dengan ukuran batch yang berbeda.RESNETS.USE_GN: True . Benchmark.md