8월, 2019의 게시물 표시

이미지 파일

이미지
- 이미지 학습시에 너무 용량이 큰 사진이여서 resizer.py를 이용하여 사진 크기를 줄이는 작업을 실행하였다. - 작업 실행 후 확인하여 보니 사진 크기는 줄어 들었으나 .xml 파일의 box의 크기와 위치는 는 수정 되지 않고 그대로 유지되어 엉뚱한 곳에 있는 것을 확인하였다. (왼쪽위의 resize된 사진과 위치 정보가 그대로인 box) (아무 생각 없이 사진 올렸다 혹시 몰라 제품 샘플 사진은 지웠다.) - resizer.py의 파일을 확인하면 opencv를 이용하여 사진의 크기를 줄이는 함수만 정의되어 있는 것을 확인 할 수 있다. - 그래서 개인적으로 임의의 함수를 만들어 파일을 수정하여 주었다. - 우선 파일의 내용을 불러오는 방법은 f.read() 방식을 이용하였다. f.readlines()를 이용하여 f = open(filename, 'r+') lines = f.readlines() for line in lines:     print(line) 위의 방식으로 수정을 하려 하였으나, 필요한 부분만 내용을 바꾸고 다시 저장하는 방식을 실현하는데에 좀 시간이 걸릴것 같아 그냥 무식하게 구현을 하였다. data = f.read() 를 사용하여 파일 안의 내용 모두를 그냥 한 변수안에 선언하였다. - 그 후 find()를 이용하여 필요한 부분을 잘라내고 필요한 값으로 변경하는 작업을 하였다. box의 정보를 얻기위해 find()와 rfind()를 이용하여 box의 x,y 좌표값을 알아내고 정정할수 있게 하였다. value = data[data.find('<xmin>')+6 : data.rfind('</xmin>')] value = float(value) * 0.5 value = int(value) data = data[ : data.find('<xmin>')+6] + str(value) + data[da

tensorflow 학습된 모델 평가하기(Classification)

이미지
➢ 학습을 진행하면 model.ckpt-* 파일들이 생성이 된다. ➢ 위의 파일들을 tensorflow 폴더에 있는 eval_image_classifier.py 파일을 이용하게 된다. (실행시 나타나는 결과 값) 아래쪽에 있는 Accuracy 값을 중점으로 보면 된다. ➢ 지금 나타나는 폴더 목록에서는 하나만 나타나 있지만 학습시 여러개의 파일들이 생성이 될 것이다. 이때 checkpoint 파일을 수정을 하지 않으면 계속해서 마지막 생성된 파일만 검사를 시행할 것이다. 그렇기에 자신이 원하는 ckpt를 검사하고 싶으면 checkpoint 파일을 수정하여 주면 된다. <예시> (수정 전) (수정 후) ➢ 그 후 eval_image_classifier.py 를 실행하여 주면 된다. $ python eval_image_classifier.py --alsologtostderr --checkpoint_path= /home/user/checkpoint/file/path/train_inception_v4_flower_FineTune_logs/all --dataset_dir= /tfrecord/file/path --dataset_name= flower --dataset_split_name=validation --model_name= inception_v4 (붉은색은 자신에게 맞게 바꾸어 준다.)

tensorflow classification 학습시 model 저장

이미지
tensorflow로 classification 학습시 일정 주기마다 model.ckpt를 저장하고 일정 갯수가 넘어가면 가장 오래된 파일을 지우고 새로 저장을 한다. 이때 total loss가 가장 낮은 상황일때 model을 저장하고 싶었다. tensorflow 폴더 안의 exporter.py를 비롯한 몇몇 파일을 이용하면 될 것 같으나 결국 방법을 찾지 못 하였다. 그래서 임의로 learning.py 파일에서 코드를 수정하고 추가하여 total loss를 비교하여 가장 낮을 때 따로 저장을 하게 하였다. 아래쪽에서 비교하기전 사용할 것들을 미리 선언 sv.save_path.rfind('model')을 통해 경로에서 model이라는 문자가 어디에 있는지 확인 < .find() 사용시 문자열의 앞부터 찾기 시작하며, .rfind()사용시 문자열의 뒤쪽부터 찾기 시작함> cutPath와 path_for_remove에 각각 경로를 자른 앞부분과 model을 저장할 경로를 지정하여 주었다. 위의 사진에서는 안 나왔으나 if not (os.path.isdir(path_for_remove)):     os.makedirs(path_for_remove) 를 이용하여 해당 경로가 없을 시 디렉토리를 생성하게 하였다. 그 후 위의 사진에서 보이듯이 디렉토리에 파일들이 있는지 검사하고 있으면 지우고, 없으면 해당 지점의 model을 저장하게 해 두었다.