본문 바로가기
-----ETC-----/C++ 고급 프로그래밍과 응용 프로젝트 시리즈

[C++ 고급 프로그래밍과 응용 프로젝트 시리즈] Day 29: 머신러닝을 위한 C++ 라이브러리 (TensorFlow, Caffe)

by cogito21_cpp 2024. 8. 1.
반응형

TensorFlow와 Caffe 소개

TensorFlow와 Caffe는 두 가지 주요 머신러닝 라이브러리입니다. TensorFlow는 Google에서 개발한 오픈 소스 머신러닝 프레임워크로, 다양한 머신러닝 모델을 쉽게 구현할 수 있습니다. Caffe는 Berkeley Vision and Learning Center에서 개발한 딥러닝 프레임워크로, 특히 이미지 처리에 강력한 성능을 보입니다.

 

TensorFlow C++ API 사용

TensorFlow는 주로 Python에서 사용되지만, C++ API도 제공합니다. 다음은 TensorFlow C++ API를 사용하여 간단한 텐서를 생성하고 조작하는 예제입니다.

 

1. TensorFlow 설치

TensorFlow C++ API를 사용하려면 TensorFlow 라이브러리를 빌드해야 합니다. 이는 시간이 오래 걸릴 수 있으므로 미리 설치된 바이너리를 사용하는 것이 좋습니다. 다음은 TensorFlow C++ API를 설정하는 과정입니다.

 

TensorFlow C++ 라이브러리 다운로드

wget https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-2.4.0.tar.gz
sudo tar -C /usr/local -xzf libtensorflow-cpu-linux-x86_64-2.4.0.tar.gz
sudo ldconfig

 

2. TensorFlow C++ 예제

다음은 TensorFlow C++ API를 사용하여 간단한 텐서를 생성하고 출력하는 예제입니다.

 

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(TensorFlowExample)

set(CMAKE_CXX_STANDARD 17)

find_package(TensorFlow REQUIRED)

add_executable(tensorflow_example main.cpp)
target_link_libraries(tensorflow_example tensorflow)

 

main.cpp

#include <iostream>
#include <tensorflow/core/framework/tensor.h>
#include <tensorflow/core/platform/env.h>

using namespace tensorflow;

int main() {
    Tensor tensor(DT_FLOAT, TensorShape({2, 3}));
    auto matrix = tensor.matrix<float>();

    matrix(0, 0) = 1.0;
    matrix(0, 1) = 2.0;
    matrix(0, 2) = 3.0;
    matrix(1, 0) = 4.0;
    matrix(1, 1) = 5.0;
    matrix(1, 2) = 6.0;

    std::cout << tensor.DebugString() << std::endl;

    return 0;
}

 

빌드 및 실행

mkdir build
cd build
cmake ..
make
./tensorflow_example

이 코드는 2x3 텐서를 생성하고 값을 할당한 후 출력합니다.

 

Caffe 사용

Caffe는 주로 이미지 처리에 강력한 성능을 보이는 딥러닝 프레임워크입니다. 다음은 Caffe를 사용하여 간단한 네트워크를 정의하고 실행하는 예제입니다.

 

1. Caffe 설치

Caffe를 설치하려면 다음 명령어를 사용합니다.

sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libatlas-base-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev

 

Caffe 소스 코드를 클론하고 빌드합니다.

git clone https://github.com/BVLC/caffe.git
cd caffe
cp Makefile.config.example Makefile.config
make all -j8
make test -j8
make runtest -j8

 

2. Caffe C++ 예제

다음은 Caffe를 사용하여 간단한 네트워크를 정의하고 실행하는 예제입니다.

 

CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(CaffeExample)

set(CMAKE_CXX_STANDARD 17)

find_package(Caffe REQUIRED)

add_executable(caffe_example main.cpp)
target_link_libraries(caffe_example ${Caffe_LIBRARIES})
include_directories(${Caffe_INCLUDE_DIRS})

 

main.cpp

#include <iostream>
#include <caffe/caffe.hpp>

using namespace caffe;

int main() {
    // Initialize the network
    Net<float> net("path_to_deploy.prototxt", TEST);
    net.CopyTrainedLayersFrom("path_to_model.caffemodel");

    // Input data
    std::vector<float> input_data(224 * 224 * 3, 1.0); // Example input data
    Blob<float>* input_blob = net.input_blobs()[0];
    input_blob->Reshape(1, 3, 224, 224);
    memcpy(input_blob->mutable_cpu_data(), input_data.data(), sizeof(float) * input_data.size());

    // Forward pass
    net.Forward();

    // Output results
    const float* output_data = net.output_blobs()[0]->cpu_data();
    for (int i = 0; i < 10; ++i) {
        std::cout << "Output[" << i << "]: " << output_data[i] << std::endl;
    }

    return 0;
}

 

빌드 및 실행

mkdir build
cd build
cmake ..
make
./caffe_example

 

이 코드는 Caffe 네트워크를 초기화하고, 예제 입력 데이터를 네트워크에 전달하여 결과를 출력합니다. path_to_deploy.prototxtpath_to_model.caffemodel 파일은 실제 모델 파일 경로로 대체해야 합니다.

 

이제 29일차의 학습을 마쳤습니다. TensorFlow와 Caffe를 사용하여 머신러닝 모델을 C++에서 구현하고 사용하는 방법을 학습하고 실습해보았습니다.

질문이나 피드백이 있으면 언제든지 댓글로 남겨 주세요. 내일은 "오픈 소스 프로젝트 참여 방법 및 기여"에 대해 학습하겠습니다.

반응형