概要
Stable Diffusionは「入力されたテキスト」をもとに画像を生成する訓練済のAIモデルです。
ncnnで、入力されたテキストからアニメ絵への生成をしてみます。
環境構築
まず、M5UnitV2のクロスコンパイル環境を構築する手順で、ncnnやOpenCVをUbuntuにインストールします。
Ubuntu 22.04.3 LTS(x64)
OpenCV ver 0.4.4
ncnn ver 231027
Stable-Diffusionのダウンロード
GitHubからfengwang氏のStable-Diffusion-NCNNのコードをダウンロードします。
$ git clone https://github.com/fengwang/Stable-Diffusion-NCNN
$ cd Stable-Diffusion-NCNN
CMakeLists.txt ファイルの作成
cmakeでコンパイルするために、CMakeLists.txtを編集します。
gedit CMakeLists.txt
CMakeLists.txt
SET(CMAKE_BUILD_TYPE "Debug")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -std=c++17 -O0 -Wall -g2 -ggdb")
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -std=c++17 -O3 -Wall")
#SET(TARGET_COMPILER "arm")
if(TARGET_COMPILER STREQUAL "arm")
message(STATUS "TARGET_COMPILE STREQUAL arm")
SET(CMAKE_CXX_COMPILER arm-none-linux-gnueabihf-g++)
SET(CMAKE_C_COMPILER arm-none-linux-gnueabihf-gcc)
SET(NCNN_INSTALL_DIR /opt/external/ncnn/install/arm/)
SET(ZBAR_INSTALL_DIR /opt/external/zbar-0.10/build/arm)
SET(OpenCV_DIR /opt/external/opencv/build/arm)
else()
message(STATUS "TARGET_COMPILE STREQUAL X64")
SET(NCNN_INSTALL_DIR /opt/external/ncnn/install/x64/)
SET(ZBAR_INSTALL_DIR /opt/external/zbar-0.10/build/x64/)
SET(OpenCV_DIR /opt/external/opencv/build/x64)
endif()
set(Target "Stable-Diffusion")
PROJECT(${Target})
cmake_minimum_required(VERSION 3.5)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/bin)
find_package(OpenCV REQUIRED)
if(OpenCV_FOUND)
message(OPENCV_VERSION)
message(STATUS "OpenCV_LIBS: ${OpenCV_LIBS}")
message(STATUS "OpenCV_INCLUDE_DIRS: ${OpenCV_INCLUDE_DIRS}")
endif(OpenCV_FOUND)
include_directories(${OpenCV_INCLUDE_DIRS} )
include_directories(${PROJECT_SOURCE_DIR})
include_directories(${PROJECT_SOURCE_DIR}/include)
include_directories(${NCNN_INSTALL_DIR}/include)
add_executable(${Target}
test.cpp
)
target_link_libraries(${Target} ${OpenCV_LIBRARIES})
target_link_libraries(${Target} ${NCNN_INSTALL_DIR}/lib/libncnn.a -fopenmp)
学習モデルのダウンロード
このリポジトリのReleaseページより、学習モデルのダウンロードしてassetsフォルダに格納します。
$ wget https://github.com/fengwang/Stable-Diffusion-NCNN/releases/download/release/assets.20221204.tar.zst
$ zstd -dc assets.20221204.tar.zst | tar -xf -
ビルド
Ubuntu用のバイナリをcmakeでコンパイルして、生成されたバイナリを実行します。
celeba/face_paint_512_v1/face_paint_512_v2という異なる学習モデルで生成された3枚のアニメ絵が作成されます。
$ cmake .
$ make
$ ./bin/Stable_Diffusion
注記
Stable Diffusionは大容量のメモリを消費するため、M5UnitV2で動作させることは困難です。
参考資料
この記事を作成するにあたり、以下のウェブサイトを参考にしました。