0 介紹
YOLO(You Only Look Once)是一種流行的物體檢測和圖像分割模型,由華盛頓大學的約瑟夫-雷德蒙(Joseph Redmon)和阿里-法哈迪(Ali Farhadi)開發。YOLO 于 2015 年推出,因其高速度和高精確度而迅速受到歡迎。
YOLOv5 在 YOLOv4 的基礎上進一步提高了模型的性能,并增加了超參數優化、集成實驗跟蹤和自動導出為常用導出格式等新功能。
1 環境搭建
1.1 python 環境
使用 conda 創建干凈的 python 環境,conda 的安裝和其他軟件安裝類似。
conda 創建 python 環境:
conda create -n yolo
有可能在這一步出現 Conda cannot proceed due to an error in your proxy configuration.
,或者CondaHTTPError: HTTP 000 CONNECTION FAILED for url …
等相關的網絡問題。一個可行的解決方法是修改~/.condarc
,修改 conda 的鏡像配置:
vim ~/.condarc// 把下面的內容添加到文件的末尾
channels:- defaults
show_channel_urls: true
default_channels:- http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main- http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r- http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:conda-forge: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudmsys2: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudbioconda: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudmenpo: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudpytorch: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudpytorch-lts: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloudsimpleitk: http://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
一般情況下此時問題已經解決了。也有可能會出現SSLError(SSLError(SSLError(“bad handshake: Error(…)”)))
相關的報錯。SSL 連接問題極有可能是 https 安全性導致的問題,可以把上面~/.condarc
中的一系列地址中的 https 都改成了 http即可。此時大概率問題可以解決。如果還有問題,就只能另尋他法了。
1.2 下載YOLO-v5框架
可以直接使用 git clone github 上的 YOLOv5 項目,
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
由于網絡的原因,可能會在這里超時而克隆失敗。那么可以在 github YOLOv5 上把項目的壓縮包下載下來解壓即可:
unzip yolov5-master.zip
mv yolov5-master yolov5 && cd yolov5
1.3 安裝依賴
python3 -m pip install -r requirements.txt
1.4 下載與訓練權重
創建一個新的文件夾,用于存放YOLO-v5官方提供的預訓練權重,
mkdir weights
到YOLO-v5-GitHub官方下載權重文件,點擊藍色超鏈接即可進行下載,下載好的預訓練權重放在前面新建的weights
文件夾下。
1.5 環境測試
至此,環境搭建基本就完成了,現在測試一下搭建的環境是否正常。
python3 detect.py --weights weights/yolov5s.pt --source data/images # --weights的意思是指定權重文件,–source的意思是指定檢測文件地址
推理的結果存放在./runs/detec/exp
,可以正常檢測出人、巴士,說明YOLO環境搭建沒有問題。
2 制作數據集
2.1 使用 labelimg 進行圖片標注
labelimg 是常用的圖片標注工具,用來準備 yolo 格式的數據集。安裝 labelimg
pip install labelimg
圖片標注完成之后,得到YOLO格式的txt文本文件。一張張圖片進行標注,得到全部數據。
2.2 創建文件夾
在 Yolov5 的路徑下創建satasets
文件夾,用于存放數據集。
mkdir datasets
在datasets
下面創建文件夾images
和labels
分別用來存放圖片和標簽
mkdir datasets/images datasets/labels
在images(圖片)和labels(標簽)中分別再創建兩個文件夾,一個是train(訓練),一個是val(測試),分別存放圖片數據和標簽數據。
mkdir datasets/images/train datasets/images/val
mkdir datasets/labels/train datasets/labels/val
最終的目錄結構如下:
datasets/
├── images
│ ├── train
│ └── val
└── labels├── train└── val
2.3 配置數據集和模型參數
2.3 1 配置數據集
修改數據集配置文件data/coco128.yaml
,修改文件中的path
, train
, val
, names
這幾項的配置信息,修改為如下:
path: /path/to/datasets # dataset root dir
train: /path/to/datasets/images/train # train images (relative to 'path') 128 images
val: /path/to/datasets/images/train # val images (relative to 'path') 128 images
test: # test images (optional)# Classes
names:0: class_name_01: class_name_1
names 根據實際數據集有哪些類別名稱就配置幾個
2.3.2 配置模型參數
修改模型配置文件:models/yolov5s.yaml
這里只需要修改nc
數,nc
數指的是目標檢測的種類數,因此這里需要將nc
修改為前面data/coco128.yaml
中的names
的數量一致即可。
3 訓練
3.1 訓練模型
使用預訓練權重yolov5s.pt和默認yolov5s網絡框架進行訓練。
python3 train.py --weights weights/yolov5s.pt
訓練完成之后,在run文件夾中查看訓練后的數據文件。
3.2 查看訓練效果
使用detect.py進行測試,–weights選擇訓練完畢的權重文件,–source選擇需要測試的圖片。
python3 detect.py --weights run/train/exp/weights/best.pt --source data/images