drcoffey / deepsqueak Goto Github PK
View Code? Open in Web Editor NEWDeepSqueak v3: Using Machine Vision to Accelerate Bioacoustics Research
License: BSD 3-Clause "New" or "Revised" License
DeepSqueak v3: Using Machine Vision to Accelerate Bioacoustics Research
License: BSD 3-Clause "New" or "Revised" License
Dear Kevin and Russel,
first of all thank you for your great work with DeepSqueak. A automated and powerful tool for USV detection was urgently needed in terms of time consumption for analysis!
Im testing DS for our lab since a while and most of us have been positively surprised by the first results. However, those were made analysing recordings from operant chambers meaning well defined and easy to filter noise and no problems with call intensity. For the next tests i analysed open field data wherein noise is more diverse and calls are less intense, given the big recording space. I found that detection rate is only sufficient using the short_rat_call network V2 under high recall settings. Of course this comes with a lot detected noise, which i can get rid of with a trained denoising network. Anyway, i also tried batch reject by several parameters which did not work out at all. In addition, the prompt looks like this on my machine:
Like that i cant see the full prompt or move it. Can you replicate that or is it limited to my machine (Windows 10, Matlab2018b V3, DS 2.5)?
My second point regards the tonality function as this is critical for extracted parameters. While processing calls, it would be very helpful to have fix shortkeys for adjusting the tonality of a call or at least the option to set some. Is that possible?
As we are several researchers working on different questions, it can be possible that we would need additional parameters extracted from calls. So in general: How complicated is it to add parameters to exported excel sheets and can we contact you on that matter?
Last but not least, i recently read in a comment by Russel that you might work on a standalone to make DS totally open source. This would make DS even more interesting for us, so do you actually work on this issue?
Thanks again and cheers
Marek
Hey,
I was training the supervised classifier and wanted to conduct now the supervised classification, however the following error is now occurring:
I am using MATLAB R2018b.
"DeepSqueak version 2.6.0
Reference to non-existent field 'squeakfolder'.
Error in SupervisedClassification_Callback (line 6)
[FileName,PathName] = uigetfile(fullfile(handles.squeakfolder,'Clustering Models','*.mat'),'Select Network');
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('SupervisedClassification_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback."
Do you have an idea what is going wrong here?
Cheers,
Steven
Hi,
I'm trying to retrain the network as I'm not detecting as many USV calls as I would expect. I'm recording USVs from mouse pups and I'm aware from previous issues that the network hasn't been trained for recording pup vocalizations? It also seems that some USV calls above 80 kHz are missed by the network but I'm not sure if that's the case for calls below 80 kHz. I tried to retrain the existing Mouse Call_Network_V2.mat but get the following error:
_Error using nnet.cnn.LayerGraph>iValidateLayerHasEnoughInputs (line 819)
Layer 'proposalLayer' has 2 connected inputs, but its replacement has 0 inputs.
Error in nnet.cnn.LayerGraph/replaceLayer (line 390)
iValidateLayerHasEnoughInputs(larray(1), ...
Error in vision.internal.cnn.RCNNLayers.splitFasterIntoFastAndRPN (line 1173)
frcnn = frcnn.replaceLayer(proposalName,roiInput);
Error in fasterRCNNObjectDetector/getNetworksForAlternateTraining (line 1011)
[frcnn,rpn,info] = vision.internal.cnn.RCNNLayers.splitFasterIntoFastAndRPN(lgraph);
Error in vision.internal.cnn.parseInputsFasterRCNN (line 113)
[fastRCNNLayerGraph, rpnLayerGraph, params.RCNNInfo] = network.getNetworksForAlternateTraining();
Error in trainFasterRCNNObjectDetector (line 333)
vision.internal.cnn.parseInputsFasterRCNN(...
Error in TrainSqueakDetector (line 61)
detector = trainFasterRCNNObjectDetector(TrainingTables, layers, options, ...
Error in trainnew_Callback (line 39)
[detector, layers, options] = TrainSqueakDetector(TrainingTables,detector);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('trainnew_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback._
Any help would be much appreciated!
Thanks,
Trish
I was trying to run DeepSqueak on some of my existing data to see how it works. My recording is 5min and 250kHz sampling.
After choosing my NN and detection parameters, it starts going through the file, but I will get a series of errors that state they are skipping audio chunks. It inevitably does this for the entire file and nothing is detected.
Warning: Error in Network, Skiping Audio Chunk
> In SqueakDetect (line 122)
In multinetdect_Callback (line 93)
In gui_mainfcn (line 95)
In DeepSqueak (line 30)
In matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('multinetdect_Callback',hObject,eventdata,guidata(hObject),1)
Index exceeds matrix dimensions.
Error in SqueakDetect (line 134)
xmin = AllBoxes(:,1);
Error in multinetdect_Callback (line 93)
Calls1=SqueakDetect(AudioFile,NeuralNetwork,handles.audiofiles(CurrentAudioFile).name,Settings(:,k),0,0,j,length(audioselections),networkname);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('multinetdect_Callback',hObject,eventdata,guidata(hObject),1)
Error while evaluating UIControl Callback.
I used the following parameters in my detection
I double checked that Matlab could connect to the GPU, and that doesn't seem to be the issue.
Have these issues been encountered before?
Thanks in advance.
I have downloaded DeepSqueak and I'm running it under Matlab2017b. It opens fine and shows detected call files normally. However, when reading built-in example files as "Example Rat Recordng.flac" or some of my .wav/.flac call files it shows the following error message (=>Error in Network, Skiping Audio Chunk):
##############
Warning: While loading an object of class 'nnet.cnn.layer.ClassificationOutputLayer':
Reference to non-existent field 'ClassNames'.
In multinetdect_Callback (line 92)
In gui_mainfcn (line 95)
In DeepSqueak (line 30)
In matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('multinetdect_Callback',hObject,eventdata,guidata(hObject),1)
Warning: While loading an object of class 'nnet.cnn.layer.ClassificationOutputLayer':
Reference to non-existent field 'ClassNames'.
In multinetdect_Callback (line 92)
In gui_mainfcn (line 95)
In DeepSqueak (line 30)
In matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('multinetdect_Callback',hObject,eventdata,guidata(hObject),1)
Error in Network, Skiping Audio Chunk
Warning: Struct contents reference from a non-struct array object.
###################
Obs: I noticed this error disappears when running under Matlab2018b !
Describe the bug
Hi there! Our lab wants to use DeepSqueak for all our rat pups and adults in the near future. However, we have been using Sonotrack for a long time now and in running tests comparing DS to sonotrack we have come across a strange issue. Sonotrack finds way way more calls. Sometimes a difference of hundreds across a 3 minute audio file. I have applied the gain settings I saw in another thread but no luck. Our statistics are coming out largely similar but sometimes rats at 4 days old are having 30 seconds of silence according to DS which would be very odd. Is there anyway to ramp the sensitivity up? Thank you! Attached below is a short chart comparing Sonotrack to DS.
Test | Number | Duration (ms) |
---|---|---|
sonotrack female 6 | 114 | 0.13415789 |
DS Default L High precision | 73 | 0.16299726 |
DS .1 High recall | 73 | 0.16368219 |
Getting the following error after changing line 86 of Squeakdetect function to "im = mat2gray(s,[med*.75 med*15]);"
Error using horzcat
Dimensions of arrays being concatenated are not consistent.
Error in SqueakDetect (line 228)
audio=[pad, audio];
Error in multinetdect_Callback (line 96)
Calls=SqueakDetect(AudioFile,NeuralNetwork,handles.audiofiles(CurrentAudioFile).name,Settings(:,k),j,length(audioselections),networkname);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('multinetdect_Callback',hObject,eventdata,guidata(hObject),1)
Error while evaluating UIControl Callback.
The detect function of the newest version of deepsqueak downloaded today 12/19/2018 yields the following error
"Warning: Error in Network, Skiping Audio Chunk
In SqueakDetect (line 115)
In multinetdect_Callback (line 93)
In gui_mainfcn (line 95)
In DeepSqueak (line 30)
In matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('multinetdect_Callback',hObject,eventdata,guidata(hObject),1)
Struct contents reference from a non-struct array object."
Hey guys,
Will these modules run with GNU Octave? Matlab is not an option (money!).
Cheers,
Dave
Hi,
when I train a supervised classifier to discriminate between two different call types I eventually get a confusion matrix, showing how many of the calls were correctly and how many very incorrectly classified.
Is there a way that I can look at the misclassified calls and see whether they share some similar features to get a feeling which calls are confusing the classifier?
Thank you,
Isa
Dear Kevin and Russell,
I have been trying training a new network out of the image bouts that I created from our data. Unfortunately, an error occurred and thus I started training a new network for each file that we have. Consequently, I have singled out the problematic files that give the error below.
Step 1 of 4: Training a Region Proposal Network (RPN).
Error using visionBboxIntersectByUnion
Requested 844x3812727 (24.0GB) array exceeds maximum array size preference. Creation of arrays greater than this limit may
take a long time and cause MATLAB to become unresponsive. See array size limit or preference panel for more information.
Error in bboxOverlapRatio (line 81)
overlapRatio = visionBboxIntersectByUnion(bboxA, bboxB);
Error in vision.internal.cnn.rpn.selectTrainingSamples (line 50)
iou = bboxOverlapRatio(groundTruth, regionProposals, 'union');
Error in vision.internal.cnn.rpn.RPNRegionReader/fillTrainingSamples (line 249)
s(i) = vision.internal.cnn.rpn.selectTrainingSamples(params, c{:});
Error in vision.internal.cnn.rpn.RPNRegionReader (line 158)
this.TrainingSamples = fillTrainingSamples(this, groundTruth, params.UseParallel);
Error in vision.internal.cnn.rpn.RPNTrainingRegionDispatcher (line 64)
vision.internal.cnn.rpn.RPNRegionReader(...
Error in fasterRCNNObjectDetector/createRPNTrainingDispatcher (line 665)
dispatcher = vision.internal.cnn.rpn.RPNTrainingRegionDispatcher(...
Error in fasterRCNNObjectDetector.trainRPN (line 165)
dispatcher = createRPNTrainingDispatcher(detector, groundTruth, opts, inputSize, params);
Error in trainFasterRCNNObjectDetector (line 289)
[stage1Detector, rpn, info] = fasterRCNNObjectDetector.trainRPN(trainingData, rpn, options(1), iStageOneParams(params),
checkpointSaver);
Error in TrainSqueakDetector (line 61)
detector = trainFasterRCNNObjectDetector(TrainingTables, layers, options, ...
Error in trainnew_Callback (line 41)
[detector, layers, options] = TrainSqueakDetector(TrainingTables);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('trainnew_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback
Furthermore, I have compared the files that create this error with similar files to check for size. However, there are other files containing more USVs and are longer in time than the ones creating the above mentioned error. Also, running it on the stronger computer gave the same error.
Is there a way around this to reduce the array sizes of these files or does the problem lie somewhere else?
Kind regards,
Bavo Kempen
Describe the bug
Hello Dr. Marx and Dr. Coffey,
Thank you for all your work so far on Deepsqueak. For a small percentage of detected call files, I am unable to export the data to Excel. This occurred in the previous version as well -- updating to 2.6.1 resolved the issue for some of the problematic files, but not all. The export process seems to freeze in the same spot on the loading bar every time. This occurs in both the compiled and Matlab versions. The typical error message looks like this:
The logical indices contain a true value outside of the array bounds.
Error in CalculateStats (line 37)
stats.ridgeFreq = ridgeFreq(greaterthannoise);
Error in excel_Callback (line 34)
stats =
CalculateStats(I,windowsize,noverlap,nfft,rate,box,handles.data.settings.EntropyThreshold,handles.data.settings.AmplitudeThreshold);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('excel_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback.
I found a similar issue here that appeared to be resolved by updating, but I have had no such luck. In this case, I did not use a self-trained network but rather the standard Short Rat Call_Network_v2.mat.
To Reproduce
Steps to reproduce the behavior:
With the attached audio/detection files:
Additional context
Operating system: Windows 10 Education
Matlab version: Have tried with 2018b and 2019a, and DS standalone 2.6.1
Thank you,
Zachary Pranske
Problem
I work mainly with rat pup USVs. These are quite unique and while using Multi-detect (short and long rat calls) work well, often I'd like to be able to manually add a call selection. At present, I can only work with the number of calls detected by the system.
This is particularly tricky when working with multiple animals. While the labels allow me to assign calls to different animals, I cannot add a call when calls overlap.
Solution
The ability to add a brand new call/select call
Hi there, thanks very much for writing such an amazing software!
I just have one issue when it comes to automatically detecting quite faint calls (see picture, the ones with green arrows are successfully detected but the ones with white arrows are not).
Is there a way to increase the detection sensitivity for an entire file rather than adjusting it for each box post detection?
Or is there a way to later on add the missing calls and then train the network with these, so that future detections
will take the faint calls also into account?
Thanks very much in advance,
Isa
Dear Kevin and Russell,
I updated DeepSqueak yesterday to the latest version, however, it seems that a bug slipped in. Thus, with both the functions "detect calls" and "multi detect" the script crashes and gives the following error. I think it has to do with the recent update on multichannel audiofiles. Furthermore, I also got this error when I just ran a Network inherent with DeepSqueak (e.g. All Short Calls_Network.mat).
Error in Network, Skiping Audio Chunk
Warning: Error using buffer
invalid input argument #1
Error in datawrap (line 21)
x = sum(buffer(x,nfft),2);
Error in computeDFT>computeDFTviaFFT (line 83)
xw(:,j) = datawrap(xin(:,j),nfft);
Error in computeDFT (line 47)
[Xx,f] = computeDFTviaFFT(xin,nx,nfft,Fs);
Error in pspectrogram (line 63)
[y,f] = computeDFT(bsxfun(@times,win,xin),nfft,Fs);
Error in spectrogram (line 166)
[varargout{1:nargout}] = pspectrogram({x},'spect',varargin{:});
Error in SqueakDetect (line 95)
[s,fr,ti] =
spectrogram(audio(:,1),wind,noverlap,nfft,audio_info.SampleRate,'yaxis');
% Just use the first audio channel
Error in multinetdect_Callback (line 77)
Calls = [Calls,
SqueakDetect(AudioFile,NeuralNetwork,handles.audiofiles(CurrentAudioFile).name,Settings(:,k),j,length(audioselections),networkname,handles.optimization_slider.Value)];
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('multinetdect_Callback',hObject,eventdata,guidata(hObject),1)
> In SqueakDetect (line 168)
In multinetdect_Callback (line 77)
In gui_mainfcn (line 95)
In DeepSqueak (line 30)
In matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('multinetdect_Callback',hObject,eventdata,guidata(hObject),1)
Kind regards,
Bavo Kempen
I am having difficulty getting good contour detection with low intensity and step USVs.
For example, with this USV, half the USV is not detected.
Also, for most step USVs that have a small high or low beginning/end, the step is not included in the contour.
Changing the contour threshold from .25 to .2 will improve contour but then I need to redraw every single box.
I have already increased gain by changing line 89 in squeakdetect.m to "im = mat2gray(s,[med*.75 [med*15]);"]
Any suggestions to improve contour?
Hi,
Thank you for this software! I am having a lot of success with call detection, but now I am trying to begin training a classification network. I have thousands of calls manually selected and classified in Raven Pro, and I am trying to import the annotations from Raven into DeepSqueak to train the classification network (if I have understood correctly how this is done). When I import from Raven, I select both the .txt file (which contains call statistics and the annotated classification) and the .wav files, but when I load the detected file in DeepSqueak, the call classifications do not appear to be there (all calls say Label: USV). Is there a way to bring my manual classifications into DeepSqueak from Raven?
Thank you for any help you can provide!
Best wishes,
Raven
Hi Kevin,
I have one question that most likely will also resolve the other issue I had posted some time ago with the network training.
I would like to train a classifier on a type of calls that I record from mouse pups on a given day and on following days. The frequencies are known to change when pups mature. So I was wondering whether I can train a classifier to be able to discriminate pup calls recorded from pups at age P1 to those recorded at P2.
What is the best way to do this with DeepSqueak?
Thank you,
Isa
I'm trying to run the new version of Deepsqueak and I'm getting the following error with no detections.
Warning: Error in Network, Skiping Audio Chunk
In SqueakDetect (line 115)
In multinetdect_Callback (line 93)
In gui_mainfcn (line 95)
In DeepSqueak (line 30)
In matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('multinetdect_Callback',hObject,eventdata,guidata(hObject),1)
'Threshold' is not a recognized parameter. For a list of valid name-value pair arguments, see the documentation for this function.
Hey again,
While preparing all the data for training and trying to train with samples, I have bounced upon certain errors again for certain files.
Error using audioread (line 135)
Range requested is greater than the total number of samples in the file. TotalSamples is 7405568.
Error in Import_From_Ultravox_Callback (line 58)
Calls(i).Audio=audioread(AudioFile,round([windL windR]*rate),'native');
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('Import_From_Ultravox_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback.
Index exceeds array bounds.
Error in vision.internal.cnn.generateAnchorBoxesInImage (line 63)
outside = (x1 < 1) | (y1 < 1) | ((x1 + dim(1) - 1) > imageSize(2)) | ((y1 + dim(2) - 1) >
imageSize(1));
Error in vision.internal.cnn.rpn.selectTrainingSamples (line 30)
[regionProposals, anchorLocInFeatureMap] = vision.internal.cnn.generateAnchorBoxesInImage(...
Error in vision.internal.cnn.rpn.RPNRegionReader/fillTrainingSamples (line 249)
s(i) = vision.internal.cnn.rpn.selectTrainingSamples(params, c{:});
Error in vision.internal.cnn.rpn.RPNRegionReader (line 158)
this.TrainingSamples = fillTrainingSamples(this, groundTruth, params.UseParallel);
Error in vision.internal.cnn.rpn.RPNTrainingRegionDispatcher (line 64)
vision.internal.cnn.rpn.RPNRegionReader(...
Error in fasterRCNNObjectDetector/createRPNTrainingDispatcher (line 665)
dispatcher = vision.internal.cnn.rpn.RPNTrainingRegionDispatcher(...
Error in fasterRCNNObjectDetector.trainRPN (line 165)
dispatcher = createRPNTrainingDispatcher(detector, groundTruth, opts, inputSize, params);
Error in trainFasterRCNNObjectDetector (line 289)
[stage1Detector, rpn, info] = fasterRCNNObjectDetector.trainRPN(trainingData, rpn, options(1),
iStageOneParams(params), checkpointSaver);
Error in TrainSqueakDetector (line 61)
detector = trainFasterRCNNObjectDetector(TrainingTables, layers, options, ...
Error in trainnew_Callback (line 44)
[detector, layers, options] = TrainSqueakDetector(TrainingTables);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('trainnew_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback.
Might it be that certain things were only adapted in the Master branch a couple of weeks ago and consequently were removed again by merging 1.2 branch into the master branch since similar problems occur.
Kind regards and all the best,
Bavo Kempen
Hey,
I was wondering how precise one should be when it comes to (re)drawing the bounding box around a detected call?
Is it important that there is not too much "no call" area inside the box or is simply important that the entire call with all its features sits inside this box no matter how much "non call" area is in there?
Thanks for your help!
Isa
Exported call statistics always export rejected call statistics. When I export call statistics, the original call statistics are exported with the rejected calls and with old USV paramaters. For example, if I redraw a USV and it changes the call duration, the new call duration is not exported.
Hi there,
I am having trouble with training a network with my detected calls and I am receiving this error message when trying to train a network:
Error using trainNetwork (line 154)
An error occurred while trying to determine whether "readData" is a function name.
Error in TrainSupervisedClassifier_Callback (line 152)
ClassifyNet = trainNetwork(auimds,layers,options);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('TrainSupervisedClassifier_Callback',hObject,eventdata,guidata(hObject))
Caused by:
An error occurred while trying to determine whether "readData" is a function name.
Can't reload 'D:\MATLAB\R2018a\bin\win64\sl_graphical_classes.dll'
Error while evaluating Menu Callback.
Would you have an idea what I am doing wrong here?
Thanks for your support!!
Cheers,
Isa
Hello,
Just to repeat what everyone else has been saying- thank you very much for the software!
I am moving to try to use the unsupervised call classification. I have seen the below error and I am wondering if this occurred because there are few calls in the detection files I used? I see that some of my animals call very infrequently, so if this is the issue is there any way that this can be resolved?
Also, I have a question about the weightings for shape, duration and frequency. Specifically, is there any way to calculate the appropriate weight for each variable?
Thank you very much for your help.
Error using waitbar (line 100)
The second argument must be a message character vector or a handle to an existing waitbar.
Error in CreateClusteringData (line 43)
waitbar(i/height(file.Calls),h,['Loading File ' num2str(j) ' of ' num2str(length(fileName))]);
Error in UnsupervisedClustering_Callback (line 5)
[ClusteringData] = CreateClusteringData(handles.data, 1);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('UnsupervisedClustering_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback.
lowering threshold
lowering threshold
lowering threshold
Error using kmeans (line 277)
X must have more rows than the number of clusters.
Error in kmeans_opt (line 53)
[,,dist]=kmeans(X,c,'emptyaction','drop'); %compute the sum of intra-cluster distances
Error in UnsupervisedClustering_Callback (line 64)
[clustAssign,C]=kmeans_opt(data,str2num(opt_options{1}),0,str2num(opt_options{2}));
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('UnsupervisedClustering_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback.
Hi,
I've been trying to retrain the existing mouse call network to detect pup calls since the original network is missing more than half of the calls in my files compared to manual counting. I tried to retrain the network with around 20 3-minute audio files, but it it seems like it's still missing a large chunk of the calls. Is there any way to modify the sensitivity to allow the network to recognize the calls that are missing? Or do I need to feed more files into the network in order for it to recognize these calls that it's missing?
Thanks and have a good weekend!
Trish
I get the following error when trying to plot the t-SNE:
Error using CreateClusteringData
Too many input arguments.
Error in create_tsne_Callback (line 26)
[a] = CreateClusteringData(hObject, eventdata, handles);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('create_tsne_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback.
The call files were loaded and clustered before trying to plot the t-SNE.
Dear Kevin and Russell,
The following errors keep persisting in the same files and aditionally a new one has occured for some files while creating image bouts.
Error using audioread (line 135)
Range requested is greater than the total number of samples in the file. TotalSamples is 7405568.
Error in create_training_images_Callback (line 90)
Audio=audioread([audiopath audioname],round([windL windR]*rate));
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('create_training_images_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback.
and secondly, a new one:
Error using buffer
invalid input argument #1
Error in datawrap (line 21)
x = sum(buffer(x,nfft),2);
Error in computeDFT>computeDFTviaFFT (line 83)
xw(:,j) = datawrap(xin(:,j),nfft);
Error in computeDFT (line 47)
[Xx,f] = computeDFTviaFFT(xin,nx,nfft,Fs);
Error in pspectrogram (line 63)
[y,f] = computeDFT(bsxfun(@times,win,xin),nfft,Fs);
Error in spectrogram (line 166)
[varargout{1:nargout}] = pspectrogram({x},'spect',varargin{:});
Error in create_training_images_Callback>CreateTrainingData (line 160)
[s, fr, ti] = spectrogram(audio,...
Error in create_training_images_Callback (line 96)
[~,box] = CreateTrainingData(...
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('create_training_images_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback.
Is it possible that the second error occurs due to overlapping boxes?
Kind regards,
Bavo Kempen
Hi,
I tried running DeepSqueak on an audio file, and it did detect calls, but there seems to be some issue with visualising the spectrogram of the calls. This is what happens after I have tried detecting calls:
Error using intmax (line 40)
Invalid class name.
Error in CreateSpectrogram (line 9)
audio = double(audio) / (double(intmax(class(audio)))+1);
Error in update_fig (line 14)
[I,windowsize,noverlap,nfft,rate,box,s,fr,ti,audio,AudioRange] = CreateSpectrogram(handles.calls(handles.currentcall));
Error in loadcalls_Callback (line 81)
update_fig(hObject, eventdata, handles);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('loadcalls_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback.
Reference to non-existent field 'calls'.
Error in DeepSqueak>slider1_Callback (line 291)
handles.currentcall=ceil(get(hObject,'Value')*length(handles.calls));
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('slider1_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback.
Reference to non-existent field 'calls'.
Error in DeepSqueak>slider1_Callback (line 291)
handles.currentcall=ceil(get(hObject,'Value')*length(handles.calls));
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('slider1_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback.
Reference to non-existent field 'calls'.
Error in DeepSqueak>slider1_Callback (line 291)
handles.currentcall=ceil(get(hObject,'Value')*length(handles.calls));
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('slider1_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback.
Reference to non-existent field 'calls'.
Error in DeepSqueak>slider1_Callback (line 291)
handles.currentcall=ceil(get(hObject,'Value')*length(handles.calls));
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('slider1_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback.
Reference to non-existent field 'calls'.
Error in DeepSqueak>slider1_Callback (line 291)
handles.currentcall=ceil(get(hObject,'Value')*length(handles.calls));
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('slider1_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback.
The output in DeepSqueak looks like this:
Do you have an idea of what could be going wrong?
Thank you!!
Raven
Hi,
Would it be possible to add additional statistical variables to the output? Specifically, interval calculation between the vocalization call. This would be of great value!
Thanks
Dear,
When trying to export the Excel log (log statistics) from detections files obtained by a self trained network, I bounced upon the following error:
Could not detect contour
Index exceeds array bounds.
Error in CalculateStats (line 45)
stats.SignalToNoise = mean(1 - stats.Entropy(stats.ridgeTime));
Error in excel_Callback (line 34)
stats =
CalculateStats(I,windowsize,noverlap,nfft,rate,box,handles.settings.EntropyThreshold,handles.settings.AmplitudeThreshold);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('excel_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback.
With older detection (.mat) files that I have obtained with networks inherent in DeepSqueak (e.g. All_Short_Calls_Network_V1.mat) the export function works fine.
EDIT:
Also, I have been playing around with the files a bit and consequently found out that the aforementioned error occurs concurrent with the following error:
Error using matlab.graphics.axis.Axes/set
Error setting property 'CLim' of class 'Axes':
Value must be a 1x2 vector of numeric type in which the second element is larger than the first and may be Inf
Error in update_fig (line 17)
set(handles.axes1,'YDir', 'normal','YColor',[1 1 1],'XColor',[1 1 1],'Clim',[0 2*mean(max(I))]);
Error in DeepSqueak>NextCall_Callback (line 232)
update_fig(hObject, eventdata, handles);
Error in DeepSqueak>figure1_WindowKeyPressFcn (line 329)
NextCall_Callback(hObject, eventdata, handles)
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('figure1_WindowKeyPressFcn',hObject,eventdata,guidata(hObject))
Error while evaluating Figure WindowKeyPressFcn.
This error occurs when I am sliding through a detection file (.mat) and suddenly the slider gets stuck on a certain detected USV. However, by using the slider, I can skip the USV with problematic properties. Nonetheless, it is impossible to obtain the 'problem' USV on the GUI.
Finally, I will send an email with a .mat detection file that creates these errors.
Kind regards,
Bavo Kempen
Hey Kevin and Russell,
I tried to merge multiple detection files of the same recording (k>2 ) through the merge detection files function in the GUI, however I keep bouncing upon the same error.
Error using audioread (line 135)
Range requested is greater than the total number of samples in the file. TotalSamples is 7405568.
Error in merge_Callback (line 74)
a = audioread([audiopath audiodata],[WindL WindR],'native');
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('merge_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback.
Also, I tried rejecting the last call of each detection file since this solved a similar issue in the past, nonetheless, the error keeps occurring. Furthermore, I looked into the code concerning the multinetdect_Callback.m and I am wondering why do you not allow for k>2 networks to run on the same audio file concurrently and merge them afterwards as it is allowed with 2 networks.
Kind regards,
Bavo Kempen
name: Bug report
about: Create a report to help us improve
Describe the bug
DeepSqueak 2.6.1. throws an error when I try to load Calls or scroll through identified calls
To Reproduce
Launched DeepSqueak from matlab command line
Select Mouse Call_Network_V2.mat for Neural Network
Select default audio file: Example Mouse Recording.flac
Press "Detect Calls" button (this complete's successfully)
click "Load Calls" using default option (most recently created file)
DeepSqueak window shows one call, as expected, but shows the following error message (program will not scroll through any other calls at this point):
"DeepSqueak version 2.6.1
601 Calls found in: Example Mouse Recording
The logical indices contain a true value outside of the array bounds.
Error in CalculateStats (line 37)
stats.ridgeFreq = ridgeFreq(greaterthannoise);
Error in update_fig (line 23)
stats =
CalculateStats(I,windowsize,noverlap,nfft,rate,box,handles.data.settings.EntropyThreshold,handles.data.settings.AmplitudeThreshold);
Error in loadcalls_Callback (line 89)
update_fig(hObject, eventdata, handles);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('loadcalls_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating UIControl Callback."
Expected behavior
I just expected to be able to flip through all the calls, as program is intended to function
Additional context
Windows 10, MATLAB Version: 9.6.0.1174912 (R2019a) Update 5
DeepSqueak version downloaded from GitHub on Sept 5, 2019
(should preface that I'm probably spewing nonsense ie layman)
Is your feature request related to a problem? Please describe.
The recent verge video noted more research was required in order to interpret the meaning of particular squeaks frequencies from the mice. Would like to know if this suggestion makes sense.
Describe the solution you'd like
This solution depends on whether human EEG signals emitted from a particular region in the brain (that we know indicate a particular emotion) would approximately correlate with a rats ie whether comparing the EEG reading from the rats brain during squeaking a particular frequency may assist in understanding the emotion (when comparing source of the EEG signal from the rat brain to the human brain). This article describes a recently released EEG monitor that would be perfect for rats https://www.janelia.org/news/neuropixels-technology-ready-for-release
Describe alternatives you've considered
Crowdsourcing the research with those who have rats as pets, especially the real rat lovers (and even petshop owners). There expereince and time spent with the rats could provide invaluable information (eg they record the frequencies and at the same time they would intuitively know the particular mood of the rat (hungry , sad, tired, confused etc).
Additional context
none
I use MatLab R2019a, with the required addons installed. Any attempt for call detection, even on the preinstalled ones, results in a series of the following errors:
Warning: Upper Range Above Samplng Frequency
Error in Network, Skiping Audio Chunk
Warning: Undefined function 'prctile' for input arguments of type 'double'.
Error in SqueakDetect (line 117)
im = im - prctile(im,5,2);
Error in multinetdect_Callback (line 77)
Calls = [Calls;
SqueakDetect(AudioFile,NeuralNetwork,handles.audiofiles(CurrentAudioFile).name,Settings(:,k),j,length(audioselections),networkname,handles.optimization_slider.Value)];
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('multinetdect_Callback',hObject,eventdata,guidata(hObject),1)
> In SqueakDetect (line 168)
In multinetdect_Callback (line 77)
In gui_mainfcn (line 95)
In DeepSqueak (line 30)
In matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('multinetdect_Callback',hObject,eventdata,guidata(hObject),1)
Error in Network, Skiping Audio Chunk
Describe the bug
Error using audioread (line 135)
Range requested is greater than the total number of samples in the file. TotalSamples is 57600000.
Error in create_training_images_Callback (line 97)
audio=audioread([audiopath audioname],round([windL windR]*rate));
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('create_training_images_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback.
To Reproduce
0_05_S223_PND07 Jul-26-2019 5_36 PM.mat in previously shared Dropbox folder
Expected behavior
DS to generate images (tick)
DS to generate detection table, which isn't happening
Additional context
MacOS 10.14.5, Matlab 2018a
Dear,
The Detection networks for mice do not work very well on a certain amount of data that I have been asked to analyze (detect/classify) due to very noisy recordings (both low and high frequency). Consequently, I would like to try and train a network to be less sensitive to this noise or with a lower signal to noise ratio. However, I am a bit stuck given that I only have the .wav files. Furthermore, I explored the option to import from ethovision (since I already manually detected 30 recordings), however, without success.
Therefore, it would be really handy to be able to also go through the spectrogram manually and indicate USV's manually and use this as input for training a network.
If by any chance I missed that option given my very limited matlab and ANN knowledge I sincerely apologize beforehand.
Also, I ran the pre-trained networks (mice) on somewhat cleaner data and it worked very well!
In sum, it is not entirely clear how to train a network from the manual and which files are expected and why and in which way we are able to obtain these (for a novice).
Thank you in advance and as well for making DeepSqueak!
Kind regards,
Bavo
Hey there,
sorry for another question.
How would you detect calls that were recorded with several microphones?
Would you split the channels into separate files and do the detection separately in these channels? Or is there a functionality allowing simultaneous detection of the same recording in several channels?
Cheers,
Isa
Hi Dr. Coffey,
We use a intensity-calibrated signal during recording. I was wondering how max power is calculated and if a DB measure can be extracted or calculated from this measure.
Also, wondering if the acoustic output can be used to automatically distinguish simple from unmodulated USVs.
Thanks!
Charlie
Describe the bug
When running Post Hoc Denoiser I get the following error:
Index in position 2 exceeds array bounds (must not exceed 2020).
Error in PostHocDenoising_Callback (line 52)
I=abs(s(round(y1:min(y2,size(s,1))),round(x1:x2))); % Get the pixels in the box
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('PostHocDenoising_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
Denoise files
Additional context
MacOS 10.14.5
MatLab 2018a (fresh install)
Training Clips.zip
Describe the bug
In trying to train a new neural network in the updated Deepsqueak version to be able to recognize zebra vocalizations. However, after isolating individual vocalizations using RavenPro, generating .mat files for the manually isolated vocalizations, and going through the instructions listed in the documentation for creating a new Network Training Images, I keep getting the following error messages:
Warning: Variable 'Calls' not found.
In loadCallfile (line 2)
In create_training_images_Callback (line 43)
In gui_mainfcn (line 95)
In DeepSqueak (line 30)
In matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('create_training_images_Callback',hObject,eventdata,guidata(hObject))
Undefined function or variable 'Calls'.
Error in loadCallfile (line 4)
if isstruct(Calls); Calls = struct2table(Calls, 'AsArray', true); end
Error in create_training_images_Callback (line 43)
Calls = loadCallfile([trainingpath trainingdata{k}]);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('create_training_images_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback.
Expected behavior
I am not sure if because zebra vocalizations are not tonal and much lower than USVs that the program is not able to recognize the vocalizations as calls.
Additional context
MS Windows
Thank you in advance for any help you may be able to offer.
Hi,
thanks a lot for this great software, we are getting very interesting data.
When trying to create the t-sne plot from either detection files or extracted contours, I am getting the error:
Error using CreateClusteringData
Too many input arguments.
Error in create_tsne_Callback (line 26)
[a] = CreateClusteringData(hObject, eventdata, handles);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in
matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('create_tsne_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback.
When first exploring DeepSqueak, a few months ago, we were able to do this, so we can't seem to understand what the mistake is. I am using Matlab R2018b and DeepSqueak 2.5.0
Dear Kevin and Russell,
I have been playing for a while with the idea to ask you whether it would be possible to implement a function to adjust the post detection merging of boxes for calls that are split due to e.g. burst of noise or just less signal. Furthermore, I tried to play a bit with the FFT parameters in the "separatelongratcall.mat" function, however, no success.
The way how I would see this implemented would be through manually implementing a value in ms to bind boxes together (e.g. 3ms), but still with the freedom to do so differently for each detection file (or all together) depending on the needs of the user.
Do you think it is feasible to implement a function as such?
If you would like me to explain more elaborately and provide some examples, I will gladly do so!
Curious to hear what you think.
Kind regards and thank you in advance,
Bavo Kempen
I've been wondering why the average power is reported as a negative value. When looking at the example in the Wiki, I noticed that the value is reported as a positive. Is there something wrong with the way I run my analyses?
Dear Kevin and Russell,
I have been trying to train the existing all short calls network with the manually isolated ultrasonic vocalizations of mice. However, I am encountering the following error when I try the training option:
Error using nnet.cnn.LayerGraph>iValidateInputsOfNewAndOldLayer (line 834)
Layer 'proposalLayer' has 2 connected inputs, but its replacement has 0 inputs.
Error in nnet.cnn.LayerGraph/replaceLayer (line 405)
iValidateInputsOfNewAndOldLayer( larray(1), layerToReplace, ...
Error in vision.internal.cnn.RCNNLayers.splitFasterIntoFastAndRPN (line 1424)
frcnn = frcnn.replaceLayer(proposalName,roiInput);
Error in fasterRCNNObjectDetector/getNetworksForAlternateTraining (line 1024)
[frcnn,rpn,info] = vision.internal.cnn.RCNNLayers.splitFasterIntoFastAndRPN(lgraph);
Error in trainFasterRCNNObjectDetector>iParseInputs (line 908)
lgraph = network.getNetworksForAlternateTraining();
Error in trainFasterRCNNObjectDetector (line 330)
[options, params] = iParseInputs(...
Error in TrainSqueakDetector (line 61)
detector = trainFasterRCNNObjectDetector(TrainingTables, layers, options, ...
Error in trainnew_Callback (line 39)
[detector, layers, options] = TrainSqueakDetector(TrainingTables,detector);
Error in gui_mainfcn (line 95)
feval(varargin{:});
Error in DeepSqueak (line 30)
gui_mainfcn(gui_State, varargin{:});
Error in matlab.graphics.internal.figfile.FigFile/read>@(hObject,eventdata)DeepSqueak('trainnew_Callback',hObject,eventdata,guidata(hObject))
Error while evaluating Menu Callback.
These are the training images.
Is the problem due to the version of MATLAB? I would be very grateful, if you have a look at the problem. Thank you in advance for your help.
Linux / MATLAB 2019a
Hi again,
Describe the bug
When running a multi detect, I get the following errors on various files
MException with properties:
identifier: 'MATLAB:struct2table:UnequalFieldLengths'
message: 'Input structure is a scalar, but its fields have different numbers of rows. If you intended to create a table with one row, set 'AsArray' to true.'
cause: {}
stack: [8×1 struct]
MException with properties:
identifier: 'MATLAB:badsubscript'
message: 'Index in position 1 exceeds array bounds (must not exceed 961).'
cause: {}
stack: [6×1 struct]
Operating system / MATLAB version
MacOS 10.14.5
Matlab 2018a
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.