Я разработал свою модель CNN на основе хранилища [https://github.com/matterport/Mask_RCNN] . Когда я запустил программу (используя cmd: coco.py train --dataset = / DATASET / COCO / 2017 --model = Нет, я рекомендовал оператор загрузки, чтобы пропустить загрузку весов модели), процесс прошел построение модели, набор данных кокоса загрузка, а затем начал вызывать model.train ().
# Create model
if args.command == "train":
model = modellib.MeshMask_RCNN(mode="training", config=config,
model_dir=args.logs)
else:
model = modellib.MeshMask_RCNN(mode="inference", config=config,
model_dir=args.logs)
# Select weights file to load
if args.model.lower() == "coco":
model_path = COCO_MODEL_PATH
elif args.model.lower() == "last":
# Find last trained weights
model_path = model.find_last()
elif args.model.lower() == "imagenet":
# Start from ImageNet trained weights
model_path = IMAGENET_MODEL_PATH()
else:
model_path = args.model
# Load weights
print("Loading weights ", model_path)
# model.load_weights(model_path, by_name=True)
# Train or evaluate
if args.command == "train":
# Training dataset. Use the training set and 35K from the
# validation set, as as in the Mask RCNN paper.
dataset_train = CocoDataset()
dataset_train.load_coco(args.dataset, "train", year=args.year, auto_download=args.download)
if args.year in '2014':
dataset_train.load_coco(args.dataset, "valminusminival", year=args.year, auto_download=args.download)
dataset_train.prepare()
# Validation dataset
dataset_val = CocoDataset()
val_type = "val" if args.year in '2017' else "minival"
dataset_val.load_coco(args.dataset, val_type, year=args.year, auto_download=args.download)
dataset_val.prepare()
# Image Augmentation
# Right/Left flip 50% of the time
augmentation = imgaug.augmenters.Fliplr(0.5)
# *** This training schedule is an example. Update to your needs ***
# Training - Stage 0
print("Fine tune all layers")
# get stuck when invoking this function #
> model.train(dataset_train, dataset_val,
> learning_rate=config.LEARNING_RATE,
> epochs=160,
> layers='all',
> augmentation=augmentation)
В model.train () он начал загружать изображения с диска, и использование памяти начало увеличиваться примерно до 80 ГБ, а затем весь прогресс зависал (никаких обучающих сообщений и процессора / Коэффициент использования ГПУ очень низкий). Я сделал паузу и нашел цикл программы между строкой 404 ~ 406 в multiprocessing / pool.py.
@staticmethod
def _handle_workers(pool):
thread = threading.current_thread()
# Keep maintaining workers until the cache gets drained, unless the pool
# is terminated.
404 while thread._state == RUN or (pool._cache and thread._state != TERMINATE):
405 pool._maintain_pool()
406 time.sleep(0.1)
# send sentinel to stop workers
pool._taskqueue.put(None)
util.debug('worker handler exiting')
Означает ли это, что есть ресурсы, которые не удовлетворяют спрос, поэтому они застряли? Я новичок в керас и тензор потока. Может ли кто-нибудь помочь? Спасибо.
изменить: Когда я нашел, я нашел точное утверждение, где программа застряла.
# tensorflow_core/python/client/session.py
class _Callable(object):
def __init__(self, session, callable_options):
self._session = session
self._handle = None
options_ptr = tf_session.TF_NewBufferFromString(
compat.as_bytes(callable_options.SerializeToString()))
try:
> slef._handle = tf_session.TF_SessionMakeCallable(
> session._session, options_ptr)
finally:
tf_session.TF_DeleteBuffer(options_ptr)