add math and macros

pull/2524/head
Hui Zhang 2 years ago
parent 532b620454
commit b621b5b974

@ -22,6 +22,7 @@ link_directories("${PADDLE_LIB_THIRD_PARTY_PATH}xxhash/lib")
link_directories("${PADDLE_LIB_THIRD_PARTY_PATH}cryptopp/lib")
link_directories("${PADDLE_LIB}/paddle/lib")
link_directories("${PADDLE_LIB_THIRD_PARTY_PATH}mklml/lib")
link_directories("${PADDLE_LIB_THIRD_PARTY_PATH}mkldnn/lib")
##paddle with mkl
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
@ -29,14 +30,16 @@ set(MATH_LIB_PATH "${PADDLE_LIB_THIRD_PARTY_PATH}mklml")
include_directories("${MATH_LIB_PATH}/include")
set(MATH_LIB ${MATH_LIB_PATH}/lib/libmklml_intel${CMAKE_SHARED_LIBRARY_SUFFIX}
${MATH_LIB_PATH}/lib/libiomp5${CMAKE_SHARED_LIBRARY_SUFFIX})
set(MKLDNN_PATH "${PADDLE_LIB_THIRD_PARTY_PATH}mkldnn")
include_directories("${MKLDNN_PATH}/include")
set(MKLDNN_LIB ${MKLDNN_PATH}/lib/libmkldnn.so.0)
set(EXTERNAL_LIB "-lrt -ldl -lpthread")
# global vars
set(DEPS ${PADDLE_LIB}/paddle/lib/libpaddle_inference${CMAKE_SHARED_LIBRARY_SUFFIX} CACHE FORCE "DEPS")
set(DEPS ${PADDLE_LIB}/paddle/lib/libpaddle_inference${CMAKE_SHARED_LIBRARY_SUFFIX} CACHE INTERNAL "deps")
set(DEPS ${DEPS}
${MATH_LIB} ${MKLDNN_LIB}
glog gflags protobuf xxhash cryptopp
${EXTERNAL_LIB} CACHE FORCE "DEPS")
${EXTERNAL_LIB} CACHE INTERNAL "deps")
message(STATUS "Deps libraries: ${DEPS}")

@ -38,3 +38,6 @@
#include "base/flags.h"
#include "base/log.h"
#include "base/macros.h"
#include "utils/file_utils.h"
#include "utils/math.h"

@ -14,6 +14,9 @@
#pragma once
#include <limits>
#include <string>
namespace ppspeech {
#ifndef DISALLOW_COPY_AND_ASSIGN
@ -22,4 +25,8 @@ namespace ppspeech {
void operator=(const TypeName&) = delete
#endif
} // namespace pp_speech
constexpr float kFloatMax = std::numeric_limits<float>::max();
const std::string kSpaceSymbol = "\xe2\x96\x81";
} // namespace ppspeech

@ -18,6 +18,7 @@ set(BINS
tlg_decoder_main
)
message(STATUS "xxxxxxxxxx: " ${DEPS})
foreach(bin_name IN LISTS BINS)
add_executable(${bin_name} ${CMAKE_CURRENT_SOURCE_DIR}/${bin_name}.cc)
target_include_directories(${bin_name} PRIVATE ${SPEECHX_ROOT} ${SPEECHX_ROOT}/kaldi)

@ -56,7 +56,9 @@ DEFINE_int32(max_active, 7500, "max active");
DEFINE_double(beam, 15.0, "decoder beam");
DEFINE_double(lattice_beam, 7.5, "decoder beam");
namespace ppspeech {
// todo refactor later
FeaturePipelineOptions InitFeaturePipelineOptions() {
FeaturePipelineOptions opts;
@ -115,4 +117,5 @@ RecognizerResource InitRecognizerResoure() {
resource.tlg_opts = InitDecoderOptions();
return resource;
}
}
} // namespace ppspeech

@ -0,0 +1,82 @@
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "utils/math.h"
#include "base/common.h"
#include <cmath>
#include <algorithm>
#include <utility>
#include <queue>
namespace ppspeech {
// Sum in log scale
float LogSumExp(float x, float y) {
if (x <= -kFloatMax) return y;
if (y <= -kFloatMax) return x;
float max = std::max(x, y);
return max + std::log(std::exp(x - max) + std::exp(y - max));
}
// greater compare for smallest priority_queue
template <typename T>
struct ValGreaterComp {
bool operator()(const std::pair<T, int32_t>& lhs, const std::pair<T, int32_>& rhs) const {
return lhs.first > rhs.first || (lhs.first == rhs.first && lhs.second < rhs.second);
}
}
template<typename T>
void TopK(const std::vector<T>& data, int32_t k, std::vector<T>* values, std::vector<int>* indices) {
int n = data.size();
int min_k_n = std::min(k, n);
// smallest heap, (val, idx)
std::vector<std::pair<T, int32_t>> smallest_heap;
for (int i = 0; i < min_k_n; i++){
smallest_heap.emplace_back(data[i], i);
}
// smallest priority_queue
std::priority_queue<std::pair<T, int32_t>, std::vector<std::pair<T, int32_t>>, ValGreaterComp<T>> pq(ValGreaterComp<T>(), std::move(smallest_heap));
// top k
for (int i = k ; i < n; i++){
if (pq.top().first < data[i]){
pq.pop();
pq.emplace_back(data[i], i);
}
}
values->resize(min_k_n);
indices->resize(min_k_n);
// from largest to samllest
int cur = values->size() - 1;
while(!pq.empty()){
const auto& item = pq.top();
pq.pop();
(*values)[cur] = item.first;
(*indices)[cur] = item.second;
cur--;
}
}
} // namespace ppspeech

@ -0,0 +1,28 @@
// Copyright (c) 2022 PaddlePaddle Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include <vector>
#include <cstdint>
namespace ppspeech {
// Sum in log scale
float LogSumExp(float x, float y);
template<typename T>
void TopK(const std::vector<T>& data, int32_t k, std::vector<T>* values, std::vector<int>* indices);
} // namespace ppspeech
Loading…
Cancel
Save