Instructors:
- Prof. Dr. Visvanathan Ramesh, email: V.Ramesh@em.uni-frankfurt.de
- Dr. Michael Rammensee, email: M.Rammensee@em.uni-frankfurt.de
Institutions:
Project team (A-Z):
- Pascal Fischer
- Felix Hoffman
- Edis Kurtanovic
- Martin Ludwig
- Alen Smajic
- Python 3
- PyTorch Framework
- Unity3D
- C#
- Blender
- OpenCV
Furthermore, we include a variety of different human models as well as station objects like benches, snack machines, stairs, rubbish bins etc. Using our Script-UI you can further expand the amount of different station objects and station types. Once you press on the Unity play button, the algorithm starts to generate the station environments by randomly generating and placing the human models and station objects along the subway station. Once the scenario is generated, the algorithm takes a screenshot and saves the image to a predefined folder within the project folder. Since we are training a semantic segmentation algorithm we also need to generate the ground truth labels. To do so, our algorithm replaces all station objects and the station itself with white textured versions of those objects. The human models are replaced with green, yellow and red versions of the human models based on their location within the subway station. If they are staying on the railroads, they are painted in red. If they are staying in front of the security line, they are painted in yellow. In all other cases, the human models are replaced with green ones. Finally, our algorithm takes another screenshot and stores the image as the ground truth label in a separate folder within the project folder.
- You can download our dataset with randomly distributed chrachters here
- You can download our dataset with a real data-based distribution of charachters here
Semantic Segmentation using SegNet
For detecting dangerous situations on subway station, we are using semantic segmentation in order to classify each pixel of an image to one of the following classes:
- white - background
- black - security line
- green - characters in safe area
- yellow - characters crossing the security line
- red - characters in the dangerous area (railroads)
Training
For training the SegNet there are 2 scripts available:
SUBWAY_SEGMENTATION.py
Subwaystation_Segmentation.ipynb
For both you need a folder with input images and another with the target images. To start the training you need to execute:
python3 SUBWAY_SEGMENTATION.py
with the following parameters
--input path
to img input data directory--target path
to img target data directory--content path
where the train/validation tensors, model_weights, losses and validation results will be saved,default="/"
--train_tensor_size
number of images per training_tensor (should be True:train_tensor_size % batch_size == 0
)--val_tensor_size
number of images per training_tensor (should be True:train_tensor_size % batch_size == 0
)--num_train_tensors
number of train tensors (should be True:train_tensor_size * num_train_tensors + val_tensor_size == |images|
)--model_weights
path where your model weights will be loaded, if not defined new weights will be initialized--epochs number
of training epochs,default=50
--batch_size
batch size for training,default=8
--learn_rate
learning rate for training,default=0.0001
--momentum
momentum for stochastic gradient descent,default=0.9
--save_cycle
save model, loss, validation every save_cycle epochs,default=5
--weight_decay
weight_decay for stochastic gradient descent,default= 4e5
example execution with 41.000 input/target images:
python3 test_parse.py --input=data/training --target=data/target --content=data/output --train_tensor_size=2000 --val_tensor_size=1000 --num_train_tensors=20 model_weights=model.pt
configuration from example execution:
input_path=data/training
target_path=data/target
content_path=data/output
batch_size=2000
train_tensor_size=20
val_tensor_size=1000
num_train_tensors=20
model_weights=model.pt
load_model=True
learn_rate=0.0001
momentum=0.9
weight_decay=400000.0
total_epochs=50
save_cycle=5
The Subwaystation_Segmentation.ipynb
is the equivalent version for google-colab. You can set all the parameters in the configuration cell.
Predict
To predict from the trained model we provide the google-colab notebook Subway_Segmentation_Predict.ipynb
, which is self explanatory.
You only have to change the following paths:
- model weights
- input image
- target image
check it out
You can download the model weights here