#其中coco_kpts文件夹与edgeai-yolov5-yolo-pose处于同一目录下,格式如下:
edgeai-yolov5
│ README.md
│ ...
│
coco_kpts
│ images
│ └─────train2017
│ │ └───
| | '
│ └─val2017
| └───
| .
│ annotations
| labels
│ └─────train2017
│ │ └───
| | '
│ └─val2017
| └───
| .
| train2017.txt
| val2017.txt
权重在原文
报错说什么数组大小异常多半是你忘了加–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’
export.py不在根目录,而在models路径下下面,剩下的坑,略。
提示,原文给的onnx文件是可以用点,主要还是5的坑,
不过代码有点问题,所以需要稍微改下代码,不过难度不大,锻炼下自己。使用官方图片,成功推理后其结果如下图所示。

解决方法:
在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))
解决方法:
找到X:\xxx\edgeai-yolov5-yolo-pose\venv\Lib\site-packages\torch\nn\modules\upsampling.py (直接点击pycharm跳转)
找到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 #原来的,删除本行内容即可
#)
def forward(self, input: Tensor) -> Tensor:
return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners)
解决方法:
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参数,调用的代码错误,位置自己找
(上方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
不知道是不是版本问题?报错PyTorch版本1.12.1,成功的版本1.8.2
(但这版本CoreML export failure,‘torch._C.Node’ object has no attribute ‘ival’)
2022/12/28补充以下更新:
6.1
CoreML export failure,‘torch._C.Node’ object has no attribute 'ival’解决方法是在export.py中将92行注释掉
ts = optimize_for_mobile(ts)
参考链接https://github.com/ultralytics/yolov5/issues/2961
但我这样做了以后,依旧报错。忘了截图是啥问题了(可以留言告诉我,我懒得折腾版本了),总之,查询以后发现是版本问题
支持macOS 10.14的coremltools的最新版本是4.1,而现在一般是coremltools5.2,它不支持macOS 10.14
进入到对应的虚拟环境中,输入以下命令(查询版本命名:conda list coremltools)

pip uninstall coremltools
完成以后,输入安装4.1版本
pip install coremltools==4.1

改版本后如果取消92行的注释,会报错。所以依旧注释,确认在coremltools=4.1的环境中,重新导出。

好的,搞定导出。
什么,你要支持之后的版本?可能需要麻烦你自己搞定,如果愿意,可以留言帮助其他人。
if save_txt_tidl: # Write to file in tidl dump format
#for *xyxy, conf, cls in det_tidl: #写错了
for *xyxy, conf, cls in det:#作者小失误
适配代码(略)
解决方法:
在虚拟环境中(建议python=3.7),3.8.特别是3.9 问题太多。大佬可以自己解决
pip install xtcocotools
如需Python版本不要过高,否则之后的python版本只能安装onnxruntime>=1.12.0
在对应的虚拟环境中输入
pip install onnxruntime==1.10.0
原作者有部分错误(我在留言中已指出,Ta也解释了原因,但我记得好像还有其他问题)。另外他是yolov7(但改代码部分不太影响,可以调通)
多分类和多关键点
annotation{
"keypoints": [x1,y1,v1,...], #关键点坐标及标志位 v
"num_keypoints": int, #关键点数量(要求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 | 该点存在且没有被遮挡 |
具体的标记规则建议参考coco的标记
在yolov5的yolo转txt的代码上增加读取Json中关键点信息转换就行。
坑在于,建议使用Json阅读器来弄,用nodepad++打开,数据异常(导致不知道怎么写代码,数据都不对,能写出来才怪了)
自己动动手,不难(小提示,使用format(XXX, ‘.6f’)强制实现6位小数,round函数输出可以小于6位)
我使用了部分网友自己写的程序,发现会有点位数据与官方数据不一致的问题。
建议直接使用官方coco-annotator调通以后进行打点,多分类也在标记时进行。
厚颜无耻的给上另外一篇我的文章链接coco-annotator安装使用
如果你搞定了标记和转txt,那么你的数据会比官方给出的数据略大是正常的。官方的数据把部分数据移除了,原因如下图嘛。


因为不能直接复制很多内容,格式方面有一些问题,很烦,懒得调整了。
我正在尝试学习Ruby词法分析器和解析器(whitequarkparser)以了解更多有关从Ruby脚本进一步生成机器代码的过程。在解析以下Ruby代码字符串时。defadd(a,b)returna+bendputsadd1,2它导致以下S表达式符号。s(:begin,s(:def,:add,s(:args,s(:arg,:a),s(:arg,:b)),s(:return,s(:send,s(:lvar,:a),:+,s(:lvar,:b)))),s(:send,nil,:puts,s(:send,nil,:add,s(:int,1),s(:int,3))))任何人都可以向我解释生成的
下面的代码工作正常:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson)do|key,oldv,newv|ifkey==:aoldvelsifkey==:bnewvelsekeyendendputskerson.inspect但是如果我在“ifblock”中添加return,我会得到一个错误:person={:a=>:A,:b=>:B,:c=>:C}berson={:a=>:A1,:b=>:B1,:c=>:C1}kerson=person.merge(berson
我定义了一个方法:defmethod(one:1,two:2)[one,two]end当我这样调用它时:methodone:'one',three:'three'我得到:ArgumentError:unknownkeyword:three我不想从散列中一个一个地提取所需的键或排除额外的键。除了像这样定义方法之外,有没有办法规避这种行为:defmethod(one:1,two:2,**other)[one,two,other]end 最佳答案 如果不想写**other中的other,可以省略。defmethod(one:1,two:2
我已经安装了最新版本的compass、sass和susy。但我仍然收到此错误:Unabletoactivatesusy-2.1.1,becausesass-3.2.17conflictswithsass(~>3.3.0)有人知道这个Ruby是如何工作的吗?这是我安装的gem的列表:***LOCALGEMS***CFPropertyList(2.2.0)chunky_png(1.3.0)compass(0.12.4)compass-core(1.0.0.alpha.19)compass-import-once(1.0.4)compass-rails(1.1.3)fssm(0.2.10)l
在神经网络方面,我完全是个初学者。我整天都在与ruby-fann和ai4r搏斗,不幸的是我没有任何东西可以展示,所以我想我会来到StackOverflow并询问这里的知识渊博的人。我有一组样本——每天都有一个数据点,但它们不符合我能够找出的任何明确模式(我尝试了几次回归)。不过,我认为看看是否有任何方法可以仅从日期预测future的数据会很好,而且我认为神经网络将是生成希望表达这种关系的函数的好方法.日期是DateTime对象,数据点是十进制数,例如7.68。我一直在将DateTime对象转换为float,然后除以10,000,000,000得到一个介于0和1之间的数字,我一直在将
我知道我能做到:classParentdefinitialize(args)args.eachdo|k,v|instance_variable_set("@#{k}",v)endendendclassA但我想使用关键字参数来更清楚地说明可以接受哪个散列键方法(并进行验证表明不支持此键)。所以我可以写:classAdefinitialize(param1:3,param2:4)@param1=param1@param2=param2endend但是有没有可能写一些更短的东西而不是@x=x;@y=y;...从传递的关键字参数初始化实例变量?是否可以访问作为哈希传递的关键字参数?
当我第一次在ruby中找到关键字“in”时。我想也许我可以这样做:1英寸(0..10)但看起来我不能那样使用它。然后我在ruby-lang.org中搜索它,然后用谷歌搜索它。没有答案!ruby中关键字“in”的含义是什么? 最佳答案 您应该能够执行以下操作:foriin0..10doputsiend您提到的表达式1in(0..10)将不起作用,因为常量(1)不能在一定范围内变化-它是一个常量!您需要在in关键字之前命名一个变量。希望对您有所帮助。参见thispage 关于ruby
我们不能将关键字参数作为带有字符串键的散列传递,关键字参数仅适用于作为符号键的散列。一个简单的例子:defmy_method(first_name:,last_name:)puts"first_name:#{first_name}|last_name:#{last_name}"endmy_method({last_name:'Sehrawat',first_name:'Manoj'})#=>first_name:Manoj|last_name:Sehrawatmy_method({first_name:'Bob',last_name:'Marley'})#=>first_name:Bo
我正在尝试训练一个前馈网络来使用Ruby库AI4R执行异或运算。然而,当我在训练后评估XOR时。我没有得到正确的输出。有没有人以前使用过这个库并得到它来学习异或运算。我使用了两个输入神经元,一个隐藏层中的三个神经元,一个输出层,正如我看到的预计算XOR前馈神经网络就像这样。require"rubygems"require"ai4r"#Createthenetworkwith:#2inputs#1hiddenlayerwith3neurons#1outputsnet=Ai4r::NeuralNetwork::Backpropagation.new([2,3,1])example=[[0,
对于体育新闻中文文本的关键字提取,常用的算法包括TF-IDF、TextRank和LDA等。它们的基本步骤如下:1.TF-IDF算法: -将文本进行分词和词性标注处理。-统计每个词在文本中的词频(TF)。-计算每个词在整个语料库中出现的文档频率(DF)和逆文档频率(IDF)。-计算每个词的TF-IDF值,并按照值的大小进行排序,选择排名前几的词作为关键字。2.TextRank算法:-将文本进行分词和词性标注处理。-将分词结果转化成图模型,每个词语为节点,根据词语之间的共现关系建立边。-对图模型进行迭代计算,计算每个节点的PageRank值,表示该节点的重要性。-选择排名前几的节点作为关键字。3.