YOLO-V4 实现口罩识别(附加数据、数据批量处理程序)
图1、网络结构图
输入的图像为448448,经过以上的结构,输出的为77*1024的张量,是第7个图样。在激活函数上,最后一层输出时用了线性激活函数,其余层都使用的是Leaky Relu激活函数。
图2、Leaky Relu激活函数
2、yolo-v1损失函数
图3、损失函数
3、yolo-v1和yolo-v4对比
yolo-v4说简单点就是对yolo-v3的改进,它的改进方法就是总结了几乎所有的检测技巧,又提出一点儿技巧,然后经过筛选,排列组合,挨个实验(ablation study)哪些方法有效。YOLOv4对深度学习中一些常用Tricks进行了大量的测试,最终选择了这些有用的Tricks:WRC、CSP、CmBN、SAT、 Mish activation、Mosaic data augmentation、CmBN、DropBlock regularization 和 CIoU loss。
YOLOv4在传统的YOLO基础上,加入了这些实用的技巧,实现了检测速度和精度的最佳权衡。实验表明,在Tesla V100上,对MS COCO数据集的实时检测速度达到65 FPS,精度达到43.5%AP。
二、yolo-v4源码
这个是从网络收集而来,自己已经跑通了,里面也有一些使用的方法,也就不啰嗦了,可以自己研究一下,跑一下口罩识别。
链接地址: https://pan.baidu.com/s/1ziNPRznNcfdGMCKWtB4xYQ 提取码: e939
三、口罩数据
我这里整理了一些数据集,一共有三个、我跑的是yolov4的第二个数据集。我会标注,可以先用我跑的这个,因为我跑通了。
链接地址:https://pan.baidu.com/s/1G1XLjK8Y3WNbRSf-1dwVgA 提取码: vvhv
四、处理数据
1、批量移动(删除)某格式的文件【父目录下所有文件】
1 import os
2 import shutil
3
4 for parent, dirnames, filenames in os.walk('原目录'):
5 for fn in filenames:
6
7 if fn.lower().endswith('.xml'):
8 # os.remove(os.path.join(parent, fn)) ##这是删除文件的语句
9 shutil.copy(os.path.join(parent, fn),'目标目录') #这是移动的语句
10
11 #目录例子 D:\\学习文件\\YOLO\\数据\\xml (注意:双斜杠)
2、批量更改目录下某格式文件的名字【父目录下所有文件】
1 import os
2
3
4 class BatchRenamePics(object):
5 """
6 批量命名目录下的所有图名[.jpg,.png]
7 命名格式:1-1,1-2...2-1,2-2...10-1,10-2...eg
8 """
9 def __init__(self, path):
10 # 设置起始路径path
11 self.path = path
12
13 def rename(self):
14 allfile = os.walk(self.path)
15 # j用于计数,统计有多少张照片被重命名
16 j = 0
17 # 遍历每一层目录,从上到下的顺序
18 for dirpath, dirnames, filenames, in allfile:
19 # 得到当前文件夹的名字tail
20 tail = os.path.split(dirpath)[1]
21 # i用于命名
22 i = 0
23 # 遍历filenames中的每一个文件
24 for each in filenames:
25 # 如果文件名是以.jpg或者.png结尾则认为是图片,可以自己添加其他格式的照片
26 if each.endswith('.jpg') or each.endswith('.png')or each.endswith('.xml'):
27 i += 1
28 j += 1
29 # 拼接完整的包含路径的文件名
30 scr = os.path.join(dirpath, each)
31 # 拼接新的完整的包含路径的文件名, tail是文件夹的名字
32 # dst = os.path.join(dirpath, tail + '-' + str(i) + '.jpg') ##这个是文件改格式
33 dst = os.path.join(dirpath, str(j) + '.jpg')
34 try:
35 # 重命名图片文件
36 os.rename(scr, dst)
37 print(scr + '--->' + dst)
38 except:
39 continue
40 else:
41 continue
42 print('累计重命名{}张图片'.format(j))
43
44 if __name__ == '__main__':
45 # 设置起始路径path
46 path = r'原目录'
47 # 创建实例对象
48 pics = BatchRenamePics(path)
49 # 调用实例方法
50 pics.rename()
最后,感谢大家对本文章的阅读,如果有什么问题,欢迎在下方留言,一起讨论,共同进步。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步