|
|
@@ -26,7 +26,7 @@ void Project::PredictSegment(ProjectProgressHandler *progress_handler, Conv::Seg
|
|
|
|
|
|
progress_handler->OnProjectProgressUpdate(0);
|
|
|
|
|
|
- // Switch to testing mode
|
|
|
+ // Netz in Testmodus versetzen
|
|
|
graph_->SetIsTesting(true);
|
|
|
input_layer_->ForceWeightsZero();
|
|
|
|
|
|
@@ -37,18 +37,20 @@ void Project::PredictSegment(ProjectProgressHandler *progress_handler, Conv::Seg
|
|
|
Conv::JSON& sample_json = segment->GetSample(sample);
|
|
|
std::vector<Conv::BoundingBox> sample_predictions;
|
|
|
|
|
|
- // Load sample
|
|
|
+ // Beispiel laden
|
|
|
input_layer_->ForceLoadDetection(sample_json, 0);
|
|
|
+
|
|
|
+ // Forward Pass durch das Netz
|
|
|
graph_->FeedForward();
|
|
|
|
|
|
- // Copy predictions
|
|
|
+ // Vorhersagen auslesen
|
|
|
Conv::DetectionMetadataPointer output_boxes = predicted_metadata_[0];
|
|
|
for(unsigned int b = 0; b < output_boxes->size(); b++) {
|
|
|
Conv::BoundingBox bbox = output_boxes->at(b);
|
|
|
sample_predictions.push_back(bbox);
|
|
|
}
|
|
|
|
|
|
- // Store predictions
|
|
|
+ // Vorhersagen in Ausgabe ablegen
|
|
|
std::string sample_filename = sample_json["image_rpath"];
|
|
|
prediction_filenames->push_back(sample_filename);
|
|
|
prediction_boxes->push_back(sample_predictions);
|
|
|
@@ -57,7 +59,7 @@ void Project::PredictSegment(ProjectProgressHandler *progress_handler, Conv::Seg
|
|
|
progress_handler->OnProjectProgressUpdate(running_sample_count / total_sample_count);
|
|
|
}
|
|
|
|
|
|
- // Done
|
|
|
+ // Fertig
|
|
|
progress_handler->OnProjectProgressUpdate(1);
|
|
|
progress_handler->OnProjectProgressDone();
|
|
|
}
|
|
|
@@ -68,7 +70,8 @@ void Project::UpdateModel(ProjectProgressHandler *progress_handler) {
|
|
|
return;
|
|
|
}
|
|
|
needs_rescore_ = true;
|
|
|
- // Update input layer settings
|
|
|
+
|
|
|
+ // Parameter der Eingabeschicht aktualisieren
|
|
|
input_layer_->training_sets_.clear();
|
|
|
input_layer_->training_weights_.clear();
|
|
|
input_layer_->training_sets_.push_back(known_samples_);
|
|
|
@@ -183,19 +186,19 @@ bool Project::AddSample(std::string filename) {
|
|
|
needs_rescore_ = true;
|
|
|
Conv::Segment* target_segment = nullptr;
|
|
|
|
|
|
- // If no new samples have been added, create first segment
|
|
|
+ // Falls noch kein Lernstapel existiert, neuen Stapel anfangen
|
|
|
if(new_set_->GetSegmentCount() == 0) {
|
|
|
std::stringstream ss; ss << "New Data Batch " << 1;
|
|
|
Conv::Segment* segment = new Conv::Segment(ss.str());
|
|
|
new_set_->AddSegment(segment);
|
|
|
target_segment = segment;
|
|
|
} else {
|
|
|
- // Otherwise, get last segment and check if it has room for new sample
|
|
|
+ // Ansonsten letzen Lernstapel finden und überprüfen, ob genug Platz ist
|
|
|
Conv::Segment* segment = new_set_->GetSegment(new_set_->GetSegmentCount() - 1);
|
|
|
if(segment->GetSampleCount() < new_batch_size_) {
|
|
|
target_segment = segment;
|
|
|
} else {
|
|
|
- // No room, create new segment
|
|
|
+ // Kein Platz, neuen Stapel anlegen
|
|
|
std::stringstream ss; ss << "New Data Batch " << new_set_->GetSegmentCount() + 1;
|
|
|
Conv::Segment* segment = new Conv::Segment(ss.str());
|
|
|
new_set_->AddSegment(segment);
|
|
|
@@ -255,7 +258,7 @@ bool Project::Deserialize(Conv::JSON& project_json) {
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- // Load JSON
|
|
|
+ // JSON-Datei laden
|
|
|
architecture_filename_="_from_json_";
|
|
|
if(!project_json["architecture"].is_object()) {
|
|
|
LOGERROR << "Project JSON is missing architecture";
|
|
|
@@ -274,15 +277,15 @@ bool Project::Deserialize(Conv::JSON& project_json) {
|
|
|
|
|
|
architecture_json = project_json["architecture"];
|
|
|
|
|
|
- // Create class manager
|
|
|
+ // Klassenmanager initialisieren
|
|
|
class_manager_ = new Conv::ClassManager();
|
|
|
class_manager_->RegisterClassUpdateHandler(class_update_handler_);
|
|
|
|
|
|
- // Load architecture
|
|
|
+ // Netzarchitektur einlesen
|
|
|
Conv::JSONNetGraphFactory netgraph_factory(architecture_json, 123123);
|
|
|
graph_ = new Conv::NetGraph();
|
|
|
|
|
|
- // Create dataset input layer
|
|
|
+ // Eingabeschicht anlegen
|
|
|
unsigned int batch_size_parallel = 1;
|
|
|
if(netgraph_factory.GetHyperparameters().count("batch_size_parallel") == 1 && netgraph_factory.GetHyperparameters()["batch_size_parallel"].is_number()) {
|
|
|
batch_size_parallel = netgraph_factory.GetHyperparameters()["batch_size_parallel"];
|
|
|
@@ -291,7 +294,7 @@ bool Project::Deserialize(Conv::JSON& project_json) {
|
|
|
Conv::NetGraphNode* input_node = new Conv::NetGraphNode(input_layer_);
|
|
|
input_node->is_input = true;
|
|
|
|
|
|
- // Add other layers
|
|
|
+ // Übrige Schichten hinzufügen
|
|
|
graph_->AddNode(input_node);
|
|
|
bool result = netgraph_factory.AddLayers(*graph_, class_manager_, 23923);
|
|
|
if(!result) {
|
|
|
@@ -302,16 +305,16 @@ bool Project::Deserialize(Conv::JSON& project_json) {
|
|
|
graph_->Initialize();
|
|
|
graph_->InitializeWeights(true);
|
|
|
|
|
|
- // Set helper pointers
|
|
|
+ // Zeiger auf Metadaten schreiben
|
|
|
predicted_metadata_ = (Conv::DetectionMetadataPointer*) graph_->GetOutputNodes()[0]->output_buffers[0].combined_tensor->metadata;
|
|
|
|
|
|
- // Set project properties
|
|
|
+ // Projekteigenschaften setzen
|
|
|
project_name_ = project_json["name"];
|
|
|
|
|
|
- // Load trainer
|
|
|
+ // Trainer initialisieren
|
|
|
trainer_ = new Conv::Trainer(*graph_, netgraph_factory.GetHyperparameters());
|
|
|
|
|
|
- // Load samples
|
|
|
+ // Beispiele laden
|
|
|
known_samples_ = new Conv::SegmentSet("Known Examples");
|
|
|
bool deserialization_result = known_samples_->Deserialize(project_json["known_set"]);
|
|
|
update_set_ = new Conv::SegmentSet("Update Set");
|
|
|
@@ -333,7 +336,7 @@ bool Project::New(std::string architecture_filename, std::string model_filename,
|
|
|
LOGERROR << "Already have a project!";
|
|
|
return false;
|
|
|
} else {
|
|
|
- // Validate filenames
|
|
|
+ // Pfad validieren
|
|
|
std::ifstream architecture_file(architecture_filename, std::ios::in);
|
|
|
if(!architecture_file.good()) {
|
|
|
LOGERROR << "Failed to open architecture!";
|
|
|
@@ -345,16 +348,16 @@ bool Project::New(std::string architecture_filename, std::string model_filename,
|
|
|
LOGERROR << "Failed to open model!";
|
|
|
}
|
|
|
|
|
|
- // Create class manager
|
|
|
+ // Klassenmanager initialisieren
|
|
|
class_manager_ = new Conv::ClassManager();
|
|
|
class_manager_->RegisterClassUpdateHandler(class_update_handler_);
|
|
|
|
|
|
- // Load architecture
|
|
|
+ // Netzarchitektur einlesen
|
|
|
architecture_json = Conv::JSON::parse(architecture_file);
|
|
|
Conv::JSONNetGraphFactory netgraph_factory(architecture_json, 123123);
|
|
|
graph_ = new Conv::NetGraph();
|
|
|
|
|
|
- // Create dataset input layer
|
|
|
+ // Eingabeschicht anlegen
|
|
|
unsigned int batch_size_parallel = 1;
|
|
|
if(netgraph_factory.GetHyperparameters().count("batch_size_parallel") == 1 && netgraph_factory.GetHyperparameters()["batch_size_parallel"].is_number()) {
|
|
|
batch_size_parallel = netgraph_factory.GetHyperparameters()["batch_size_parallel"];
|
|
|
@@ -363,7 +366,7 @@ bool Project::New(std::string architecture_filename, std::string model_filename,
|
|
|
Conv::NetGraphNode* input_node = new Conv::NetGraphNode(input_layer_);
|
|
|
input_node->is_input = true;
|
|
|
|
|
|
- // Add other layers
|
|
|
+ // Übrigen Schichten laden
|
|
|
graph_->AddNode(input_node);
|
|
|
bool result = netgraph_factory.AddLayers(*graph_, class_manager_, 23923);
|
|
|
if(!result) {
|
|
|
@@ -375,21 +378,21 @@ bool Project::New(std::string architecture_filename, std::string model_filename,
|
|
|
graph_->InitializeWeights(true);
|
|
|
|
|
|
|
|
|
- // Load model
|
|
|
+ // Modell laden
|
|
|
graph_->DeserializeParameters(model_file);
|
|
|
|
|
|
- // Load trainer
|
|
|
+ // Trainer initialisieren
|
|
|
trainer_ = new Conv::Trainer(*graph_, netgraph_factory.GetHyperparameters());
|
|
|
|
|
|
- // Initialize segment sets
|
|
|
+ // Datensätze initialisieren
|
|
|
known_samples_ = new Conv::SegmentSet("Known Examples");
|
|
|
update_set_ = new Conv::SegmentSet("Update Set");
|
|
|
new_set_ = new Conv::SegmentSet("New Set");
|
|
|
|
|
|
- // Set helper pointers
|
|
|
+ // Zeiger auf Metadaten schreiben
|
|
|
predicted_metadata_ = (Conv::DetectionMetadataPointer*) graph_->GetOutputNodes()[0]->output_buffers[0].combined_tensor->metadata;
|
|
|
|
|
|
- // Set project properties
|
|
|
+ // Projekteigenschaften setzen
|
|
|
project_name_ = project_name;
|
|
|
project_folder_ = project_folder;
|
|
|
|
|
|
@@ -452,14 +455,14 @@ bool Project::LoadModel() {
|
|
|
}
|
|
|
|
|
|
bool Project::RenameClass(const std::string &org_name, const std::string new_name) {
|
|
|
- // Rename classes
|
|
|
+ // Klasse selbst umbenennen
|
|
|
bool class_result = class_manager_->RenameClass(org_name, new_name);
|
|
|
if(!class_result) {
|
|
|
LOGERROR << "Could not rename class!";
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- // Rename samples
|
|
|
+ // Klassen in ALLEN Beispielen umbenennen
|
|
|
bool sample_result = known_samples_->RenameClass(org_name, new_name);
|
|
|
sample_result &= new_set_->RenameClass(org_name, new_name);
|
|
|
sample_result &= update_set_->RenameClass(org_name, new_name);
|