智能畜牧電網(目標檢測部分)----開發檔案
一、專案背景:
在畜牧業和養殖業發達的農村地帶,經常出現狐貍和黃鼠狼這類野獸偷吃家禽,給農民的養殖生產帶來困難的同時,經濟上也造成了很大的損失,
應對天敵,傳統的獵殺方式一來消耗人力物力,二來又會對當地的生物鏈、生態環境造成影響
而通過養狗養鵝等動物的方式,對天敵產生威脅,效果又微乎其微,反倒增加了成本
隨著深度學習的高速發展,目標檢測在各個領域廣泛應用,我們是不是也能借助這種方法識別到天敵,讓原本不通電的電網接上低壓電,實作對天敵的驅逐;并且在沒有危險的時候也不會傷害到養殖的畜禽
二、專案需求:
通過攝像機實時獲取電網前的影像,當出現屬于天敵的野生動物時,后臺能夠識別出動物的種類,讓電網通上對該類動物有威脅但是無害的電壓,實作驅逐,
三、專案實作:
通過調研,本專案最終使用yolov5框架下的yolov5s模型作為目標檢測的模型
(一)、環境配置:
參考yolov5-master目錄下的requirements.txt檔案
matplotlib>=3.2.2
numpy>=1.18.5
opencv-python>=4.1.2
Pillow>=7.1.2
PyYAML>=5.3.1
requests>=2.23.0
scipy>=1.4.1
torch>=1.7.0
torchvision>=0.8.1
tqdm>=4.41.0
(二)、資料集:
來源kaggle的Animal Faces | Kaggle,因為訓練時間有限,我僅僅選取了貓、狗、狐貍的100張圖片,貓的外貌與狐貍和黃鼠狼有很大的相似性測驗模型對相近的動物分辨情況,而狗作為相似度較低的動物,作為普通樣本
使用makesense進行標注
(三)、流程介紹:
安裝anaconda,并配置好環境
準備好資料集
下載模型和代碼
將資料集存放在代碼目錄下
data目錄下為自己的資料集創建.yaml組態檔,參考coco128.yaml
修改訓練的腳本,填充資料集地址,設定訓練引數,迭代100次,開始訓練
epochs引數表示迭代次數,resume引數表示繼續上次退出訓練的模型繼續訓練
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-BiSAXPZS-1639530937481)(C:\Users\10512\AppData\Roaming\Typora\typora-user-images\image-20211110213350880.png)]
訓練完成后,根目錄下會產生一個run的檔案夾,里面就存有訓練好的模型
另取每種動物各10張進行測驗,將模型的地址和測驗圖片的地址(data/image)填入測驗的腳本,進行檢測
四、檢測結果與思考:



計算得到準確率是24/30=80%、貓的召回率是100%、狗的召回率是70%、狐貍的召回率是70%
準確率沒有達到很高考慮到是因為訓練樣本不夠多,而狗和狐貍的召回率較低,觀察檢測的樣本結果看到狗是未被檢測出來,考慮是因為狗的不同品種外形差距較大,而訓練集并沒有包含全部狗的品種,從而導致這樣的結果;而狐貍的檢測結果顯示其多是被誤判成貓,也和最開始選擇訓練集的原因一樣,其在外形相似度很高的情況下能達到70%的召回率結果還是比較滿意的,
五、檔案結構:
├── yolov5-master
│ ├── data
│ │ ├── images //測驗集地址
│ ├── runs
│ │ ├── detect //測驗的結果
│ │ ├── train //訓練程序檔案和最終模型
│ ├── score
│ │ ├── images
│ │ │ ├── train //訓練集圖片
│ │ │ ├── val //驗證集圖片
│ │ ├──labels
│ │ │ ├── train //訓練集標簽
│ │ │ ├── val //驗證集標簽
│ ├── detect.py //測驗腳本
│ ├── train.py //訓練腳本
│ ├── README.md //yolov5的介紹
│ ├── val.py //驗證腳本
│ ├── yolov5s.pt //原始模型
└── 開發檔案.pdf
六、知識體系:
(一)、網路定義:
YOLO檢測網路包括24個卷積層和2個全連接層,其中,卷積層用來提取影像特征,全連接層用來預測影像位置和類別概率值,
YOLO網路借鑒了GoogLeNet分類網路結構,不同的是,YOLO未使用inception module,而是使用1x1卷積層(此處1x1卷積層的存在是為了跨通道資訊整合)+3x3卷積層簡單替代,
(二)、輸出定義:
YOLO將輸入影像分成SxS個格子,每個格子負責檢測‘落入’該格子的物體,若某個物體的中心位置的坐標落入到某個格子,那么這個格子就負責檢測出這個物體,
每個格子輸出B個bounding box(包含物體的矩形區域)資訊,以及C個物體屬于某種類別的概率資訊,
Bounding box資訊包含5個資料值,分別是x,y,w,h,和confidence,其中x,y是指當前格子預測得到的物體的bounding box的中心位置的坐標,w,h是bounding box的寬度和高度,注意:實際訓練程序中,w和h的值使用影像的寬度和高度進行歸一化到[0,1]區間內;x,y是bounding box中心位置相對于當前格子位置的偏移值,并且被歸一化到[0,1],confidence反映當前bounding box是否包含物體以及物體位置的準確性,
(三)、Loss函式定義:
YOLO使用均方和誤差作為loss函式來優化模型引數,即網路輸出的SS(B5 + C)維向量與真實影像的對應SS*(B*5 + C)維向量的均方和誤差,(詳見論文YOLO: Unified, Real-Time Object Detection)
(四)、訓練:
YOLO模型訓練分為兩步:
1)預訓練,使用ImageNet,1000類資料訓練YOLO網路的前20個卷積層+1個average池化層+1個全連接層,訓練影像解析度resize到224x224,
2)用步驟1)得到的前20個卷積層網路引數來初始化YOLO模型前20個卷積層的網路引數,然后用VOC 20類標注資料進行YOLO模型訓練,為提高影像精度,在訓練檢測模型時,將輸入影像解析度resize到448x448,
參考:YOLO詳解 - 知乎 (zhihu.com)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/397501.html
標籤:其他
