如何在新版本caffe里添加新的一层

发布网友 发布时间:2022-04-23 05:34

我来回答

3个回答

懂视网 时间:2022-05-15 11:03

本文主要为大家分享一篇P关于Layer组件的同步以及减少GPU带宽的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧。

问题:

1) Layer 之间能否进行单独更新,比如其中video 层上面弹出的状态栏场景如何优化;

初步构想每次仅更新video layer或则将video layer 绕过BQ 进行处理。

2)FW 以及GPU对video layer 的常见处理;

3)几个变量的理解;

(1)mCurrentTexture ,nextTextureImage;

(2)BufferItem,BufferQueue,mslots;slot,mqueuedframe,mqueuedItem;

(3)syncForReleaseLocked,updateAndReleaseLocked,releaseBufferLocked,releaseBuffer

(4)

/ acquireBuffer attempts to acquire ownership of the next pending buffer in the BufferQueue.
 // If no buffer is pending then it returns NO_BUFFER_AVAILABLE. If a buffer is successfully
 // acquired, the information about the buffer is returned in BufferItem.
 //
 // If the buffer returned had previously been acquired then the BufferItem::mGraphicBuffer field
 // of buffer is set to NULL and it is assumed that the consumer still holds a reference to the
 // buffer.
 //
 // If presentWhen is non-zero, it indicates the time when the buffer will be displayed on
 // screen. If the buffer's timestamp is farther in the future, the buffer won't be acquired, and
 // PRESENT_LATER will be returned. The presentation time is in nanoseconds, and the time base
 // is CLOCK_MONOTONIC.
 //
 // If maxFrameNumber is non-zero, it indicates that acquireBuffer should only return a buffer
 // with a frame number less than or equal to maxFrameNumber. If no such frame is available
 // (such as when a buffer has been replaced but the consumer has not received the
 // onFrameReplaced callback), then PRESENT_LATER will be returned.
 //
 // Return of NO_ERROR means the operation completed as normal.
 //
 // Return of a positive value means the operation could not be completed at this time, but the
 // user should try again later:
 // * NO_BUFFER_AVAILABLE - no buffer is pending (nothing queued by producer)
 // * PRESENT_LATER - the buffer's timestamp is farther in the future
 //
 // Return of a negative value means an error has occurred:
 // * INVALID_OPERATION - too many buffers have been acquired
 // Returned by releaseBuffer, after which the consumer must free any references to the
  // just-released buffer that it might have.
  STALE_BUFFER_SLOT = 1,
  // Returned by dequeueBuffer if there are no pending buffers available.
  NO_BUFFER_AVAILABLE,
  // Returned by dequeueBuffer if it's too early for the buffer to be acquired.
  PRESENT_LATER,

(5)mslots 与mframe 以及mframenumber 的区别

(6)onframavailable 和latchbuffer ,reject,updateteximage,的逻辑。

其中updateteximage;

(7)bufferitem 与mslots的区别

(8)bufferqueueconsumer 与bufferitemconsumer区别;

(9)acquirebuffer的fence 逻辑,fencefd是哪来的;

fence 相关接口定义参见ui/Fence.h

 status_t Fence::waitForever(const char* logname) { ATRACE_CALL();
 if (mFenceFd == -1) {
  return NO_ERROR;
 }
 int warningTimeout = 3000;
 int err = sync_wait(mFenceFd, warningTimeout);
 if (err < 0 && errno == ETIME) {
  ALOGE("%s: fence %d didn't signal in %u ms", logname, mFenceFd,
   warningTimeout);
  err = sync_wait(mFenceFd, TIMEOUT_NEVER);
 }
 return err < 0 ? -errno : status_t(NO_ERROR);
 }
 struct EglSlot {
  EglSlot() : mEglFence(EGL_NO_SYNC_KHR) {}
  // mEglImage is the EGLImage created from mGraphicBuffer.
  sp<EglImage> mEglImage;
  // mFence is the EGL sync object that must signal before the buffer
  // associated with this buffer slot may be dequeued. It is initialized
  // to EGL_NO_SYNC_KHR when the buffer is created and (optionally, based
  // on a compile-time option) set to a new sync object in updateTexImage.
  EGLSyncKHR mEglFence;
 };

(10)

updateAndReleaseLocked(item, &mPendingRelease),
updateAndReleaseLocked(item),
bindTextureImageLocked()

热心网友 时间:2022-05-15 08:11

1、属于哪个类型的layer,就打开哪个hpp文件,这里就打开vision_layers.hpp,然后自己添加该layer的定义,或者直接复制Convolution_Layer的相关代码来修改类名和构造函数名都改为Aaa_Layer,如果不用GPU,将*_gpu的声明都去掉。
2、实现自己的layer,编写Aaa_Layer.cpp,加入到src/caffe/layers,主要实现Setup、Forward_cpu、Backward_cpu。

3、如果需要GPU实现,那么在Aaa_Layer.cu中实现Forward_gpu和Backward_gpu。

4、修改src/caffe/proto/caffe.proto,好到LayerType,添加Aaa,并更新ID,如果Layer有参数,添加AaaParameter类。

5、在src/caffe/layer_factory.cpp中添加响应代码。

6、在src/caffe/test中写一个test_Aaa_layer.cpp,用include/caffe/test/test_gradient_check_util.hpp来检查前向后向传播是否正确。

热心网友 时间:2022-05-15 09:29

你说的添加到资料库的铃声,是你已经做好的m4r格式的40秒的铃声,还是mp3格式的完整歌曲?你问题要写明白,我们才好回答吖哈哈哈。。。顺便回答520,itunes是可以同步铃声的,只是制作铃声略为复杂,不过熟能生巧,做个铃声几十秒钟就搞定了。。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com