#!/usr/bin/env python3
import sys
import os
from core.Engine import Engine
from core.Config import Config
from core.Log import log
import tensorflow as tf
# import os
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
def init_log(config): # config是Config类的实例
log_dir = config.dir("log_dir", "logs") # Config类的方法dir
# 返回log_dir = 'logs/'
model = config.string("model") # 其实就是在读取配置文件conv3d_sep2中各个关键字的值
# model = ’conv3d_sep2‘
filename = log_dir + model + ".log" #filename = 'logs/conv3d_sep2.log'
verbosity = config.int("log_verbosity", 3) # verbosity = 5,3 表示如果配置文件里没有这个值,那就将这个值设置为3
log.initialize([filename], [verbosity], []) # from core.Log import log
#反正就是生成日志文件吧,懒得看了,跳过
def main(_):
print(len(sys.argv))
print(sys.argv)
assert len(sys.argv)==2 or len(sys.argv)==3, "usage: main.py <config> <optional_config_string>"
# assert 这句话的意思是如果sys.argv的长度不是2或3就打印提示 "usage: main.py <config> <optional_config_string>"
# 因为设置了参数configs/conv3d_sep2 所以len(sys.argv)==2
# 所以assert就是用来提示设置参数的呗,整着么复杂干啥呢
config_path = sys.argv[1] # sys.argv[1] : configs/conv3d_sep2 手动设置的参数
assert os.path.exists(config_path), config_path
# assert 判断config_path是否存在,若不存在则断言语句(assert)失败,将config_path的内容打印出来,即AssertionError:config_path的值
try:
if len(sys.argv)==3: # len(sys.argv)==2 不等于3,执行else下面的语句
config = Config(config_path, sys.argv[2])
else:
config = Config(config_path) # len(sys.argv)==2 执行这句
# Config是一个类,这句话的意思是类的实例化,实例化之后可以使用类的属性和方法
except ValueError as e: # ValueError:传入无效的参数
#这句话写在这里没有意义吧?无论如何都会执行try,不会执行except啊?或者什么情况下会执行到呢?
print("Malformed config file:", e)
return -1
init_log(config) #config是Config类的实例
# dump the config into the log
print(open(config_path).read(), file=log.v4) #config_path = configs/conv3d_sep2
engine = Engine(config) # config是Config类的实例
engine.run() # task = "train_no_val" 这句话开始才是真正的开始运行
sys.exit(-1)
if __name__ == '__main__':
tf.app.run(main)
Track R-CNN main.py 记录
最新推荐文章于 2024-08-15 09:57:11 发布