Josh, thread1 apparently takes a set of images (n frames) and outputs a classification. While it is doing that it blocks thread2. You mention blocking during Caffe feature extraction. Is your meaning that the blocking only occurs during a part of the Caffe sequence or blocks through the whole sequence? I suspect that it blocks through the whole sequence.
I am not familiar with QT Threads but suspect that the classification variable is on the call to the Caffe sequence (thread1) and that QT Threads blocks access to the classification variable for the reason that it is an update variable. Since thread2 depends on the classification variable it waits until thread 1 is complete.
You say thread2 pauses while thread1 is processing a future frame. Now if we copy the value of the classification variable of thread1 to a different variable after each run of thread1, the new variable will not be blocked while thread1 runs again. The new variable will be blocked for that very short period of copying the value from the output of thread1.
Those interested in threading should look at Intel's
Threading Building Blocks.