Tutorial¶
Table of Contents
How to train model¶
Adjust the following code from farabio.kernel.py
:
import time
from farabio.core.configs import default_cfgs
from farabio.utils.helpers import EasyDict as edict
from farabio.models.classification.class_trainer import ClassTrainer
from farabio.models.classification.transformer_trainer import TransformerTrainer
from farabio.models.segmentation.unet.unet_trainer import UnetTrainer
from farabio.models.segmentation.attunet.attunet_trainer import AttunetTrainer
from farabio.models.superres.srgan.srgan_trainer import SrganTrainer
from farabio.models.translation.cyclegan.cyclegan_trainer import CycleganTrainer
from farabio.models.detection.yolov3.yolo_trainer import YoloTrainer
from farabio.models.detection.faster_rcnn.faster_rcnn_trainer import FasterRCNNTrainer
models = {
"classification": {
("vgg", "resnet", "preactresnet", "googlenet",
"densenet", "resnext", "mobilenet", "mobilenet2",
"dpn92", "shufflenet2", "efficientnet", "regnet",
"simpledla"): ClassTrainer,
},
"transformer": {
"linformer": TransformerTrainer
},
"segmentation": {
"unet": UnetTrainer,
"attunet": AttunetTrainer,
},
"superres": {
"srgan": SrganTrainer,
},
"translation": {
"cyclegan": CycleganTrainer,
},
"detection": {
"yolov3": YoloTrainer,
"faster_rcnn": FasterRCNNTrainer
}
}
if __name__ == "__main__":
itime = time.time()
# Choose from list
#model = ("classification", "resnet")
#model = ("transformer", "linformer")
model = ("segmentation", "unet")
if model[0] == "classification":
cfg = default_cfgs[model[0]]
config = edict(cfg)
config.arch = model[-1]
trnr = ClassTrainer(config)
elif model[0] == "transformer":
cfg = default_cfgs[model[0]]
config = edict(cfg)
trnr = TransformerTrainer(config)
else:
cfg = default_cfgs[model[-1]]
config = edict(cfg)
trnr = models[model[0]][model[-1]](config)
if config.mode == 'train':
trnr.train()
elif config.mode == 'test':
trnr.test()
# elif config.mode == 'detect':
# assert model == "yolov3", "detect mode works only for yolo!"
# trnr.detect_perform()
etime = time.time() - itime
print(f'Complete in {etime // 60}m {etime % 60: .2f}s')
How to use Tensorboard¶
$ tensorboard --logdir=<DIR-WHERE-TFRECORDS-FILE-STORED> --port 6006
How to train Yolo-v3 on custom dataset¶
Create custom configuration Yolo:
$ cd farabio/models/detection/yolov3/config/ # Navigate to config dir
$ bash create_custom_model.sh <num-classes> # Will create custom model 'yolov3-custom.cfg'
Modify the ‘custom.data’ file according to the dataset:
$ cd farabio/models/detection/config/ # Navigate to config dir
$ nano custom.data # Change classes, train, valid and names fields
Start YOLO trainer with settings:
$ python kernel.py --mode train --model_def <yolov3-custom.cfg> --data_config <custom.data> --pretrained_weights <darknet53.conv.74> # Start training
$ python kernel.py --mode <test|detect> --model_def <yolov3-custom.cfg> --data_config <custom.data> --weights_path <weights.pth> # Start test/detecting