一、目标检测介绍
目标检测(Object Detection)是计算机视觉领域的一项重要技术,旨在识别图像或视频中的特定目标并确定其位置。通过训练深度学习模型,如卷积神经网络(CNN),可以实现对各种目标的精确检测。常见的目标检测任务包括:人脸检测、行人检测、车辆检测等。目标检测在安防监控、自动驾驶、智能零售等领域具有广泛应用前景。
二、YOLOv7介绍
YOLOv7(You Only Look Once version 7)是YOLO系列目标检测算法的最新版本,以其高效的实时性能和出色的检测准确率而备受关注。YOLOv7在目标检测领域具有显著的创新点和优势,以下是对YOLOv7的一些关键介绍:
模型优化与技术发展:YOLOv7在模型结构、损失函数设计、正负样本匹配等方面进行了优化,以适应日益复杂的目标检测任务。
模型结构重参化:YOLOv7引入了模型结构重参化,通过优化网络中的不同层来提高模型性能,减少模型复杂度,提高推理速度,并提升检测精度。
动态标签分配策略:YOLOv7提出了一种新的动态标签分配策略,即coarse-to-fine策略,有效提高了模型的训练效果。
ELAN高效网络架构:YOLOv7采用了名为ELAN的高效网络架构,专注于提高模型的推理速度和检测精度。
带辅助头的训练:YOLOv7采用了带辅助头的训练方法,通过在模型的不同阶段引入额外的监督信息,提高检测准确率。
技术原理:YOLOv7的技术原理基于深度学习和计算机视觉技术,包括输入处理、骨干网络、颈部网络和头部网络,其中每个部分都经过了精心设计和优化。
实际应用与前景展望:YOLOv7在自动驾驶、安防监控、智能家居等领域具有广泛的应用前景。
性能测试:YOLOv7在不同速度和精度的范围内超过了已知的检测器,特别是在GPU V100上进行测试时,展现了其卓越的性能。
模型缩放:YOLOv7为不同的GPU设计了不同版本的模型,包括边缘GPU、普通GPU和云GPU,并针对不同的服务需求进行了模型缩放。
实验与结论:YOLOv7在MS COCO数据集上进行了训练测试,证明了其在实时目标检测中的新标杆地位。
三、源码/论文获取
代码:https://github.com/WongKinYiu/yolov7
论文:https://arxiv.org/abs/2207.02696
四、环境搭建
# (1)创建python环境
>conda create -n YOLOv8_My python=3.8.10
# (2)激活环境
>conda activate YOLOv8_My
# (3)安装ultralytics和pytorch
>pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116 -i https://pypi.tuna.tsinghua.edu.cn/simple/
>pip install ultralytics==8.1.3 -i https://pypi.tuna.tsinghua.edu.cn/simple
>pip install tensorboard -i https://pypi.tuna.tsinghua.edu.cn/simple/
4.1 环境检测
下载预训练模型:点击
然后命令行输入
python detect.py --weights yolov7.pt
看到以下的图片就说明环境没问题。
五、数据集准备
这时候说明环境是没问题的了,我们可以准备数据集了,数据集的格式就是VOC格式中的Main里面的txt文件,图片的绝对路径。
直接将YOLO图片路径转成txt单文件:
# From Mr. Dinosaur
import os
def listdir(path, list_name): # 传入存储的list
for file in os.listdir(path):
file_path = os.path.join(path, file)
if os.path.isdir(file_path):
listdir(file_path, list_name)
else:
list_name.append(file_path)
list_name = []
path = r'E:/dataset/yolov5_dataset/steel_defect_datasets/images/train/'.replace("\\","/") # 文件夹路径
listdir(path, list_name)
print(list_name)
with open(r'E:/dataset/yolov5_dataset/steel_defect_datasets/train.txt'.replace("\\","/"), 'w') as f: # 要存入的txt
write = ''
for i in list_name:
write = write + str(i) + '\n'
f.write(write)
这时候我们可以看到Main文件下有train.txt和val.txt。
六、 模型训练
1.修改数据集配置文件:
2.修改模型配置文件
3.修改训练代码
4.命令行输入
python train.py
七、模型验证
修改test.py
然后在命令行运行:python test.py
八、模型测试
修改detect.py
然后在命令行运行:python detect.py
九、错误总结
9.1 错误1-numpy jas mp attribute int
numpy库如果安装最新的1.24.1,会发生module numpy has no attribute int 错误,这个错误我找了很久, 这个是因为numpy版本的原因,1.24以上的版本没有int了,改为inf了,换成1.23的版本就好了,或者把报错出的int改成inf就可以了,所以requirements.txt中的numpy库建议直接替换成numpy==1.23.0,这个就没有问题了。
9.2 错误2-测试代码未能跑出检测框
主函数加入
torch.backends.cudnn.enabled = False
9.3 错误3- Command ‘git tag’ returned non-zero
subprocess.CalledProcessError: Command ‘git tag’ returned non-zero exit status 128.
解决办法:
改为绝对路径
parser.add_argument('--weights', type=str, default=r'F:\python\company_code\Object_detection\yolov7-main\yolov7.pt', help='initial weights path')
9.4 错误4-No loop matching the specified signature and casting was found for ufunc greater
临时解决方法:np.greater去掉dtype