識(shí)別圖像和視頻里面的對(duì)象,在計(jì)算機(jī)視覺(jué)中是一個(gè)很重要的應(yīng)用,比如無(wú)人駕駛,這個(gè)就需要實(shí)時(shí)的檢測(cè)到周邊環(huán)境的各種對(duì)象,并及時(shí)做出處理。目標(biāo)檢測(cè)在以往的文章中有重點(diǎn)講解過(guò)幾種,其中Faster R-CNN的源碼解讀,本人做了一個(gè)系列,有興趣的可以查閱:
MXNet的Faster R-CNN(基于區(qū)域提議網(wǎng)絡(luò)的實(shí)時(shí)目標(biāo)檢測(cè))《10》(尾)https://blog.csdn.net/weixin_41896770/article/details/128764171
另外,單發(fā)多框檢測(cè)SSD的學(xué)習(xí),也有一個(gè)系列,有興趣的可以去了解下:計(jì)算機(jī)視覺(jué)之SSD改進(jìn)版本(平滑L1范數(shù)損失與焦點(diǎn)損失)《4》https://blog.csdn.net/weixin_41896770/article/details/128246764
只不過(guò)上面的方法在速度方便做不到實(shí)時(shí),直到Y(jié)OLO的出現(xiàn),YOLO:You Only Look Once,你只需看一眼。意思就是它的效果跟人眼一樣,只需要看一眼就可以識(shí)別圖片中的各種對(duì)象。目前最新版本是YOLOv8,先拿YOLOv5版本試試效果。YOLO是永久免費(fèi)且廣泛被使用到各個(gè)地方的模型,無(wú)人駕駛中檢測(cè)目標(biāo)基本都是用到這個(gè)吧。
1、安裝與測(cè)試
1.1、下載yolov5源碼
克隆倉(cāng)庫(kù),下載yolov5源碼:git clone https://github.com/ultralytics/yolov5
切換到所在目錄:cd yolov5
安裝相關(guān)庫(kù):pip install -r requirements.txt -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com?
這里需要注意的是,強(qiáng)烈建議加上豆瓣鏡像來(lái)安裝相關(guān)庫(kù),不然requirements.txt里面的庫(kù)很多的情況,很容易出現(xiàn)某個(gè)庫(kù)下載超時(shí)等情況發(fā)生,造成安裝不成功。
1.2、圖片目標(biāo)檢測(cè)
我們來(lái)檢測(cè)試下,除了單個(gè)圖片檢測(cè)之外,還可以直接指定圖片所在目錄,這樣可以將整個(gè)目錄(data/images)下面的圖片都可以進(jìn)行檢測(cè):
python detect.py --weights yolov5s.pt --img 640 --conf 0.25 --source data/images
(pygpu) C:\Users\Tony\yolov5>python detect.py --weights yolov5s.pt --img 640 --conf 0.25 --source data/images
detect: weights=['yolov5s.pt'], source=data/images, data=data\coco128.yaml, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=runs\detect, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False, vid_stride=1
YOLOv5 ?v7.0-185-g2334aa7 Python-3.7.12 torch-1.13.1+cpu CPUDownloading https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s.pt to yolov5s.pt..
如果沒(méi)有yolov5s.pt權(quán)重參數(shù)文件的情況,就會(huì)自動(dòng)下載,這個(gè)可能需要科學(xué)上網(wǎng)或者很慢,不方便的朋友,我這里已經(jīng)上傳到了CSDN,可直接點(diǎn)擊下載:yolov5s.pt,下載好了之后,放入到yolov5目錄里面即可,其余的四種預(yù)訓(xùn)練模型如圖:?
上面是一些檢測(cè)參數(shù)配置:權(quán)重、源、數(shù)據(jù)集、圖像大小、置信度、交并比、檢測(cè)數(shù)量等等,這里安裝的CPU版本。
Fusing layers...
YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients
image 1/2 C:\Users\Tony\yolov5\data\images\bus.jpg: 640x480 4 persons, 1 bus, 183.1ms
image 2/2 C:\Users\Tony\yolov5\data\images\zidane.jpg: 384x640 2 persons, 2 ties, 134.1ms
Speed: 1.5ms pre-process, 158.6ms inference, 5.3ms NMS per image at shape (1, 3, 640, 640)
Results saved to runs\detect\exp2
然后結(jié)果就是將標(biāo)注對(duì)象的圖片,保存在了自動(dòng)新建的runs/detect/exp2目錄里面,如圖:?
這兩張是自帶的,我重新放兩張本人照片看下效果,檢測(cè)標(biāo)注的速度非常快:
?
1.3、視頻幀目標(biāo)檢測(cè)?
除了檢測(cè)圖片之外,還可以檢測(cè)視頻,同樣的可以指定視頻,也可以指定視頻所在目錄:
python detect.py --weights yolov5s.pt --conf 0.25 --source data/videos
大家可以看下視頻效果,基本上,人物、冷藏柜的瓶子這些都檢測(cè)到了一些,速度非???,而且檢測(cè)的不錯(cuò)。YOLO對(duì)視頻幀的檢測(cè)
2、Inference推理?
使用YOLOv5中的PyTorch Hub推理,將會(huì)自動(dòng)下載最新版本的YOLOv5模型,也可以指定預(yù)訓(xùn)練模型,比如我們這節(jié)使用的yolov5s是常用的一種輕便快速的型號(hào)。
import torch
model = torch.hub.load("ultralytics/yolov5", "yolov5s")
#file, Path, PIL, OpenCV, numpy, list
img = "https://tenfei03.cfp.cn/creative/vcg/veer/1600water/veer-327742747.jpg"
results = model(img)
results.print() # or .show(), .save(), .crop(), .pandas(), etc.
這里results的顯示方法還是挺多的,分別來(lái)了解下:
2.1、results.print()?
打印一些摘要信息,層數(shù)和參數(shù)數(shù)量,檢測(cè)圖片的寬高,檢測(cè)到的對(duì)象等
Using cache found in C:\Users\Tony/.cache\torch\hub\ultralytics_yolov5_master
YOLOv5 ?2023-6-22 Python-3.7.12 torch-1.13.1+cpu CPUFusing layers...?
YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients
Adding AutoShape...?
image 1/1: 720x1280 2 persons, 2 ties
Speed: 2480.2ms pre-process, 138.2ms inference, 2.0ms NMS per image at shape (1, 3, 384, 640)
2.2、results.show()
show方法顯示目標(biāo)檢測(cè)并標(biāo)注的圖片:
2.3、results.save()?
將生成標(biāo)注的圖片保存起來(lái),地址是當(dāng)前運(yùn)行的目錄:
Fusing layers...?
YOLOv5s summary: 213 layers, 7225885 parameters, 0 gradients
Adding AutoShape...?
Saved 1 image to runs\detect\exp
當(dāng)然這個(gè)目錄名exp,會(huì)隨著每次新的生成而遞增新建目錄的,如exp2,exp3,exp4...?
2.4、results.crop()
這個(gè)將會(huì)給檢測(cè)到的每個(gè)對(duì)象進(jìn)行分割,并分別保存到各自的目錄中:
?
2.5、results.pandas()
使用表格形式顯示坐標(biāo)、置信度、類(lèi)別等這樣相關(guān)的信息,results.pandas().xyxy[0]:
比如顯示坐標(biāo)和寬高,results.pandas().xywh:
[ ? ? ? xcenter ? ? ycenter ? ? ? width ? ? ?height ?confidence ?class ? ?name
?0 ? 942.523499 ?384.171814 ?398.466187 ?671.656372 ? ?0.879861 ? ? ?0 ?person
?1 ? 469.287354 ?573.686462 ? 54.595459 ?272.699463 ? ?0.675119 ? ? 27 ? ? tie
?2 ? 418.870941 ?456.504700 ?591.639587 ?526.533203 ? ?0.666693 ? ? ?0 ?person
?3 ?1002.146362 ?364.552826 ? 46.313049 ?101.946716 ? ?0.261517 ? ? 27 ? ? tie]
3、多GPU運(yùn)行
YOLOv5模型可以通過(guò)線程推理并行加載到多個(gè)GPU上,提高運(yùn)行速度,這里就需要用到GPU版本的了,下面將會(huì)重點(diǎn)介紹,需要安裝GPU匹配版本來(lái)覆蓋(自動(dòng)卸載并安裝)前面的CPU版本。
import torch
import threading
def run(model, im):
results = model(im)
results.save()
model0 = torch.hub.load('ultralytics/yolov5', 'yolov5s', device=0)
model1 = torch.hub.load('ultralytics/yolov5', 'yolov5s', device=1)
img1='https://tenfei03.cfp.cn/creative/vcg/veer/1600water/veer-327742747.jpg'
img2='https://tenfei01.cfp.cn/creative/vcg/veer/1600water/veer-419516485.jpg'
threading.Thread(target=run, args=[model0, img1], daemon=True).start()
threading.Thread(target=run, args=[model1, img2], daemon=True).start()
如果你是在正確安裝了CUDA、cuDNN、torch與torchvision之后,將可以正常處理圖片了,當(dāng)然我這里只有一塊GPU,所以就只測(cè)試了device=0,如下圖:
4、各種錯(cuò)誤處理
在安裝GPU版本的過(guò)程中,遇到了很多的錯(cuò)誤需要處理,主要是一些安裝版本匹配問(wèn)題,對(duì)于這些安裝存在的問(wèn)題,只有通過(guò)不斷的嘗試,不斷的出錯(cuò),不斷的思考,處理解決,這樣后期對(duì)于安裝的各種問(wèn)題就會(huì)迎刃而解了。
4.1、Invalid CUDA?
AssertionError: Invalid CUDA '--device 0' requested, use '--device cpu' or pass valid CUDA device(s)
CUDA是否正確安裝,如下圖使用命令測(cè)試下(nvcc --version和set cuda):?
如果上述命令不可用的,print(torch.cuda.is_available()),不出所料顯示結(jié)果為:False
安裝命令:conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
安裝之后,再次查看就是True了,這個(gè)時(shí)候就可以使用到GPU設(shè)備了。但是別急,可能跟你的版本不一定匹配,看完之后再進(jìn)行安裝。
4.2、缺少模塊?
ModuleNotFoundError: No module named 'yaml'
如果缺少這個(gè)模塊,注意了,安裝的時(shí)候是pyyaml這個(gè)名稱。
pip install pyyaml或conda install pyyaml
ModuleNotFoundError: No module named 'cv2'
這個(gè)名稱為opencv-python
其余有缺少的情況,名稱一樣,安裝即可。
當(dāng)然這些模塊(requirements.txt里面)都在最前面已經(jīng)安裝過(guò)了,只是換了虛擬環(huán)境忘記安裝,來(lái)測(cè)試的時(shí)候出現(xiàn)這些情況,對(duì)于單獨(dú)安裝或缺失模塊的可以這樣進(jìn)行。
4.3、安裝GPU版本PyTorch
新建虛擬環(huán)境來(lái)安裝,避免版本沖突。以下是安裝的參考:
conda create -n torchgpu python=3.8
activate torchgpu
conda install pytorch torchvision torchaudio cudatoolkit=11.3 -c pytorch
大塊頭的CUDA和cuDNN,下載地址:
CUDA:https://developer.nvidia.com/cuda-toolkit-archive
cuDNN:https://developer.nvidia.com/rdp/cudnn-download
PyTorch:https://pytorch.org/get-started/locally/
比如:pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
當(dāng)然這個(gè)有2G多,也是建議迅雷下載下來(lái)之后安裝要好點(diǎn)
(個(gè)人推薦)版本匹配:https://download.pytorch.org/whl/torch_stable.html
比如本人的Python3.8版本,所以選擇下載為cp38,這個(gè)torch2.0試過(guò)有問(wèn)題然后更換到1.9。
pip install torch-2.0.1+cu118-cp38-cp38-win_amd64.whl
pip install torch-1.9.0+cu111-cp38-cp38-win_amd64.whl -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
這個(gè)根據(jù)自己版本來(lái)選擇下載即可,1.9沒(méi)有問(wèn)題,有時(shí)候最新版本,造成其他的庫(kù)不能匹配。
安裝好了之后,測(cè)試下CUDA是否可用:
import torch
torch.cuda.is_available()
torch.cuda.get_device_name(0)
如果分別顯示True和顯卡型號(hào),就說(shuō)明安裝成功了。
4.4、NotImplementedError
如果出現(xiàn)下面這樣的錯(cuò)誤:
NotImplementedError: Could not run 'torchvision::nms' with arguments from the 'CUDA' backend. This could be because the operator doesn't exist for this backend, or was omitted during the selective/custom build process (if using custom build). If you are a Facebook employee using PyTorch on mobile, please visit https://fburl.com/ptmfixes for possible resolutions. 'torchvision::nms' is only available for these backends: [CPU, QuantizedCPU, BackendSelect, Python, FuncTorchDynamicLayerBackMode, Functionalize, Named, Conjugate, Negative, ZeroTensor, ADInplaceOrView, AutogradOther, AutogradCPU, AutogradCUDA, AutogradXLA, AutogradMPS, AutogradXPU, AutogradHPU, AutogradLazy, AutogradMeta, Tracer, AutocastCPU, AutocastCUDA, FuncTorchBatched, FuncTorchVmapMode, Batched, VmapMode, FuncTorchGradWrapper, PythonTLSSnapshot, FuncTorchDynamicLayerFrontMode, PythonDispatcher].
版本高了,不匹配,降低版本重新安裝:
pip install torch==1.9.0+cu111 torchvision==0.10.0+cu111 torchaudio===0.9.0 -f https://download.pytorch.org/whl/torch_stable.html -i http://pypi.douban.com/simple
同樣建議迅雷下載:https://download.pytorch.org/whl/cu111/torch-1.9.0%2Bcu111-cp38-cp38-win_amd64.whl
4.5、Python無(wú)法找到入口
出現(xiàn)彈框錯(cuò)誤提示:
Python無(wú)法找到入口,無(wú)法定位程序輸入點(diǎn)
ModuleNotFoundError: No module named 'torch.ao.quantization'
pip list查看,原來(lái)是torchvision還是原來(lái)的安裝版本
torch ? ? ? ? ? ? ? 1.9.0+cu111
torchvision ? ? ? ? 0.15.2?
進(jìn)入站點(diǎn):https://download.pytorch.org/whl/torch_stable.html 下載對(duì)應(yīng)版本的torchvision
我這里對(duì)應(yīng)的是:torchvision-0.10.0+cu111-cp38-cp38-win_amd64.whl
下載之后安裝即可:pip install torchvision-0.10.0+cu111-cp38-cp38-win_amd64.whl
再次pip list查看torchvision的版本是否已更改
torch ? ? ? ? ? ? ? 1.9.0+cu111
torchvision ? ? ? ? 0.10.0+cu111
這樣顯示就說(shuō)明版本已匹配
5、卸載虛擬環(huán)境
有時(shí)候這個(gè)安裝會(huì)因?yàn)榘姹镜葐?wèn)題,而新建了比較多的虛擬環(huán)境,為了清爽,可以將一些不需要的虛擬環(huán)境給卸載了,這樣也可以節(jié)省不少空間出來(lái)。
退出虛擬環(huán)境:deactivate
刪除xxx里面所有的目錄與包:conda remove -n xxx --all文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-500875.html
更多細(xì)節(jié)和源碼:
github:https://github.com/ultralytics/yolov5文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-500875.html
到了這里,關(guān)于YOLOv5圖像和視頻對(duì)象生成邊界框的目標(biāo)檢測(cè)實(shí)踐(GPU版本PyTorch錯(cuò)誤處理)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!