--- license: apache-2.0 tags: - image-classification - plastic-waste - recycling - convnext - timm - pytorch pipeline_tag: image-classification --- # Plastic Waste Classifier Classifies plastic waste images into **6 resin types** for recycling sorting. Built for [Hackniche 4.0](https://hackniche.in/). ## Performance (Test Set, 5-view TTA) | Metric | Value | |---|---| | Accuracy | **92.02%** | | Macro F1 | **0.9077** | | Best Val F1 | 0.9177 | ## Model Details | Property | Value | |---|---| | Base Model | `convnext_base.fb_in22k_ft_in1k_384` | | Pretraining | ImageNet-22k then ImageNet-1k (86.8% top-1) | | Input Size | 384 x 384 px | | Parameters | ~88M | | Fine-tuning | Full LLRD + EMA | ## Classes | Label | Code | Material | Recyclable | |---|---|---|---| | PET | #1 | Polyethylene Terephthalate | Yes | | HDPE | #2 | High-Density Polyethylene | Yes | | LDPE | #4 | Low-Density Polyethylene | Yes | | PP | #5 | Polypropylene | Yes | | PS | #6 | Polystyrene | No | | Other| #7 | Mixed / Unknown | Depends | ## Quick Start ```python import torch, timm, numpy as np import albumentations as A from albumentations.pytorch import ToTensorV2 from huggingface_hub import hf_hub_download from PIL import Image weights = hf_hub_download('Vansh180/plastic-waste-classifier', 'plastic_classifier_best.pt') model = timm.create_model('convnext_base.fb_in22k_ft_in1k_384', pretrained=False, num_classes=6) model.load_state_dict(torch.load(weights, map_location='cpu')) model.eval() transform = A.Compose([ A.Resize(416, 416), A.CenterCrop(384, 384), A.Normalize([0.485,0.456,0.406],[0.229,0.224,0.225]), ToTensorV2(), ]) CLASS_NAMES = ['HDPE','LDPE','Other','PET','PP','PS'] img = np.array(Image.open('plastic.jpg').convert('RGB')) t = transform(image=img)['image'].unsqueeze(0) with torch.no_grad(): probs = torch.softmax(model(t), dim=1)[0] print(CLASS_NAMES[probs.argmax()], f'{probs.max():.1%}') ``` ## License Apache 2.0