YOLO實現口罩識別


前言:

由於參加了一個小比賽,所以參考了一下GitHub上的代碼,借用了CSDN上
mind_programmonkey大佬的數據集,寫出了一個口罩識別程序,代碼實現途中,發現了許多問題,所以寫下這篇博客,希望對其他人有所幫助。。

由於我只是一名學生,掌握知識有限,所以也是從零開始,對一些小白應該會有所幫助,也歡迎大佬指點。

聯系方式:wx:yuanxi154

需要數據集、權重、和我訓練好的模型可以加我

一、環境要求

  • Python: 3.7.4
  • Tensorflow-GPU 1.14.0
  • Keras: 2.2.4
  • 備注:我環境是用anaconda配置的,具體方法百度,不過可能因為牆的原因,配置會報很多錯誤

二、數據集

VOC格式數據集(需要數據集聯系我)

xml標簽和圖片相對應

注意:這種名稱的圖片和xml標簽會報錯(本來我是隨便找個數據集的,結果發現會報錯,具體什么原因我也不知道)

 

正確格式:

 

三、准備權重

首先,我們需要下載yolov3事先已經訓練好的權重,yolov3.weights

下載方法百度

 

 

四、代碼實現

(1)前期准備:

原版的話就是GitHub上qqwwee的代碼:https://github.com/qqwweee/keras-yolo3

我修改后的代碼我也上傳至GitHub上:https://github.com/god-yx/facemask

由於GitHub不能存在空文件夾,所以我們需要先創建兩個文件夾logs和VOCdevkit/VOC2007的三個子文件夾

logs用於存放訓練好的模型

VOCdevkit用於存放數據集

VOC2007底下需要創建三個子文件夾Annotations、ImageSets、JPEGImages

ImageSets需要再創建Main子文件夾

 

 

Annotations:用於存放xml標簽

ImageSets:存放數據集列表文件,由voc2yolo3.py文件生成

JPEGImages:存放圖片

完成后效果圖:

 

 (2)權重轉換

由於我們用的keras框架,所以我們需要把下載的權重給轉換一下

轉換的位置在

 

 

python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5

  

python convert.py yolov3-tiny.cfg yolov3-tiny.weights model_data/yolov3-tiny.h5

復制代碼直接粘貼回車就好,轉換成功就會出現上面圖中的信息。

(3)利用voc2yolo3.py文件生成對應的txt。

運行voc2yolo3.py之后會在ImageSets/Main生成如下txt文件(位置不要錯

 

 (4)運行根目錄voc_annotation.py

運行前需要將voc_annotation文件中classes改成你自己的classes(xml文件對應的標簽)

 

 

 我們就會生成這樣的一個文件,2007_train.txt,這里面 每一行對應其圖片位置及其真實框的位置

 

 

(5)修改model_data里面的yolo_anchors.txttiny_yolo_anchors.txt

這里非常重要,因為如果不修改的話,就會出現很多問題。

這里我們利用kmeans.py來生成。

k=9,生成yolo_anchors;k=6,生成tiny_yolo_anchors.txt

 

(6)修改標簽

接着我們來到model_data里面的voc_classes.txt文件中需要將classes改成你自己的classes不要有第三行

 

 (7)訓練

然后來到train.py中,通過修改anchor_path,從而選擇使用yolov3訓練還是yolov3-tiny訓練

如果是用我的代碼,可以不用改,否則:

 

運行train.py 即可開始訓練,訓練好的模型會存放在logs下。

訓練過程

 

 

 

五,測試

修改根目錄下yolo.py文件,修改model_path,anchors_path,classes_path替換成·自己的路徑

 

運行predict_img.py,在輸入框輸入圖片路徑進行測試。

運行yolo_video.py,打開攝像頭進行測試。

測試本地視頻:

運行yolo_video.py

此外對應的yolo.py文件174行改為vid = cv2.VideoCapture(“視頻路徑+視頻名+視頻后綴名”);

 

六、注意:

一張圖片最多只能識別20個對象的問題:

  • 1.訓練時,要在yolo3文件夾下面的utils.py里,修改get_random_data()函數,有一個默認參數是max_boxes=20,改成很大的數值就行了。

  • 2.檢測時,要在yolo3文件夾下面的model.py里,修改yolo_eval()函數,有一個默認參數是max_boxes=20,改成很大的數值就行了。

七:常見問題

這里匯總我測試代碼時出現的幾個問題:

(1)File "h5py\_objects.pyx", line 54, in h5py._objects.with_phil.wrapper
  File "h5py\_objects.pyx", line 55, in h5py._objects.with_phil.wrapper
  File "h5py\h5f.pyx", line 88, in h5py.h5f.open
OSError: Unable to open file (unable to open file: name = './raw', errno = 13, error message = 'Permission denied', flags = 0, o_flags = 0)

這里我的問題是由於版本問題,新的版本對語法有所改變

(2)提示Mismatch between model and given anchor and class sizes

這里是由於第五步的時候修改的有問題;


(3)測試的時候沒有窗口,或者識別很多窗口

 

還是第五步的時候出問題了

 

還有一些問題記不清楚了,如果有問題歡迎留言討論

 

 

 

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM