(self)
| 116 | print(f" {i}. {self.classes[idx]:15s} {prob:.2%}") |
| 117 | |
| 118 | def test_class_accuracy(self): |
| 119 | print("\nCalculating per-class accuracy...") |
| 120 | print("-" * 60) |
| 121 | |
| 122 | class_correct = [0] * len(self.classes) |
| 123 | class_total = [0] * len(self.classes) |
| 124 | |
| 125 | with torch.no_grad(): |
| 126 | for i, (image, label) in enumerate(self.dataset): |
| 127 | pred_class, _, _, _ = self.predict_image(image) |
| 128 | class_total[label] += 1 |
| 129 | if pred_class == label: |
| 130 | class_correct[label] += 1 |
| 131 | |
| 132 | if (i + 1) % 100 == 0: |
| 133 | print(f"Processed {i + 1}/{len(self.dataset)} samples...", end='\r') |
| 134 | |
| 135 | print(" " * 60, end='\r') |
| 136 | print("Per-class Accuracy:") |
| 137 | |
| 138 | overall_correct = sum(class_correct) |
| 139 | overall_total = sum(class_total) |
| 140 | |
| 141 | for i, class_name in enumerate(self.classes): |
| 142 | if class_total[i] > 0: |
| 143 | acc = 100.0 * class_correct[i] / class_total[i] |
| 144 | print(f" {class_name:15s}: {acc:5.1f}% ({class_correct[i]}/{class_total[i]})") |
| 145 | |
| 146 | print("-" * 60) |
| 147 | print(f"Overall Accuracy: {100.0 * overall_correct / overall_total:.2f}% ({overall_correct}/{overall_total})") |
| 148 | |
| 149 | def test_custom_image(self, image_path): |
| 150 | if not os.path.exists(image_path): |
no test coverage detected