Custom Yolov7 on Kaggle on Custom Dataset

Object Detection

Custom Yolov7 on Kaggle on Custom Dataset Computer Vision Project

Owais Ahmad

Updated 2 years ago

3.5k

views

189

downloads
Classes (2)
1
2
Description

Custom Training with YOLOv7 🔥

Some Important links

Contact Information

Objective

To Showcase custom Object Detection on the Given Dataset to train and Infer the Model using newly launched YoloV7.

Data Acquisition

The goal of this task is to train a model that can localize and classify each instance of Person and Car as accurately as possible.

from IPython.display import Markdown, display

display(Markdown("../input/Car-Person-v2-Roboflow/README.roboflow.txt"))

Custom Training with YOLOv7 🔥

In this Notebook, I have processed the images with RoboFlow because in COCO formatted dataset was having different dimensions of image and Also data set was not splitted into different Format. To train a custom YOLOv7 model we need to recognize the objects in the dataset. To do so I have taken the following steps:

  • Export the dataset to YOLOv7
  • Train YOLOv7 to recognize the objects in our dataset
  • Evaluate our YOLOv7 model's performance
  • Run test inference to view performance of YOLOv7 model at work

📦 YOLOv7

<div align=center><img src="https://raw.githubusercontent.com/Owaiskhan9654/Yolo-V7-Custom-Dataset-Train-on-Kaggle/main/car-person-2.PNG" width=800>

Image Credit - jinfagang

Step 1: Install Requirements

!git clone https://github.com/WongKinYiu/yolov7 # Downloading YOLOv7 repository and installing requirements
%cd yolov7
!pip install -qr requirements.txt
!pip install -q roboflow

Downloading YOLOV7 starting checkpoint

!wget "https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt"
import os
import glob
import wandb
import torch
from roboflow import Roboflow
from kaggle_secrets import UserSecretsClient
from IPython.display import Image, clear_output, display  # to display images



print(f"Setup complete. Using torch {torch.__version__} ({torch.cuda.get_device_properties(0).name if torch.cuda.is_available() else 'CPU'})")

<img src="https://camo.githubusercontent.com/dd842f7b0be57140e68b2ab9cb007992acd131c48284eaf6b1aca758bfea358b/68747470733a2f2f692e696d6775722e636f6d2f52557469567a482e706e67">

I will be integrating W&B for visualizations and logging artifacts and comparisons of different models!

YOLOv7-Car-Person-Custom

try:
    user_secrets = UserSecretsClient()
    wandb_api_key = user_secrets.get_secret("wandb_api")
    wandb.login(key=wandb_api_key)
    anonymous = None
except:
    wandb.login(anonymous='must')
    print('To use your W&B account,\nGo to Add-ons -> Secrets and provide your W&B access token. Use the Label name as WANDB. \nGet your W&B access token from here: https://wandb.ai/authorize')
    
    
    
wandb.init(project="YOLOvR",name=f"7. YOLOv7-Car-Person-Custom-Run-7")

Step 2: Assemble Our Dataset

In order to train our custom model, we need to assemble a dataset of representative images with bounding box annotations around the objects that we want to detect. And we need our dataset to be in YOLOv7 format.

In Roboflow, We can choose between two paths:

Version v2 Aug 12, 2022 Looks like this.

user_secrets = UserSecretsClient()
roboflow_api_key = user_secrets.get_secret("roboflow_api")
rf = Roboflow(api_key=roboflow_api_key)
project = rf.workspace("owais-ahmad").project("custom-yolov7-on-kaggle-on-custom-dataset-rakiq")
dataset = project.version(2).download("yolov7")

Step 3: Training Custom pretrained YOLOv7 model

Here, I am able to pass a number of arguments:

  • img: define input image size
  • batch: determine batch size
  • epochs: define the number of training epochs. (Note: often, 3000+ are common here nut since I am using free version of colab I will be only defining it to 20!)
  • data: Our dataset locaiton is saved in the ./yolov7/Custom-Yolov7-on-Kaggle-on-Custom-Dataset-2 folder.
  • weights: specifying a path to weights to start transfer learning from. Here I have choosen a generic COCO pretrained checkpoint.
  • cache: caching images for faster training
!python train.py --batch 16 --cfg cfg/training/yolov7.yaml --epochs 30 --data {dataset.location}/data.yaml --weights 'yolov7.pt' --device 0 

Run Inference With Trained Weights

Testing inference with a pretrained checkpoint on contents of ./Custom-Yolov7-on-Kaggle-on-Custom-Dataset-2/test/images folder downloaded from Roboflow.

!python detect.py --weights runs/train/exp/weights/best.pt --img 416 --conf 0.75 --source ./Custom-Yolov7-on-Kaggle-on-Custom-Dataset-2/test/images

Display inference on ALL test images

for images in glob.glob('runs/detect/exp/*.jpg')[0:10]:
    display(Image(filename=images))
model = torch.load('runs/train/exp/weights/best.pt')

Conclusion and Next Steps

Now this trained custom YOLOv7 model can be used to recognize Person and Cars form any given Images.

To improve the model's performance, I might perform more interating on the datasets coverage,propper annotations and and Image quality. From orignal authors of Yolov7 this guide has been given for model performance improvement.

To deploy our model to an application by exporting your model to deployment destinations.

Once our model is in production, I will be willing to continually iterate and improve on your dataset and model via active learning.

Supervision

Build Computer Vision Applications Faster with Supervision

Visualize and process your model results with our reusable computer vision tools.

Cite This Project

LICENSE
CC BY 4.0

If you use this dataset in a research paper, please cite it using the following BibTeX:

                        @misc{
                            custom-yolov7-on-kaggle-on-custom-dataset-rakiq_dataset,
                            title = { Custom Yolov7 on Kaggle on Custom Dataset Dataset },
                            type = { Open Source Dataset },
                            author = { Owais Ahmad },
                            howpublished = { \url{ https://universe.roboflow.com/owais-ahmad/custom-yolov7-on-kaggle-on-custom-dataset-rakiq } },
                            url = { https://universe.roboflow.com/owais-ahmad/custom-yolov7-on-kaggle-on-custom-dataset-rakiq },
                            journal = { Roboflow Universe },
                            publisher = { Roboflow },
                            year = { 2023 },
                            month = { jan },
                            note = { visited on 2024-11-24 },
                            }
                        
                    

Similar Projects

See More