2023.08.02 작성(https://sujungeee.github.io/posts/ai-DeepLearning-section3-1/)
※ 본 포스팅은 인프런 “차량 번호판 인식 프로젝트와 TensorFlow로 배우는 딥러닝 영상인식 올인원” 을 참고하여 작성하였습니다.
✅ tf.train.CheckpointManager API 를 이용해서 파라미터 저장하고 불러오기
- 파라미터를 저장하는 법
- tf.train.Checkpoint 클래스의 인자 값: 저장하고자 하는 tf.keras.Model 인스턴스와 전역 반복 횟수를 지정하여 선언ckpt= tf.train.Checkpoint(step= tf.Variable(0), model= CNN_model)
- tf.train.CheckpointManager 의 인자 값: ckpt, 중간 파라미터를 저장할 폴더 경로(directory), max_to_keep(가장 최근에 몇 개의 파일을 저장해서 남겨놓을 지를 지정)ckpt_manager= tf.train.CheckpointManager(ckpt, directory= SAVER_DIR, max_to_keep= 5)
- tf.train.CheckpointManager 의 save 메소드의 인자 값: 파라미터를 저장하고자 하는 시점에 해당 시점의 전역 반복 횟수ckpt_manager.save(checkpoint_numver= ckpt.step)
- tf.train.Checkpoint 의 전역 반복 횟수 값(ckpt.step or tf.Variable(0)) 을 매 반복마다 1씩 증가ckpt.step.assign_add(1)
- 파라미터를 불러오는 법불러오면 → 1. 이어서 학습 2. 바로 추론
- tf.train.latest_checkpoint 의 인자 값: 파라미터가 저장된 폴더 경로latest_ckpt= tf.train.latest_checkpoint(SAVER_DIR)
- → 가장 최근의 체크 포인트 파일의 경로(full path) 를 가져옴
- 선언한 tf.train.CheckpointManager 의 restore 함수의 인자 값: 불러올 체크 포인트 파일의 경로ckpt.restore(latest_ckpt)
✅ 텐서보드(TensorBoard) 를 이용해서 학습 과정 시각화(Visualization) 하기
- tf.summary 로그의 형태TensorBoard 의 대표적인 3 가지 형태의 API
- tf.summary.scalar: scalar 값 형태의 로그 저장
- tf.summary.histogram: histogram 형태의 로그 저장
- tf.summary.image: 이미지 형태의 로그 저장
- TensorBoard 를 사용하기 위한 2가지 과정
- 텐서보드 로그를 저장
- 인자 값으로 텐서보드 로그 파일을 저장할 경로를 지정해서 File Writer 생성summary_writer= tf.summary.create_file_writer(’./tensorboard_log’)
- 요약 정보를 남기고 싶은 값을 Writer Scope 내에서 tf.summary.* API 로 추가with summary_writer.as_default():
- tf.summary.scalar(’loss’, loss, step= optimizer.iterations)
- 텐서보드 실행 방법
- 텐서보드를 실행하는 터미널 명령어
tensorboard –logdir= path\to\log-directory - 웹브라우저에서 텐서보드의 실행 결과를 확인
localhost:6006
- 텐서보드를 실행하는 터미널 명령어
- 텐서보드 로그를 저장
✅ ResNet
- 핵심 아이디어: Degradation Problem 을 해결하기 위한 residual block architecture 를 제안하고 이의 정당성을 실험적으로 입증함
- Degradation Problem더 깊은 레이어일수록 파라미터 수가 증가하기 때문에 optimization 이 제대로 수행되지 않는 문제
- 레이어가 깊어질수록 성능이 떨어지는 현상이 관찰됨
- 트레이닝 에러에 대해서도 발생하는 현상이어서 오버피팅 문제가 아님
- Residual Block Architecture(Identity Mapping)input 의 shortcut 을 추가해서 최적화할 파라미터의 수를 줄임
- ⇒ 깊은 레이어임에도 불구하고 최적화할 파라미터 수가 줄기 때문에 성능이 개선됨
- ResNet 의 아이디어
- 늘어난 차원만큼 zero-padding 을 적용
- W_s 곱셈을 통해 차원 변경을 수행한 이후에 덧셈을 수행y= F(x, {W_i}) + W_s*x
Deeper Bottleneck Architectures1X1 Convolution 을 이용해서 연산량을 줄인 디자인
- ResNet 의 의의
- Identity Mapping 을 추가한 Shortcut 을 추가함으로써 Layer Depth 를 획기적으로 늘리는 창의적인 아이디어를 제안
- 이후 100-depth 이상의 깊은 CNN 모델 시대를 여는 시초가 됨
- Faster R-CNN 의 Backbone 을 VGG-16 에서 ResNet 으로 바꾸게 됨(?)
- 1202 depth 는 110 depth 와 비교하였을 때 오히려 error rate 가 높게 나옴
- ⇒ 오버피팅의 문제가 아닐까 하는 open problem 을 남김
✅ EfficientNet
- CNN 의 성능을 높일 수 있는 요소각 요소들의 scaling 에 집중
- baseline CNN 모델을 선택
- CNN 의 Width(필터의 개수) 를 늘림
- CNN 의 Depth(레이어의 개수) 를 늘림
- CNN 의 인풋 이미지의 Resolution(크기) 을 늘림
- Compound Scaling MethodWidth, Depth, Resolution 의 세 요소를 조화롭게 scaling
- 세 depth, width, resolution 을 적절히 설정하고, 𝜙 를 할당하면 𝜙 에 비례한 CNN 모델을 만들 수 있음
- 𝜙 이 작으면→ EfficientNet-B0: 성능은 떨어지지만 속도는 향상
- 𝜙 이 크면→ EfficientNet-B7: 성능은 향상되지만 속도는 떨어짐
- 각각의 요소를 설정하는 것보다 세 요소를 compound 하여 설정하면 천천히 saturation 이 이뤄짐
- Model Architecture & Experiments실제 문제에 적용할 때 기존 모델에 비해 훨씬 효율적
- 속도 향상
- 정확도 향상
- EfficientNet 의 의의
- 적은 수의 파라미터를 가지면서 좋은 성능을 보여주는 State-of-the-art(SOTA) CNN 모델을 제안
- Depth, Width, Resolution 을 조화롭게 늘리는 Compound Scaling Method 를 제안
'AI' 카테고리의 다른 글
| [딥러닝] 섹션4-1: RNN 개념 (0) | 2025.03.02 |
|---|---|
| [딥러닝] 섹션3-2: Pre-Trained CNN(2) (0) | 2025.03.02 |
| [딥러닝] 섹션2-2: CNN 표준 모델 (0) | 2025.03.02 |
| [딥러닝] 섹션2-1: CNN 개념 (0) | 2025.03.01 |
| [딥러닝] 섹션1-2: 텐서플로/컴퓨터비전 기초 (0) | 2025.03.01 |