下载项目
github剪枝项目:yolov5_prune
配套的作者修改的yolov5项目:yolov5-v6
运行代码
稀疏化训练和相关的数据集转化方法参考我之前的博客
踩坑
报错1:
找不到标签,这里已经把图片的路径改成了系统绝对路径写到了hand_data/train.txt和hand_data/valid.txt中,解决了图片找不到的问题,出现了标签找不到的问题
No labels in hand_data/train.cache
后面发现是路径有问题,哭死
获取路径的小代码:
#导入对路径操作的库
import sys
import os
#图像路径
root_path = '/home/hitcrt/Documents/cyl/try_prune_yolov5/yolov5_prune-6/yolov5-v6/data/images/test'
fns = os.listdir(root_path)
with open('image_list.txt', 'w') as f:
for fn in fns:
path = os.path.join(root_path, fn)
f.write('{}\n'.format(path))
print(path)
报错2
运行剪枝代码,对稀疏化得到的权重剪枝:
python shortcut_prune_yolov5s.py --cfg cfg/yolov5s_v6_hand.cfg --data data/oxfordhand.data --weights best.pt --percent 0.5 --img_size 640
报错:
'collections.OrderedDict' object has no attribute 'yaml'
报错的代码:modelyolov5.yaml
这个是基于Yolov3的剪枝工程修改的,有些语法是旧的,Model也是Darknet类型
解决
用同一行命令加载v5和v3的权重:
model_v3 = torch.load('yolov3.pt', map_location=device)['model']
model_v5 = torch.load('best.pt', map_location=device)['model']
model_2 = torch.load('yolov5s.pt', map_location=device)['model']
model_v3,model_2的类型是{Model},model_v5的类型是{OrderedDict:348}
model_v3.yaml,model_2.yaml不报错
model_v5.yaml报错
应该是best.pt存储的时候有问题,加载不出来。
报错3
cv2.error: Caught error in DataLoader worker process 0.
cv2.error: OpenCV(4.5.3-openvino) ../opencv/modules/core/src/copy.cpp:1026: error: (-215:Assertion failed) top >= 0 && bottom >= 0 && left >= 0 && right >= 0 && _src.dims() <= 2 in function 'copyMakeBorder'
这个报错查了说是yolov3里test加载数据的问题,暂时先把所有test注释掉,就能跑了