
One reason artificial intelligence and neural nets became so popular is probably professor Fei Fei Li’s CS231n visual recognition open course at Stanford. Along with many other influencers such as Andrew Ngai, they attracted lots of attention to deep learning. Whether it is detecting a cancer tissue in medical images, adding cute animal ears on top of selfies, or driving a car onto the street, Computer Vision (CV) has painted us a bright future where machines can make our lives more convenient in many ways.
In this article, let us first learn about some histories related to CV. Then we will go into some rudimentary techniques in CV such as line and edge detection. After we built up the basics and the intuitions, we will go into the details on how modern CV models work. After a brief introduction of deep learning, we will go into more detail in the fundamentals of convolutional neural networks. In the end, we will go over some of the state-of-the-art algorithms nowadays.
Computer Vision, a Brief History
“If we want machines to think, we need to teach them to see.”
— Fei Fei Li
Diverted from artificial intelligence, research in the field of CV began around the 1960s. One of the earliest relevant papers may be Receptive Fields of Single Neurons in the Cat’s Striate Cortex by Hubel and Wiesel in 1959, where they inserted electrode into a cat’s brain and observed response after changing what the cat sees.
The 2 published another paper in 1962, presented their word on a more detailed investigation on how the cat’s brain processes visual information. The early research in a neuroscience-related approach was rather abject. I have mentioned in one of my previous articles, where the neural-network-based approach went through a dark time until the 2000s.
There were other advanced in the field. For example, Hough’s transform, named after a patent in 1962 after Paul Hough’s patent Hough’s transform is now widely used in fields such as autonomous driving. Edge detection proposed by John Canny in 1986 is used quite a lot in edge detection. Edge detection is applied in many different fields such as face recognition.
When I was studying at Queens University in Canada (where Elon Musk also went to), Professor Greenspan also demonstrated on their progress in object permanence for machines. The Canadians contributed a lot to the field of AI research, including the well known CIFAR.
Another notable mention before we go into deep learning would be Lenna Forsén. If you are into any field related to digital image processing, chances are that you have seen her picture somewhere. Lawrence Roberts was the first man who used her photo from a Playboy magazine in 1960 in his master’s thesis.
The picture then somehow became a standard test image in the field of image processing. Playboy magazine planned to file a lawsuit for portrait rights but kindly gave it away when they realize it was for research and education.
Now let us get back to neural networks. Inspired by Hubel and Wiesel’s work, Kunihiko Fukushima invented the “Neocognitron” in 1980. Neocognitron was arguably the earliest version of a convolutional neural network. The network was used to recognize hand-written characters.
Yann LeCun, famous for his work on the convolutional neural networks, applied back-propagation to the convolutional neural networks in 1989. He then published LeNet-5 in 1998 with gradient-based learning algorithms.
The turning point of neural networks happened in 2012. Alex Krizhevsky, along with his AlexNet, won the ImageNet competition on September 30, demonstrated the superior performance of approaches based on convolutional neural networks.
The leading scientist and principal investigator of ImageNet, professor Fei Fei Li, began working on the idea of ImageNet since 2006. She continued her travel in conferences and talks around the world, influencing others into the field of computer vision.
Another notable mention would probably be Joseph Redmon. Redmon invented the YOLO nets in 2016. The word YOLO probably came from a popular internet slang “You Only Live Once”, suggesting people to live their life to their full extent and generally used when young people are about to perform a reckless move. In the paper, YOLO stands for “You only look once”, which offers fast object detection based on neural networks.
Redmon also thinks himself as a pony inside his resume, referring to “My Little Pony”, which is an American franchise targeting little girls.
Advancements in computer vision are making our world better in many different ways. It is time for us to get into how those algorithms work!
Computer Vision: The Basics, and Before Neural Networks
Since the time of television, monitor screens display an image by adjusting the brightness of Cathode Ray Tubes (CRT) with 3 different colors — Red (R), Green (G) and Blue (B). Despite our screen nowadays probably uses more advanced hardware such as Liquid Crystal Display (LCD) or Organic Light-Emitting Diodes (OLED), the images are usually stored and transmitted digitally by some format of an RGB table. The Bitmaps, for example, store the images in arrays of hexadecimal values ranging from 0x000000 to 0xFFFFFF, which can represent 3 numbers ranging from 0 to 255.
Some image formats may store the image differently due to compression format or other conventions, but they can usually be converted back into arrays of RGB values. In the context of mathematical intuition, the differences in RGB values do not represent their actual difference in terms of human perception. The Commission InternationaledeL’éclairage (CIE) came up with the ΔE metric, which represents the color difference more accurately in terms of human perception.
How computer stores and processes graphical information is another immense field, which we can get deeper into some other time in another article.
Edge Detection and Feature Extraction
“A visual image is built by our brain’s ability to package groups of pixels together in the form of edges.”
— Jill Bolte Taylor
It would be difficult to analyze an image upright, as the pixel arrays can be complex and noisy. This is why researchers usually extract features such as edge and lines. These features can be represented by much simpler numerical values or relationships. There are many ways to detect edges such as taking a derivative or Canny’s method. In this article, we will briefly go over Sobel’s method.
Edges are essentially high difference in the pixels, thus most edge detection method tries to extract the regions where the difference between the pixels are detected. Sobel’s method detects the edges by conducting convolutions (indicated by the operator *) on 3×3 regions of the image with 2 special kernels. The kernels will yield the horizontal and vertical components of the gradient which can be used to calculate a vector representing the direction and strength of edges.
More details on the math can be found on Wikipedia, and are explained in the video below. The author also made videos on other algorithms for image processing such as Canny edge detector and blur filters.
Finding the Edges (Sobel Operator), Video From Youtube
Hough Transform and Autonomous Driving
“In Soviet Russia, car drives you!”
— Russian Reversal
Imagine we are engineers working for an automobile company that wishes to invent its self-driving cars. At some point, we will have to teach the car to drive inside the lane on the road. Otherwise, our car will drive like that Asian women driver in Family Guy.
If the traffic lines are continuous, it would be easy. We can make sure that the car moves back a little bit when it gets too close to either side of the line. But we know that in most places, California for example, there are dashed lines on the street. If the car only detects its proximity to the lines, it would probably go wild at those gaps between the solid lines.
Thanks to Hough transform, we will be able to reconstruct the straight line from the dashed ones. Hough transform converts a line inside the x-y space into a point inside m-c space. A point inside the x-y space, however, will be converted to a line inside the m-c space. The m-c space also has the property that, all the lines intersects to the same point, will correspond to the points that are on the same line inside the x-y space. For more about line detection by Hough Transform, here is a paper.
Not only Hough Transforms detect lines, but it also detects circles. Read about Circle Hough Transform and Generalised Hough Transform to find out more!
Advancing to Deep Learning: Convolutional Neural Networks & Residual Neural Networks
“No one tells a child how to see, especially in the early years. They learn this through real-world experiences and examples.”
— Fei Fei Li
The phrase “Machine Learning” first came up from Arthur Samuel in 1952. However, research in neural networks was heavily discouraged until the 2000s. The earliest version of an artificial neuron was invented by neurophysiologist Warren McCulloch and mathematician Walter Pitts in 1943. It was meant to describe how neurons work inside our brains.
Convolutional Neural Networks (CNN) became a star after the 2012 ImageNet contest. Since then, we started to see neural networks related models in over 80% of the newly published paper in any field that can relate to it. There were many other machine learning algorithms such as k-NN and Random Forest but were outmatched by the performance of CNN in terms of image processing.
Deep Convolutional Neural Networks
Whenever convolutional neural networks were mentioned, the first who came to mind of a data scientist is probably Yann LeCun, who published his paper of LeNet-5 in 1998.
Typically, CNN is constructed by 4 types of layers. I have mentioned 3 in my Alpha Go article because those are the 3 more commonly seen ones. Researchers may also add little twists to their paper and invent new types of layers. The 4 layers are convolutional, pooling layers, Rectified Linear Unit (ReLU) layers, and Fully Connected layers.
1. Convolutional Layer
Convolutional Layer usually appears as the first layer of a Convolutional Neural Network. These types of layers will scan through the source layer with a filter, and put the sum into the destination layer. Some filters are good at detecting edges and some are good in other tasks. The process of convolution can extract spatial information inside the 2D image and pass it to the next layer. More details on different kinds of convolutional filters and their applications in Computer Vision can be found here.
2. Pooling Layer
Pooling Layer iterate through the source layer and selects a specific value inside the bounded region. The value is typically maximum, minimum, average within the region. Reducing information into a smaller size is also called “downsampling” or “subsampling”.
When computational resources were limited, networks preprocessed by convolutional and pooling layers were much more resource-friendly compared to feeding the pixels directly into nodes of a Multi-layer Perceptron. In special cases, “upsampling” techniques can also be used to generate more data.
ReLU Layer
ReLU layer feeds the values into a ReLU function, which just gets rid of the negative values. ReLU is a popular activation function used in neural networks because it can reduce the likelihood of the Vanishing Gradient problem.
Fully Connected Layer
Fully Connected Layer is essentially a Multi-layer Perceptron, which is sometimes called “softmax” and essentially does something called “weighted sum”. I have explained more about Multi-layer perceptron including feedforward and backpropagation in my Alpha Go article.
Deep Residual Neural Networks
In 2015, Kaiming He and his team at Microsoft Research published their paper Deep Residual Learning for Image Recognition. The paper applied residual learning to convolutional neural networks and achieved better performance than all other State-of-the-Art (SOTA) models at that time.
One key concept of residual learning is the use of “shortcut connections”. This involves adding a connection between the layers of the network, so that information can be passed by skipping layers. Such a structure is also found in the analysis of the human brain. The network with skipped weights is also known as Highway Networks.
The network also achieved better performance on the CIFAR-10 datasets.
Computer Vision Today: Semantic Segmentation, Object Detection, and Image Classification
“Big brother is watching you!”
— 1984, George Orwell
Along with the advancements in computer vision, artificial intelligence nowadays can do many crazy things. Out of concerns for privacy invasion, the European Union is even considering banning facial recognition. While other countries such as China, already embedded facial recognition into their social credit system.
Everything has a trade-off. With the advances of electronic payments and cameras on the street, I can assure you that there are way fewer pickpockets happening on the streets in Shanghai than it used to be. There are also much fewer crime activities in Shanghai compare to Los Angeles.
When we talk about computer vision, what came to our mind might be labeled images in bounding boxes. The objects are first outlined by the regions through a Region Proposal process, and then what is inside the region will be detected. There are 3 popular fields of research: Semantic Segmentation, Object Detection, and Image Classification.
Semantic Segmentation: CASENet and Mask R-CNN
Semantic Segmentation is highly related to the detection of boundaries and edges. CASENet, for example, outlines the boundaries of the objects.
Mask R-CNN may be a more popular model known for Semantic Segmentation. The network evolved from R-CNN to Fast R-CNN and then Faster R-CNN.
Object Detection: YOLOv1, YOLOv2, and YOLOv3
“You only look once!”
— Joseph Redmon
Published by Joseph Redmon in 2016, YOLOv1 already demonstrated much faster speed compared to other models at that time in object detection. The author incrementally improved the model into YOLOv2 and YOLOv3 with even better performance.
Image Classification: ImageNet State-of-the-Art and Epic Failures of CNN
ImageNet invites researchers around the world to compete on their data set, the state-of-the-art models are still rapidly iterating. Maybe you will define the next SOTA?
There are other interesting facts on CNN. A group of researchers published a paper on ICLR 2019, showing that CNN classifies images based on textures rather than shapes as a human would.
The neural networks are also vulnerable to high-frequency disturbances. The recent paper on DiffTaichi showed that VGG-16 would classify a squirrel into a goldfish when ripples are added into the picture.
Ian Goodfellow had studied the adversarial attacks against neural networks a long time ago, and we will go into him more when we learn about generative models.
Words in the end…
“AI is everywhere. It’s not that big, scary thing in the future. AI is here with us.”
— Fei Fei Li
I have finally finished this article as planned. There are way too many to write about in the field and you can never fit them all inside a 10-minute article. I hope this article has raised your interest in some of them. I might write about gesture recognition and social behavior prediction in my future articles.
CV and NLP are the two hot topics in artificial intelligence. Cloud AI platforms nowadays are putting most of their efforts into those two because of the potential applications can be made out of them. I have also written an article on NLP. I plan to write about automated machine learning, generative models and cloud platforms later on. Follow me to learn more.
Also, I had another article on front-end frameworks for computer vision. These frameworks are easy to try for yourself, maybe you can make some cool applications out from them tonight!
Original post: https://towardsdatascience.com/understanding-cv-how-ai-sees-our-world-a977b90bf612
Hello, i feel that i saw you visited my blog so i got here to return the choose?.I’m attempting to in finding issues to enhance my web site!I guess its good enough to use some of your concepts!!
Do you have a spam issue on this site; I also am a blogger, and I was wondering your
situation; we have created some nice procedures and we are
looking to trade solutions with others, be sure to shoot me an email if
interested.
Hi just wanted to give you a brief heads up and let you know a few of the pictures aren’t loading properly.
I’m not sure why but I think its a linking issue.
I’ve tried it in two different browsers and both show the same results.
Like!! Thank you for publishing this awesome article.
I’m the co-founder of JustCBD label (justcbdstore.com) and am aiming to expand my wholesale side of company. It would be great if anybody at targetdomain share some guidance ! I thought that the most effective way to accomplish this would be to talk to vape companies and cbd retail stores. I was hoping if anyone could recommend a reputable site where I can buy Vape Shop Business Sales Leads I am presently examining creativebeartech.com, theeliquidboutique.co.uk and wowitloveithaveit.com. Unsure which one would be the best choice and would appreciate any assistance on this. Or would it be easier for me to scrape my own leads? Suggestions?
I’m the co-founder of JustCBD label (justcbdstore.com) and I’m presently planning to develop my wholesale side of company. It would be great if anybody at targetdomain is able to provide some guidance . I thought that the most ideal way to accomplish this would be to connect to vape stores and cbd stores. I was really hoping if anyone could recommend a dependable website where I can purchase CBD Shops Business Marketing Data I am presently reviewing creativebeartech.com, theeliquidboutique.co.uk and wowitloveithaveit.com. Not exactly sure which one would be the very best selection and would appreciate any advice on this. Or would it be much simpler for me to scrape my own leads? Ideas?
Good information. Lucky me I recently found your website by chance (stumbleupon). I have saved as a favorite for later!
I could not refrain from commenting. Well written!
Hi, I do believe this is a great blog. I stumbledupon it 😉 I may return once again since i have book-marked it. Money and freedom is the greatest way to change, may you be rich and continue to help others.
Hello there! I could have sworn I’ve visited this site before but after browsing through some of the posts I realized it’s new to me. Regardless, I’m certainly delighted I came across it and I’ll be book-marking it and checking back frequently!
Can I just say what a relief to uncover somebody who actually knows what they’re discussing over the internet. You actually understand how to bring an issue to light and make it important. More and more people must read this and understand this side of the story. I was surprised you aren’t more popular because you surely possess the gift.
Very good post! We are linking to this particularly great content on our website. Keep up the good writing.
There’s definately a great deal to learn about this topic. I like all of the points you’ve made.
This is the perfect site for anyone who would like to understand this topic. You understand so much its almost tough to argue with you (not that I personally will need to…HaHa). You certainly put a fresh spin on a topic which has been written about for many years. Excellent stuff, just great!
After exploring a few of the blog posts on your web page, I seriously like your way of blogging. I book-marked it to my bookmark website list and will be checking back in the near future. Please check out my web site too and tell me your opinion.
There’s certainly a great deal to find out about this topic. I really like all the points you made.
Aw, this was an extremely good post. Finding the time and actual effort to make a good article… but what can I say… I put things off a whole lot and never seem to get anything done.
Good day! I could have sworn I’ve been to this site before but after looking at many of the articles I realized it’s new to me. Anyways, I’m certainly delighted I stumbled upon it and I’ll be book-marking it and checking back frequently!
This website was… how do I say it? Relevant!! Finally I have found something that helped me. Thanks a lot!
I’m amazed, I must say. Rarely do I encounter a blog that’s equally educative and interesting, and without a doubt, you have hit the nail on the head. The problem is something too few people are speaking intelligently about. I’m very happy that I found this in my search for something regarding this.
Hi, I do believe this is an excellent site. I stumbledupon it 😉 I’m going to come back yet again since I book-marked it. Money and freedom is the best way to change, may you be rich and continue to guide other people.
Pretty! This has been an extremely wonderful article. Many thanks for supplying this information.
Government Polytechnic Zalaki Pittacus Lore Generation One Series Order
Here is my website; bog (ebooksa-store.company.site)
This excellent website certainly has all the information and facts I wanted about this subject and didn’t know who to ask.
This is a topic that is close to my heart… Cheers! Where are your contact details though?
I couldn’t resist commenting. Exceptionally well written!
Way cool! Some extremely valid points! I appreciate you writing this article and also the rest of the site is really good.
There’s definately a great deal to find out about this topic. I love all the points you have made.
Pretty! This has been an extremely wonderful post. Thanks for providing this info.
Your style is unique compared to other people I’ve read stuff from. Thank you for posting when you’ve got the opportunity, Guess I will just book mark this page.
I couldn’t refrain from commenting. Perfectly written!
Pretty! This was an extremely wonderful post. Many thanks for providing these details.
This web site certainly has all the information and facts I wanted concerning this subject and didn’t know who to ask.
I need to to thank you for this fantastic read!! I absolutely loved every little bit of it. I’ve got you saved as a favorite to look at new stuff you post…
Hi, I do believe this is a great website. I stumbledupon it 😉 I’m going to return once again since I book-marked it. Money and freedom is the best way to change, may you be rich and continue to guide other people.
I was very happy to find this great site. I wanted to thank you for your time due to this fantastic read!! I definitely savored every bit of it and i also have you saved as a favorite to look at new things in your website.
This site was… how do you say it? Relevant!! Finally I have found something that helped me. Appreciate it!
There’s certainly a lot to know about this topic. I love all of the points you have made.
Way cool! Some extremely valid points! I appreciate you penning this article and the rest of the website is also really good.
Next time I read a blog, Hopefully it doesn’t fail me just as much as this one. After all, Yes, it was my choice to read through, nonetheless I really thought you’d have something helpful to talk about. All I hear is a bunch of complaining about something that you could possibly fix if you weren’t too busy looking for attention.
I blog quite often and I really appreciate your information. The article has truly peaked my interest. I will bookmark your site and keep checking for new details about once per week. I opted in for your RSS feed as well.
A fascinating discussion is definitely worth comment. I do believe that you need to write more about this issue, it might not be a taboo subject but usually people do not talk about these issues. To the next! Kind regards!!
This is a topic that is near to my heart… Best wishes! Exactly where are your contact details though?
I’m amazed, I have to admit. Seldom do I come across a blog that’s both educative and amusing, and without a doubt, you have hit the nail on the head. The problem is something that too few men and women are speaking intelligently about. I’m very happy I stumbled across this during my hunt for something relating to this.
You ought to take part in a contest for one of the finest blogs on the web. I will recommend this website!
I blog quite often and I really appreciate your content. This great article has really peaked my interest. I will bookmark your website and keep checking for new information about once a week. I subscribed to your RSS feed too.
Having read this I thought it was rather informative. I appreciate you spending some time and effort to put this article together. I once again find myself spending a lot of time both reading and posting comments. But so what, it was still worth it!
Way cool! Some extremely valid points! I appreciate you writing this write-up and the rest of the site is also really good.
The next time I read a blog, Hopefully it does not disappoint me as much as this one. I mean, Yes, it was my choice to read through, nonetheless I actually believed you would probably have something useful to talk about. All I hear is a bunch of moaning about something that you could possibly fix if you weren’t too busy seeking attention.
Great post. I will be experiencing many of these issues as well..
Having read this I thought it was very informative. I appreciate you spending some time and energy to put this article together. I once again find myself spending a significant amount of time both reading and leaving comments. But so what, it was still worthwhile!
I’m amazed, I have to admit. Seldom do I encounter a blog that’s both equally educative and entertaining, and let me tell you, you’ve hit the nail on the head. The issue is an issue that not enough folks are speaking intelligently about. Now i’m very happy I stumbled across this in my search for something regarding this.
I could not refrain from commenting. Very well written!
Very good information. Lucky me I recently found your blog by chance (stumbleupon). I’ve bookmarked it for later!
Having read this I believed it was rather enlightening. I appreciate you spending some time and energy to put this information together. I once again find myself personally spending a lot of time both reading and posting comments. But so what, it was still worthwhile!
A motivating discussion is definitely worth comment. I do believe that you ought to publish more on this issue, it may not be a taboo matter but usually folks don’t discuss these topics. To the next! Many thanks!!
Spot on with this write-up, I absolutely believe this web site needs a great deal more attention. I’ll probably be back again to read through more, thanks for the info!
I love it whenever people get together and share opinions. Great site, keep it up!
I enjoy reading a post that can make men and women think. Also, many thanks for allowing me to comment!
An impressive share! I’ve just forwarded this onto a friend who had been doing a little research on this. And he in fact bought me breakfast because I found it for him… lol. So allow me to reword this…. Thank YOU for the meal!! But yeah, thanx for spending time to discuss this subject here on your website.
An impressive share! I have just forwarded this onto a friend who has been conducting a little research on this. And he actually ordered me lunch because I stumbled upon it for him… lol. So let me reword this…. Thanks for the meal!! But yeah, thanks for spending the time to discuss this issue here on your website.
Nice post. I learn something new and challenging on sites I stumbleupon every day. It will always be interesting to read through content from other writers and use something from other web sites.
This is a really good tip especially to those new to the blogosphere. Simple but very accurate info… Thank you for sharing this one. A must read article!
Can I just say what a relief to uncover somebody that really understands what they’re discussing on the web. You certainly realize how to bring an issue to light and make it important. A lot more people must look at this and understand this side of your story. I was surprised that you’re not more popular because you certainly have the gift.
Spot on with this write-up, I absolutely feel this site needs far more attention. I’ll probably be returning to read more, thanks for the information!
Its like you learn my thoughts! You seem to know so much about this, like you wrote the guide in it or something. I believe that you simply could do with some p.c. to force the message home a bit, however instead of that, this is excellent blog. A great read. I will definitely be back.|
Everything is very open with a clear description of the challenges. It was really informative. Your website is useful. Thanks for sharing!
Pretty! This was an extremely wonderful article. Thanks for supplying this info.
After going over a handful of the articles on your blog, I seriously like your way of blogging. I book-marked it to my bookmark webpage list and will be checking back soon. Please check out my web site too and tell me what you think.
An outstanding share! I have just forwarded this onto a friend who was conducting a little research on this. And he actually bought me dinner because I found it for him… lol. So let me reword this…. Thanks for the meal!! But yeah, thanx for spending the time to discuss this matter here on your site.
It’s hard to come by knowledgeable people in this particular subject, however, you seem like you know what you’re talking about! Thanks
Hi there, just wanted to say, I loved this blog post. It was practical. Keep on posting!|
I’m impressed, I must say. Rarely do I come across a blog that’s equally educative and interesting, and without a doubt, you’ve hit the nail on the head. The issue is something that too few people are speaking intelligently about. I am very happy that I stumbled across this during my hunt for something regarding this.
Achieving your fitness goals does not need a certified personal trainer or an expensive gym memberships, it is not hard to exercise at home. It is easy to go down a training and fitness rabbit hole, however, when you are looking for the best home exercise equipment to outfit your personal home gym.
Everything is very open with a very clear description of the issues. It was really informative. Your website is useful. Thank you for sharing!
It’s hard to find experienced people for this subject, but you sound like you know what you’re talking about! Thanks
I really love your blog.. Pleasant colors & theme. Did you build this amazing site yourself? Please reply back as I’m attempting to create my own website and would like to learn where you got this from or exactly what the theme is called. Appreciate it!
Having read this I thought it was really enlightening. I appreciate you finding the time and energy to put this article together. I once again find myself spending way too much time both reading and posting comments. But so what, it was still worthwhile!
This blog was… how do you say it? Relevant!! Finally I’ve found something which helped me. Thank you!
Saved as a favorite, I love your site!
Oh my goodness! Awesome article dude! Thanks, However I am going through difficulties with your RSS. I don’t understand the reason why I can’t subscribe to it. Is there anybody else getting identical RSS problems? Anybody who knows the answer will you kindly respond? Thanks!!
This is a topic which is near to my heart… Cheers! Where are your contact details though?
I’d like to thank you for the efforts you have put in penning this website. I’m hoping to view the same high-grade blog posts from you in the future as well. In truth, your creative writing abilities has inspired me to get my own website now 😉
I need to to thank you for this good read!! I certainly loved every little bit of it. I have got you book-marked to check out new things you post…
You made some good points there. I looked on the net for additional information about the issue and found most individuals will go along with your views on this site.
Thank you for the good writeup. It in fact was a amusement account it. Look advanced to more added agreeable from you! However, how could we communicate?|
This page truly has all of the information I wanted about this subject and didn’t know who to ask.
Your style is so unique compared to other folks I have read stuff from. Many thanks for posting when you’ve got the opportunity, Guess I will just book mark this blog.
You ought to take part in a contest for one of the finest websites online. I will recommend this website!
Hi there, I think your site may be having internet browser compatibility problems. When I take a look at your web site in Safari, it looks fine however, when opening in Internet Explorer, it’s got some overlapping issues. I just wanted to provide you with a quick heads up! Apart from that, wonderful blog!|
This is a topic that’s close to my heart… Take care! Exactly where are your contact details though?
I’m amazed, I have to admit. Seldom do I come across a blog that’s both educative and interesting, and without a doubt, you have hit the nail on the head. The issue is something which too few men and women are speaking intelligently about. Now i’m very happy that I found this during my search for something concerning this.
I’m amazed, I must say. Rarely do I encounter a blog that’s both equally educative and engaging, and without a doubt, you have hit the nail on the head. The issue is something which too few men and women are speaking intelligently about. Now i’m very happy that I stumbled across this during my search for something concerning this.
Nice post. I learn something totally new and challenging on blogs I stumbleupon everyday. It will always be helpful to read through content from other authors and use something from other websites.
Good article! We are linking to this great article on our website. Keep up the good writing.
I want to to thank you for this good read!! I certainly loved every little bit of it. I’ve got you book-marked to check out new things you post…
Very good article. I definitely love this website. Stick with it!
Hello there! This blog post could not be written any better! Reading through this article reminds me of my previous roommate! He continually kept preaching about this. I’ll forward this article to him. Pretty sure he’s going to have a great read. Many thanks for sharing!
I couldn’t resist commenting. Perfectly written!
I really like it whenever people get together and share ideas. Great website, stick with it!
Can I just say what a relief to uncover somebody that really knows what they’re talking about on the net. You definitely understand how to bring an issue to light and make it important. A lot more people ought to read this and understand this side of your story. I was surprised you aren’t more popular because you certainly possess the gift.
That is a very good tip particularly to those new to the blogosphere. Brief but very accurate info… Appreciate your sharing this one. A must read article!
I just want to tell you that I am all new to blogs and certainly enjoyed you’re web page. Most likely I’m going to bookmark your site . You actually come with excellent stories. Thanks for revealing your website page.
This is one awesome article.Really thank you! Keep writing.
Dano ci zycie, ktlre jest tylko opowiescia. Ale to juz twoja sprawa, jak ty ja opowiesz i czy umrzesz pelen dni. – Marek Hlasko