#其中coco_kpts文件夾與edgeai-yolov5-yolo-pose處于同一目錄下,格式如下:
edgeai-yolov5
│ README.md
│ ...
│
coco_kpts
│ images
│ └─────train2017
│ │ └───
| | '
│ └─val2017
| └───
| .
│ annotations
| labels
│ └─────train2017
│ │ └───
| | '
│ └─val2017
| └───
| .
| train2017.txt
| val2017.txt
2.環(huán)境(略,自己搭建)權(quán)重在原文
創(chuàng)新互聯(lián)建站主要從事成都網(wǎng)站設計、網(wǎng)站建設、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務金臺,10多年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:189808205753.測試(detect.py)報錯說什么數(shù)組大小異常多半是你忘了加–kpt-label
python test.py --data coco_kpts.yaml --img 640 --conf 0.001 --iou 0.65 --weights "XXXXX.pt" --kpt-label
python train.py --data coco_kpts.yaml --cfg yolov5s6_kpts.yaml --batch-size 64 --img 640 --kpt-label
建議action=‘store_true’,設置為default=‘True’
5.轉(zhuǎn)onnx(export.py,坑)export.py不在根目錄,而在models路徑下下面,剩下的坑,略。
6.推理(inference.py,坑)提示,原文給的onnx文件是可以用點,主要還是5的坑,略。
7.pose圖生成(detect.py,略)解決方法:
在model/common.py文件中加上如下代碼
import warnings
class SPPF(nn.Module):
#Spatial pyramid pooling layer used in YOLOv3-SPP
def __init__(self, c1, c2, k=5):
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,y,self.m(y2)],1))
2.AttributeError: ‘Upsample’ object has no attribute ‘recompute_scale_factor’解決方法:
找到X:\xxx\edgeai-yolov5-yolo-pose\venv\Lib\site-packages\torch\nn\modules\upsampling.py (直接點擊pycharm跳轉(zhuǎn))
找到forward方法
# def forward(self, input: Tensor) ->Tensor:
# return F.interpolate(input, self.size, self.scale_factor, self.mode, #self.align_corners,
#recompute_scale_factor=self.recompute_scale_factor #原來的,刪除本行內(nèi)容即可
#)
def forward(self, input: Tensor) ->Tensor:
return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners)
3.val: WARNING: Ignoring corrupted image and/or label …\coco_kpts\images\train2017\000000581921.jpg: cannot reshape array of size 55 into shape (2)解決方法:
A.找到X:\xxx\edgeai-yolov5-yolo-pose\utils\datasets.py
def img2label_paths(img_paths):
# Define label paths as a function of image paths
sa, sb = os.sep + 'images' + os.sep, os.sep + 'labels' + os.sep # /images/, /labels/ substrings
#return ['txt'.join(x.replace(sa, sb, 1).rsplit(x.split('.')[-1], 1)) for x in img_paths]#原來的
return [x.split('.',1)[0] + '.txt' for x in img_paths]#修改后新的
B.你忘了加–kpt-label參數(shù),調(diào)用的代碼錯誤,位置自己找
4.RuntimeError: result type Float can’t be cast to the desired output type long int(上方indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1))) # image, anchor, grid indices)
yolov5-master版本和yolov5-5.0/yolov5-6.1等版本下的utils\loss.py文件不一致
在loss.py中搜 for i in range(self.nl)
替換前
#anchors = self.anchors[i]
替換后
anchors, shape = self.anchors[i], p[i].shape
在loss.py搜 indices.append
替換前
#indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1))) # image, anchor, grid indices
替換后
indices.append((b, a, gj.clamp_(0, shape[2] - 1), gi.clamp_(0, shape[3] - 1))) # image, anchor, grid
5.關鍵點異常,面部關鍵點不在身體(自己嘗試解決喲)
6.轉(zhuǎn)onnx文件,報錯:export failure: PyTorch convert function for op ‘conv2d_clamp_prepack’ not implemented.不知道是不是版本問題?報錯PyTorch版本1.12.1,成功的版本1.8.2
(但這版本CoreML export failure,‘torch._C.Node’ object has no attribute ‘ival’)
7.detect.py #126行 這里有錯誤,1是寫錯了,2是沒有適配關鍵點if save_txt_tidl: # Write to file in tidl dump format
#for *xyxy, conf, cls in det_tidl: #寫錯了
for *xyxy, conf, cls in det:#作者小失誤
適配代碼(略)
8.xtcocotools unable to run: No module named ‘xtcocotools’解決方法:
在虛擬環(huán)境中(建議python=3.7),3.8.特別是3.9 問題太多。大佬可以自己解決
pip install xtcocotools
9.No matching distribution found for onnxruntime==1.10.0如需Python版本不要過高,否則之后的python版本只能安裝onnxruntime>=1.12.0
在對應的虛擬環(huán)境中輸入
pip install onnxruntime==1.10.0
10.更多錯誤,略原作者有部分錯誤(自己鉆研啦)。另外他是yolov7(但改代碼部分不太影響,可以調(diào)通)
原文鏈接添加鏈接描述
annotation{
"keypoints": [x1,y1,v1,...], #關鍵點坐標及標志位 v
"num_keypoints": int, #關鍵點數(shù)量(要求v>0)
"id": int,
"image_id": int, #圖像id號,對應圖像的文件名
"category_id": int, #只有人,所以為1
"segmentation": RLE or [polygon], #iscrowd 為 0 時是polygon格式,為1時是 RLE格式,代表分割圖(用多邊形框出人體)
"area": float, #矩形框的面積
"bbox": [x,y,width,height], #矩形框左上角坐標(x,y)和矩形框的寬高
"iscrowd": 0 or 1,
}
在key_points 關鍵字中 x,y表示坐標值,
v的值有三個
V | 含義 |
---|---|
0 | 沒有該點 |
1 | 該點存在但是被遮擋了 |
2 | 該點存在且沒有被遮擋 |
具體的標記規(guī)則建議參考coco的標記
在yolov5的yolo轉(zhuǎn)txt的代碼上增加讀取Json中關鍵點信息轉(zhuǎn)換就行。
坑在于,建議使用Json閱讀器來弄,用nodepad++打開,數(shù)據(jù)異常(導致不知道怎么寫代碼,數(shù)據(jù)都不對,能寫出來才怪了)
自己動動手,不難(小提示,使用format(XXX, ‘.6f’)強制實現(xiàn)6位小數(shù),round函數(shù)輸出可以小于6位)
我使用了部分網(wǎng)友自己寫的程序,發(fā)現(xiàn)會有點位數(shù)據(jù)與官方數(shù)據(jù)不一致的問題。
建議直接使用官方coco-annotator調(diào)通以后進行打點,多分類也在標記時進行。
厚顏無恥的給上另外一篇我的文章鏈接coco-annotator安裝使用
如果你搞定了標記和轉(zhuǎn)txt,那么你的數(shù)據(jù)會比官方給出的數(shù)據(jù)略大是正常的。官方的數(shù)據(jù)把部分數(shù)據(jù)移除了,原因如下圖嘛。
因為不能直接復制很多內(nèi)容,格式方面有一些問題,很煩,懶得調(diào)整了。
你是否還在尋找穩(wěn)定的海外服務器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務器高可用性,企業(yè)級服務器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧