圖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()
最後,感謝大家對本文章的閱讀,如果有什麼問題,歡迎在下方留言,一起討論,共同進步。