How to get better answers to your computer vision questions

Today’s blog post is part one of a two-part series inspired by an email I received over the weekend from Aarav, a PyImageSearch reader who is interested in studying computer vision:

SUBJECT: How do I ask good computer vision questions?

Hey Adrian,

My name is Aarav. First, I just want to say how much I love your blog. It’s been a great resource to me.

I’m currently studying computer science at IIT Bombay. I’m very interested in computer vision and deep learning but am new to the fields.

I know I have a lot to learn but I’m self-conscious when asking questions.

I’ve posted questions on top computer vision LinkedIn groups, StackOverflow, and reddit:

(Links omitted in respect to Aarav’s privacy)

But I often don’t get a response. The responses that I do get are short, sometimes unpleasant, and are very unhelpful to me.

To be honest, it’s made me question whether I want to study this field.

Adrian, can you help me? Am I doing something wrong?

It would be helpful if you could do a blog post on how to ask good computer vision questions.

Thanks,

Aarav

I can empathize with Aarav — learning to ask a good question is an acquired skill, almost an “art” of sorts.

How do I know this?

Besides collectively spending seven years in school earning my bachelors degree and PhD (asking my own fair share of questions along the way), each day I spend a significant chunk of my time answering questions from PyImageSearch readers just like yourself who are interested in studying computer vision, but are hung up on a particular topic.

Over the past three years running PyImageSearch I’ve answered tens of thousands of computer vision questions…but I’ve never actually addressed the components of what constitutes a “good” computer vision question.

As Aarav posed, how do you know you’re asking a “good” question?

And how do you ask this question such that you:

  1. Obtain the knowledge/clarity you are seeking.
  2. While recognizing and respecting the time of others?

Is there such a magic formula?

Unfortunately, there isn’t a one-size-fits-all solution.

But there are general techniques you can (and should) be using when asking questions about computer vision (or any technical subject in general).

In today’s blog post we’ll discuss the five key components that go into asking a good computer vision question.

Next week we’ll apply these components to analyze and dissect actual PyImageSearch questions to better understand how to ask insightful questions.

Whether you are posting on StackOverflow, emailing me, or contacting any other subject matter expert, my hope is that you use these techniques to better help yourself and those who are responding to your questions.

Note: Aarav’s name, university and affiliation have been anonymized to protect the identity of the reader who asked the question. Any real-life correlation with the name, question, or affiliation is purely coincidental.

How to ask good computer vision questions

To start today’s blog post I want to share a personal story with you from my time in college studying computer vision.

We’ll then discuss what makes a “good” question, followed by reviewing the five key components required when asking any question.

A personal story

Figure 1: As an undergraduate student I had trouble grasping the concept of kernels and convolutions, one of the cornerstones of computer vision and image processing.

When I first started studying computer vision and image processing I had a lot of questions.

In particular, I vividly remember struggling with the concept of kernels and convolutions — I simply couldn’t translate the mathematics in my textbook to an actual practical implementation.

After my professor first discussed kernels and convolutions in class, I spent the next two days spinning my wheels, fruitlessly re-reading the same chapter in my textbook and reviewing the same lecture notes, only to get nowhere.

Before our next lecture, I went to my professor during office hours, tail between my legs, feeling half-ashamed that I couldn’t grasp such a simple concept (I even doubted my ability to study computer vision as a career).

My professor was a huge help and very patient with me.

He helped clear my doubts.

Looking back, I remember feeling extremely nervous and self-conscious going to see my professor:

I didn’t want to waste his time on questions I should have been able to understand and answer myself.

I couldn’t have been farther from the truth.

People like my computational photography professor (and many other teachers I’ve had) genuinely wanted to help me — all they asked for in return was:

  1. Respect for their time.
  2. The understanding that while they could guide me and point me in the right direction, I still had to do the hard work myself.

It’s been a long time since I thought about that interaction with my computational photography professor, but I was reminded of it this past weekend when I received the email from Aarav outlined above.

Aarav’s question helped me pause for a moment and reflect:

In a way I’ve come full-circle with my professor. While I’ll always consider myself a student (I am never done learning and will always make it a point to study and try new things), I have become a subject matter expert in computer vision.

Over the past three years running PyImageSearch, I have seen my share of good questions — ones that were well thought out and had a specific purpose and end goal.

I’ve also respond to questions that required a bit of digging and going back-and-forth with the reader to understand what the actual underlying problem was.

And I’ve even answered some extremely trying questions, requiring both the patience of myself and the reader.

My personal opinion is that we can all get better at asking questions, no matter how good we are already.

The more questions we ask, the more we can learn — but we need to do so in a manner that is respectful to those around is.

What is a good question?

You might be familiar with the old phrase:

Figure 2: “There is no such thing as a stupid question”

For the most part, this is true.

However, I think Carl Sagan, astronomer, cosmologist, and astrophysicist put it best when he said:

Figure 3: “…every question is a cry to understand the world. There is no such thing as a dumb question” — Carl Sagan

In highly technical, advanced fields such as computer vision there are bound to be questions — it’s the very nature and existence of these questions that make computer science (and all other sciences) possible.

Experts in advanced scientific fields are asking questions all the time.

In fact, researchers, quite literally make a job out of asking questions.

They question their research.

They question the research of their peers.

And they derive more questions from their original questions.

You might already be familiar with this process — it’s called the scientific method:

Figure 4: Whether we are just getting started in our science careers or already performing state-of-the-art research, we can all apply the scientific method.

  • Step #1: Ask a question and develop a hypothesis.
  • Step #2: Run an experiment to test your hypothesis.
  • Step #3: Measure and record the results of your experiment.
  • Step #4: Draw conclusions from your results.
  • Step #5: Go back to Step #1 and repeat using your new found knowledge.

These exact steps allow us to perform novel research and advance the current state-of-the-art…

…but this process isn’t just for researchers, it’s for anyone who is involved in computer science.

While researchers are advancing their respective fields, on the opposite side of the spectrum we have students we are just trying to get started by asking questions regarding the very fundamentals of computer vision. These initial questions build the foundation on which they’ll ask even more advanced questions later in their careers.

Simply put:

We need questions to be asked. We need questions to be answered. Without this process, science cannot progress.

Given the inevitability of questions, both at the very high level (i.e., state-of-the-art research) to the very fundamentals (i.e., the building blocks of computer vision) we need to focus on on how to write more insightful, intelligent questions with specific goals in mind that can be answered by others.

Five components of a practical, insightful question

Figure 5: The five components of a practical insightful question.

I’m going to stop focusing on what makes a “good” question and instead focus on what makes an “insightful” question.

Asking an insightful question starts well before it’s typed into an email message or comment form.

I’ve included the components of writing practical, insightful computer vision questions below:

  1. Know the purpose.
  2. Understand the context.
  3. Do your research.
  4. Ask your question (and be respectful of others time)
  5. Repeat the process as necessary.

We’ll review each of these components in detail in the remainder of this post.

Component #1: Know the purpose

Before you ask a question, you should first take a step back and ask yourself why you are asking the question in the first place.

More specifically, ask yourself: “After asking this question, what knowledge/insight do I hope to obtain?”

You see, all insightful, intelligent questions have a purpose — they all have an end goal. What is your end goal in asking a question?

By combining the purpose (Component #1) along with the context (Component #2) allows subject matter experts to better help you.

Component #2: Understand the context

Understanding the “why behind your question is helpful, but it’s also not enough — I need the context of your question as well.

What do I mean by context?

Context are the circumstances that form the setting of your question.

What relevant life circumstances are prompting this question?

Are you a student working on a tricky homework assignment?

Are you a researcher performing state-of-the-art experiments and hoping to publish your results?

Or are you simply curious about a particular computer vision topic and want to learn more?

Understanding not only why you are asking the question but also the context behind it makes your question much easier to answer.

The more context you can provide regarding your question, the better.

Component #3: Do your research

After understanding the purpose of your question, you should take some time to do a bit of initial research, even if its only on an internal level.

Ask yourself:

  • Do I have any pre-existing knowledge about this topic? If so, what do I already know?
  • Where can I find resources related to this question/subject matter?
  • Are there any existing tutorials, blog posts, research papers, etc. that address my question?
  • Have I spent 15-20 minutes on Google querying for content similar to my question and reading what others have asked before me?

You may be able to answer all of these questions — or you may only be able to answer none of them.

The point of this exercise isn’t to “check each item off”, but rather to take a step back and think critically about your question.

Component #4: Ask your question (and be respectful of others time)

By the time you actually ask your question, you should be well prepared.

You should understand what your end goals are and what you hope to learn/accomplish by asking your question.

You should have done your homework on the question to seen if others have asked similar questions (as well as reviewed the responses).

Finally, and most importantly:

Ask your question while being respectful of others time.

Regardless of whether you are posting on StackOverflow, LinkedIn, or asking a subject matter expert (like myself), respect their time.

  • Don’t expect the person you are asking to writeup a multi-page email response to your question, analyzing every little detail and including references to an exhaustive list of papers you should read.
  • Don’t expect them to write code for you.
  • And don’t expect them to hold your hand.

Be realistic and set your expectations accordingly:

  1. Ask your question with your specific end goal and context in mind.
  2. And you will receive a response that helps point you in the right direction (but won’t do all the hard work for you). You’ll need to do the hard work yourself.

A question is only as good as the thought, time, and effort that goes into it.

If you take the time to ask questions with a well thought out purpose and end goal, you’ll find that the responses you receive in return are much better and helpful to accomplishing your particular project/task.

Component #5: Repeat the process as necessary

More times than not, one question leads to another.

We ask a question that clarifies a particular matter, only to find that it further muddies the water of another concept downstream — we again need help and explanation.

In this case, it’s time to repeat the process.

Assess your new question.

Why are you asking it?

What is your end goal?

Do your research on the question.

Then ask (while respecting others time).

Rinse and repeat.

Asking good questions takes practice

As you get better at asking insightful questions you’ll start to notice a pattern in how others ask questions as well.

You’ll begin to sense when a coworker or colleague has done adequate research to prepare their question…or if they are flying by the seat of their pants, hoping for a solution to suddenly materialize from a poorly thought out inquiry.

As a subject matter expert, I can tell you what a huge pleasure it is to answer questions that have a specific purpose and end goal.

love answering these questions because I can not only clarify any doubts, but also provide advice on how to solve the overall problem the reader is working on.

The reader walks alway happy, not only because their question is answered, but also because they have more resources they can leverage to help solve their problem.

On the contrary, I can also tell you how trying and tedious it can be to answer questions where readers:

  • Are not being respectful of my time.
  • Haven’t taken the time themselves to consider why they are asking the question (i.e., the end goal + context).

In next week’s blog post, we’ll analyze actual questions I have received on the PyImageSearch blog, reviewing them piece-by-piece, and see the five components of asking a good question in action. These examples will help you improve your own ability to ask questions — because let’s face it, we all can use a little practice.

Summary

Today’s blog post discussed how to ask good computer vision questions.

The five components of asking a good question involves:

  1. Knowing the purpose of your question (i.e., the end goal).
  2. Relaying the context of the question (the situation you are in prompting the question to be asked).
  3. Doing your research.
  4. Asking the question while being respectful of others time.
  5. Repeating the process as necessary.

This formula can also be extended to other technical domains outside computer science as well.

In the second tutorial in this two-part series, I’ll discuss how to ask questions specifically on the PyImageSearch blog.

We’ll look at actual emails I have received here on the PyImageSearch blog, and take them apart, discussing the positive (and negative) qualities of the question — I’ll even suggest methods to better phrase your inquires to help ensure you find the information you’re looking for.

To be notified when this next “can’t miss” blog post goes live, be sure to enter your email address in the form below to join the PyImageSearch Newsletter!

, ,

22 Responses to How to get better answers to your computer vision questions

  1. FanOfAdrian February 27, 2017 at 11:53 am #

    Best guide, best blogger… I am the most benefited person from pyimagesearch.
    May you get all the success.

    • Adrian Rosebrock February 27, 2017 at 12:01 pm #

      Thank you, I appreciate the kind words.

  2. Haydon Berrow February 27, 2017 at 12:19 pm #

    I think I would add to#4 “show that you have done your research”. I think people are more willing to help if they can see that I’m turning to the bulletin board/whatever as a last resort instead of a first resort.

    • Adrian Rosebrock February 27, 2017 at 5:04 pm #

      Great point Haydon. In the next blog post in the series I’ll be discussing specific questions I’ve received on PyImageSearch where the “show you’ve done your research” part comes into play. I don’t expect people to think of asking a question as a “last resort”, but I do think it’s critical to perform some upfront research and familiarize yourself with the problem better.

  3. Tony Holdroyd February 27, 2017 at 2:56 pm #

    Excellent idea for a post, and equally excellent response to that idea.
    I can’t claim to have asked good questions in the past, but I’m sure this advice will help me to do so in the future…

    • Adrian Rosebrock February 27, 2017 at 5:01 pm #

      Your questions have always been a pleasure to answer Tony!

  4. auro February 27, 2017 at 5:26 pm #

    Don’t be a burden to others. If a question has many dimensions and is complex, articulate only one dimension, i.e., make the question as narrow and specific as your can. The response may lead you to solve the other dimensions on your own.

    • Adrian Rosebrock February 27, 2017 at 6:44 pm #

      Excellent insight Auro, thank you for sharing.

  5. H.Y.W. February 27, 2017 at 11:07 pm #

    Thank you, Adrian, for such a good guide. Your posts are the best one I have ever found. Always easy to read and understand.

    • Adrian Rosebrock February 28, 2017 at 6:57 am #

      Thank you!

  6. Suneil February 28, 2017 at 12:48 am #

    I’ve used this webpage http://www.catb.org/~esr/faqs/smart-questions.html as the quintessential guide to asking good questions. Over the years, its been updated to reflect the changes in the mediums (stackoverflow vs BBS), but the theme is very similar to what you have written.

    • Adrian Rosebrock February 28, 2017 at 6:57 am #

      This is a great guide (one that I have not seen before), thank you for sharing Suneil!

  7. ete February 28, 2017 at 6:46 am #

    Interesting blog post! I realized that asking questions usually don’t solve my problems but the answers guide me to a solution. I miss the possibility of exchanging ideas and concept, while talking with colleagues. Other (especially more advanced) colleagues usually see my problems from a different angle, which can help to get further. Thanks for helping, Adrian!

  8. Jie March 1, 2017 at 9:25 am #

    It’s always great pleasure reading your blog, Adrian. You got great ideas of choosing fun topics to write, that makes you not only a computer vision researcher, but also a life coach!

    • Adrian Rosebrock March 2, 2017 at 6:50 am #

      Thank you Jie! I had never considered myself as a life coach before, that is very kind 🙂

  9. nirmala March 7, 2017 at 12:05 am #

    hi Adrian,
    I am Nirmala ,studying in M.TECH. As i am doing my final project in computer vision field using python your blog is being very helpfull to me.
    hu moment vector of 24 hu moments value which I calculated for each frame of video,now i have to find out the changes in successive frame’s hu moment so that i can detect change in shape.Please tell me how can i access those vectors frame by frame and find out the difference between successive frame’s hu’s moments??

    • Adrian Rosebrock March 8, 2017 at 1:13 pm #

      Given a 24-d vector your goal is to determine how much these feature vectors have changed between frames? You would typically compute the Euclidean distance between the vectors and use this to tell you how much the vectors have changed.

  10. Raghunandan Palakodety March 13, 2017 at 1:49 pm #

    Mr. Rosebrock’s blog is amazing. I just started following his blog on asking insightful questions.

    • Adrian Rosebrock March 15, 2017 at 9:09 am #

      Thank you Raghunandan, I appreciate the kind words 🙂

  11. Johnny March 23, 2017 at 9:57 am #

    Be-You-T-Full. Another good one sir. May these words ring in the ears and grow awesome computer vision students. If I may add. A lot of times these simple steps can help us get back to the wonder and awe found in such things/study/findings.

    Thanks again

    Johnny

    • Adrian Rosebrock March 25, 2017 at 9:39 am #

      Thank you Johnny, I appreciate it!

Trackbacks/Pingbacks

  1. A guide to asking questions on the PyImageSearch blog - PyImageSearch - March 6, 2017

    […] last week’s blog post I discussed the five key components of asking insightful computer vision questions (with the end goal of getting you better […]

Leave a Reply