dev #1
							
								
								
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -1 +1,6 @@
 | 
			
		||||
database/chestXray8_512/*
 | 
			
		||||
database/*
 | 
			
		||||
logs/*
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
!*.md
 | 
			
		||||
@@ -5,4 +5,4 @@
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# 数据集介绍
 | 
			
		||||
[详细见](./database/README.md)
 | 
			
		||||
[详细见](./database/Dataset.md)
 | 
			
		||||
 
 | 
			
		||||
@@ -43,3 +43,6 @@ mixup_prob          = 0.5
 | 
			
		||||
special_aug_ratio   = 0.7
 | 
			
		||||
; label_smoothing     标签平滑。一般0.01以下。如0.01、0.005。
 | 
			
		||||
label_smoothing     = 0.01
 | 
			
		||||
 | 
			
		||||
[dataset]
 | 
			
		||||
classes_path        = model_data/voc_classes.txt
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										13
									
								
								database/Dataset.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								database/Dataset.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
# 数据集介绍
 | 
			
		||||
 | 
			
		||||
数据集来自kaggle[数据集原地址](https://www.kaggle.com/datasets/spritan1/yolo-annotated-chestxray-8-object-detection)
 | 
			
		||||
 | 
			
		||||
## 标签
 | 
			
		||||
1. 肺不张,Atelectasis
 | 
			
		||||
2. 心脏肥大,Cardiomegaly
 | 
			
		||||
3. 很有效率,Effusion
 | 
			
		||||
4. 渗透,Infiltrate
 | 
			
		||||
5. 诺依,Nodule
 | 
			
		||||
6. 质量,Mass
 | 
			
		||||
7. 肺炎,Pneumonia
 | 
			
		||||
8. 气胸,Pneumothorax
 | 
			
		||||
@@ -1,13 +1 @@
 | 
			
		||||
# 数据集介绍
 | 
			
		||||
 | 
			
		||||
数据集来自kaggle[数据集原地址](https://www.kaggle.com/datasets/spritan1/yolo-annotated-chestxray-8-object-detection)
 | 
			
		||||
 | 
			
		||||
## 标签
 | 
			
		||||
1. 肺不张,Atelectasis
 | 
			
		||||
2. 心脏肥大,Cardiomegaly
 | 
			
		||||
3. 很有效率,Effusion
 | 
			
		||||
4. 渗透,Infiltrate
 | 
			
		||||
5. 诺依,Nodule
 | 
			
		||||
6. 质量,Mass
 | 
			
		||||
7. 肺炎,Pneumonia
 | 
			
		||||
8. 气胸,Pneumothorax
 | 
			
		||||
# 存放数据集
 | 
			
		||||
							
								
								
									
										639
									
								
								model_data/2007_train.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										639
									
								
								model_data/2007_train.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,639 @@
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000002_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000005_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000005_002.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000005_004.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000005_005.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000006_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000007_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000008_001.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000011_001.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000011_002.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000011_003.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000011_004.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000011_008.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000013_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000013_008.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000013_014.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000013_015.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000013_016.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000013_017.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000013_019.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000014_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000015_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000016_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000017_001.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000017_002.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000018_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000022_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000023_001.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000023_003.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000029_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000032_003.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000032_005.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000032_009.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000032_010.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000032_019.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000032_020.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000032_022.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000032_025.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000032_046.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000032_048.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000032_049.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000032_051.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000034_001.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000035_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000037_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000038_004.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000039_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000039_001.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000039_002.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000039_003.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000040_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000040_002.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000041_003.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000041_004.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000042_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000042_002.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000042_004.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000042_008.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000046_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000047_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000047_001.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000047_002.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000047_005.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000047_007.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000048_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000049_001.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000049_002.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000050_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000050_001.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000050_002.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000050_003.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000052_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000052_001.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000054_001.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000054_002.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000054_003.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000054_005.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000054_008.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000055_000.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000072_000.png 178,283,242,325,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000147_001.png 308,299,359,389,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000149_006.png 301,230,426,275,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000181_061.png 104,284,211,411,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000211_010.png 176,267,227,351,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000211_019.png 170,211,420,414,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000211_041.png 112,208,368,423,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000344_003.png 86,115,135,226,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000377_004.png 193,209,445,393,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000398_003.png 184,194,426,382,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000457_004.png 401,140,448,193,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000468_017.png 74,259,130,282,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000468_033.png 102,251,160,277,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000583_008.png 146,227,251,257,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000643_002.png 409,269,457,307,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000661_000.png 149,218,423,432,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000732_005.png 213,232,420,404,0 306,55,393,107,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000740_000.png 150,192,389,385,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000744_006.png 73,254,144,314,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000756_001.png 144,162,445,377,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000808_002.png 279,192,392,275,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000830_000.png 287,244,428,302,3 154,199,203,259,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000845_000.png 185,183,412,396,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000865_006.png 419,312,458,332,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000902_001.png 175,317,219,359,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00001075_024.png 145,163,222,262,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00001153_004.png 153,126,202,346,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00001170_046.png 317,191,440,288,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00001248_038.png 283,47,410,131,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00001369_000.png 168,138,445,331,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00001373_009.png 206,234,480,484,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00001373_039.png 130,250,411,495,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00001534_005.png 198,171,443,361,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00001555_002.png 307,404,344,442,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00001558_016.png 42,209,156,417,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00001673_016.png 140,274,166,324,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00001836_041.png 313,192,329,205,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00001836_082.png 85,284,166,339,3 168,194,238,251,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00001946_029.png 144,198,181,275,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00002059_008.png 187,232,464,415,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00002106_000.png 162,181,188,207,2 318,214,383,291,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00002176_007.png 129,94,183,152,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00002290_001.png 130,358,161,382,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00002350_001.png 363,240,437,284,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00002533_002.png 140,13,244,280,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00002583_014.png 304,198,463,402,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00002763_031.png 201,177,439,371,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00003072_028.png 12,169,154,394,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00003148_004.png 298,252,326,342,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00003394_006.png 156,187,377,339,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00003400_003.png 304,28,424,142,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00003440_000.png 108,127,170,167,3 295,228,353,285,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00003787_003.png 144,235,228,294,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00003803_010.png 85,295,405,361,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00003945_004.png 34,235,187,319,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00003948_001.png 140,152,192,216,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004296_000.png 365,376,425,423,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004342_002.png 100,243,339,483,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004342_050.png 92,180,160,391,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004344_013.png 175,173,437,384,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004344_014.png 164,156,398,381,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004344_018.png 195,196,448,411,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004344_022.png 188,254,420,441,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004344_046.png 184,166,424,353,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004381_021.png 194,180,421,343,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004461_000.png 164,196,370,370,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004533_014.png 225,153,449,349,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004534_001.png 128,214,403,422,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004547_003.png 449,345,476,374,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004578_004.png 216,195,432,381,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004630_001.png 142,219,398,391,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004822_051.png 179,184,441,381,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004893_085.png 192,171,424,366,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004911_018.png 347,159,398,204,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004968_003.png 320,342,453,395,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004968_004.png 317,318,449,380,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00005066_005.png 165,243,419,418,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00005066_030.png 138,229,408,380,0 74,364,88,397,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00005089_002.png 324,287,455,381,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00005089_014.png 89,238,159,274,3 322,93,436,391,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00005089_040.png 309,49,434,389,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00005140_001.png 62,131,132,354,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00005532_000.png 191,131,429,338,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00005532_014.png 169,165,399,338,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00005532_016.png 162,208,369,378,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00005532_019.png 341,117,377,146,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00005827_000.png 196,153,422,389,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00005869_001.png 90,33,213,73,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00006736_000.png 385,236,407,259,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00006751_000.png 87,222,125,255,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00006821_002.png 60,42,251,380,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00006851_033.png 94,312,194,339,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00006851_034.png 125,308,205,369,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00006912_007.png 165,196,385,359,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00007037_000.png 144,243,394,436,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00007043_000.png 145,180,410,399,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00007120_009.png 124,274,192,318,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00007124_008.png 272,244,426,337,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00007471_003.png 270,53,437,294,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00007551_020.png 176,261,405,436,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00007557_026.png 65,353,176,415,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00007676_002.png 180,219,221,288,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00007710_000.png 312,219,420,263,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00007735_040.png 199,238,470,462,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00007882_001.png 75,321,176,350,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00008008_027.png 323,244,371,295,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00008339_010.png 174,173,437,366,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00008365_000.png 168,254,377,456,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00008386_000.png 355,178,385,202,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00008399_007.png 181,189,455,375,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00008522_032.png 157,104,374,301,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00008547_001.png 403,340,474,411,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00008554_009.png 303,247,418,331,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00008716_000.png 353,354,429,406,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00008814_010.png 97,203,432,236,3 97,206,430,259,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00008841_025.png 77,243,210,293,1 292,40,388,83,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00008841_044.png 73,23,235,106,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00009166_004.png 78,121,119,273,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00009218_015.png 96,109,207,405,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00009229_007.png 361,273,396,310,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00009256_005.png 152,196,208,254,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00009342_000.png 429,214,506,340,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00009403_006.png 374,208,412,234,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00009437_008.png 376,297,457,336,3 371,290,465,429,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00009608_024.png 197,201,379,372,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00009619_000.png 150,329,204,385,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00009669_003.png 78,324,209,434,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00009683_005.png 16,179,153,330,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00009705_000.png 169,154,440,339,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00009745_000.png 164,199,392,391,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00009779_001.png 355,247,437,281,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00009889_018.png 62,379,79,399,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010007_168.png 166,360,194,420,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010103_014.png 171,206,192,229,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010125_004.png 73,150,106,194,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010172_001.png 94,347,118,373,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010277_000.png 431,346,467,402,1 148,155,418,294,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010381_000.png 195,156,422,336,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010478_012.png 106,293,229,394,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010481_021.png 381,275,461,310,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010575_002.png 116,302,233,381,3 347,295,471,383,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010625_014.png 135,221,408,290,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010767_008.png 101,95,184,166,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010767_016.png 58,88,214,384,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010770_000.png 122,185,225,219,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010815_006.png 155,120,232,242,3 155,120,228,248,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010828_039.png 294,234,400,348,3 351,223,470,342,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010936_011.png 135,290,187,389,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010936_016.png 87,82,203,151,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010959_010.png 106,245,145,275,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011151_004.png 165,103,353,286,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011157_001.png 100,245,163,306,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011237_094.png 64,114,144,369,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011263_004.png 156,196,433,437,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011269_019.png 366,209,475,303,1 286,133,351,204,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011322_006.png 182,242,423,399,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011402_007.png 102,240,349,412,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011450_000.png 367,247,416,295,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011463_002.png 189,272,410,444,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011502_001.png 221,158,404,349,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011576_000.png 103,291,126,312,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011814_031.png 84,227,178,377,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011827_003.png 284,235,437,297,3 376,74,440,366,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011831_010.png 117,41,237,127,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011832_002.png 372,175,407,212,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011857_001.png 357,268,462,309,3 347,256,481,339,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011925_072.png 188,127,269,329,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011925_076.png 61,53,209,240,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012045_009.png 358,280,408,339,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012048_007.png 143,190,217,266,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012094_040.png 288,55,361,108,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012123_001.png 319,305,456,413,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012174_000.png 84,79,178,349,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012261_001.png 226,216,493,426,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012270_005.png 371,117,428,173,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012291_008.png 116,315,229,353,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012374_000.png 327,128,368,168,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012376_010.png 370,105,433,317,2 187,71,247,99,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012376_011.png 385,240,422,279,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012415_002.png 199,267,236,310,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012505_007.png 127,84,246,350,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012515_002.png 144,319,186,347,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012622_016.png 381,83,422,147,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012637_000.png 364,249,430,291,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012670_000.png 213,210,428,368,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012686_003.png 162,205,430,406,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012741_004.png 221,217,444,421,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012793_000.png 176,189,423,391,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012834_008.png 55,206,154,242,3 2,179,139,390,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012834_034.png 384,113,487,292,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012834_122.png 38,47,167,484,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012892_010.png 187,112,240,179,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012973_005.png 61,31,201,412,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012975_003.png 103,118,206,219,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013031_005.png 9,209,89,406,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013051_000.png 133,275,162,303,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013111_069.png 237,201,309,331,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013118_008.png 112,273,155,313,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013125_000.png 84,203,415,412,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013187_002.png 99,283,468,371,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013249_031.png 191,239,393,368,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013249_033.png 207,201,441,373,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013285_026.png 89,249,108,383,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013337_000.png 30,157,169,381,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013346_015.png 186,211,416,472,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013471_002.png 64,346,199,396,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013508_001.png 161,296,250,341,3 143,258,188,305,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013615_052.png 175,203,407,381,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013635_002.png 181,165,412,350,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013659_019.png 279,83,330,152,2 145,42,199,67,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013674_000.png 105,159,134,188,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013685_028.png 132,246,392,318,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013750_016.png 98,91,195,228,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013751_003.png 338,305,383,350,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013807_009.png 157,61,218,82,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013885_000.png 218,136,240,158,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013911_000.png 59,241,101,292,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013951_001.png 150,133,182,158,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013977_005.png 390,392,452,482,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013991_000.png 190,185,243,232,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013992_006.png 140,263,204,303,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013993_077.png 83,203,184,315,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013993_083.png 68,108,196,457,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014004_038.png 172,198,227,267,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014014_013.png 324,191,409,276,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014083_023.png 320,305,458,371,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014095_003.png 148,248,234,295,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014116_009.png 348,159,375,188,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014177_010.png 94,194,158,310,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014223_009.png 112,193,354,337,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014253_010.png 18,123,141,165,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014346_010.png 76,72,219,379,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014398_031.png 94,231,189,395,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014447_004.png 106,210,188,258,3 77,214,124,348,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014551_010.png 293,205,372,295,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014574_000.png 184,182,403,380,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014607_007.png 100,330,421,437,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014626_017.png 135,67,186,142,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014626_035.png 75,85,183,478,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014687_001.png 363,247,433,275,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014706_018.png 185,223,397,368,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014716_007.png 343,65,435,222,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014731_028.png 386,132,443,203,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014738_000.png 95,60,220,350,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014795_002.png 144,270,218,337,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014822_039.png 322,102,419,414,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014870_004.png 57,306,169,353,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00015018_004.png 402,180,430,209,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00015141_002.png 398,301,423,334,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00015262_005.png 68,267,143,315,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00015300_000.png 85,197,159,271,3 107,237,146,264,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00015304_001.png 145,167,453,414,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00015400_001.png 149,175,389,380,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00015440_000.png 318,152,394,186,3 87,146,241,404,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00015530_147.png 93,33,195,340,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00015583_000.png 339,170,363,188,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00015649_000.png 320,149,363,186,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00015719_005.png 176,189,426,461,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00015770_010.png 181,235,407,370,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00015792_005.png 133,146,173,185,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00015794_000.png 34,324,58,346,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00015799_012.png 180,231,442,430,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016009_008.png 286,288,363,412,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016184_040.png 349,269,371,295,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016191_017.png 341,296,441,378,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016267_000.png 89,299,205,408,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016291_002.png 308,338,471,377,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016291_019.png 76,37,214,219,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016414_000.png 192,215,478,439,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016417_008.png 392,126,483,436,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016429_015.png 73,46,263,331,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016487_002.png 320,346,364,385,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016490_011.png 91,261,175,293,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016522_023.png 68,125,236,447,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016568_010.png 345,200,399,262,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016606_000.png 183,212,427,402,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016837_002.png 70,329,206,376,3 70,352,199,383,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016937_014.png 86,41,218,145,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016964_011.png 364,276,411,306,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016972_019.png 257,317,406,431,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016972_025.png 344,262,404,360,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016987_019.png 132,303,185,342,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016987_022.png 41,244,190,305,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016990_000.png 156,237,385,388,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017028_000.png 72,289,111,319,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017124_004.png 396,284,478,505,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017137_016.png 85,73,228,311,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017151_003.png 312,244,418,343,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017178_007.png 172,150,395,339,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017188_002.png 99,240,214,285,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017199_005.png 386,341,422,378,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017214_015.png 306,174,346,246,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017243_010.png 38,301,82,342,2 10,145,73,428,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017255_001.png 346,299,407,343,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017257_001.png 213,112,372,287,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017346_000.png 436,307,450,324,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017500_002.png 382,307,435,338,3 55,248,154,384,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017514_008.png 173,222,441,390,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017524_028.png 125,217,374,432,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017582_003.png 128,201,228,273,3 53,171,111,326,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017611_002.png 129,224,210,299,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017670_005.png 184,295,244,369,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017714_006.png 406,254,468,418,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017747_008.png 114,87,215,166,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017877_001.png 330,284,430,323,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017893_005.png 193,182,439,386,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017972_026.png 331,123,377,226,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018055_005.png 67,66,238,301,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018055_045.png 44,154,67,204,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018101_012.png 86,92,215,254,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018102_001.png 53,294,73,321,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018187_034.png 240,198,454,368,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018233_057.png 173,192,379,366,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018253_017.png 274,264,355,367,3 67,131,141,397,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018253_059.png 92,202,194,346,3 89,191,190,339,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018366_000.png 95,303,127,338,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018366_029.png 280,235,405,268,1 297,64,399,162,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018387_030.png 194,179,442,326,0 79,220,463,301,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018427_004.png 47,315,135,352,3 385,175,477,449,1 266,164,319,214,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018427_011.png 297,343,449,393,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018496_006.png 40,354,476,464,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018623_001.png 138,249,444,378,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018657_003.png 361,224,446,371,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018686_000.png 176,153,425,380,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018693_004.png 150,217,424,417,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018762_001.png 341,331,382,369,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018762_002.png 301,308,430,349,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018814_000.png 344,257,394,303,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018865_008.png 104,66,177,112,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018980_002.png 123,87,213,197,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018984_000.png 412,154,449,212,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019013_002.png 391,279,416,301,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019058_004.png 175,229,221,299,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019089_004.png 287,312,409,405,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019124_045.png 166,260,229,294,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019124_090.png 328,247,376,284,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019124_104.png 59,69,206,239,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019154_002.png 146,62,212,171,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019187_000.png 198,191,430,384,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019271_030.png 117,348,194,404,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019271_064.png 132,254,429,388,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019271_065.png 105,249,176,305,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019373_036.png 333,203,419,259,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019373_058.png 162,165,224,243,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019399_010.png 391,301,458,425,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019426_000.png 224,220,422,356,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019495_004.png 369,282,443,302,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019499_000.png 361,156,417,204,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019706_002.png 288,44,364,104,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019706_014.png 331,217,417,288,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019766_023.png 367,208,463,366,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019767_016.png 64,318,223,361,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019861_010.png 134,178,402,377,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019892_003.png 285,59,412,109,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019924_020.png 315,314,410,504,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020000_000.png 271,292,382,436,1 135,66,179,80,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020065_008.png 409,158,453,228,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020113_017.png 108,257,448,341,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020124_003.png 87,290,209,341,3 180,142,234,210,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020146_005.png 90,281,239,396,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020213_078.png 92,335,211,385,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020277_001.png 346,214,448,410,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020318_007.png 357,271,467,329,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020318_022.png 275,43,413,163,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020332_000.png 114,311,152,343,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020349_006.png 231,155,371,303,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020393_001.png 118,113,156,148,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020393_003.png 340,270,451,319,3 341,251,467,343,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020405_041.png 55,143,154,332,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020408_037.png 95,316,209,396,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020438_011.png 164,180,407,420,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020482_032.png 241,176,346,357,3 215,212,356,343,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020564_000.png 387,179,444,299,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020673_005.png 281,163,410,248,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020751_003.png 373,77,497,406,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020774_000.png 114,238,145,270,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020810_003.png 79,357,209,414,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020819_002.png 184,170,431,368,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020857_008.png 95,285,376,387,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020986_000.png 209,190,429,336,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021007_000.png 172,234,224,285,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021009_001.png 159,182,389,337,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021024_022.png 359,261,441,356,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021132_000.png 352,102,432,340,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021179_011.png 62,86,239,420,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021181_002.png 75,195,218,298,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021201_010.png 357,95,435,254,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021321_002.png 95,22,197,158,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021374_000.png 373,188,433,241,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021377_016.png 361,336,449,387,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021381_013.png 281,289,422,334,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021420_014.png 393,135,429,174,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021420_020.png 83,345,129,390,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021420_027.png 96,282,149,326,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021443_000.png 143,186,415,393,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021481_014.png 297,200,347,280,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021700_010.png 293,41,394,124,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021703_001.png 68,250,376,356,3 281,255,385,333,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021711_014.png 275,334,451,395,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021748_000.png 275,37,358,64,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021772_016.png 85,96,131,137,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021782_028.png 66,49,177,270,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021796_000.png 93,205,181,295,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021840_016.png 71,268,192,317,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021845_001.png 153,186,347,368,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021860_002.png 50,262,121,367,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021896_003.png 119,68,232,176,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021967_000.png 91,46,273,339,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00022141_023.png 322,48,428,113,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00022155_008.png 342,138,420,177,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00022192_003.png 87,110,218,262,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00022215_012.png 161,176,418,385,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00022237_002.png 134,236,198,287,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00022369_013.png 83,199,170,293,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00022416_004.png 409,234,481,334,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00022416_018.png 178,211,462,388,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00022416_049.png 394,213,436,278,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00022572_063.png 35,258,176,418,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00022572_087.png 10,122,117,353,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00022611_001.png 374,84,459,272,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00022706_001.png 173,157,398,351,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00022707_003.png 377,284,463,320,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00022883_002.png 57,255,423,309,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00022977_000.png 120,321,153,353,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00023058_004.png 19,281,177,382,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00023068_003.png 175,373,193,390,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00023075_033.png 119,267,156,300,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00023078_000.png 370,343,396,367,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00023078_003.png 47,330,112,387,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00023093_007.png 345,206,458,377,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00023093_009.png 216,176,410,312,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00023156_001.png 114,115,192,173,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00023162_025.png 96,39,228,168,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00023168_000.png 107,339,154,400,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00023176_010.png 140,252,478,331,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00023176_017.png 161,127,428,340,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00023325_019.png 172,140,410,315,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025221_001.png 269,291,441,451,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025228_005.png 295,229,443,349,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025228_007.png 59,235,130,386,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025252_032.png 378,340,478,462,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025252_040.png 300,101,431,310,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025252_053.png 7,320,175,400,1 325,319,397,451,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025252_054.png 329,360,401,472,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025270_000.png 134,260,184,294,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025368_014.png 147,342,205,384,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025368_018.png 75,61,235,197,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025368_033.png 379,139,478,236,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025521_003.png 36,260,89,390,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025529_018.png 362,83,454,385,1 351,194,406,258,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025662_006.png 413,319,439,348,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025664_002.png 33,72,171,387,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025686_000.png 298,335,464,387,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025732_004.png 109,195,378,403,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025747_000.png 167,185,415,369,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025769_001.png 350,286,402,318,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025787_027.png 302,49,490,418,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025787_039.png 43,49,134,334,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025787_050.png 305,90,333,215,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025954_025.png 98,46,235,171,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026087_000.png 169,231,378,428,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026136_002.png 275,277,414,332,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026196_001.png 196,245,238,285,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026221_001.png 99,364,151,422,2 68,75,228,328,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026285_000.png 452,412,476,436,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026319_000.png 334,326,394,365,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026338_003.png 176,172,395,330,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026392_005.png 281,55,440,183,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026398_000.png 182,132,206,156,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026451_068.png 147,321,209,368,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026586_009.png 98,93,183,158,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026695_000.png 170,98,229,164,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026753_008.png 299,53,450,393,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026769_010.png 396,208,423,235,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026810_001.png 383,354,442,381,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026886_002.png 112,98,229,437,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026886_004.png 117,258,224,326,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026889_000.png 118,185,415,412,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026911_005.png 173,153,216,201,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026920_000.png 171,223,232,249,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026983_001.png 276,95,310,131,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027028_017.png 75,260,461,330,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027094_003.png 384,280,461,356,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027103_001.png 336,118,438,253,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027213_044.png 285,83,389,489,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027278_007.png 76,23,232,162,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027357_014.png 31,52,162,375,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027441_002.png 60,67,169,348,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027470_006.png 199,250,247,287,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027474_005.png 138,203,188,235,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027577_003.png 47,105,115,238,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027631_000.png 418,356,473,427,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027652_003.png 37,101,110,358,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027685_003.png 170,161,404,352,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027697_001.png 354,192,451,221,3 79,244,234,350,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027797_000.png 215,204,462,365,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027833_022.png 150,152,445,373,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027866_002.png 72,308,373,416,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027875_005.png 348,156,481,357,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027927_009.png 369,195,395,226,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027937_004.png 83,263,138,314,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028012_001.png 280,231,443,331,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028018_000.png 176,226,404,440,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028027_000.png 287,123,346,195,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028173_016.png 282,250,338,319,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028330_003.png 104,219,177,317,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028383_002.png 389,385,433,414,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028452_001.png 314,205,442,279,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028509_007.png 24,169,128,451,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028509_026.png 155,200,408,371,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028518_021.png 92,339,185,392,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028607_000.png 202,151,450,372,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028620_000.png 399,334,476,376,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028625_000.png 169,225,229,273,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028628_008.png 303,49,409,210,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028628_015.png 84,76,170,281,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028628_020.png 313,169,365,211,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028640_008.png 381,271,448,405,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028698_001.png 425,202,455,286,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028861_009.png 290,23,436,173,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028873_009.png 166,140,364,319,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028876_027.png 268,56,384,128,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028876_035.png 95,170,127,206,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028924_009.png 365,112,427,242,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028974_016.png 384,290,467,389,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029075_013.png 328,67,453,182,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029088_023.png 152,147,225,208,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029105_015.png 114,214,174,275,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029200_006.png 66,254,144,311,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029259_027.png 393,193,450,339,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029391_000.png 157,185,400,373,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029464_006.png 45,142,131,239,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029464_015.png 99,176,407,338,3 359,305,455,331,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029469_011.png 362,215,448,441,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029502_006.png 110,294,236,384,3 74,226,202,423,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029532_005.png 64,49,206,280,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029579_014.png 50,260,69,322,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029588_004.png 20,99,153,381,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029631_006.png 59,254,145,307,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029647_002.png 167,203,415,396,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029807_003.png 82,41,260,192,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029817_009.png 110,158,188,267,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029843_001.png 128,224,193,279,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029894_000.png 357,254,472,363,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029906_000.png 165,224,381,382,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029909_003.png 83,84,200,129,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029940_007.png 106,191,178,282,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00030039_008.png 13,60,145,373,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00030106_008.png 112,258,227,393,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00030111_007.png 296,48,375,174,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00030162_029.png 163,190,197,227,2 310,83,412,163,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00030206_013.png 156,169,389,386,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00030260_004.png 184,275,212,386,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00030323_015.png 307,211,420,357,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00030394_001.png 311,91,344,120,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00030408_013.png 359,302,418,374,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00030434_000.png 333,322,371,442,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00030606_006.png 275,15,393,96,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00030636_004.png 305,220,385,295,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00030674_000.png 316,125,430,231,3
 | 
			
		||||
							
								
								
									
										72
									
								
								model_data/2007_val.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								model_data/2007_val.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,72 @@
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000005_001.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000005_003.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000013_038.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000032_008.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00000042_005.png
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00001320_003.png 104,272,140,287,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00001437_012.png 41,69,218,377,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00002176_005.png 130,44,223,122,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00002395_007.png 115,224,153,303,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00002435_005.png 181,240,382,389,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00002578_000.png 398,163,437,193,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00002856_009.png 108,318,217,369,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00004342_020.png 158,193,395,409,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00006621_004.png 153,200,261,308,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00007034_016.png 383,288,428,376,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00009368_006.png 184,140,218,194,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00010071_008.png 101,340,137,431,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011291_003.png 346,73,441,175,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011322_002.png 173,178,426,420,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00011355_011.png 250,26,464,253,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012045_019.png 211,246,239,274,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012094_047.png 333,71,400,147,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012299_002.png 97,287,427,327,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00012829_004.png 84,269,168,316,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013310_059.png 96,104,190,388,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013673_001.png 75,217,115,253,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013685_000.png 129,218,185,243,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00013911_021.png 49,121,399,390,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014198_000.png 338,256,387,352,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014626_028.png 166,177,385,377,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00014976_003.png 303,340,424,380,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00015090_006.png 319,285,417,374,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00015425_012.png 192,144,415,322,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00015895_017.png 359,177,438,438,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016403_003.png 446,438,501,471,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016564_000.png 192,195,418,348,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016587_069.png 377,203,412,232,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00016624_000.png 276,173,460,339,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017138_037.png 59,143,154,384,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017403_006.png 297,288,393,440,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017448_000.png 177,241,416,437,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00017511_006.png 169,211,368,378,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018187_029.png 171,210,427,441,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018253_054.png 91,154,214,407,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018412_001.png 106,308,392,353,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00018496_007.png 286,62,397,109,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019313_000.png 374,307,423,361,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00019917_004.png 306,388,430,412,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020274_021.png 79,218,130,253,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020408_058.png 80,36,224,232,4
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00020429_020.png 83,295,174,338,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021364_001.png 167,225,415,378,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021409_001.png 156,172,402,365,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00021862_004.png 303,279,363,347,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00022098_006.png 247,288,382,365,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00022726_002.png 344,200,407,260,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00023116_005.png 320,219,410,298,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00025969_000.png 182,142,401,332,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026132_016.png 350,241,390,278,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00026261_001.png 98,140,217,260,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027479_013.png 386,282,479,317,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027556_007.png 86,322,155,380,3 35,98,120,216,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00027817_001.png 380,195,478,378,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028265_007.png 399,303,442,353,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028873_004.png 160,160,380,328,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00028876_060.png 381,194,419,237,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029464_003.png 121,187,224,251,3
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00029808_003.png 160,205,384,402,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00030279_000.png 144,210,418,438,0
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00030413_003.png 127,118,172,157,2
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00030634_000.png 70,305,229,354,1
 | 
			
		||||
E:\project\python\rabat-illness-yolov5\database\Train/JPEGImages/00030635_001.png 288,245,408,356,3
 | 
			
		||||
@@ -1,2 +1,5 @@
 | 
			
		||||
0
 | 
			
		||||
1
 | 
			
		||||
2
 | 
			
		||||
3
 | 
			
		||||
4
 | 
			
		||||
5
 | 
			
		||||
 
 | 
			
		||||
@@ -1,2 +1,5 @@
 | 
			
		||||
0
 | 
			
		||||
1
 | 
			
		||||
2
 | 
			
		||||
3
 | 
			
		||||
4
 | 
			
		||||
5
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										192
									
								
								predict.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										192
									
								
								predict.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,192 @@
 | 
			
		||||
#-----------------------------------------------------------------------#
 | 
			
		||||
#   predict.py将单张图片预测、摄像头检测、FPS测试和目录遍历检测等功能
 | 
			
		||||
#   整合到了一个py文件中,通过指定mode进行模式的修改。
 | 
			
		||||
#-----------------------------------------------------------------------#
 | 
			
		||||
import time
 | 
			
		||||
 | 
			
		||||
import cv2
 | 
			
		||||
import numpy as np
 | 
			
		||||
from PIL import Image
 | 
			
		||||
 | 
			
		||||
from network.yolo import YOLO, YOLO_ONNX
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    #----------------------------------------------------------------------------------------------------------#
 | 
			
		||||
    #   mode用于指定测试的模式:
 | 
			
		||||
    #   'predict'           表示单张图片预测,如果想对预测过程进行修改,如保存图片,截取对象等,可以先看下方详细的注释
 | 
			
		||||
    #   'video'             表示视频检测,可调用摄像头或者视频进行检测,详情查看下方注释。
 | 
			
		||||
    #   'fps'               表示测试fps,使用的图片是img里面的street.jpg,详情查看下方注释。
 | 
			
		||||
    #   'dir_predict'       表示遍历文件夹进行检测并保存。默认遍历img文件夹,保存img_out文件夹,详情查看下方注释。
 | 
			
		||||
    #   'heatmap'           表示进行预测结果的热力图可视化,详情查看下方注释。
 | 
			
		||||
    #   'export_onnx'       表示将模型导出为onnx,需要pytorch1.7.1以上。
 | 
			
		||||
    #   'predict_onnx'      表示利用导出的onnx模型进行预测,相关参数的修改在yolo.py_423行左右处的YOLO_ONNX
 | 
			
		||||
    #----------------------------------------------------------------------------------------------------------#
 | 
			
		||||
    mode = "predict"
 | 
			
		||||
    #-------------------------------------------------------------------------#
 | 
			
		||||
    #   crop                指定了是否在单张图片预测后对目标进行截取
 | 
			
		||||
    #   count               指定了是否进行目标的计数
 | 
			
		||||
    #   crop、count仅在mode='predict'时有效
 | 
			
		||||
    #-------------------------------------------------------------------------#
 | 
			
		||||
    crop            = False
 | 
			
		||||
    count           = False
 | 
			
		||||
    #----------------------------------------------------------------------------------------------------------#
 | 
			
		||||
    #   video_path          用于指定视频的路径,当video_path=0时表示检测摄像头
 | 
			
		||||
    #                       想要检测视频,则设置如video_path = "xxx.mp4"即可,代表读取出根目录下的xxx.mp4文件。
 | 
			
		||||
    #   video_save_path     表示视频保存的路径,当video_save_path=""时表示不保存
 | 
			
		||||
    #                       想要保存视频,则设置如video_save_path = "yyy.mp4"即可,代表保存为根目录下的yyy.mp4文件。
 | 
			
		||||
    #   video_fps           用于保存的视频的fps
 | 
			
		||||
    #
 | 
			
		||||
    #   video_path、video_save_path和video_fps仅在mode='video'时有效
 | 
			
		||||
    #   保存视频时需要ctrl+c退出或者运行到最后一帧才会完成完整的保存步骤。
 | 
			
		||||
    #----------------------------------------------------------------------------------------------------------#
 | 
			
		||||
    video_path      = 0
 | 
			
		||||
    video_save_path = ""
 | 
			
		||||
    video_fps       = 25.0
 | 
			
		||||
    #----------------------------------------------------------------------------------------------------------#
 | 
			
		||||
    #   test_interval       用于指定测量fps的时候,图片检测的次数。理论上test_interval越大,fps越准确。
 | 
			
		||||
    #   fps_image_path      用于指定测试的fps图片
 | 
			
		||||
    #   
 | 
			
		||||
    #   test_interval和fps_image_path仅在mode='fps'有效
 | 
			
		||||
    #----------------------------------------------------------------------------------------------------------#
 | 
			
		||||
    test_interval   = 100
 | 
			
		||||
    fps_image_path  = "img/street.jpg"
 | 
			
		||||
    #-------------------------------------------------------------------------#
 | 
			
		||||
    #   dir_origin_path     指定了用于检测的图片的文件夹路径
 | 
			
		||||
    #   dir_save_path       指定了检测完图片的保存路径
 | 
			
		||||
    #   
 | 
			
		||||
    #   dir_origin_path和dir_save_path仅在mode='dir_predict'时有效
 | 
			
		||||
    #-------------------------------------------------------------------------#
 | 
			
		||||
    dir_origin_path = "application\logs\logData\img"
 | 
			
		||||
    dir_save_path   = "application\logs\logData\save"
 | 
			
		||||
    #-------------------------------------------------------------------------#
 | 
			
		||||
    #   heatmap_save_path   热力图的保存路径,默认保存在model_data下
 | 
			
		||||
    #   
 | 
			
		||||
    #   heatmap_save_path仅在mode='heatmap'有效
 | 
			
		||||
    #-------------------------------------------------------------------------#
 | 
			
		||||
    heatmap_save_path = "model_data/heatmap_vision.png"
 | 
			
		||||
    #-------------------------------------------------------------------------#
 | 
			
		||||
    #   simplify            使用Simplify onnx
 | 
			
		||||
    #   onnx_save_path      指定了onnx的保存路径
 | 
			
		||||
    #-------------------------------------------------------------------------#
 | 
			
		||||
    simplify        = True
 | 
			
		||||
    onnx_save_path  = "model_data/models.onnx"
 | 
			
		||||
 | 
			
		||||
    if mode != "predict_onnx":
 | 
			
		||||
        yolo = YOLO()
 | 
			
		||||
    else:
 | 
			
		||||
        yolo = YOLO_ONNX()
 | 
			
		||||
 | 
			
		||||
    if mode == "predict":
 | 
			
		||||
        '''
 | 
			
		||||
        1、如果想要进行检测完的图片的保存,利用r_image.save("img.jpg")即可保存,直接在predict.py里进行修改即可。 
 | 
			
		||||
        2、如果想要获得预测框的坐标,可以进入yolo.detect_image函数,在绘图部分读取top,left,bottom,right这四个值。
 | 
			
		||||
        3、如果想要利用预测框截取下目标,可以进入yolo.detect_image函数,在绘图部分利用获取到的top,left,bottom,right这四个值
 | 
			
		||||
        在原图上利用矩阵的方式进行截取。
 | 
			
		||||
        4、如果想要在预测图上写额外的字,比如检测到的特定目标的数量,可以进入yolo.detect_image函数,在绘图部分对predicted_class进行判断,
 | 
			
		||||
        比如判断if predicted_class == 'car': 即可判断当前目标是否为车,然后记录数量即可。利用draw.text即可写字。
 | 
			
		||||
        '''
 | 
			
		||||
        while True:
 | 
			
		||||
            img = input('Input image filename:')
 | 
			
		||||
            try:
 | 
			
		||||
                image = Image.open(img)
 | 
			
		||||
            except:
 | 
			
		||||
                print('Open Error! Try again!')
 | 
			
		||||
                continue
 | 
			
		||||
            else:
 | 
			
		||||
                r_image = yolo.detect_image(image, crop = crop, count=count)
 | 
			
		||||
                r_image.show()
 | 
			
		||||
 | 
			
		||||
    elif mode == "video":
 | 
			
		||||
        capture = cv2.VideoCapture(video_path)
 | 
			
		||||
        if video_save_path!="":
 | 
			
		||||
            fourcc  = cv2.VideoWriter_fourcc(*'XVID')
 | 
			
		||||
            size    = (int(capture.get(cv2.CAP_PROP_FRAME_WIDTH)), int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT)))
 | 
			
		||||
            out     = cv2.VideoWriter(video_save_path, fourcc, video_fps, size)
 | 
			
		||||
 | 
			
		||||
        ref, frame = capture.read()
 | 
			
		||||
        if not ref:
 | 
			
		||||
            raise ValueError("未能正确读取摄像头(视频),请注意是否正确安装摄像头(是否正确填写视频路径)。")
 | 
			
		||||
 | 
			
		||||
        fps = 0.0
 | 
			
		||||
        while(True):
 | 
			
		||||
            t1 = time.time()
 | 
			
		||||
            # 读取某一帧
 | 
			
		||||
            ref, frame = capture.read()
 | 
			
		||||
            if not ref:
 | 
			
		||||
                break
 | 
			
		||||
            # 格式转变,BGRtoRGB
 | 
			
		||||
            frame = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
 | 
			
		||||
            # 转变成Image
 | 
			
		||||
            frame = Image.fromarray(np.uint8(frame))
 | 
			
		||||
            # 进行检测
 | 
			
		||||
            frame = np.array(yolo.detect_image(frame))
 | 
			
		||||
            # RGBtoBGR满足opencv显示格式
 | 
			
		||||
            frame = cv2.cvtColor(frame,cv2.COLOR_RGB2BGR)
 | 
			
		||||
            
 | 
			
		||||
            fps  = ( fps + (1./(time.time()-t1)) ) / 2
 | 
			
		||||
            print("fps= %.2f"%(fps))
 | 
			
		||||
            frame = cv2.putText(frame, "fps= %.2f"%(fps), (0, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
 | 
			
		||||
            
 | 
			
		||||
            cv2.imshow("video",frame)
 | 
			
		||||
            c= cv2.waitKey(1) & 0xff 
 | 
			
		||||
            if video_save_path!="":
 | 
			
		||||
                out.write(frame)
 | 
			
		||||
 | 
			
		||||
            if c==27:
 | 
			
		||||
                capture.release()
 | 
			
		||||
                break
 | 
			
		||||
 | 
			
		||||
        print("Video Detection Done!")
 | 
			
		||||
        capture.release()
 | 
			
		||||
        if video_save_path!="":
 | 
			
		||||
            print("Save processed video to the path :" + video_save_path)
 | 
			
		||||
            out.release()
 | 
			
		||||
        cv2.destroyAllWindows()
 | 
			
		||||
        
 | 
			
		||||
    elif mode == "fps":
 | 
			
		||||
        img = Image.open(fps_image_path)
 | 
			
		||||
        tact_time = yolo.get_FPS(img, test_interval)
 | 
			
		||||
        print(str(tact_time) + ' seconds, ' + str(1/tact_time) + 'FPS, @batch_size 1')
 | 
			
		||||
 | 
			
		||||
    elif mode == "dir_predict":
 | 
			
		||||
        import os
 | 
			
		||||
 | 
			
		||||
        from tqdm import tqdm
 | 
			
		||||
 | 
			
		||||
        img_names = os.listdir(dir_origin_path)
 | 
			
		||||
        for img_name in tqdm(img_names):
 | 
			
		||||
            if img_name.lower().endswith(('.bmp', '.dib', '.png', '.jpg', '.jpeg', '.pbm', '.pgm', '.ppm', '.tif', '.tiff')):
 | 
			
		||||
                image_path  = os.path.join(dir_origin_path, img_name)
 | 
			
		||||
                image       = Image.open(image_path)
 | 
			
		||||
                r_image     = yolo.detect_image(image)
 | 
			
		||||
                if not os.path.exists(dir_save_path):
 | 
			
		||||
                    os.makedirs(dir_save_path)
 | 
			
		||||
                r_image.save(os.path.join(dir_save_path, img_name.replace(".jpg", ".png")), quality=95, subsampling=0)
 | 
			
		||||
 | 
			
		||||
    elif mode == "heatmap":
 | 
			
		||||
        while True:
 | 
			
		||||
            img = input('Input image filename:')
 | 
			
		||||
            try:
 | 
			
		||||
                image = Image.open(img)
 | 
			
		||||
            except:
 | 
			
		||||
                print('Open Error! Try again!')
 | 
			
		||||
                continue
 | 
			
		||||
            else:
 | 
			
		||||
                yolo.detect_heatmap(image, heatmap_save_path)
 | 
			
		||||
                
 | 
			
		||||
    elif mode == "export_onnx":
 | 
			
		||||
        yolo.convert_to_onnx(simplify, onnx_save_path)
 | 
			
		||||
 | 
			
		||||
    elif mode == "predict_onnx":
 | 
			
		||||
        while True:
 | 
			
		||||
            img = input('Input image filename:')
 | 
			
		||||
            try:
 | 
			
		||||
                image = Image.open(img)
 | 
			
		||||
            except:
 | 
			
		||||
                print('Open Error! Try again!')
 | 
			
		||||
                continue
 | 
			
		||||
            else:
 | 
			
		||||
                r_image = yolo.detect_image(image)
 | 
			
		||||
                r_image.show()
 | 
			
		||||
    else:
 | 
			
		||||
        raise AssertionError("Please specify the correct mode: 'predict', 'video', 'fps', 'heatmap', 'export_onnx', 'dir_predict'.")
 | 
			
		||||
							
								
								
									
										11
									
								
								train.py
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								train.py
									
									
									
									
									
								
							@@ -181,8 +181,8 @@ if __name__ == "__main__":
 | 
			
		||||
    #                           Adam可以使用相对较小的UnFreeze_Epoch
 | 
			
		||||
    #   Unfreeze_batch_size     模型在解冻后的batch_size
 | 
			
		||||
    #------------------------------------------------------------------#
 | 
			
		||||
    UnFreeze_Epoch      = 500
 | 
			
		||||
    Unfreeze_batch_size = 6
 | 
			
		||||
    UnFreeze_Epoch      = 100
 | 
			
		||||
    Unfreeze_batch_size = 4
 | 
			
		||||
    #------------------------------------------------------------------#
 | 
			
		||||
    #   Freeze_Train    是否进行冻结训练
 | 
			
		||||
    #                   默认先冻结主干训练后解冻训练。
 | 
			
		||||
@@ -237,14 +237,14 @@ if __name__ == "__main__":
 | 
			
		||||
    #                   开启后会加快数据读取速度,但是会占用更多内存
 | 
			
		||||
    #                   内存较小的电脑可以设置为2或者0  
 | 
			
		||||
    #------------------------------------------------------------------#
 | 
			
		||||
    num_workers         = 20
 | 
			
		||||
    num_workers         = 6
 | 
			
		||||
 | 
			
		||||
    #------------------------------------------------------#
 | 
			
		||||
    #   train_annotation_path   训练图片路径和标签
 | 
			
		||||
    #   val_annotation_path     验证图片路径和标签
 | 
			
		||||
    #------------------------------------------------------#
 | 
			
		||||
    train_annotation_path   = '2007_train.txt'
 | 
			
		||||
    val_annotation_path     = '2007_val.txt'
 | 
			
		||||
    train_annotation_path   = 'model_data/2007_train.txt'
 | 
			
		||||
    val_annotation_path     = 'model_data/2007_val.txt'
 | 
			
		||||
 | 
			
		||||
    seed_everything(seed)
 | 
			
		||||
    #------------------------------------------------------#
 | 
			
		||||
@@ -261,6 +261,7 @@ if __name__ == "__main__":
 | 
			
		||||
            print("Gpu Device Count : ", ngpus_per_node)
 | 
			
		||||
    else:
 | 
			
		||||
        device          = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
 | 
			
		||||
        print("\033[1;33;44mRuning on {}\033[0m".format(device))
 | 
			
		||||
        local_rank      = 0
 | 
			
		||||
        rank            = 0
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										138
									
								
								utils/get_map.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										138
									
								
								utils/get_map.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,138 @@
 | 
			
		||||
import os
 | 
			
		||||
import xml.etree.ElementTree as ET
 | 
			
		||||
 | 
			
		||||
from PIL import Image
 | 
			
		||||
from tqdm import tqdm
 | 
			
		||||
 | 
			
		||||
from utils.utils import get_classes
 | 
			
		||||
from utils.utils_map import get_coco_map, get_map
 | 
			
		||||
from yolo import YOLO
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    '''
 | 
			
		||||
    Recall和Precision不像AP是一个面积的概念,因此在门限值(Confidence)不同时,网络的Recall和Precision值是不同的。
 | 
			
		||||
    默认情况下,本代码计算的Recall和Precision代表的是当门限值(Confidence)为0.5时,所对应的Recall和Precision值。
 | 
			
		||||
 | 
			
		||||
    受到mAP计算原理的限制,网络在计算mAP时需要获得近乎所有的预测框,这样才可以计算不同门限条件下的Recall和Precision值
 | 
			
		||||
    因此,本代码获得的map_out/detection-results/里面的txt的框的数量一般会比直接predict多一些,目的是列出所有可能的预测框,
 | 
			
		||||
    '''
 | 
			
		||||
    #------------------------------------------------------------------------------------------------------------------#
 | 
			
		||||
    #   map_mode用于指定该文件运行时计算的内容
 | 
			
		||||
    #   map_mode为0代表整个map计算流程,包括获得预测结果、获得真实框、计算VOC_map。
 | 
			
		||||
    #   map_mode为1代表仅仅获得预测结果。
 | 
			
		||||
    #   map_mode为2代表仅仅获得真实框。
 | 
			
		||||
    #   map_mode为3代表仅仅计算VOC_map。
 | 
			
		||||
    #   map_mode为4代表利用COCO工具箱计算当前数据集的0.50:0.95map。需要获得预测结果、获得真实框后并安装pycocotools才行
 | 
			
		||||
    #-------------------------------------------------------------------------------------------------------------------#
 | 
			
		||||
    map_mode        = 0
 | 
			
		||||
    #--------------------------------------------------------------------------------------#
 | 
			
		||||
    #   此处的classes_path用于指定需要测量VOC_map的类别
 | 
			
		||||
    #   一般情况下与训练和预测所用的classes_path一致即可
 | 
			
		||||
    #--------------------------------------------------------------------------------------#
 | 
			
		||||
    classes_path    = 'model_data/voc_classes.txt'
 | 
			
		||||
    #--------------------------------------------------------------------------------------#
 | 
			
		||||
    #   MINOVERLAP用于指定想要获得的mAP0.x,mAP0.x的意义是什么请同学们百度一下。
 | 
			
		||||
    #   比如计算mAP0.75,可以设定MINOVERLAP = 0.75。
 | 
			
		||||
    #
 | 
			
		||||
    #   当某一预测框与真实框重合度大于MINOVERLAP时,该预测框被认为是正样本,否则为负样本。
 | 
			
		||||
    #   因此MINOVERLAP的值越大,预测框要预测的越准确才能被认为是正样本,此时算出来的mAP值越低,
 | 
			
		||||
    #--------------------------------------------------------------------------------------#
 | 
			
		||||
    MINOVERLAP      = 0.5
 | 
			
		||||
    #--------------------------------------------------------------------------------------#
 | 
			
		||||
    #   受到mAP计算原理的限制,网络在计算mAP时需要获得近乎所有的预测框,这样才可以计算mAP
 | 
			
		||||
    #   因此,confidence的值应当设置的尽量小进而获得全部可能的预测框。
 | 
			
		||||
    #   
 | 
			
		||||
    #   该值一般不调整。因为计算mAP需要获得近乎所有的预测框,此处的confidence不能随便更改。
 | 
			
		||||
    #   想要获得不同门限值下的Recall和Precision值,请修改下方的score_threhold。
 | 
			
		||||
    #--------------------------------------------------------------------------------------#
 | 
			
		||||
    confidence      = 0.001
 | 
			
		||||
    #--------------------------------------------------------------------------------------#
 | 
			
		||||
    #   预测时使用到的非极大抑制值的大小,越大表示非极大抑制越不严格。
 | 
			
		||||
    #   
 | 
			
		||||
    #   该值一般不调整。
 | 
			
		||||
    #--------------------------------------------------------------------------------------#
 | 
			
		||||
    nms_iou         = 0.5
 | 
			
		||||
    #---------------------------------------------------------------------------------------------------------------#
 | 
			
		||||
    #   Recall和Precision不像AP是一个面积的概念,因此在门限值不同时,网络的Recall和Precision值是不同的。
 | 
			
		||||
    #   
 | 
			
		||||
    #   默认情况下,本代码计算的Recall和Precision代表的是当门限值为0.5(此处定义为score_threhold)时所对应的Recall和Precision值。
 | 
			
		||||
    #   因为计算mAP需要获得近乎所有的预测框,上面定义的confidence不能随便更改。
 | 
			
		||||
    #   这里专门定义一个score_threhold用于代表门限值,进而在计算mAP时找到门限值对应的Recall和Precision值。
 | 
			
		||||
    #---------------------------------------------------------------------------------------------------------------#
 | 
			
		||||
    score_threhold  = 0.5
 | 
			
		||||
    #-------------------------------------------------------#
 | 
			
		||||
    #   map_vis用于指定是否开启VOC_map计算的可视化
 | 
			
		||||
    #-------------------------------------------------------#
 | 
			
		||||
    map_vis         = False
 | 
			
		||||
    #-------------------------------------------------------#
 | 
			
		||||
    #   指向VOC数据集所在的文件夹
 | 
			
		||||
    #   默认指向根目录下的VOC数据集
 | 
			
		||||
    #-------------------------------------------------------#
 | 
			
		||||
    VOCdevkit_path  = 'VOCdevkit'
 | 
			
		||||
    #-------------------------------------------------------#
 | 
			
		||||
    #   结果输出的文件夹,默认为map_out
 | 
			
		||||
    #-------------------------------------------------------#
 | 
			
		||||
    map_out_path    = 'map_out'
 | 
			
		||||
 | 
			
		||||
    image_ids = open(os.path.join(VOCdevkit_path, "VOC2007/ImageSets/Main/test.txt")).read().strip().split()
 | 
			
		||||
 | 
			
		||||
    if not os.path.exists(map_out_path):
 | 
			
		||||
        os.makedirs(map_out_path)
 | 
			
		||||
    if not os.path.exists(os.path.join(map_out_path, 'ground-truth')):
 | 
			
		||||
        os.makedirs(os.path.join(map_out_path, 'ground-truth'))
 | 
			
		||||
    if not os.path.exists(os.path.join(map_out_path, 'detection-results')):
 | 
			
		||||
        os.makedirs(os.path.join(map_out_path, 'detection-results'))
 | 
			
		||||
    if not os.path.exists(os.path.join(map_out_path, 'images-optional')):
 | 
			
		||||
        os.makedirs(os.path.join(map_out_path, 'images-optional'))
 | 
			
		||||
 | 
			
		||||
    class_names, _ = get_classes(classes_path)
 | 
			
		||||
 | 
			
		||||
    if map_mode == 0 or map_mode == 1:
 | 
			
		||||
        print("Load model.")
 | 
			
		||||
        yolo = YOLO(confidence = confidence, nms_iou = nms_iou)
 | 
			
		||||
        print("Load model done.")
 | 
			
		||||
 | 
			
		||||
        print("Get predict result.")
 | 
			
		||||
        for image_id in tqdm(image_ids):
 | 
			
		||||
            image_path  = os.path.join(VOCdevkit_path, "VOC2007/JPEGImages/"+image_id+".jpg")
 | 
			
		||||
            image       = Image.open(image_path)
 | 
			
		||||
            if map_vis:
 | 
			
		||||
                image.save(os.path.join(map_out_path, "images-optional/" + image_id + ".jpg"))
 | 
			
		||||
            yolo.get_map_txt(image_id, image, class_names, map_out_path)
 | 
			
		||||
        print("Get predict result done.")
 | 
			
		||||
        
 | 
			
		||||
    if map_mode == 0 or map_mode == 2:
 | 
			
		||||
        print("Get ground truth result.")
 | 
			
		||||
        for image_id in tqdm(image_ids):
 | 
			
		||||
            with open(os.path.join(map_out_path, "ground-truth/"+image_id+".txt"), "w") as new_f:
 | 
			
		||||
                root = ET.parse(os.path.join(VOCdevkit_path, "VOC2007/Annotations/"+image_id+".xml")).getroot()
 | 
			
		||||
                for obj in root.findall('object'):
 | 
			
		||||
                    difficult_flag = False
 | 
			
		||||
                    if obj.find('difficult')!=None:
 | 
			
		||||
                        difficult = obj.find('difficult').text
 | 
			
		||||
                        if int(difficult)==1:
 | 
			
		||||
                            difficult_flag = True
 | 
			
		||||
                    obj_name = obj.find('name').text
 | 
			
		||||
                    if obj_name not in class_names:
 | 
			
		||||
                        continue
 | 
			
		||||
                    bndbox  = obj.find('bndbox')
 | 
			
		||||
                    left    = bndbox.find('xmin').text
 | 
			
		||||
                    top     = bndbox.find('ymin').text
 | 
			
		||||
                    right   = bndbox.find('xmax').text
 | 
			
		||||
                    bottom  = bndbox.find('ymax').text
 | 
			
		||||
 | 
			
		||||
                    if difficult_flag:
 | 
			
		||||
                        new_f.write("%s %s %s %s %s difficult\n" % (obj_name, left, top, right, bottom))
 | 
			
		||||
                    else:
 | 
			
		||||
                        new_f.write("%s %s %s %s %s\n" % (obj_name, left, top, right, bottom))
 | 
			
		||||
        print("Get ground truth result done.")
 | 
			
		||||
 | 
			
		||||
    if map_mode == 0 or map_mode == 3:
 | 
			
		||||
        print("Get map.")
 | 
			
		||||
        get_map(MINOVERLAP, True, score_threhold = score_threhold, path = map_out_path)
 | 
			
		||||
        print("Get map done.")
 | 
			
		||||
 | 
			
		||||
    if map_mode == 4:
 | 
			
		||||
        print("Get map.")
 | 
			
		||||
        get_coco_map(class_names = class_names, path = map_out_path)
 | 
			
		||||
        print("Get map done.")
 | 
			
		||||
							
								
								
									
										32
									
								
								utils/summary.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								utils/summary.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
#--------------------------------------------#
 | 
			
		||||
#   该部分代码用于看网络结构
 | 
			
		||||
#--------------------------------------------#
 | 
			
		||||
import torch
 | 
			
		||||
from thop import clever_format, profile
 | 
			
		||||
from torchsummary import summary
 | 
			
		||||
 | 
			
		||||
from nets.yolo import YoloBody
 | 
			
		||||
 | 
			
		||||
if __name__ == "__main__":
 | 
			
		||||
    input_shape     = [640, 640]
 | 
			
		||||
    anchors_mask    = [[6, 7, 8], [3, 4, 5], [0, 1, 2]]
 | 
			
		||||
    num_classes     = 80
 | 
			
		||||
    backbone        = 'cspdarknet'
 | 
			
		||||
    phi             = 'l'
 | 
			
		||||
    
 | 
			
		||||
    device  = torch.device("cuda" if torch.cuda.is_available() else "cpu")
 | 
			
		||||
    m       = YoloBody(anchors_mask, num_classes, phi, backbone=backbone).to(device)
 | 
			
		||||
    summary(m, (3, input_shape[0], input_shape[1]))
 | 
			
		||||
    
 | 
			
		||||
    dummy_input     = torch.randn(1, 3, input_shape[0], input_shape[1]).to(device)
 | 
			
		||||
    flops, params   = profile(m.to(device), (dummy_input, ), verbose=False)
 | 
			
		||||
    #--------------------------------------------------------#
 | 
			
		||||
    #   flops * 2是因为profile没有将卷积作为两个operations
 | 
			
		||||
    #   有些论文将卷积算乘法、加法两个operations。此时乘2
 | 
			
		||||
    #   有些论文只考虑乘法的运算次数,忽略加法。此时不乘2
 | 
			
		||||
    #   本代码选择乘2,参考YOLOX。
 | 
			
		||||
    #--------------------------------------------------------#
 | 
			
		||||
    flops           = flops * 2
 | 
			
		||||
    flops, params   = clever_format([flops, params], "%.3f")
 | 
			
		||||
    print('Total GFLOPS: %s' % (flops))
 | 
			
		||||
    print('Total params: %s' % (params))
 | 
			
		||||
@@ -3,9 +3,13 @@ import random
 | 
			
		||||
import xml.etree.ElementTree as ET
 | 
			
		||||
 | 
			
		||||
import numpy as np
 | 
			
		||||
import sys,os
 | 
			
		||||
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 | 
			
		||||
 | 
			
		||||
from utils.utils import get_classes
 | 
			
		||||
 | 
			
		||||
from utils import get_classes
 | 
			
		||||
import configparser
 | 
			
		||||
conf=configparser.ConfigParser()
 | 
			
		||||
conf.read('config.ini',encoding='utf-8')
 | 
			
		||||
#--------------------------------------------------------------------------------------------------------------------------------#
 | 
			
		||||
#   annotation_mode用于指定该文件运行时计算的内容
 | 
			
		||||
#   annotation_mode为0代表整个标签处理过程,包括获得VOCdevkit/VOC2007/ImageSets里面的txt以及训练用的2007_train.txt、2007_val.txt
 | 
			
		||||
@@ -20,7 +24,7 @@ annotation_mode     = 0
 | 
			
		||||
#   那么就是因为classes没有设定正确
 | 
			
		||||
#   仅在annotation_mode为0和2的时候有效
 | 
			
		||||
#-------------------------------------------------------------------#
 | 
			
		||||
classes_path        = 'trainYolov5-v6/model_data/voc_classes.txt'
 | 
			
		||||
classes_path        = conf.get('dataset', 'classes_path')
 | 
			
		||||
#--------------------------------------------------------------------------------------------------------------------------------#
 | 
			
		||||
#   trainval_percent用于指定(训练集+验证集)与测试集的比例,默认情况下 (训练集+验证集):测试集 = 9:1
 | 
			
		||||
#   train_percent用于指定(训练集+验证集)中训练集与验证集的比例,默认情况下 训练集:验证集 = 9:1
 | 
			
		||||
@@ -32,7 +36,7 @@ train_percent       = 0.9
 | 
			
		||||
#   指向VOC数据集所在的文件夹
 | 
			
		||||
#   默认指向根目录下的VOC数据集
 | 
			
		||||
#-------------------------------------------------------#
 | 
			
		||||
VOCdevkit_path  = 'Data/TrainData'
 | 
			
		||||
VOCdevkit_path  = r'database/Train'
 | 
			
		||||
 | 
			
		||||
VOCdevkit_sets  = [('2007', 'train'), ('2007', 'val')]
 | 
			
		||||
classes, _      = get_classes(classes_path)
 | 
			
		||||
@@ -112,9 +116,9 @@ if __name__ == "__main__":
 | 
			
		||||
        type_index = 0
 | 
			
		||||
        for year, image_set in VOCdevkit_sets:
 | 
			
		||||
            image_ids = open(os.path.join(VOCdevkit_path, 'ImageSets/Main/%s.txt'%(image_set)), encoding='utf-8').read().strip().split()
 | 
			
		||||
            list_file = open('%s_%s.txt'%(year, image_set), 'w', encoding='utf-8')
 | 
			
		||||
            list_file = open('model_data/%s_%s.txt'%(year, image_set), 'w', encoding='utf-8')
 | 
			
		||||
            for image_id in image_ids:
 | 
			
		||||
                list_file.write('%s/JPEGImages/%s.jpg'%(os.path.abspath(VOCdevkit_path), image_id))
 | 
			
		||||
                list_file.write('%s/JPEGImages/%s.png'%(os.path.abspath(VOCdevkit_path), image_id))
 | 
			
		||||
 | 
			
		||||
                convert_annotation(year, image_id, list_file)
 | 
			
		||||
                list_file.write('\n')
 | 
			
		||||
							
								
								
									
										663
									
								
								utils/yolo.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										663
									
								
								utils/yolo.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,663 @@
 | 
			
		||||
import colorsys
 | 
			
		||||
import os
 | 
			
		||||
import time
 | 
			
		||||
 | 
			
		||||
import cv2
 | 
			
		||||
import numpy as np
 | 
			
		||||
import torch
 | 
			
		||||
import torch.nn as nn
 | 
			
		||||
from PIL import ImageDraw, ImageFont, Image
 | 
			
		||||
 | 
			
		||||
from nets.yolo import YoloBody
 | 
			
		||||
from utils.utils import (cvtColor, get_anchors, get_classes, preprocess_input,
 | 
			
		||||
                         resize_image, show_config)
 | 
			
		||||
from utils.utils_bbox import DecodeBox, DecodeBoxNP
 | 
			
		||||
 | 
			
		||||
'''
 | 
			
		||||
训练自己的数据集必看注释!
 | 
			
		||||
'''
 | 
			
		||||
class YOLO(object):
 | 
			
		||||
    _defaults = {
 | 
			
		||||
        #--------------------------------------------------------------------------#
 | 
			
		||||
        #   使用自己训练好的模型进行预测一定要修改model_path和classes_path!
 | 
			
		||||
        #   model_path指向logs文件夹下的权值文件,classes_path指向model_data下的txt
 | 
			
		||||
        #
 | 
			
		||||
        #   训练好后logs文件夹下存在多个权值文件,选择验证集损失较低的即可。
 | 
			
		||||
        #   验证集损失较低不代表mAP较高,仅代表该权值在验证集上泛化性能较好。
 | 
			
		||||
        #   如果出现shape不匹配,同时要注意训练时的model_path和classes_path参数的修改
 | 
			
		||||
        #--------------------------------------------------------------------------#
 | 
			
		||||
        "model_path"        : r'logs-yolov5\1.pth',
 | 
			
		||||
        "classes_path"      : 'trainYolov5-v6\\model_data/coco_classes.txt',
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        #   anchors_path代表先验框对应的txt文件,一般不修改。
 | 
			
		||||
        #   anchors_mask用于帮助代码找到对应的先验框,一般不修改。
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        "anchors_path"      : 'trainYolov5-v6\\model_data/yolo_anchors.txt',
 | 
			
		||||
        "anchors_mask"      : [[6, 7, 8], [3, 4, 5], [0, 1, 2]],
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        #   输入图片的大小,必须为32的倍数。
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        "input_shape"       : [640, 640],
 | 
			
		||||
        #------------------------------------------------------#
 | 
			
		||||
        #   backbone        cspdarknet(默认)
 | 
			
		||||
        #                   convnext_tiny
 | 
			
		||||
        #                   convnext_small
 | 
			
		||||
        #                   swin_transfomer_tiny
 | 
			
		||||
        #------------------------------------------------------#
 | 
			
		||||
        "backbone"          : 'cspdarknet',
 | 
			
		||||
        #------------------------------------------------------#
 | 
			
		||||
        #   所使用的YoloV5的版本。s、m、l、x
 | 
			
		||||
        #   在除cspdarknet的其它主干中仅影响panet的大小
 | 
			
		||||
        #------------------------------------------------------#
 | 
			
		||||
        "phi"               : 's',
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        #   只有得分大于置信度的预测框会被保留下来
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        "confidence"        : 0.5,
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        #   非极大抑制所用到的nms_iou大小
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        "nms_iou"           : 0.3,
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        #   该变量用于控制是否使用letterbox_image对输入图像进行不失真的resize,
 | 
			
		||||
        #   在多次测试后,发现关闭letterbox_image直接resize的效果更好
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        "letterbox_image"   : True,
 | 
			
		||||
        #-------------------------------#
 | 
			
		||||
        #   是否使用Cuda
 | 
			
		||||
        #   没有GPU可以设置成False
 | 
			
		||||
        #-------------------------------#
 | 
			
		||||
        "cuda"              : True,
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def get_defaults(cls, n):
 | 
			
		||||
        if n in cls._defaults:
 | 
			
		||||
            return cls._defaults[n]
 | 
			
		||||
        else:
 | 
			
		||||
            return "Unrecognized attribute name '" + n + "'"
 | 
			
		||||
 | 
			
		||||
    #---------------------------------------------------#
 | 
			
		||||
    #   初始化YOLO
 | 
			
		||||
    #---------------------------------------------------#
 | 
			
		||||
    def __init__(self, **kwargs):
 | 
			
		||||
        self.__dict__.update(self._defaults)
 | 
			
		||||
        for name, value in kwargs.items():
 | 
			
		||||
            setattr(self, name, value)
 | 
			
		||||
            self._defaults[name] = value 
 | 
			
		||||
            
 | 
			
		||||
        #---------------------------------------------------#
 | 
			
		||||
        #   获得种类和先验框的数量
 | 
			
		||||
        #---------------------------------------------------#
 | 
			
		||||
        self.class_names, self.num_classes  = get_classes(self.classes_path)
 | 
			
		||||
        self.anchors, self.num_anchors      = get_anchors(self.anchors_path)
 | 
			
		||||
        self.bbox_util                      = DecodeBox(self.anchors, self.num_classes, (self.input_shape[0], self.input_shape[1]), self.anchors_mask)
 | 
			
		||||
 | 
			
		||||
        #---------------------------------------------------#
 | 
			
		||||
        #   画框设置不同的颜色
 | 
			
		||||
        #---------------------------------------------------#
 | 
			
		||||
        hsv_tuples = [(x / self.num_classes, 1., 1.) for x in range(self.num_classes)]
 | 
			
		||||
        self.colors = list(map(lambda x: colorsys.hsv_to_rgb(*x), hsv_tuples))
 | 
			
		||||
        self.colors = list(map(lambda x: (int(x[0] * 255), int(x[1] * 255), int(x[2] * 255)), self.colors))
 | 
			
		||||
        self.generate()
 | 
			
		||||
 | 
			
		||||
        show_config(**self._defaults)
 | 
			
		||||
 | 
			
		||||
    #---------------------------------------------------#
 | 
			
		||||
    #   生成模型
 | 
			
		||||
    #---------------------------------------------------#
 | 
			
		||||
    def generate(self, onnx=False):
 | 
			
		||||
        #---------------------------------------------------#
 | 
			
		||||
        #   建立yolo模型,载入yolo模型的权重
 | 
			
		||||
        #---------------------------------------------------#
 | 
			
		||||
        self.net    = YoloBody(self.anchors_mask, self.num_classes, self.phi, backbone = self.backbone, input_shape = self.input_shape)
 | 
			
		||||
        device      = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
 | 
			
		||||
        self.net.load_state_dict(torch.load(self.model_path, map_location=device),strict=False)
 | 
			
		||||
        self.net    = self.net.eval()
 | 
			
		||||
        print('{} model, and classes loaded.'.format(self.model_path))
 | 
			
		||||
        if not onnx:
 | 
			
		||||
            if self.cuda:
 | 
			
		||||
                self.net = nn.DataParallel(self.net)
 | 
			
		||||
                self.net = self.net.cuda()
 | 
			
		||||
 | 
			
		||||
    #---------------------------------------------------#
 | 
			
		||||
    #   检测图片
 | 
			
		||||
    #---------------------------------------------------#
 | 
			
		||||
    def detect_image(self, image, crop = False, count = False):
 | 
			
		||||
        #---------------------------------------------------#
 | 
			
		||||
        #   计算输入图片的高和宽
 | 
			
		||||
        #---------------------------------------------------#
 | 
			
		||||
        image_shape = np.array(np.shape(image)[0:2])
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   在这里将图像转换成RGB图像,防止灰度图在预测时报错。
 | 
			
		||||
        #   代码仅仅支持RGB图像的预测,所有其它类型的图像都会转化成RGB
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        image       = cvtColor(image)
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   给图像增加灰条,实现不失真的resize
 | 
			
		||||
        #   也可以直接resize进行识别
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        image_data  = resize_image(image, (self.input_shape[1], self.input_shape[0]), self.letterbox_image)
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   添加上batch_size维度
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        image_data  = np.expand_dims(np.transpose(preprocess_input(np.array(image_data, dtype='float32')), (2, 0, 1)), 0)
 | 
			
		||||
 | 
			
		||||
        with torch.no_grad():
 | 
			
		||||
            images = torch.from_numpy(image_data)
 | 
			
		||||
            if self.cuda:
 | 
			
		||||
                images = images.cuda()
 | 
			
		||||
            #---------------------------------------------------------#
 | 
			
		||||
            #   将图像输入网络当中进行预测!
 | 
			
		||||
            #---------------------------------------------------------#
 | 
			
		||||
            outputs = self.net(images)
 | 
			
		||||
            outputs = self.bbox_util.decode_box(outputs)
 | 
			
		||||
            #---------------------------------------------------------#
 | 
			
		||||
            #   将预测框进行堆叠,然后进行非极大抑制
 | 
			
		||||
            #---------------------------------------------------------#
 | 
			
		||||
            results = self.bbox_util.non_max_suppression(torch.cat(outputs, 1), self.num_classes, self.input_shape, 
 | 
			
		||||
                        image_shape, self.letterbox_image, conf_thres = self.confidence, nms_thres = self.nms_iou)
 | 
			
		||||
                                                    
 | 
			
		||||
            if results[0] is None: 
 | 
			
		||||
                return image
 | 
			
		||||
 | 
			
		||||
            top_label   = np.array(results[0][:, 6], dtype = 'int32')
 | 
			
		||||
            top_conf    = results[0][:, 4] * results[0][:, 5]
 | 
			
		||||
            top_boxes   = results[0][:, :4]
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   设置字体与边框厚度
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        font        = ImageFont.truetype(font='model_data/simhei.ttf', size=np.floor(3e-2 * image.size[1] + 0.5).astype('int32'))
 | 
			
		||||
        thickness   = int(max((image.size[0] + image.size[1]) // np.mean(self.input_shape), 1))
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   计数
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        if count:
 | 
			
		||||
            print("top_label:", top_label)
 | 
			
		||||
            classes_nums    = np.zeros([self.num_classes])
 | 
			
		||||
            for i in range(self.num_classes):
 | 
			
		||||
                num = np.sum(top_label == i)
 | 
			
		||||
                if num > 0:
 | 
			
		||||
                    print(self.class_names[i], " : ", num)
 | 
			
		||||
                classes_nums[i] = num
 | 
			
		||||
            print("classes_nums:", classes_nums)
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   是否进行目标的裁剪
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        if crop:
 | 
			
		||||
            for i, c in list(enumerate(top_boxes)):
 | 
			
		||||
                top, left, bottom, right = top_boxes[i]
 | 
			
		||||
                top     = max(0, np.floor(top).astype('int32'))
 | 
			
		||||
                left    = max(0, np.floor(left).astype('int32'))
 | 
			
		||||
                bottom  = min(image.size[1], np.floor(bottom).astype('int32'))
 | 
			
		||||
                right   = min(image.size[0], np.floor(right).astype('int32'))
 | 
			
		||||
                
 | 
			
		||||
                dir_save_path = "img_crop"
 | 
			
		||||
                if not os.path.exists(dir_save_path):
 | 
			
		||||
                    os.makedirs(dir_save_path)
 | 
			
		||||
                crop_image = image.crop([left, top, right, bottom])
 | 
			
		||||
                crop_image.save(os.path.join(dir_save_path, "crop_" + str(i) + ".png"), quality=95, subsampling=0)
 | 
			
		||||
                print("save crop_" + str(i) + ".png to " + dir_save_path)
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   图像绘制
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        for i, c in list(enumerate(top_label)):
 | 
			
		||||
            predicted_class = self.class_names[int(c)]
 | 
			
		||||
            box             = top_boxes[i]
 | 
			
		||||
            score           = top_conf[i]
 | 
			
		||||
 | 
			
		||||
            top, left, bottom, right = box
 | 
			
		||||
 | 
			
		||||
            top     = max(0, np.floor(top).astype('int32'))
 | 
			
		||||
            left    = max(0, np.floor(left).astype('int32'))
 | 
			
		||||
            bottom  = min(image.size[1], np.floor(bottom).astype('int32'))
 | 
			
		||||
            right   = min(image.size[0], np.floor(right).astype('int32'))
 | 
			
		||||
 | 
			
		||||
            label = '{} {:.2f}'.format(predicted_class, score)
 | 
			
		||||
            draw = ImageDraw.Draw(image)
 | 
			
		||||
            label_size = draw.textsize(label, font)
 | 
			
		||||
            label = label.encode('utf-8')
 | 
			
		||||
            print(label, top, left, bottom, right)
 | 
			
		||||
            
 | 
			
		||||
            if top - label_size[1] >= 0:
 | 
			
		||||
                text_origin = np.array([left, top - label_size[1]])
 | 
			
		||||
            else:
 | 
			
		||||
                text_origin = np.array([left, top + 1])
 | 
			
		||||
 | 
			
		||||
            for i in range(thickness):
 | 
			
		||||
                draw.rectangle([left + i, top + i, right - i, bottom - i], outline=self.colors[c])
 | 
			
		||||
            draw.rectangle([tuple(text_origin), tuple(text_origin + label_size)], fill=self.colors[c])
 | 
			
		||||
            draw.text(text_origin, str(label,'UTF-8'), fill=(0, 0, 0), font=font)
 | 
			
		||||
            del draw
 | 
			
		||||
 | 
			
		||||
        return image
 | 
			
		||||
 | 
			
		||||
    def get_FPS(self, image, test_interval):
 | 
			
		||||
        image_shape = np.array(np.shape(image)[0:2])
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   在这里将图像转换成RGB图像,防止灰度图在预测时报错。
 | 
			
		||||
        #   代码仅仅支持RGB图像的预测,所有其它类型的图像都会转化成RGB
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        image       = cvtColor(image)
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   给图像增加灰条,实现不失真的resize
 | 
			
		||||
        #   也可以直接resize进行识别
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        image_data  = resize_image(image, (self.input_shape[1], self.input_shape[0]), self.letterbox_image)
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   添加上batch_size维度
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        image_data  = np.expand_dims(np.transpose(preprocess_input(np.array(image_data, dtype='float32')), (2, 0, 1)), 0)
 | 
			
		||||
 | 
			
		||||
        with torch.no_grad():
 | 
			
		||||
            images = torch.from_numpy(image_data)
 | 
			
		||||
            if self.cuda:
 | 
			
		||||
                images = images.cuda()
 | 
			
		||||
            #---------------------------------------------------------#
 | 
			
		||||
            #   将图像输入网络当中进行预测!
 | 
			
		||||
            #---------------------------------------------------------#
 | 
			
		||||
            outputs = self.net(images)
 | 
			
		||||
            outputs = self.bbox_util.decode_box(outputs)
 | 
			
		||||
            #---------------------------------------------------------#
 | 
			
		||||
            #   将预测框进行堆叠,然后进行非极大抑制
 | 
			
		||||
            #---------------------------------------------------------#
 | 
			
		||||
            results = self.bbox_util.non_max_suppression(torch.cat(outputs, 1), self.num_classes, self.input_shape, 
 | 
			
		||||
                        image_shape, self.letterbox_image, conf_thres=self.confidence, nms_thres=self.nms_iou)
 | 
			
		||||
                                                    
 | 
			
		||||
        t1 = time.time()
 | 
			
		||||
        for _ in range(test_interval):
 | 
			
		||||
            with torch.no_grad():
 | 
			
		||||
                #---------------------------------------------------------#
 | 
			
		||||
                #   将图像输入网络当中进行预测!
 | 
			
		||||
                #---------------------------------------------------------#
 | 
			
		||||
                outputs = self.net(images)
 | 
			
		||||
                outputs = self.bbox_util.decode_box(outputs)
 | 
			
		||||
                #---------------------------------------------------------#
 | 
			
		||||
                #   将预测框进行堆叠,然后进行非极大抑制
 | 
			
		||||
                #---------------------------------------------------------#
 | 
			
		||||
                results = self.bbox_util.non_max_suppression(torch.cat(outputs, 1), self.num_classes, self.input_shape, 
 | 
			
		||||
                            image_shape, self.letterbox_image, conf_thres=self.confidence, nms_thres=self.nms_iou)
 | 
			
		||||
                            
 | 
			
		||||
        t2 = time.time()
 | 
			
		||||
        tact_time = (t2 - t1) / test_interval
 | 
			
		||||
        return tact_time
 | 
			
		||||
 | 
			
		||||
    def detect_heatmap(self, image, heatmap_save_path):
 | 
			
		||||
        import cv2
 | 
			
		||||
        import matplotlib.pyplot as plt
 | 
			
		||||
        def sigmoid(x):
 | 
			
		||||
            y = 1.0 / (1.0 + np.exp(-x))
 | 
			
		||||
            return y
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   在这里将图像转换成RGB图像,防止灰度图在预测时报错。
 | 
			
		||||
        #   代码仅仅支持RGB图像的预测,所有其它类型的图像都会转化成RGB
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        image       = cvtColor(image)
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   给图像增加灰条,实现不失真的resize
 | 
			
		||||
        #   也可以直接resize进行识别
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        image_data  = resize_image(image, (self.input_shape[1],self.input_shape[0]), self.letterbox_image)
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   添加上batch_size维度
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        image_data  = np.expand_dims(np.transpose(preprocess_input(np.array(image_data, dtype='float32')), (2, 0, 1)), 0)
 | 
			
		||||
 | 
			
		||||
        with torch.no_grad():
 | 
			
		||||
            images = torch.from_numpy(image_data)
 | 
			
		||||
            if self.cuda:
 | 
			
		||||
                images = images.cuda()
 | 
			
		||||
            #---------------------------------------------------------#
 | 
			
		||||
            #   将图像输入网络当中进行预测!
 | 
			
		||||
            #---------------------------------------------------------#
 | 
			
		||||
            outputs = self.net(images)
 | 
			
		||||
        
 | 
			
		||||
        plt.imshow(image, alpha=1)
 | 
			
		||||
        plt.axis('off')
 | 
			
		||||
        mask    = np.zeros((image.size[1], image.size[0]))
 | 
			
		||||
        for sub_output in outputs:
 | 
			
		||||
            sub_output = sub_output.cpu().numpy()
 | 
			
		||||
            b, c, h, w = np.shape(sub_output)
 | 
			
		||||
            sub_output = np.transpose(np.reshape(sub_output, [b, 3, -1, h, w]), [0, 3, 4, 1, 2])[0]
 | 
			
		||||
            score      = np.max(sigmoid(sub_output[..., 4]), -1)
 | 
			
		||||
            score      = cv2.resize(score, (image.size[0], image.size[1]))
 | 
			
		||||
            normed_score    = (score * 255).astype('uint8')
 | 
			
		||||
            mask            = np.maximum(mask, normed_score)
 | 
			
		||||
            
 | 
			
		||||
        plt.imshow(mask, alpha=0.5, interpolation='nearest', cmap="jet")
 | 
			
		||||
 | 
			
		||||
        plt.axis('off')
 | 
			
		||||
        plt.subplots_adjust(top=1, bottom=0, right=1,  left=0, hspace=0, wspace=0)
 | 
			
		||||
        plt.margins(0, 0)
 | 
			
		||||
        plt.savefig(heatmap_save_path, dpi=200, bbox_inches='tight', pad_inches = -0.1)
 | 
			
		||||
        print("Save to the " + heatmap_save_path)
 | 
			
		||||
        plt.show()
 | 
			
		||||
 | 
			
		||||
    def convert_to_onnx(self, simplify, model_path):
 | 
			
		||||
        import onnx
 | 
			
		||||
        self.generate(onnx=True)
 | 
			
		||||
 | 
			
		||||
        im                  = torch.zeros(1, 3, *self.input_shape).to('cpu')  # image size(1, 3, 512, 512) BCHW
 | 
			
		||||
        input_layer_names   = ["images"]
 | 
			
		||||
        output_layer_names  = ["output"]
 | 
			
		||||
        
 | 
			
		||||
        # Export the model
 | 
			
		||||
        print(f'Starting export with onnx {onnx.__version__}.')
 | 
			
		||||
        torch.onnx.export(self.net,
 | 
			
		||||
                        im,
 | 
			
		||||
                        f               = model_path,
 | 
			
		||||
                        verbose         = False,
 | 
			
		||||
                        opset_version   = 12,
 | 
			
		||||
                        training        = torch.onnx.TrainingMode.EVAL,
 | 
			
		||||
                        do_constant_folding = True,
 | 
			
		||||
                        input_names     = input_layer_names,
 | 
			
		||||
                        output_names    = output_layer_names,
 | 
			
		||||
                        dynamic_axes    = None)
 | 
			
		||||
 | 
			
		||||
        # Checks
 | 
			
		||||
        model_onnx = onnx.load(model_path)  # load onnx model
 | 
			
		||||
        onnx.checker.check_model(model_onnx)  # check onnx model
 | 
			
		||||
 | 
			
		||||
        # Simplify onnx
 | 
			
		||||
        if simplify:
 | 
			
		||||
            import onnxsim
 | 
			
		||||
            print(f'Simplifying with onnx-simplifier {onnxsim.__version__}.')
 | 
			
		||||
            model_onnx, check = onnxsim.simplify(
 | 
			
		||||
                model_onnx,
 | 
			
		||||
                dynamic_input_shape=False,
 | 
			
		||||
                input_shapes=None)
 | 
			
		||||
            assert check, 'assert check failed'
 | 
			
		||||
            onnx.save(model_onnx, model_path)
 | 
			
		||||
 | 
			
		||||
        print('Onnx model save as {}'.format(model_path))
 | 
			
		||||
 | 
			
		||||
    def get_map_txt(self, image_id, image, class_names, map_out_path):
 | 
			
		||||
        f = open(os.path.join(map_out_path, "detection-results/"+image_id+".txt"), "w", encoding='utf-8') 
 | 
			
		||||
        image_shape = np.array(np.shape(image)[0:2])
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   在这里将图像转换成RGB图像,防止灰度图在预测时报错。
 | 
			
		||||
        #   代码仅仅支持RGB图像的预测,所有其它类型的图像都会转化成RGB
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        image       = cvtColor(image)
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   给图像增加灰条,实现不失真的resize
 | 
			
		||||
        #   也可以直接resize进行识别
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        image_data  = resize_image(image, (self.input_shape[1], self.input_shape[0]), self.letterbox_image)
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   添加上batch_size维度
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        image_data  = np.expand_dims(np.transpose(preprocess_input(np.array(image_data, dtype='float32')), (2, 0, 1)), 0)
 | 
			
		||||
 | 
			
		||||
        with torch.no_grad():
 | 
			
		||||
            images = torch.from_numpy(image_data)
 | 
			
		||||
            if self.cuda:
 | 
			
		||||
                images = images.cuda()
 | 
			
		||||
            #---------------------------------------------------------#
 | 
			
		||||
            #   将图像输入网络当中进行预测!
 | 
			
		||||
            #---------------------------------------------------------#
 | 
			
		||||
            outputs = self.net(images)
 | 
			
		||||
            outputs = self.bbox_util.decode_box(outputs)
 | 
			
		||||
            #---------------------------------------------------------#
 | 
			
		||||
            #   将预测框进行堆叠,然后进行非极大抑制
 | 
			
		||||
            #---------------------------------------------------------#
 | 
			
		||||
            results = self.bbox_util.non_max_suppression(torch.cat(outputs, 1), self.num_classes, self.input_shape, 
 | 
			
		||||
                        image_shape, self.letterbox_image, conf_thres = self.confidence, nms_thres = self.nms_iou)
 | 
			
		||||
                                                    
 | 
			
		||||
            if results[0] is None: 
 | 
			
		||||
                return 
 | 
			
		||||
 | 
			
		||||
            top_label   = np.array(results[0][:, 6], dtype = 'int32')
 | 
			
		||||
            top_conf    = results[0][:, 4] * results[0][:, 5]
 | 
			
		||||
            top_boxes   = results[0][:, :4]
 | 
			
		||||
 | 
			
		||||
        for i, c in list(enumerate(top_label)):
 | 
			
		||||
            predicted_class = self.class_names[int(c)]
 | 
			
		||||
            box             = top_boxes[i]
 | 
			
		||||
            score           = str(top_conf[i])
 | 
			
		||||
 | 
			
		||||
            top, left, bottom, right = box
 | 
			
		||||
            if predicted_class not in class_names:
 | 
			
		||||
                continue
 | 
			
		||||
 | 
			
		||||
            f.write("%s %s %s %s %s %s\n" % (predicted_class, score[:6], str(int(left)), str(int(top)), str(int(right)),str(int(bottom))))
 | 
			
		||||
 | 
			
		||||
        f.close()
 | 
			
		||||
        return 
 | 
			
		||||
 | 
			
		||||
class YOLO_ONNX(object):
 | 
			
		||||
    _defaults = {
 | 
			
		||||
        #--------------------------------------------------------------------------#
 | 
			
		||||
        #   使用自己训练好的模型进行预测一定要修改onnx_path和classes_path!
 | 
			
		||||
        #   onnx_path指向logs文件夹下的权值文件,classes_path指向model_data下的txt
 | 
			
		||||
        #
 | 
			
		||||
        #   训练好后logs文件夹下存在多个权值文件,选择验证集损失较低的即可。
 | 
			
		||||
        #   验证集损失较低不代表mAP较高,仅代表该权值在验证集上泛化性能较好。
 | 
			
		||||
        #   如果出现shape不匹配,同时要注意训练时的onnx_path和classes_path参数的修改
 | 
			
		||||
        #--------------------------------------------------------------------------#
 | 
			
		||||
        "onnx_path"         : 'model_data/models.onnx',
 | 
			
		||||
        "classes_path"      : 'model_data/coco_classes.txt',
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        #   anchors_path代表先验框对应的txt文件,一般不修改。
 | 
			
		||||
        #   anchors_mask用于帮助代码找到对应的先验框,一般不修改。
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        "anchors_path"      : 'model_data/yolo_anchors.txt',
 | 
			
		||||
        "anchors_mask"      : [[6, 7, 8], [3, 4, 5], [0, 1, 2]],
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        #   输入图片的大小,必须为32的倍数。
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        "input_shape"       : [640, 640],
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        #   只有得分大于置信度的预测框会被保留下来
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        "confidence"        : 0.5,
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        #   非极大抑制所用到的nms_iou大小
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        "nms_iou"           : 0.3,
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        #   该变量用于控制是否使用letterbox_image对输入图像进行不失真的resize,
 | 
			
		||||
        #   在多次测试后,发现关闭letterbox_image直接resize的效果更好
 | 
			
		||||
        #---------------------------------------------------------------------#
 | 
			
		||||
        "letterbox_image"   : True
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def get_defaults(cls, n):
 | 
			
		||||
        if n in cls._defaults:
 | 
			
		||||
            return cls._defaults[n]
 | 
			
		||||
        else:
 | 
			
		||||
            return "Unrecognized attribute name '" + n + "'"
 | 
			
		||||
 | 
			
		||||
    #---------------------------------------------------#
 | 
			
		||||
    #   初始化YOLO
 | 
			
		||||
    #---------------------------------------------------#
 | 
			
		||||
    def __init__(self, **kwargs):
 | 
			
		||||
        self.__dict__.update(self._defaults)
 | 
			
		||||
        for name, value in kwargs.items():
 | 
			
		||||
            setattr(self, name, value)
 | 
			
		||||
            self._defaults[name] = value 
 | 
			
		||||
            
 | 
			
		||||
        import onnxruntime
 | 
			
		||||
        self.onnx_session   = onnxruntime.InferenceSession(self.onnx_path)
 | 
			
		||||
        # 获得所有的输入node
 | 
			
		||||
        self.input_name     = self.get_input_name()
 | 
			
		||||
        # 获得所有的输出node
 | 
			
		||||
        self.output_name    = self.get_output_name()
 | 
			
		||||
 | 
			
		||||
        #---------------------------------------------------#
 | 
			
		||||
        #   获得种类和先验框的数量
 | 
			
		||||
        #---------------------------------------------------#
 | 
			
		||||
        self.class_names, self.num_classes  = self.get_classes(self.classes_path)
 | 
			
		||||
        self.anchors, self.num_anchors      = self.get_anchors(self.anchors_path)
 | 
			
		||||
        self.bbox_util                      = DecodeBoxNP(self.anchors, self.num_classes, (self.input_shape[0], self.input_shape[1]), self.anchors_mask)
 | 
			
		||||
 | 
			
		||||
        #---------------------------------------------------#
 | 
			
		||||
        #   画框设置不同的颜色
 | 
			
		||||
        #---------------------------------------------------#
 | 
			
		||||
        hsv_tuples  = [(x / self.num_classes, 1., 1.) for x in range(self.num_classes)]
 | 
			
		||||
        self.colors = list(map(lambda x: colorsys.hsv_to_rgb(*x), hsv_tuples))
 | 
			
		||||
        self.colors = list(map(lambda x: (int(x[0] * 255), int(x[1] * 255), int(x[2] * 255)), self.colors))
 | 
			
		||||
 | 
			
		||||
        show_config(**self._defaults)
 | 
			
		||||
 
 | 
			
		||||
    def get_classes(self, classes_path):
 | 
			
		||||
        with open(classes_path, encoding='utf-8') as f:
 | 
			
		||||
            class_names = f.readlines()
 | 
			
		||||
        class_names = [c.strip() for c in class_names]
 | 
			
		||||
        return class_names, len(class_names)
 | 
			
		||||
    
 | 
			
		||||
    def get_anchors(self, anchors_path):
 | 
			
		||||
        '''loads the anchors from a file'''
 | 
			
		||||
        with open(anchors_path, encoding='utf-8') as f:
 | 
			
		||||
            anchors = f.readline()
 | 
			
		||||
        anchors = [float(x) for x in anchors.split(',')]
 | 
			
		||||
        anchors = np.array(anchors).reshape(-1, 2)
 | 
			
		||||
        return anchors, len(anchors)
 | 
			
		||||
 | 
			
		||||
    def get_input_name(self):
 | 
			
		||||
        # 获得所有的输入node
 | 
			
		||||
        input_name=[]
 | 
			
		||||
        for node in self.onnx_session.get_inputs():
 | 
			
		||||
            input_name.append(node.name)
 | 
			
		||||
        return input_name
 | 
			
		||||
 
 | 
			
		||||
    def get_output_name(self):
 | 
			
		||||
        # 获得所有的输出node
 | 
			
		||||
        output_name=[]
 | 
			
		||||
        for node in self.onnx_session.get_outputs():
 | 
			
		||||
            output_name.append(node.name)
 | 
			
		||||
        return output_name
 | 
			
		||||
 
 | 
			
		||||
    def get_input_feed(self,image_tensor):
 | 
			
		||||
        # 利用input_name获得输入的tensor
 | 
			
		||||
        input_feed={}
 | 
			
		||||
        for name in self.input_name:
 | 
			
		||||
            input_feed[name]=image_tensor
 | 
			
		||||
        return input_feed
 | 
			
		||||
    
 | 
			
		||||
    #---------------------------------------------------#
 | 
			
		||||
    #   对输入图像进行resize
 | 
			
		||||
    #---------------------------------------------------#
 | 
			
		||||
    def resize_image(self, image, size, letterbox_image, mode='PIL'):
 | 
			
		||||
        if mode == 'PIL':
 | 
			
		||||
            iw, ih  = image.size
 | 
			
		||||
            w, h    = size
 | 
			
		||||
 | 
			
		||||
            if letterbox_image:
 | 
			
		||||
                scale   = min(w/iw, h/ih)
 | 
			
		||||
                nw      = int(iw*scale)
 | 
			
		||||
                nh      = int(ih*scale)
 | 
			
		||||
 | 
			
		||||
                image   = image.resize((nw,nh), Image.BICUBIC)
 | 
			
		||||
                new_image = Image.new('RGB', size, (128,128,128))
 | 
			
		||||
                new_image.paste(image, ((w-nw)//2, (h-nh)//2))
 | 
			
		||||
            else:
 | 
			
		||||
                new_image = image.resize((w, h), Image.BICUBIC)
 | 
			
		||||
        else:
 | 
			
		||||
            image = np.array(image)
 | 
			
		||||
            if letterbox_image:
 | 
			
		||||
                # 获得现在的shape
 | 
			
		||||
                shape       = np.shape(image)[:2]
 | 
			
		||||
                # 获得输出的shape
 | 
			
		||||
                if isinstance(size, int):
 | 
			
		||||
                    size    = (size, size)
 | 
			
		||||
 | 
			
		||||
                # 计算缩放的比例
 | 
			
		||||
                r = min(size[0] / shape[0], size[1] / shape[1])
 | 
			
		||||
 | 
			
		||||
                # 计算缩放后图片的高宽
 | 
			
		||||
                new_unpad   = int(round(shape[1] * r)), int(round(shape[0] * r))
 | 
			
		||||
                dw, dh      = size[1] - new_unpad[0], size[0] - new_unpad[1]
 | 
			
		||||
 | 
			
		||||
                # 除以2以padding到两边
 | 
			
		||||
                dw          /= 2  
 | 
			
		||||
                dh          /= 2
 | 
			
		||||
        
 | 
			
		||||
                # 对图像进行resize
 | 
			
		||||
                if shape[::-1] != new_unpad:  # resize
 | 
			
		||||
                    image = cv2.resize(image, new_unpad, interpolation=cv2.INTER_LINEAR)
 | 
			
		||||
                top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1))
 | 
			
		||||
                left, right = int(round(dw - 0.1)), int(round(dw + 0.1))
 | 
			
		||||
        
 | 
			
		||||
                new_image = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_CONSTANT, value=(128, 128, 128))  # add border
 | 
			
		||||
            else:
 | 
			
		||||
                new_image = cv2.resize(image, (w, h))
 | 
			
		||||
 | 
			
		||||
        return new_image
 | 
			
		||||
 
 | 
			
		||||
    def detect_image(self, image):
 | 
			
		||||
        image_shape = np.array(np.shape(image)[0:2])
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   在这里将图像转换成RGB图像,防止灰度图在预测时报错。
 | 
			
		||||
        #   代码仅仅支持RGB图像的预测,所有其它类型的图像都会转化成RGB
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        image       = cvtColor(image)
 | 
			
		||||
 
 | 
			
		||||
        image_data  = self.resize_image(image, self.input_shape, True)
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   添加上batch_size维度
 | 
			
		||||
        #   h, w, 3 => 3, h, w => 1, 3, h, w
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        image_data  = np.expand_dims(np.transpose(preprocess_input(np.array(image_data, dtype='float32')), (2, 0, 1)), 0)
 | 
			
		||||
 
 | 
			
		||||
        input_feed  = self.get_input_feed(image_data)
 | 
			
		||||
        outputs     = self.onnx_session.run(output_names=self.output_name, input_feed=input_feed)
 | 
			
		||||
 | 
			
		||||
        feature_map_shape   = [[int(j / (2 ** (i + 3))) for j in self.input_shape] for i in range(len(self.anchors_mask))][::-1]
 | 
			
		||||
        for i in range(len(self.anchors_mask)):
 | 
			
		||||
            outputs[i] = np.reshape(outputs[i], (1, len(self.anchors_mask[i]) * (5 + self.num_classes), feature_map_shape[i][0], feature_map_shape[i][1]))
 | 
			
		||||
        
 | 
			
		||||
        outputs = self.bbox_util.decode_box(outputs)
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   将预测框进行堆叠,然后进行非极大抑制
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        results = self.bbox_util.non_max_suppression(np.concatenate(outputs, 1), self.num_classes, self.input_shape, 
 | 
			
		||||
                    image_shape, self.letterbox_image, conf_thres = self.confidence, nms_thres = self.nms_iou)
 | 
			
		||||
                                                
 | 
			
		||||
        if results[0] is None: 
 | 
			
		||||
            return image
 | 
			
		||||
 | 
			
		||||
        top_label   = np.array(results[0][:, 6], dtype = 'int32')
 | 
			
		||||
        top_conf    = results[0][:, 4] * results[0][:, 5]
 | 
			
		||||
        top_boxes   = results[0][:, :4]
 | 
			
		||||
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   设置字体与边框厚度
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        font        = ImageFont.truetype(font='model_data/simhei.ttf', size=np.floor(3e-2 * image.size[1] + 0.5).astype('int32'))
 | 
			
		||||
        thickness   = int(max((image.size[0] + image.size[1]) // np.mean(self.input_shape), 1))
 | 
			
		||||
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        #   图像绘制
 | 
			
		||||
        #---------------------------------------------------------#
 | 
			
		||||
        for i, c in list(enumerate(top_label)):
 | 
			
		||||
            predicted_class = self.class_names[int(c)]
 | 
			
		||||
            box             = top_boxes[i]
 | 
			
		||||
            score           = top_conf[i]
 | 
			
		||||
 | 
			
		||||
            top, left, bottom, right = box
 | 
			
		||||
 | 
			
		||||
            top     = max(0, np.floor(top).astype('int32'))
 | 
			
		||||
            left    = max(0, np.floor(left).astype('int32'))
 | 
			
		||||
            bottom  = min(image.size[1], np.floor(bottom).astype('int32'))
 | 
			
		||||
            right   = min(image.size[0], np.floor(right).astype('int32'))
 | 
			
		||||
 | 
			
		||||
            label = '{} {:.2f}'.format(predicted_class, score)
 | 
			
		||||
            draw = ImageDraw.Draw(image)
 | 
			
		||||
            label_size = draw.textsize(label, font)
 | 
			
		||||
            label = label.encode('utf-8')
 | 
			
		||||
            print(label, top, left, bottom, right)
 | 
			
		||||
            
 | 
			
		||||
            if top - label_size[1] >= 0:
 | 
			
		||||
                text_origin = np.array([left, top - label_size[1]])
 | 
			
		||||
            else:
 | 
			
		||||
                text_origin = np.array([left, top + 1])
 | 
			
		||||
 | 
			
		||||
            for i in range(thickness):
 | 
			
		||||
                draw.rectangle([left + i, top + i, right - i, bottom - i], outline=self.colors[c])
 | 
			
		||||
            draw.rectangle([tuple(text_origin), tuple(text_origin + label_size)], fill=self.colors[c])
 | 
			
		||||
            draw.text(text_origin, str(label,'UTF-8'), fill=(0, 0, 0), font=font)
 | 
			
		||||
            del draw
 | 
			
		||||
 | 
			
		||||
        return image
 | 
			
		||||
		Reference in New Issue
	
	Block a user