mirror of https://github.com/AlexeyAB/darknet.git
commit
30e08573d1
4 changed files with 75747 additions and 0 deletions
@ -0,0 +1,105 @@ |
||||
# -*- coding: utf-8 -*- |
||||
# @Time : 2018/4/25 20:28 |
||||
# @Author : Adesun |
||||
# @Site : https://github.com/Adesun |
||||
# @File : log_parser.py |
||||
|
||||
import argparse |
||||
import logging |
||||
import os |
||||
import platform |
||||
import re |
||||
import sys |
||||
|
||||
import matplotlib.pyplot as plt |
||||
from matplotlib.ticker import MultipleLocator, FormatStrFormatter |
||||
|
||||
|
||||
def get_file_name_and_ext(filename): |
||||
(file_path, temp_filename) = os.path.split(filename) |
||||
(file_name, file_ext) = os.path.splitext(temp_filename) |
||||
return file_name, file_ext |
||||
|
||||
|
||||
def show_message(message, stop=False): |
||||
print(message) |
||||
if stop: |
||||
sys.exit(0) |
||||
|
||||
|
||||
def parse_args(): |
||||
parser = argparse.ArgumentParser(description="training log parser by DeepKeeper ") |
||||
parser.add_argument('--source-dir', dest='source_dir', type=str, default='./', |
||||
help='the log source directory') |
||||
parser.add_argument('--save-dir', dest='save_dir', type=str, default='./', |
||||
help='the directory to be saved') |
||||
parser.add_argument('--csv-file', dest='csv_file', type=str, default="", |
||||
help='training log file') |
||||
parser.add_argument('--log-file', dest='log_file', type=str, default="", |
||||
help='training log file') |
||||
parser.add_argument('--show', dest='show_plot', type=bool, default=False, |
||||
help='whether to show') |
||||
return parser.parse_args() |
||||
|
||||
|
||||
def log_parser(args): |
||||
if not args.log_file: |
||||
show_message('log file must be specified.', True) |
||||
|
||||
log_path = os.path.join(args.source_dir, args.log_file) |
||||
if not os.path.exists(log_path): |
||||
show_message('log file does not exist.', True) |
||||
|
||||
file_name, _ = get_file_name_and_ext(log_path) |
||||
log_content = open(log_path).read() |
||||
|
||||
iterations = [] |
||||
losses = [] |
||||
fig, ax = plt.subplots() |
||||
|
||||
major_locator = MultipleLocator(1) |
||||
minor_locator = MultipleLocator(0.5) |
||||
|
||||
ax.yaxis.set_major_locator(major_locator) |
||||
ax.yaxis.set_minor_locator(minor_locator) |
||||
|
||||
ax.yaxis.grid(True, which='minor') |
||||
|
||||
pattern = re.compile(r"([\d]*): .*?, (.*?) avg,") |
||||
matches = pattern.findall(log_content) |
||||
counter = 0 |
||||
log_count = len(matches) |
||||
|
||||
if args.csv_file != '': |
||||
csv_path = os.path.join(args.save_dir, args.csv_file) |
||||
out_file = open(csv_path, 'w') |
||||
else: |
||||
csv_path = os.path.join(args.save_dir, file_name + '.csv') |
||||
out_file = open(csv_path, 'w') |
||||
|
||||
for match in matches: |
||||
counter += 1 |
||||
if log_count > 200: |
||||
if counter % 200 == 0: |
||||
print('parsing {}/{}'.format(counter, log_count)) |
||||
else: |
||||
print('parsing {}/{}'.format(counter, log_count)) |
||||
iteration, loss = match |
||||
iterations.append(int(iteration)) |
||||
losses.append(float(loss)) |
||||
out_file.write(iteration + ',' + loss + '\n') |
||||
|
||||
ax.plot(iterations, losses) |
||||
plt.xlabel('Iteration') |
||||
plt.ylabel('Loss') |
||||
plt.grid() |
||||
|
||||
save_path = os.path.join(args.save_dir, file_name + '.png') |
||||
plt.savefig(save_path, dpi=300) |
||||
if args.show_plot: |
||||
plt.show() |
||||
|
||||
|
||||
if __name__ == "__main__": |
||||
args = parse_args() |
||||
log_parser(args) |
After Width: | Height: | Size: 32 KiB |
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue