Segmentation fault: 11 python mtcnn
阿新 • • 發佈:2019-01-29
Segmentation fault: 11
在使用python3 執行mtcnn的時候一直出現Segmentation fault: 11的問題。或者說執行過程中,程式停止執行。如下圖所示:
或者
分析原因是因為在mtcnn做第一階段預測的時候使用了多個特徵圖進行並行運算,這些程序可能會同時使用opencv,而opencv雖然支援多工同時執行,但都是共享同一塊資料。所以會出現死鎖的問題。
類似的問題都可以歸結為opencv多工平行計算出現死鎖的問題。解決辦法就是找到死鎖的位置,然後使用以下方法之一就可以解決:
使用
cv2.setNumThreads(0)
設定opencv不使用多程序執行,但這句命令只在本作用域有效。將所有的多程序都關閉,使用順序執行。
而對於mtcnn的原始碼來講,可以將 mtcnn_detector.py內的detect_face函式中的
for batch in sliced_index:
local_boxes = self.Pool.map( detect_first_stage_warpper, \
zip(repeat(img), self.PNets[:len(batch)], [scales[i] for i in batch], repeat(self.threshold[0])) )
total_boxes.extend(local_boxes)
改為:
for batch in sliced_index:
for i in batch:
local_boxes=detect_first_stage_warpper((img,self.PNets[i%4],scales[i],self.threshold[0]))
if local_boxes is None:
continue
total_boxes.extend(local_boxes)
即可正常執行。