01.準備工作
1. Python 3.xx(Python 3.7.4)
2. OpenCV(4.1.2版)
一個檢測幀示例
02.工作流程
1. 例項化 HOGDescriptor
2. 獲取影片的第一幀用作遮罩
3. 遍歷每一幀,對於每個檢測到的人,從第一幀開始用相應的“空”替換該區域
4. 儲存輸出
03.程式碼
按照前面描述的工作流程,程式碼儲存在github中,見文末。
讓我們測試一下!
像一個老闆一樣。手放在口袋裡消失了!
但是,引用伊隆·馬斯克(Elon Musk)的話:“仍有改善的空間”。實際上結果並不是那麼精確,尤其是當離相機更近的時候。
在測試了這段程式碼之後,整個輸出看起來有問題且不穩定。因此,需要找到一種方法來改進它:用第一幀替換每個檢測到的人似乎是個好方法,因此我可能需要找到一種更好的方法來檢測物體!
改進之處:
在搜尋COCO的模型ZOO時,我們發現了一個例項分割模型,每幅影象的推理時間為0.07秒,這是最快的例項之一(可能不是最準確的)。
我們自定義了模型,需要安裝所有需要的依賴,例如pytorch,torchvision和detectron2:
# install dependencies:!pip install -U torch==1.4+cu100 torchvision==0.5+cu100 -f https://download.pytorch.org/whl/torch_stable.html!pip install cython pyyaml==5.1!pip install -U ‘git+https://github.com/cocodataset/cocoapi.git#subdirectory=PythonAPI'import torch, torchvision
以下程式碼和說明已在Google Colab例項上進行了測試,做出此選擇是為了使此實驗更易於複製,而不會因缺少依賴項,版本衝突和所有經常發生的無聊而苦惱。
然後我們需要安裝Detectron2:
# install detectron2:!git clone https://github.com/facebookresearch/detectron2 detectron2_repo!pip install -e detectron2_repo
現在,我們可以繼續匯入所有需要的庫並載入模型:
cfg = get_cfg()cfg.merge_from_file(model_zoo.get_config_file(“COCO-InstanceSegmentation/mask_rcnn_R_50_DC5_1x.yaml”))cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5 # set threshold for this modelcfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url(“COCO-InstanceSegmentation/mask_rcnn_R_50_DC5_1x.yaml”)predictor = DefaultPredictor(cfg)
無法使用我們的predictor類進行推斷,predictor需要在Tensors上返回一個需要轉換為numpy陣列的陣列,然後可以像以前一樣迭代該陣列:
outputs = predictor(frame)outputs = outputs[“instances”].pred_boxes.to(‘cpu’).tensor.numpy().astype(int)
讓我們檢查一下最終結果。
Detectron2 VS HOGDetector
從gif可以觀察到Detectron2如何更準確地檢測到一個人,但是,需要說的是,當然,它需要更多的“深度”配置(依賴有時會很麻煩)。但是,最終結果不言而喻!
程式碼連結:https://github.com/robertosannazzaro/person-removal-detectron2