Inception_v1모델을 사용중인데, 분류를 추가하기 위해서 추가 학습을 해야한다.

블로그에 나와있는 내용을 참고하고 수행하는데 오류가 있는 것 같아서 슬프다.

심지어 내 노트북은 GPU를 쓸 수 없는 그래픽 카드다.... 나름 비싸게 주고 샀는데... 헝!

 

충격받은 마음을 가다듬고, CPU연산으로도 딥러닝은 가능하니, GPU버전 말고 CPU버전으로 딥러닝을 시키는 것

그리고 기존에 학습시킨 모델을 바탕으로 추가학습 시켜보자

ModuleNotFoundError: No module named 'tensorflow'

문제해결방법 <1>

아나콘다 설치할 때 PATH를 설정하지 않은 사람이라면 환경변수 설정에 PATH변수를 

아나콘다가 설치된 폴더에 세미콜론을 (;) 꼭 붙혀서 PATH에 경로를 추가해준다.

 

문제해결방법 <2>

1) 아나콘다 prompt를 관리자 권한으로 연다.

2) activate tensorflow

3) conda install nb_conda

4) pip install matplotlib

python과 ipython 두 실행 파일이 각각 다른 콘다 환경에 설치되어있기 때문일지도 모른다는데.. 난 변수 문제였다...

1. 내가 사용할 이미지 준비하기.

새로운 동작 8가지를 이미 학습한 모델에 추가로 학습시킬 것이다. 새로 추가할 이미지가 있다면 새로 추가할 이미지를 해당 분류 라벨의 폴더에 넣고, TFRecord생성 과정을 다시 해야 한다.

경로는 SL2와 합치되, 파일 이름은 SL2_1로 하여 SL2와 혼동하지 않게 한다.

파일 내 경로를 기재하는 부분을 놓치지 말고 수정할 것.

추가할 이미지 8가지.

 

폴더 경로

2. 파이썬 파일 수정

(이 부분은 다른 이미지를 학습시킬 때 이 맥락대로 코드를 수정하면 된다)

2-1. download_and_convert_data.py

추가로 학습할 새 분류들을 TFRecord로 변환해야한다. 저장한 이미지 데이터셋을 다운로드하고 TFRecord형태로 변환시키는 코드인 download_and_convert_data.py를 수정한다. 

내가 사용할 키워드 관련 코드를 추가한다. 

2-2. silm\datasets\download_and_convert_SignLanguage2_1.py

validation, train, NUM_SHARDS 값 조절

-validaton  : 총 이미지 갯수 * 0.2 (보통 전체 이미지의 20%를 차지하게 한다)

-NUM_SHARDS :기존에 있던 맥락을 따른것인데, 보통 한 파일당 40MB정도 차지하도록 전체 이미지 용량*X=40MB로 X값을       NUM_SHARD로 설정한다.

2-3. SignLanguage2_1.py

 

기존 모델과 분류 이미지 갯수가 달라졌으니, 새로운 분류 이미지 갯수와 train, validation 값을 맞춰준다. 

2-4. dataset_factory.py

3. SL 이미지 변환

python download_and_convert_data.py --dataset_name=SignLanguage --dataset_dir=C:\SL\SignLanguage

 

4. 이미지 학습  (여기 부분만 dataset, 폴더 이름과 경로가 살짝 다름... 수정해서...)

미리 훈련된 모델에 플라워데이터 미세조정 학습시키기 
.tar 파일이 ImageNet이 미리 잘 학습 된 모델임
python train_image_classifier.py --train_dir=C:\SL\SignLanguage3\train_ResnetInceptionImageNet_FineTune_logs\1 --dataset_name=SignLanguage3 --dataset_split_name=train --dataset_dir=C:\SL\SignLanguage3 --model_name=inception_resnet_v2 --checkpoint_path=C:\SL\my_checkpoints\inception_resnet_v2.ckpt --checkpoint_exclude_scopes=InceptionResnetV2/Logits,InceptionResnetV2/AuxLogits --trainable_scopes=InceptionResnetV2/Logits,InceptionResnetV2/AuxLogits --max_number_of_steps=1000 --batch_size=16 --learning_rate=0.01  --learning_rate_decay_type=fixed --save_interval_secs=60 --save_summaries_secs=60 --log_every_n_steps=100 --optimizer=rmsprop --weight_decay=0.00004

 

4-1. 추가학습 

python train_image_classifier.py --train_dir=C:\SL\SignLanguage3\train_ResnetInceptionImageNet_FineTune_logs\2 --dataset_name=SignLanguage3 --dataset_split_name=train --dataset_dir=C:\SL\SignLanguage3 --model_name=inception_resnet_v2 --checkpoint_path=C:\SL\SignLanguage3\train_ResnetInceptionImageNet_FineTune_logs\1 --max_number_of_steps=1000 --batch_size=16 --learning_rate=0.0001 --learning_rate_decay_type=fixed --save_interval_secs=60 --save_summaries_secs=60 --log_every_n_steps=10 --optimizer=rmsprop --weight_decay=0.00004

 

5. 이미지 추론하기

python Image_Classification_SignLanguage2_1.py

의문인점.

이 부분에서 photos는 학습시킬 원본 이미지가 저장되어있는 폴더인데 그렇다면 추가학습이 아닌 SL2의 이미지를 식별하기 위해서 저 폴더가 필요했던 것일까? 그렇다면 내가 지금 학습시키고 있는 모델은 저 폴더의 경로를 기재해주지 않았으니 식별이 불가능한가?

 

6. 정확도 평가

python Image_classifier.py

 

7. 텐서보드

python -m tensorboard.main --logdir=[PATH_TO_LOGDIR]C:\SL\SignLanguage2\train_inception_v1_SL2_1_FineTune_logs\2all7

BELATED ARTICLES

more