작성
·
453
0
강사님 안녕하세요 올려주신 efficientdet 수업과 예제를 통해서 제가 가지고 있는 데이터셋으로 object detection을 해보려고 하는데 계속 오류가 발생해서 질문을 작성하게 되었습니다
class TRAIN_CFG:
model_name='efficientdet-d2'
strategy=''
model_dir=model_weight
pretrained_ckpt = ckpt_path#coco로 pretrained된 checkpoint파일이 있는 디렉토리 위치
#num_classes=3으로 변경
hparams='num_classes=3,moving_average_decay=0,mixed_precision=true'
use_xla=False
use_fake_data=False
#max_instances_per_image를 200으로 설정하고
#d2모델이 상대적으로 더 크기 때문에 batch_size를 8로 설정시 GPU Out of Memory발생
batch_size=4
eval_samples=5000 #evaluation image데이터 갯수
steps_per_execution=1 #train시 steps 횟수
num_examples_per_epoch=3000 #1epochs 시 적용하는 examples 개수
num_epochs=20 #epochs 횟수
train_file_pattern=train_temp+'/*.tfrecord'
test_file_pattern=test_temp+'/*.tfrecord'
test_json_file=None #optional coco validation json
mode='traineval' #train만 적용 또는 train과 eval함께 적용(traineval)
num_shards=100
max_instances_per_image=100
num_cores=2
tpu=None
gcp_project=None
tpu_zone=None
eval_master=''
eval_name=None
tf_random_seed=2021
profile=False
debug=False
sys.path.append('./automl/efficientdet')
from keras.train import setup_model
import hparams_config
import utils
from keras import tfmot
from keras import train_lib
from keras import util_keras
config=hparams_config.get_detection_config(TRAIN_CFG.model_name)
config.override(TRAIN_CFG.hparams)
steps_per_epoch=TRAIN_CFG.num_examples_per_epoch // TRAIN_CFG.batch_size
if tf.config.list_physical_devices('GPU'):
ds_strategy=tf.distribute.OneDeviceStrategy('device:GPU:0')
else:
ds_strategy=tf.distribute.OneDeviceStrategy('device:CPU:0')
print(ds_strategy)
params=dict(
profile=TRAIN_CFG.profile,
mode=TRAIN_CFG.mode,
model_name=TRAIN_CFG.model_name,
steps_per_execution=TRAIN_CFG.steps_per_execution,
num_epochs=TRAIN_CFG.num_epochs,
model_dir=TRAIN_CFG.model_dir,
steps_per_epoch=steps_per_epoch,
strategy=TRAIN_CFG.strategy,
batch_size=TRAIN_CFG.batch_size,
tf_random_seed=TRAIN_CFG.tf_random_seed,
debug=TRAIN_CFG.debug,
test_json_file=TRAIN_CFG.test_json_file,
eval_samples=TRAIN_CFG.eval_samples,
num_shards=ds_strategy.num_replicas_in_sync,
max_instances_per_image = TRAIN_CFG.max_instances_per_image
)
config.override(params, True)
#image size를 tuple 형태로 변환. 512는 (512,512)로 '1920x880'은 (1920, 880)으로 변환
config.image_size=utils.parse_image_size(config.image_size)
print(config)
sys.path.append('./automl/efficientdet')
from keras import train
import numpy as np
config.batch_size=4
train_steps_per_epoch=train_df.shape[0]
test_steps_per_epoch=test_df.shape[0]
print('train_steps_per_epoch : ',train_steps_per_epoch,
'test_steps_per_epoch : ', test_steps_per_epoch)
test_dataset=get_dataset(False, config) if 'eval' in config.mode else None
model.fit(
get_dataset(True, config),
epochs=20,
steps_per_epoch=train_steps_per_epoch,
callbacks=train_lib.get_callbacks(config.as_dict(), test_dataset),
validation_data=test_dataset,
validation_steps=test_steps_per_epoch
)
tf.keras.backend.clear_session()
답변 4
0
음,,, 이렇게 debugging 지원은 어려울 것 같습니다.
전체 데이터와 소스코드를 colab 형태로 올려주셔서 제가 접근할 수 있게 만들어 주시고 URL을 보내주시면 제가 Debugging 해보겠습니다.
음, 올려주시느라고 수고 하셨습니다.. 그런데, 좀 정돈이 된 형태가 되었으면 좋겠습니다. github에서 올려주신 ipynb 파일가지고 제가 디버깅하기 어렵습니다.
먼저 문제가 되는 부분까지 코드를 올려주십시요. 현재 아래와 같이 get_dataset()으로 test_dataset을 만드는데 오류가 발생합니다. 모델 코드등은, 생략해주시고, 아래 get_dataset()을 호출하기 위해서 필요한 코드까지만 별도로 생성해서 올려 주십시요.
test_dataset=get_dataset(False, config) if 'eval' in config.mode else None
valid용 tfrecord를 만드는 부분 오류가 의심됩니다.
github에 올라있는 코드는 제가 복사해서 작업하는데 시간이 걸립니다.( 올라가 있는 코드의 output 출력 결과가 길어서 drag해서 코드 확인하기가 어렵습니다).
위에서 말씀드린 문제가 되는 코드에 대한 기반 코드들까지만 colab으로 작성해 주시고, 데이터는 github에서 다운로드 할수 있게 만들어 주십시요. 데이터를 코드 기준에 맞춰서 제가 다시 코드를 작성한다든가 하면 debugging작업을 해드리기 어렵습니다. debugging 자체만 제가 할 수 있도록 colab으로 작성해 주십시요.
0
0
강사님 말씀해주신대로 label이름을 다시 숫자로 바꾸고 실행했음에도 동일한 오류가 발생했습니다. 이에 코드를 다시 보던 중 제가 가지고 있는 데이터의 타입이 png이기에 dict_to_tf_example을 작성하는 중 jpeg인지 확인하는 부분을 png로 변경하였는데 이에 대해서도 오류가 발생할 수 있는지 확인 한번만 부탁드려도 될까요? 감사합니다
#PNG image를 binary 그대로 읽음
with tf.io.gfile.GFile(image_path, 'rb') as fid:
encoded_png=fid.read()
#image가 PNG 타입인지 확인
encoded_png_io=io.BytesIO(encoded_png)
image=PIL.Image.open(encoded_png_io)
if image.format != 'PNG':
raise ValueError('Image format not PNG')
0
안녕하십니까,
지금 오류가 발생한것이 Colab 환경인지요, 아님 다른 환경인지요?
저도 검색을 해보니 python 3.8 version에서의 이슈 같습니다만(지금 colab은 python 3.7 입니다)
만약 다른 환경에서 python 3.8을 꼭 사용을 해야하고, 사용시 오류가 발생한다면 numpy를 1.20.0 으로 변경해 보시지요.
감사합니다.
안녕하세요 colab환경이 아니라 linux환경이고 python버전은 3.7입니다.
조언해 주신 것처럼 numpy를 1.20.0으로 해봤을 때는 질문과 동일하게 두번째로 올린 셀의
test_dataset=get_dataset(False, config) if 'eval' in config.mode else None
줄에서
NotImplementedError: Cannot convert a symbolic Tensor (parser/strided_slice_16:0) to a numpy array. This error may indicate that you're trying to pass a Tensor to a NumPy call, which is not supported
오류가 동일하게 발생합니다
그리고 제가 질문에서도 말씀 드렸듯이 annotation을 진행할 때 label이름을 한글로 해서 tfrecord 생성 할 때 image/object/class/label 부분을 byte로 바꾸었는데 그 외에 특별히 신경써야 될 부분이 있을까요?
답변 감사합니다
강사님 안녕하세요 제가 코랩이 아니라 다른 서버에서 돌리던 코드라 코랩에 업로드에 시간이 걸려서 우선 github 링크로 드리겠습니다.
https://github.com/Moonsu9158/EfficientDet
데이터의 경우 어떤 형식인지 보여드리기 위해 train, test각각 5개 정도만 업로드해두었고 tfrecord를 이용해주시면 감사하겠습니다
automl의 경우 파일을 한번에 깃허브에 올릴수가 없어서 코드에서 git clone을 하셔야합니다ㅠ 죄송합니다
혹시 업로드된 부분에 문제가 있다면 말씀해주세요 감사합니다