SOD C/C++ API - RealNet Architecture

Syntax

int sod_realnet_train_config(sod_realnet_trainer *pTrainer, SOD_REALNET_TRAINER_CONFIG op, ...);

Description

Configure a sod_realnet_trainer handle. The second argument to sod_realnet_train_config() is an integer configuration option that determines what property of the RealNet trainer is to be configured. Subsequent arguments vary depending on the configuration option in the second argument. The most important configuration options are the log consumer callback and the model output path that you need to set manually here.

Parameters

sod_realnet_trainer    *pTrainer

A pointer to a valid sod_realnet_trainer object obtained from a prior successful call to sod_realnet_train_init().

SOD_REALNET_TRAINER_CONFIG    op

An integer configuration option that determines what property of the sod_realnet_trainer is to be configured. Subsequent arguments vary depending on the configuration verb. Here is a list of the allowed configuration options:

Configuration Verb Expected Arguments Description
SOD_REALNET_TR_LOG_CALLBACK Two Args:
ProcLogConsumer xLog(),
void *pUserData
Register a log consumer callback:
void (*xLog)(const char *zMsg, size_t msgLen, void *pUserData)
A pointer to a user defined function responsible of consuming all training output messages.
The first argument is a pointer to a null terminated string generated by the RealNet trainer that your callback have to consume (i.e. redirecting to STDOUT or some disk file for example). The second argument is the string length and the third argument is an arbitrary pointer passed verbatim by the RealNet trainer to your callback that you have to pass as second argument to this configuration option. If you do not want to share data with the callback, simply pass NULL.
SOD_REALNET_TR_OUTPUT_MODEL One Arg:
const char *zPath
Path where to store the output RealNet model
(i.e. /var/face_detector.realnet)

Return Value

SOD_OK is returned on success. Any other code indicates failure.

Example

/*
* Programming introduction with the SOD Embedded RealNets Model Training API.
* Training must be enabled via the compile-time directive SOD_ENABLE_NET_TRAIN.
*
* Copyright (C) PixLab | Symisc Systems, https://sod.pixlab.io
*/
/*
* Compile this file together with the SOD embedded source code to generate
* the executable. For example:
*
* gcc sod.c realnet_train_model.c -D SOD_ENABLE_NET_TRAIN -lm -Ofast -march=native -Wall -std=c99 -o sod_realnet_train_intro
*
* Under Microsoft Visual Studio (>= 2015), just drop `sod.c` and its accompanying
* header files on your source tree and you're done. If you have any trouble
* integrating SOD in your project, please submit a support request at:
* https://sod.pixlab.io/support.html
*/
/*
* This simple program is a quick introduction on how to embed and start
* experimenting with SOD without having to do a lot of tedious
* reading and configuration.
*
* Make sure you have the latest release of SOD from:
* https://pixlab.io/downloads
* The SOD Embedded C/C++ documentation is available at:
* https://sod.pixlab.io/api.html
*/
#include <stdio.h>
#include "sod.h"
/*
* Training log consumer callback that should be called
* by the Realnet trainer to report training progress.
*/
void log_consumer_callback(const char *zText, size_t text_len, void *pUserdata)
{
/* Simply redirect to stdout */
puts(zText);
}
int main(int argc, char *argv[])
{
/* Training instructions (i.e. where positive and negative samples
* are located, tree minimal depth, max trees, model copyright notice and so on).
* Pass a path or download one from https://pixlab.io/downloads
*/
const char *zTrainFile = argc > 1 ? argv[1] : "train.txt";
/*
* Relanet trainer handle
*/
sod_realnet_trainer *pNet;
int rc;
/* Allocate a new Realnet Trainer handle */
rc = sod_realnet_train_init(&pNet);
if (rc != SOD_OK) return rc;
/*
* Install our training progress log consumer callback.
*/
rc = sod_realnet_train_config(pNet, SOD_REALNET_TR_LOG_CALLBACK, log_consumer_callback, 0);
if (rc != SOD_OK) return rc;
/*
* Where to store the output model.
*/
rc = sod_realnet_train_config(pNet, SOD_REALNET_TR_OUTPUT_MODEL, "./pedestrian_detetcor.realnet");
if (rc != SOD_OK) return rc;
/*
* Start the heavy training process on your CPU driven by
* the Realnet instructions found on `zTrainFile`.
*/
rc = sod_realnet_train_start(pNet, zTrainFile);
/* Wait some days...*/
sod_realnet_train_release(pNet);
/* check the progress log and you should find
* a working model on the path you specified earlier.
*/
return rc;
}

Checkout the introduction course, the C/C++ samples on the download page or refer to the SOD Github Repository.

See also

sod_realnet_train_initsod_realnet_train_startsod_realnet_train_release.


Back