Vitis AI Tutorial #3 - ImageNet Dataset

OilyHand·2024년 2월 29일
0

Vitis AI Tutorials

목록 보기
3/3
post-thumbnail

5. ImageNet Dataset

 ResNet18은 ImageNet 데이터로 학습된 모델이므로 따로 다시 학습을 진행하지는 않고 그대로 사용합니다. 이번 예제에서는 Model Zoo에서 ResNet50을 가져와 성능을 비교해봅니다.

5.1. 데이터 준비하기

 이번 예제에서는 따로 학습을 진행하지는 않기 때문에 검증셋 데이터만 준비하면 됩니다. ImageNet Validation Dataset은 다음과 같이 준비합니다.

5.1.1. ImageNet 2012 Validation Set 다운로드

  1. Torrent로 2012년 검증셋 데이터 다운받기 (Link)

  2. ./modelzoo/ImageNet/val_dataset/ 폴더를 만들어 이곳에 ILSVRC2012_img_val.tar 파일 이동

5.1.2. The “short val.txt” file

{WRK_DIR}/modelzoo/ImageNet에 있는 val.txt 파일은 500개의 이미지에 대한 정보만 있습니다. 하지만 실제로 validation dataset에는 50000개의 이미지가 있습니다. 그래서 val.txt 파일에 맞게 이미지를 남기기 위해 imagenet_val_dataset.py를 실행하여 데이터를 준비해야 합니다.

 이미지 데이터를 val.txt에 맞게 준비하는 과정은 다음과 같은 순서로 진행합니다.

## 1. 디렉터리 만들기
mkdir val_dataset

## 2. tar 파일 압축 풀기
tar -xvf ILSVRC2012_img_val.tar -C ./val_dataset > /dev/null

## 3. imagenet_val_dataset.py 실행하기
# 성공적으로 완료되면 val_dataset.zip 파일이 생성됩니다.
python3 ./imagenet_val_dataset.py

# 4. ../../target/imagenet 으로 복사하고 압축풀기
cp -i val_dataset.zip ../../target/imagenet
cd ../../target/imagenet
unzip -o -q val_dataset.zip

실행 결과

 

5.2. ResNet50

5.2.1 ResNet50 모델 준비

ResNet50 모델은 Vitis AI Model Zoo에 포함되어 있습니다. 다음 디렉터리에 있는 내용을 복사하여 ResNet50 모델을 준비합니다.

복사할 디렉터리
/workspace/model_zoo/model-list/tf2_resnet50_3.5/

붙여넣을 디렉터리 경로
/workspace/tutorials/RESNET18/files/modelzoo/

cd /workspace/
cp -r ./model_zoo/model-list/tf2_resnet50_3.5/ ./tutorials/RESNET18/files/modelzoo/

5.2.2. 모델 양자화 및 평가하기

eval_resnet50.py 파일을 이용하여 원래 모델(FP32)과 양자화된 모델(INT8)에 대한 성능 평가를 실행합니다. 실행하면 다음과 같은 순서로 동작합니다.

  1. FP32 모델 불러오기
    tensorflow.keras.applications API를 이용하여 Model Zoo로부터 가져온 파일을 이용하여 FP32 모델을 불러옵니다.
  1. FP32 모델 성능 평가
    val_dataset 폴더에 있는 이미지를 이용하여 top1, top5 평균 예측 정확도를 측정합니다.
  1. Quantization
    FP32 모델을 INT8 모델로 양자화하여 저장하는 Quantization 프로세스를 실행합니다.
  1. INT8 모델 성능 평가
    val_dataset 폴더에 있는 이미지를 이용하여 top1, top5 평균 예측 정확도를 측정합니다.

이 과정은 다음과 같이 입력하여 실행할 수 있습니다.

source ./run_all.sh quantize_resnet50_imagenet

실행하면 다음과 같이 모델의 구성과 성능 검증 결과를 확인할 수 있습니다.

1. FP32 모델 불러오기

[DB INFO] Get ResNet50 CNN pre-trained on ImageNet...

...(중략)

==================================================================================================
Total params: 25,636,712
Trainable params: 25,583,592
Non-trainable params: 53,120
__________________________________________________________________________________________________

2. FP32 모델 성능 평가

[DB INFO] Evaluate Average Prediction Accuracy of ResNet50 CNN...

...(중략)

10/10 [==============================] - 6s 251ms/step - loss: 1.0644 - sparse_categorical_accuracy: 0.7540 - sparse_top_k_categorical_accuracy: 0.9240
Original  ResNet50 top1, top5:  0.7540000081062317 0.9240000247955322

3. Quantization

[DB INFO] Vitis AI PT Quantization of ResNet50 CNN...

[VAI INFO] Using func format quantizer
[VAI INFO] Quantizing without specific `target`.
[VAI INFO] Start CrossLayerEqualization...
10/10 [==============================] - 12s 1s/step
[VAI INFO] CrossLayerEqualization Done.
[VAI INFO] Start Quantize Calibration...

2/2 [==============================] - 27s 1s/step
[VAI INFO] Quantize Calibration Done.
[VAI INFO] Start Post-Quant Model Refinement...
[VAI INFO] Start Quantize Position Ajustment...
[VAI INFO] Quantize Position Ajustment Done.
[VAI INFO] Post-Quant Model Refninement Done.
[VAI INFO] Start Model Finalization...
[VAI INFO] Model Finalization Done.
[VAI INFO] Quantization Finished.
WARNING:tensorflow:Compiled the loaded model, but the compiled metrics have yet to be built. `model.compile_metrics` will be empty until you train or evaluate the model.

4. INT8 모델 성능 평가

[DB INFO] Evaluation of ResNet50 Quantized Model...

16/16 [==============================] - 7s 226ms/step - loss: 1.0799 - sparse_categorical_accuracy: 0.7500 - sparse_top_k_categorical_accuracy: 0.9260
Quantized ResNet50 top1, top5:  0.75 0.9259999990463257

5.2.3. 모델 컴파일

DPU에서 모델을 실행할 수 있는 .xmodel 파일을 만들 수 있도록 컴파일 과정을 실행합니다.

다음 명령어를 실행하여 컴파일을 진행할 수 있습니다.

source ./run_all.sh compile_resnet50_imagenet

5.3. ResNet18

5.3.1. 모델 양자화 및 평가하기

ResNet18 모델에 대한 작업도 ResNet50과 유사합니다.

  1. FP32 모델 불러오기
    Colab Classifiers로 부터 FP32 모델 불러오기
  1. FP32 모델 성능 평가
    val_dataset 폴더에 있는 이미지를 이용하여 top1, top5 평균 예측 정확도를 측정합니다.
  1. Quantization
    FP32 모델을 INT8 모델로 양자화하여 저장하는 Quantization 프로세스를 실행합니다.
  1. INT8 모델 성능 평가
    val_dataset 폴더에 있는 이미지를 이용하여 top1, top5 평균 예측 정확도를 측정합니다.

마찬가지로 다음과 같이 명령어를 입력하여 실행합니다.

source ./run_all.sh quantize_resnet18_imagenet

실행하면 ResNet50과 마찬가지로 모델의 구성과 성능 검증 결과를 확인할 수 있습니다.

1. FP32 모델 불러오기

[DB INFO] Get ResNet18 CNN pre-trained on ImageNet...

Model: "model"
__________________________________________________________________________________________________
 Layer (type)                   Output Shape         Param #     Connected to
==================================================================================================
 data (InputLayer)              [(None, 224, 224, 3  0           []
                                )]

 bn_data (BatchNormalization)   (None, 224, 224, 3)  9           ['data[0][0]']

...(중략)

==================================================================================================
Total params: 11,699,889
Trainable params: 11,691,947
Non-trainable params: 7,942
__________________________________________________________________________________________________

2. FP32 모델 성능 평가

[DB INFO] Evaluate Average Prediction Accuracy of ResNet18 CNN...

10/10 [==============================] - 5s 290ms/step - loss: 1.2996 - sparse_categorical_accuracy: 0.6900 - sparse_top_k_categorical_accuracy: 0.9080
Original  ResNet18 top1, top5:  0.6899999976158142 0.9079999923706055

3. Quantization

[DB INFO] Vitis AI PT Quantization of ResNet18 CNN...

[VAI INFO] Using func format quantizer
[VAI INFO] Quantizing without specific `target`.
[VAI INFO] Start CrossLayerEqualization...
10/10 [==============================] - 6s 677ms/step
[VAI INFO] CrossLayerEqualization Done.
[VAI INFO] Start Quantize Calibration...
2/2 [==============================] - 14s 862ms/step
[VAI INFO] Quantize Calibration Done.
[VAI INFO] Start Post-Quant Model Refinement...
[VAI INFO] Start Quantize Position Ajustment...
[VAI INFO] Quantize Position Ajustment Done.
[VAI INFO] Post-Quant Model Refninement Done.
[VAI INFO] Start Model Finalization...
[VAI INFO] Model Finalization Done.
[VAI INFO] Quantization Finished.

4. INT8 모델 성능 평가

[DB INFO] Evaluation of ResNet18 Quantized Model...

16/16 [==============================] - 4s 107ms/step - loss: 1.6785 - sparse_categorical_accuracy: 0.6420 - sparse_top_k_categorical_accuracy: 0.8740
Quantized ResNet18 top1, top5:  0.6420000195503235 0.8740000128746033

5.3.2. 모델 컴파일

DPU에서 모델을 실행할 수 있는 .xmodel 파일을 만들 수 있도록 컴파일 과정을 실행합니다.

다음 명령어를 실행하여 컴파일을 진행할 수 있습니다.

source ./run_all.sh compile_resnet18_imegenet

5.4 결과 확인

5.2 5.3 과정을 수행하면 다음과 같이 파일들을 얻을 수 있습니다.

5.4.1. 생성된 파일

  1. FP32 불러오기
  2. Quantization을 실행하여 INT8 모델 생성
  3. Compile을 실행하여 .xmodel 파일 생성

5.4.2. 그래프로 모델 확인

다음과 같이 run_all.sh 파일에 코드를 추가하면 CIFAR10 예제처럼 그래프로 모델의 구성을 확인할 수 있습니다.

source analyze_graphs_imagenet

5.5. Run on the Target Board

profile
Electrical Engineering

0개의 댓글