ResNet18은 ImageNet 데이터로 학습된 모델이므로 따로 다시 학습을 진행하지는 않고 그대로 사용합니다. 이번 예제에서는 Model Zoo에서 ResNet50을 가져와 성능을 비교해봅니다.
이번 예제에서는 따로 학습을 진행하지는 않기 때문에 검증셋 데이터만 준비하면 됩니다. ImageNet Validation Dataset은 다음과 같이 준비합니다.
Torrent로 2012년 검증셋 데이터 다운받기 (Link)
./modelzoo/ImageNet/val_dataset/
폴더를 만들어 이곳에 ILSVRC2012_img_val.tar
파일 이동
{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
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/
eval_resnet50.py
파일을 이용하여 원래 모델(FP32)과 양자화된 모델(INT8)에 대한 성능 평가를 실행합니다. 실행하면 다음과 같은 순서로 동작합니다.
- FP32 모델 불러오기
tensorflow.keras.applications API를 이용하여 Model Zoo로부터 가져온 파일을 이용하여 FP32 모델을 불러옵니다.
- FP32 모델 성능 평가
val_dataset
폴더에 있는 이미지를 이용하여 top1, top5 평균 예측 정확도를 측정합니다.
- Quantization
FP32 모델을 INT8 모델로 양자화하여 저장하는 Quantization 프로세스를 실행합니다.
- INT8 모델 성능 평가
val_dataset
폴더에 있는 이미지를 이용하여 top1, top5 평균 예측 정확도를 측정합니다.
이 과정은 다음과 같이 입력하여 실행할 수 있습니다.
source ./run_all.sh quantize_resnet50_imagenet
실행하면 다음과 같이 모델의 구성과 성능 검증 결과를 확인할 수 있습니다.
[DB INFO] Get ResNet50 CNN pre-trained on ImageNet...
...(중략)
==================================================================================================
Total params: 25,636,712
Trainable params: 25,583,592
Non-trainable params: 53,120
__________________________________________________________________________________________________
[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
[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.
[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
DPU에서 모델을 실행할 수 있는 .xmodel
파일을 만들 수 있도록 컴파일 과정을 실행합니다.
다음 명령어를 실행하여 컴파일을 진행할 수 있습니다.
source ./run_all.sh compile_resnet50_imagenet
ResNet18 모델에 대한 작업도 ResNet50과 유사합니다.
- FP32 모델 불러오기
Colab Classifiers로 부터 FP32 모델 불러오기
- FP32 모델 성능 평가
val_dataset
폴더에 있는 이미지를 이용하여 top1, top5 평균 예측 정확도를 측정합니다.
- Quantization
FP32 모델을 INT8 모델로 양자화하여 저장하는 Quantization 프로세스를 실행합니다.
- INT8 모델 성능 평가
val_dataset
폴더에 있는 이미지를 이용하여 top1, top5 평균 예측 정확도를 측정합니다.
마찬가지로 다음과 같이 명령어를 입력하여 실행합니다.
source ./run_all.sh quantize_resnet18_imagenet
실행하면 ResNet50과 마찬가지로 모델의 구성과 성능 검증 결과를 확인할 수 있습니다.
[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
__________________________________________________________________________________________________
[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
[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.
[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
DPU에서 모델을 실행할 수 있는 .xmodel
파일을 만들 수 있도록 컴파일 과정을 실행합니다.
다음 명령어를 실행하여 컴파일을 진행할 수 있습니다.
source ./run_all.sh compile_resnet18_imegenet
5.2
5.3
과정을 수행하면 다음과 같이 파일들을 얻을 수 있습니다.
.xmodel
파일 생성다음과 같이 run_all.sh
파일에 코드를 추가하면 CIFAR10 예제처럼 그래프로 모델의 구성을 확인할 수 있습니다.
source analyze_graphs_imagenet