참고: https://docs.openvino.ai/2024/notebooks/ddcolor-image-colorization-with-output.html
Colorize grayscale images using DDColor and OpenVINO — OpenVINO™ documentation
Colorize grayscale images using DDColor and OpenVINO This Jupyter notebook can be launched after a local installation only. Image colorization is the process of adding color to grayscale images. Initially captured in black and white, these images are trans
docs.openvino.ai
지난번 예제는 맛보기라서 좀 어려운 예제였다고 생각한다.
그래서 이번엔 좀 이해하기 쉬운 예제를 골랐다. 흑백 이미지를 컬러로 바꿔주는 것이다.
DDcolor 라는 이름의 유래는 내부적으로 pixel decoder와 query-basd color decoder에서 나온 것일 것이다.
실습을 위해 항상 먼저 해야하는 것은 openvino_env 가상환경으로 들어가서 jupyter lab을 실행시키는 것이다.
아래는 예시이다.
openvino 설치 위치: C:\Intel\openvino_2024.2.0
openvino_env 가상환경 시작: openvino_env\scripts\activate
notebook 폴더 이동: cd openvino_notebooks
jupyter lab 시작: jupyter lab notebooks
이렇게 하면 수많은 notebook 예제 파일들이 나타나는데 이중에 ddcolor-image-...을 선택한다.
DDColor는 위와 같이 상당히 복잡한 구조를 가지는 모델이다.
예제는 다음 순서로 진행된다.
필요한 패키지 설치 -> pytorch 모델을 이용한 실습 -> pytorch 모델을 OpenVINO IR로 변환하여 OpenVINO에서 동작.
NNCF를 이용하여 OpenVINO 모델을 최적화 -> 최적화된 모델로 동작 -> 최적화 전후 비교
이제 실습을 해보자.
- 필요한 패키지 설치 및 git에서 DDColor 받아오기 (폴더가 생성된다)
- pytorch 모델을 이용하여 흑백 이미지를 컬러로 변환
우리는 ddcolor 모델중에서도 작은것을 사용할 것이다.
사진은 DDColor repo에 있는 예제를 사용하였다. (원래 그림보다 아래가 조금 잘렸다.)
이제 이 사진을 컬러로 바꾸어보자.
보기에 괜찮은가? 어? 여기 가본데 같은데... 아.. 요세미티에 있는 half dome이다. 진짜 장관인데...
시간은 약 10초 소요되었다.
이제 python model을 OpenVINO IR로 변환해 보자. OpenVINO를 사용하려면 이 과정을 늘 거쳐야하므로 익숙해지도록 하자.
처음 실행하면 ddcolor.xml이 없을 것이고 convert_model()로 pytorch의 ddcolor_model을 변환하고,
save_model로 ddcolor.xml, ddcolor.bin을 저장한뒤 이것을 이용해 컴파일한다.
ddcolor.cml, ddcolor.bin -> compiled_model
위에서는 두번째 실행했기 때문에 수행시간이 짧고, 실제로는 1분 내외로 소요된다.
여기서 잠깐, opencv 함수들에 대해서 언급한다.
cvtColor(): 이미지의 색공간(color space)를 변환한다. 색공간에는 BGR, RGB, YUV, Lab 등이 있다.
Lab에서 L은 luminosity(명도)를 의미한다.
compiled_model의 입력은 이미지를 lab형식으로 변경한 뒤 L만 빼서 RGB로 처리한 것이다.
lab 형식은 여기를 참고하자.
아래는 변환된 OpenVINO IR로 컬러 이미지를 만든 것이다.
위의 pytorch ddcolor 모델로 만들어낸 것보단 속도가 확실히 빠르다. (10s -> 3s)
이제부터 할 내용은, NNCF를 이용하여 최적화를 하고 이를 기존 IR과 비교해 볼 것이다.
NNCF는 neural network compression framework 의 약자로 OpenVINO toolkit에 포함되어 있다.
간단히 말하면, Quatization layer를 추가하고 입력을 맞춰줌으로써 FP32/FP16 대신 INT8로 연산하여
부하을 줄이도록 하는 것이다.
이것을 수행하기 위해서는,
calibration dataset을 만들어주고,
quantized model로 변환하고 저장하면 된다.
calibration을 위한 data를 가져와 변환한 뒤 calibration_data에 저장한다.
그리고, OpenVINO IR을 nncf로 quantization하여 새로운 모델을 만들고 저장한다.
그러면 이제 최적화한 모델로 색을 입혀보자.
그러면 FP16 모델과, INT8 모델을 실제 비교해보자.
그럼 성능은? 벤치마크 tool을 이용해서 측정해보자.
...
...
INT8 모델은 초당 3.51 프레임을 처리할 수 있다. 빠르긴 빠르네...
정리하면, 기존 pytorch 모델을 가지고 OpenVINO을 이용하여 흑백 이미지를 컬러로 변환하는 과정과,
OpenVINO 모델을 최적화하는 것을 실습해 보았다.
'AI > OpenVINO' 카테고리의 다른 글
3-4. Hello Object Detection (2) | 2024.07.12 |
---|---|
3-3. Frame interpolation using FILM and OpenVINO (0) | 2024.07.11 |
3-1. 3D Human Pose Estimation with OpenVINO (0) | 2024.07.08 |
3. OpenVINO 실습 (0) | 2024.07.08 |
2. OpenVINO 설치 (0) | 2024.07.08 |