Wednesday, June 01, 2011

RevEye: Even more reverse image search

Google asked me to change the name of my Chrome plugin "ChromeEye" into something that did not violate their terms. Fair enough. I changed it to "RevEye", and took the opportunity to make some changes to the user interface as well.

First, I added the Cydral engine to the list of reverse image search services included, since it has been producing some very nice results lately.

Second, I added an option to change the context menu: You can now choose either to use one default search engine, or to have a cascaded menu with all options on every search. My favorite option is the one that opens all services in different tabs.

These changes basically make RevEye a "meta reverse image search tool", since it now includes the complete functionalities by the TinEye, GaZoPa or Cydral plugins. So off you go then! Install it and have fun tracking images.

RevEye v1.2 is a free download available from the chrome web store.

Wednesday, March 02, 2011

More reverse image search: ChromeEye v1.0

Yesterday I released a new version of my reverse image search extension "ChromeEye" for Google Chrome. While the first version was simply a bridge to the reverse image search engine TinEye, the new version 1.0 includes the option to use different search engines. At the moment that means images can be sent either to TinEye or to GazoPa. TinEye, which seems to be most popular reverse image search engine these days, looks mainly for exact matches. GazoPa uses a very different algorithm, based on visual features, with sometimes surprising results. Both are still improving their algorithms, obviously, so we´ll keep an eye on them.

That said, ChromeEye is now a plugin for reverse image search in general, and I will be including more search engines in the future. Note also that it is using the right click context menu for image searches. This was a much asked for option in the previous version, but technically not possible (due to Chrome restrictions) when I released it.

ChromeEye v1.0 is a free download available from the chrome extensions directory and from the chrome web store.

Wednesday, March 17, 2010

Fixed-Budget Kernel RLS at ICASSP 2010

My paper titled "Fixed-Budget Kernel Recursive Least-Squares" will be presented this afternoon at the IEEE International Conference on Acoustics, Speech, and Signal Processing (ICASSP 2010). It was written in collaboration with Weifeng Liu and Jose C. Principe of the Computational NeuroEngineering Laboratory (CNEL) at the University of Florida. I couldn't be there to present the paper myself, but luckily my former supervisor Ignacio Santamaría is attending and will be giving the talk. If you are interested in learning methods or online kernel methods, be sure to attend. It's the first paper of the "Learning Theory and Models I" session (MLSP-L2.1), which is held on Wednesday, March 17, 13:30 - 15:30.

The basic idea behind this learning algorithm is pretty simple. First of all, it is an RLS method in kernel feature space, which means it is capable of learning a nonlinear regression in an online manner. Kernel RLS methods usually face memory and computational problems, since their solutions require to invert a large kernel matrix that incorporates information about all processed data. As new data patterns (x,y) arrive (remember this is set in an online environment), this matrix grows and the computation of the regression output becomes more costly in each step. The typical approach to avoid these memory and computational problems is to restrict the data patterns to a minimum number that allows to approximate the solution sufficiently well. Each time a newly arrived pattern is found to be sufficiently interesting, it is added to a "dictionary".

In contrast to these techniques, which make the dictionary expand (albeit slowly), the technique of this paper fixes the size of the dictionary. As a consequence, apart from adding patterns to the dictionary, we also have to prune patterns. While the pruning itself involves only simple algebra, the criterion to determine what data to prune is more interesting. We chose to use a relevance-based criterion in this paper, motivated by the good results it yielded. More specifically, in each time step we calculate how relevant each stored pattern is with respect to the regression, and subsequently prune the least relevant pattern. (Details and references are in the paper itself.) As a result, after running a number of iterations of this algorithm, it obtains a compact set of patterns that summarizes the observed patterns pretty well.

I particularly like the interpretation of this algorithm as a simple learning method that deals with memory restrictions. Every time this method receives a new data pattern, it must determine actively what pattern to "forget" in order to maintain its memory size. So it's a way of "optimal forgetting". And as the results in the paper point out, it is also pretty efficient in doing so.

Figures: The previous figure is one of the slides. The below figure is an illustration of the "label update" procedure that can be introduced to equip the algorithm with tracking capability. I.e., in a time-varying environment the regression surface can be changing, as indicated by the new data pattern (xn,yn). The proposed procedure updates the labels in the vicinity of this point to reflect those changes.
But enough talking about this paper. My friends and colleagues are also presenting theirs, so if you are at the ICASSP be sure to check them out:
  • Il Park and Jose Principe, "Quantification of Inter-trial Non-stationarity in Spike Trains from Periodically Stimulated Neural Cultures" (Multivariate and Multimodal Analysis of Brain Signals, Tuesday, March 16, 13:50 - 14:10).
  • Sohan Seth, Jose C. Principe. A conditional distribution function based approach to design nonparametric tests of independence and conditional independence (Learning Theory and Models III, Wednesday, March 17, 16:00 – 18:00).
  • David Ramirez, Javier Via, Ignacio Santamaria, Roberto Lopez-Valcarce, Louis L. Scharf, "Multiantenna Spectrum Sensing: Detection Of Spatial Correlation Among Time-Series With Unknown Spectra" (SPCOM-L1: Spectrum Sensing for Cognitive Radio I, Tuesday, March 16, 14:10 - 14:30).
  • Javier Vía, David Ramírez, Ignacio Santamaría, Luis Vielva, "Widely And Semi-Widely Linear Processing Of Quaternion Vectors" (Detection and Estimation Techniques - II, Thursday, March 18, 13:30 - 15:30).
  • Luis Vielva, Javier Vía, Jesús Gutiérrez, Óscar González, Jesús Ibáñez, Ignacio Santamaría, "Building A Web Platform For Learning Advanced Digital Communications Using A Mimo Testbed" (Signal Processing Education: Signal Processing Education, Tuesday, March 16, 14:30 - 14:50)
  • Abhishek Singh, Jose Principe. Kernel width adaptation in information theoretic cost functions (Learning Theory and Models III, Wednesday, March 17, 16:00 – 18:00).
  • Abhishek Singh, Jose Principe. A closed form recursive solution for maximum correntropy training (Learning Theory and Models III, Time: Wednesday, March 17, 16:00 – 18:00).
  • Abhishek Singh, Tejaswi Tamminedi, Guy Yosiphon, Anurag Ganguli, Jacob Yadegar. Hidden markov models for modeling blood pressure data to predict acute hypotension (Bioinformatics and Biomedical Signal Processing, Tuesday, March 16, 16:00 – 18:00).
Thanks to Memming for the blog post idea!

PS: The paper will be available in short on my academic web page [update:] can be downloaded from my publications page, and I also plan to release the Matlab code either there or here in the near future. Be sure to ask me about it if you can't find it.

Sunday, December 13, 2009

ChromeEye, a TinEye extension for Google Chrome

chromeeyeI made a simple reverse image search extension for Google Chrome. Reverse what? Reverse image search. Think Google, but instead of text you enter an image. Ah okay. Please continue.

The ChromeEye extension uses the image search engine TinEye, whose technology allows you to find exact copies of images (including scalings and slight distortions).

Version 0.1 of ChromeEye (updated: now latest version) basically mimics the TinEye bookmarklet behavior, i.e. it lists all images of the current page with links to TinEye results. Let's hope Google Chrome allows for editing the browser context menu soon, so you can right click and select a "Search Image on TinEye".

Meanwhile, you can download the latest version of ChromeEye directly from this link, while the complete source code is available on GitHub. So until the oficial TinEye plugin gets released, have fun with this easy solution.

Update 14 December 2009: ChromeEye now has a page on the google chrome extensions site. Version 0.2 was also released, with a nicer logo.

Update 17 June 2011: ChromeEye is now called Reveye and it includes different search engines, such as Google, Tineye and Cydral.

Friday, December 04, 2009

Drawing beautiful block diagrams in LaTeX

I used to put together the illustrations in my publications with a mixture of Inkscape, CorelDraw and psfrag, but obviously this couldn't continue for a long time without becoming an insult to graphic design.

For my latest writings I am returning to the basics: PSTricks. (I know there are lots of other programs to draw block diagrams, but I didn't find any that allowed enough customization). To avoid starting from zero, I am using the PSTricks Signals and Systems package (pst-sigsys), which is easy to customize if you keep the PSTricks user guide (pdf) at hand.

Here's a simple example:

\documentclass{article}
\usepackage{pst-sigsys}

\pagestyle{empty}

\begin{document}

\begin{figure}[ht]
\centering %
\begin{pspicture}[showgrid=false](0.5,-1.2)(9,1.55)
%--- Define blocks ---
\rput(0.5,0){\rnode{s}{$s[n]$}}
\dotnode[dotstyle=square*,dotscale=0.001](1.7,0){dot}
\psblock(3,.75){H1}{$H_1(z)$}
\psblock(3,-.75){H2}{$H_2(z)$}
\psblock(5.8,.75){B2}{$\hat H_2(z)$}
\psblock(5.8,-.75){B1}{$\hat H_1(z)$}
\pscircleop(7.7,0){ominus}
\rput(9,0){\rnode{e}{$e[n]$}}

%--- Connect blocks ---
\psset{style=Arrow}
\ncline[nodesepA=.15]{-}{s}{dot}
\ncangle[angleA=90,angleB=180]{dot}{H1}
\ncangle[angleA=-90,angleB=180]{dot}{H2}
\ncline{H1}{B2} \naput[npos=.5]{$x_1[n]$}
\ncline{H2}{B1} \naput[npos=.5]{$x_2[n]$}
\ncangle[angleB=90]{B2}{ominus} \naput[npos=.5]{$z_1[n]$}
\ncangle[angleB=-90]{B1}{ominus} \naput[npos=.5]{$z_2[n]$}
\ncline[nodesepB=.15]{ominus}{e}
\end{pspicture}
\end{figure}

\end{document}
which, after some retouching of the .sty file produces this pretty diagram:



Update 6th December 2009: Here's a slightly more complicated diagram, based on the same codes as the above example.

Friday, May 08, 2009

Kindle DX for Scientific Papers?

Just out of curiosity, I wondered what scientific papers look like on the Kindle DX's 1200 x 824 pixel resolution. The native PDF support is great, but exactly how readable are those tiny little subscripts in mathematical formula?

Although it will probably take some time until I can lay my hands on a real device, I did the test by scaling a page of one of my own papers to the Kindle's resolution. Check for yourself by clicking on the thumbnails below.

modeoriginal version
(vectorial)
scanned version
(IEEE archive)
kindle portrait
portrait
(full page zoom: page fits within 824 x 1200 pixels)


kindle landscape
landscape
(width rescaled to 1200 pixels)

(The original PDFs can be found here and here.)

In portrait mode, some details might be difficult to distinguish, especially when the PDF is generated from a scanned image. Check for instance this formula, from the scanned version in portrait mode:
But in landscape mode everything looks perfectly readable (at least in this probably very unrealistic experiment). This is the same formula, as it appears in landscape mode:
So I might buy one when it's launched in Europe. But the price needs to be slightly lower. $300 (or its equivalent in €) would be fine. And it needs an SD slot. And Wifi. Apart from that it seems to be fine.

Friday, April 24, 2009

Pictures on ClusterShot

Time to boost my picture sales!

I am putting some of my pictures for sale on ClusterShot, a new photo marketplace I found this week. Until now I only had my pictures sitting on flickr, and every time somebody wanted to buy one that meant paperwork.

ClusterShot seems to make the process pretty easy, for buyer and seller. And apart from that, their design is very neat. There are still a lot of features missing and issues to work on, but let's give them some time. In the meantime, I invite you to go check out my page and haggle on my pictures: clustershot.com/steven2358

Illustration: some Spanish lolcows