Closed jiapei100 closed 10 months ago
解决了吗
@lanhong123 嗯嗯... 我直接略过了... 视频在这里 https://www.youtube.com/watch?v=NQCs-tEwwWE
总之就是:
有点忘记了...总之搞了近1个星期...
谢谢你的的回答,我刚才找到了原因,我用的是jetsonnao的JetsonNanoUb20_3b.img镜像,想手动添加jetbot库,出现了以上问题,发现是jetbot/ssd_tensorrt/FlattenConcat.cpp里面的一些版本不适配问题导致的,根据问题一条条修改,最后成功安装并运行了Jetbot,修改后的/FlattenConcat.cpp如下:
do \
{ \
auto ret = (status); \
if (ret != 0) \
{ \
std::cout << "Cuda failure: " << ret; \
abort(); \
} \
} while (0)
using namespace nvinfer1;
namespace { const char FLATTENCONCAT_PLUGIN_VERSION{"1"}; const char FLATTENCONCAT_PLUGIN_NAME{"FlattenConcat_TRT_jetbot"}; }
class FlattenConcat : public IPluginV2 { public: FlattenConcat() {}
FlattenConcat(const int* flattenedInputSize, int numInputs, int flattenedOutputSize)
: mFlattenedOutputSize(flattenedOutputSize)
{
for (int i = 0; i < numInputs; ++i)
mFlattenedInputSize.push_back(flattenedInputSize[i]);
}
FlattenConcat(const void* data, size_t length)
{
const char* d = reinterpret_cast<const char*>(data);
const char* a = d;
size_t numInputs = read<size_t>(d);
for (size_t i = 0; i < numInputs; ++i)
{
mFlattenedInputSize.push_back(read<int>(d));
}
mFlattenedOutputSize = read<int>(d);
assert(d == a + length);
}
int32_t getNbOutputs() const noexcept override
{
return 1;
}
Dims getOutputDimensions(int32_t index, const Dims* inputs, int32_t nbInputDims) noexcept override
{
assert(nbInputDims >= 1);
assert(index == 0);
size_t flattenedOutputSize = 0;
int32_t inputVolume = 0;
for (int32_t i = 0; i < nbInputDims; ++i)
{
assert(inputs[i].nbDims == 3);
inputVolume = inputs[i].d[0] * inputs[i].d[1] * inputs[i].d[2];
flattenedOutputSize += inputVolume;
}
Dims dims;
dims.nbDims = 3;
dims.d[0] = flattenedOutputSize;
dims.d[1] = 1;
dims.d[2] = 1;
return dims;
}
int32_t initialize() noexcept override
{
CHECK(cublasCreate(&mCublas));
return 0;
}
void terminate() noexcept override
{
CHECK(cublasDestroy(mCublas));
}
size_t getWorkspaceSize(int32_t maxBatchSize) const noexcept override
{
return 0;
}
int32_t enqueue(int32_t batchSize, const void* const* inputs, void* const* outputs, void* workspace, cudaStream_t stream) noexcept override
{
size_t inputOffset = 0;
float* output = reinterpret_cast<float*>(outputs[0]);
for (size_t i = 0; i < mFlattenedInputSize.size(); ++i)
{
const float* input = reinterpret_cast<const float*>(inputs[i]);
for (int32_t batchIdx = 0; batchIdx < batchSize; ++batchIdx)
{
CHECK(cublasScopy(mCublas, mFlattenedInputSize[i],
input + batchIdx * mFlattenedInputSize[i], 1,
output + (batchIdx * mFlattenedOutputSize + inputOffset), 1));
}
inputOffset += mFlattenedInputSize[i];
}
return 0;
}
size_t getSerializationSize() const noexcept override
{
size_t size = sizeof(mFlattenedInputSize[0]) * mFlattenedInputSize.size()
+ sizeof(mFlattenedOutputSize)
+ sizeof(size_t);
return size;
}
void serialize(void* buffer) const noexcept override
{
char* d = reinterpret_cast<char*>(buffer);
char* a = d;
size_t numInputs = mFlattenedInputSize.size();
write(d, numInputs);
for (size_t i = 0; i < numInputs; ++i)
{
write(d, mFlattenedInputSize[i]);
}
write(d, mFlattenedOutputSize);
assert(d == a + getSerializationSize());
}
void configureWithFormat(const Dims* inputs, int32_t nbInputs, const Dims* outputDims, int32_t nbOutputs, DataType type, PluginFormat format, int32_t maxBatchSize) noexcept override
{
assert(nbOutputs == 1);
mFlattenedInputSize.clear();
mFlattenedOutputSize = 0;
for (int32_t i = 0; i < nbInputs; ++i)
{
int32_t inputVolume = 0;
assert(inputs[i].nbDims == 3);
for (size_t dim = 1; dim < 3; dim++)
{
assert(inputs[i].d[dim] == inputs[0].d[dim]);
}
inputVolume = inputs[i].d[0] * inputs[i].d[1] * inputs[i].d[2];
mFlattenedInputSize.push_back(inputVolume);
mFlattenedOutputSize += mFlattenedInputSize[i];
}
}
bool supportsFormat(DataType type, PluginFormat format) const noexcept override
{
return (type == DataType::kFLOAT);
}
const char* getPluginType() const noexcept override { return FLATTENCONCAT_PLUGIN_NAME; }
const char* getPluginVersion() const noexcept override { return FLATTENCONCAT_PLUGIN_VERSION; }
void destroy() noexcept override {}
IPluginV2* clone() const noexcept override
{
return new FlattenConcat(mFlattenedInputSize.data(), static_cast<int>(mFlattenedInputSize.size()), mFlattenedOutputSize);
}
void setPluginNamespace(const char* pluginNamespace) noexcept override
{
mPluginNamespace = pluginNamespace;
}
const char* getPluginNamespace() const noexcept override
{
return mPluginNamespace.c_str();
}
private:
template
template <typename T>
T read(const char*& buffer) noexcept
{
T val = *reinterpret_cast<const T*>(buffer);
buffer += sizeof(T);
return val;
}
std::vector<int32_t> mFlattenedInputSize;
int32_t mFlattenedOutputSize{0};
cublasHandle_t mCublas;
std::string mPluginNamespace = "";
};
class FlattenConcatPluginCreator : public IPluginCreator { public: FlattenConcatPluginCreator() { mFC.nbFields = 0; mFC.fields = 0; }
~FlattenConcatPluginCreator() {}
const char* getPluginName() const noexcept override { return FLATTENCONCAT_PLUGIN_NAME; }
const char* getPluginVersion() const noexcept override { return FLATTENCONCAT_PLUGIN_VERSION; }
const PluginFieldCollection* getFieldNames() noexcept override { return &mFC; }
IPluginV2* createPlugin(const char* name, const PluginFieldCollection* fc) noexcept override
{
return new FlattenConcat();
}
IPluginV2* deserializePlugin(const char* name, const void* serialData, size_t serialLength) noexcept override
{
return new FlattenConcat(serialData, serialLength);
}
void setPluginNamespace(const char* pluginNamespace) noexcept override
{
mPluginNamespace = pluginNamespace;
}
const char* getPluginNamespace() const noexcept override
{
return mPluginNamespace.c_str();
}
private: static PluginFieldCollection mFC; std::string mPluginNamespace = ""; };
PluginFieldCollection FlattenConcatPluginCreator::mFC{};
REGISTER_TENSORRT_PLUGIN(FlattenConcatPluginCreator);
[Uploading FlattenConcat.txt…]()