1, 准備工作
git clone https://github.com/ultralytics/yolov5 # 下載 yolov5 項目 python3 -c "from yolov5.utils.google_utils import gdrive_download; gdrive_download('1n_oKgR81BJtqk75b00eAjdv03qVCQn2f','coco128.zip')" # 下載官方例子的數據集 cd yolov5 #進入yolov5 項目文件 conda install -U -r requirements.txt #安裝需求
2,在安裝 requirements的時候狂出錯
2.1 pytorch
直接用conda install pytorch是不可能安裝的了的,你得去pytorch 官網獲得下載命令:
然並卵,conda install pytorch torchvision torchaudio cpuonly -c pytorch,速度那是相當的慢。找了很多網上的解決辦法,清華鏡像關掉了,科大鏡像也沒法用,試了阿里雲,還是裝不上。各種environment報錯,或者各種慢(安裝的時候極度崩潰,忘記截屏了)。
折騰了一整天后還是決定手動下載,可以去清華鏡像官網下載,雖然不能直接用鏡像,但是安裝文件還是一直在更新的,速度飛一般非常贊!
既然能下載當然是下載最新的1.9.0啦!美滋滋的放到D:\Users\**\anaconda3\pkgs文件夾里,開始離線安裝 conda install --offline *** 然而,裝是裝好了,美滋滋要調用的時候開始報錯:
[WinError 126] 找不到指定的模塊
心里哇涼哇涼的又開始找解決辦法,有的說沒裝vc c++,可是我真的裝了T_T。有的說要升級conda,於是conda update all, 還是不行。
最后!!!!!忍痛開始給pytorch降級,查了下載yolov5的requirement文件,好吧,那就擦邊吧,
重新去鏡像官網下載了
torchvision忘記把降級之前的刪了
再重新安裝,於是……
finally 喜極而泣!
2.2 又檢查了一下,還有thop
conda install thop 還是不行。有了前面的經驗,手動安裝(下載地址)
下載最新版后又遇到了問題,有了前面的經驗,降級……
安裝的時候又遇到了問題,環境還是不過關?但是用pip安裝又沒問題,但是!pip安裝完用conda list根本看不到,繼續網上搜索……終於,這樣解決的
1)先查看虛擬環境名稱
2)然后
喜極而泣!!!
3,用本地攝像頭測試一下
3.1 yolov5s.pt
將官網yolov5s.pt權重文件下載到yolov5文件夾下,命令:python detect.py --weights yolov5s.pt --source 0
可以看到自己美美的出現在屏幕上,並且被標注為:person 0.56 ....嗯,郁悶的想哭,我就是半個人么?還是試試5x吧
3.2 yolov5x.pt
將官網yolov5x.pt文件下載到yolov5文件夾下,命令:python detect.py --weights yolov5x.pt --source 0,報錯了~
神馬叫:Can't get attribute 'SPPF' ?SPPF是神馬東東?搜了全網才發現博客https://blog.csdn.net/Steven_Cary/article/details/120886696 的解答,然后孤陋寡聞的我才剛知道權重文件都出到第6版啦?
解決方案是:去Tags6里面的model/common.py里面去找到這個SPPF的類,把它拷過來到你這個Tags5的model/common.py里面,這樣你的代碼就也有這個類了,還要引入一個warnings包就行了!
有的同學找不到SPPF這個類,那我現在直接粘貼在這里,你們只需要復制到你們的common.py里面即可,記得把import warnings放在上面去:
import warnings class SPPF(nn.Module): # Spatial Pyramid Pooling - Fast (SPPF) layer for YOLOv5 by Glenn Jocher def __init__(self, c1, c2, k=5): # equivalent to SPP(k=(5, 9, 13)) super().__init__() c_ = c1 // 2 # hidden channels self.cv1 = Conv(c1, c_, 1, 1) self.cv2 = Conv(c_ * 4, c2, 1, 1) self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2) def forward(self, x): x = self.cv1(x) with warnings.catch_warnings(): warnings.simplefilter('ignore') # suppress torch 1.9.0 max_pool2d() warning y1 = self.m(x) y2 = self.m(y1) return self.cv2(torch.cat([x, y1, y2, self.m(y2)], 1))
親測可用,美美的我終於變成 person 0.95了,但實時性實在是比5s差很多
終於有篇原創的博客了哈哈哈