Microsoft Ignite The Tour Johannesburg 2020

“Microsoft Ignite The Tour Johannesburg” took place earlier this year at the Sandton Convention Centre and to be frank we were not quite sure what to expect from Microsoft.

In the past the Microsoft Dev Days were simply amazing, where one would get ground-breaking insights into what the future held for us developers within the Microsoft space.

After completing our quick registration process, we made our way to The Hub, a central gathering spot that had a small expo, mostly representing the event sponsors. First impressions were that it was rather quiet and attendance seemed rather dismal to say the least. Nevertheless we made our way around The Hub area and took note of some of the theatre session spaces where live demonstrations would take place and of course, took a brief look at what the sponsors like Red Hat, Yealink and Cloudflare were offering. There was not much happening in The Hub so we made our way to one of the live developer sessions in the hope of finding something of interest.

We attended the session titled “Options for building and running your app in the Cloud” which covered some important points to consider when deploying a company website that must be accessed from multiple regions. Scalability and availability of a company website in multiple regions, with minimal setup and configuration, really made sense, especially when a website is a high traffic site, where speed and availability are of utmost importance. Making use of the Azure CDN (Content Delivery Network) to serve images from a central location was an impressive revelation, because managing multiple locations for your images could become a nightmare, especially so when multiple instances of a website are situated within different time zones! Clearly the use of CDN is a viable solution for hosting images, script files and more.

The session ended and suddenly, it was as if all the developers from Johannesburg had gathered in the convention centre. There were thousands of eager beavers making their way around, wanting to get their piece of the Microsoft pie.

We moved into the next session where they covered topics like AI and Cognitive Services before everyone started heading down to The Hub for lunch. The routine was the same and more breakout sessions were held throughout the complex during the course of the day.

Day two and we were still eagerly searching for that ground-breaking technology experience that we have become accustomed to from Microsoft that would be shared with the masses as they did back in old Microsoft Dev Days. Alas, there was nothing more than what seemed to be a major focus on marketing Azure and Office 365 to all and sundry.

The two sessions that really interested me in the end, were “Learning about building an Azure IoT Edge Solution the fun way” and funnily enough, “Out the DEV in Citizen DEVeloper with Power Automate and PowerApps.

These two technologies are definitely worth a mention. Starting with the latter, businesses that lack funds for developers to build apps that are simple, can now use logic and build apps using PowerApps. These are sufficiently robust to be released to the App Stores and with the use of Power Automate, can have workflow built into the backend to streamline processes. An example would be approving an order for release to a warehouse.

IoT as we know is making its way into our everyday lives more and more and IoT Central is a very clever little tech-stack that permits the management of IoT devices from a single user interface. I see this becoming a de-facto standard for IoT device management in the coming years.

Microsoft Ignite The Tour, serves its purpose as a platform to showcase Microsoft products and services with some insight into how developers can make use of the technologies. The Microsoft Dev Days though were a true “developer conference” and sadly Microsoft Ignite is not at the same level or as appealing to the “dyed in the wool” techie!

It is nonetheless well worth attending if you want to get a better understanding of Microsoft Azure and Office 365 products and services.

Author: Edward Whitehead, Senior Software Developer

Development Strategies for Digital Business Applications 

 

In recent months we have seen a big shift in the way customers are doing business, particularly in the banking sector, were driving down overhead costs remains high on the agenda. This is forcing businesses to look at new approaches to application development and bringing with it greater adoption of modern agile practices, new design methodologies and disruptive technologies. There is also a growing mindset of ensuring continuous quality during the transformation to these development strategies.

 

Enterprise application development within an organization typically evolves over time with more than 80% of enterprises still being in the early stages of digital innovation. However, external and internal market trends are bringing about more rapid change.. The technology impacts of cloud, mobile, big data and social media platforms already permeate the application development arena, but new digital innovation and disruption driven by  IoT, AI and machine learning is providing new opportunities forcing organizations to adapt faster than ever before.

 

Application development organizations responsible for designing, creating and delivering compelling user experiences in a timely and cost-effective manner must methodically introduce new digital DNA in the form of best practices, methodologies, technologies and mindset changes. These new activities are required for software organizations to deliver a modern style of customer interaction and user experience that are not only more

efficient but which also lead to higher customer satisfaction and value. Application leaders must think strategically about how IT and business can work together to best achieve the long-term change that results in new behaviours and business models.

 

One of the challenges we will be facing is how we exploit digital design methodologies to maximize the business value of apps and experiences.

 

The way in which users experience an app determines its value and success. Insufficient investment in upfront digital design efforts can quickly undermine the expected business benefits as they must be useful and also delightful to use.

 

An app is the appearance of a software packaging where value results from a specific, defined and sustained purpose. You must stress digital design mastery in order for application development teams to succeed in finding relevant uses for new and emerging app technologies.

 

According to Gartner’s 2018 CIO Report? ‘without mastery of digital design methodologies, an agile development process alone does not automatically make the user’s experience of the delivered solution any better than other approaches. UX quality should be a key success criterion and the success of an agile development project will hinge on investing time and effort into digital design by involving digital designers in the product’s development. The survey reports that 55% of top-performing organizations have UX designer roles, and 5% already have voice interaction designers. You should prioritize the digital design DNA (skills, staff and processes) that your organization

needs in order to improve the resulting UX and meet the increasing expectations of customers.’

 

A further challenge we face is how we are able to accelerate digital business by scaling Agile and DevOps methods.

 

Digital business transformation forces organizations to decrease the software cycle times between identifying a business need and having a deployed solution. This is evident in two of Gartner surveys in 2017 of Agile and Citizen development in the enterprise. The highest driver of both initiatives was to increase speed to deliver apps and products. Without an effective strategy and adequate resources, development leaders can only watch as business decision-makers outsource their most vital initiatives.

 

The organization will be forced to leave behind traditional waterfall methods and utilize agile development coupled with DevOps, as a tactical framework to scale and accelerate development. New digital DNA will be needed in the form of:

 

  • New skills acquisition and developer augmentation, including employing AI and machine learning to augment developers and testers.
  • New platforms, methodologies, languages and tools that facilitate consistent, effective agile practices.
  • Reorganization of development teams as cross-functional groups, drawing from operations, testing/quality assurance (QA), business units and even customers/partners.

 

The organization will also have to enlist, empower and guide those outside IT such as business analysts, marketers and HR professionals to contribute to app innovation during development.

Much needed, will be the implementation of a flexible development environment and a set of high-productivity tools that enable developers to proactively participate in app exploration and delivery within defined boundaries.

 

In considering the points raised above,  it is evident that digital transformation and the need to adapt is high on the CIO agenda……. which brings with it a new and exciting career and business opportunities.

 

Author: Renier Smith, General Manager Quality Services Bumblebee Consulting JHB

AWS Connect 2019 Ship Great Things 

AWS Connect Cape Town is quickly becoming an event to look forward to on the Cape Town technology conference calendar. Previous iterations offered a broad range of insights and opinions from Amazon’s evangelists and selected clients.  

 

This year’s edition was no different. 

 

It delivered on all fronts with its on-point client case studies and diverse streams offering both deep and broad dives across Amazon’s technology service offering. 

 

AWS has been steadily increasing their technology offering and the addition of talks covering service offerings linked to blockchain technology, machine learning and artificial intelligence were heavily featured. Any future-focused technologist would be wise to pay attention to the emergence of these technologies, their continued development and future ubiquity. 

 

A wide range of organizations was included as part of the client case studies this year and it was interesting to see how technology challenges are big solved on the AWS platform. There was something to inspire everyone, with a wide spectrum of organizations present from start-ups, that haven’t launched, to century-old, intercontinental financial services companies. 

 

Bumblebee had several technology professionals present at the conference with a wide range of different interests. I opted to stick to the stream which focused on a wide set of topics linked to improving the overall quality of the software delivered.  

 

What was made clear during the talks was the ability for AWS to support the development and delivery of world-class technology solutions. I particularly enjoyed the talk around improving the delivery, resilience and maintainability of your applications by using the Twelve-factor app methodology on AWS. The Twelve-factor app is a methodology for building modern, scalable, maintainable applications that were created by Heroku co-founder, Adam Wiggins, in 2011. 

 

Without going into all twelve factors, the need to explicitly declare dependencies, in your tool of choice, down to the patch level instead of at a minor level, to ensure the highest level of stability resonated with me. This improves the consistency in your team’s development environment and is an absolute necessity if you intend to containerise your solution. The default specificity in Node.js’s NPM, for example, is too permissive and can lead to significant inconsistencies between the packages that are retrieved. 

 

Aerobotics, who featured at last year’s event, also made a return this year to demonstrate the work they are doing in advancing the agritech space. Agriculture materially contributes both to South Africa’s GDP and employment capacity. The ability to improve the agricultural yield can only have a positive impact on both measures. Aerobotics have been using machine learning to improve the crop yield by developing sophisticated models for the early detection of crops that may be at risk. These models are rapidly trained and executed on AWS infrastructure in price-optimised environments.  

 

Overall, AWS is making emerging technologies accessible to organizations at all ends of the spectrum. In my view,  Amazon’s offering remains the incumbent in the cloud computing space and anyone looking to implement comprehensive DevOps would be remiss if they did not evaluate what AWS has to offer. 

 

Author: Baadier Sydow – Digital Lead Bumblebee Consulting 

AWS Summit 2019 Hot Topic

Once we were able to get in (traffic, parking and registration were somewhat chaotic!) we could settle down to enjoy the various presentations on offer. Since several Bumblebee’s were there, our different interests took us to different streams. The benefit of that is you now hear about a wider variety of talks than just one person could give.  

  

I listened to the keynote talk, some of the so-called ‘Hot Topic’ talks and a few other sessions related to optimisation and tool choice. Here are my takeaways from the Summit:  

  1. AWS really have a full-featured set of tools available to teams focused on delivering reliable applications and solutions  
  2. The delivery point could be cloud-based (but needn’t be)  
  3. It is feasible to set up and operate a fully automated delivery pipeline that will also scale in capacity according to demand  
  4. One must not view AWS as just a set of servers that are not on-premise  
  5. If this is your view, you’re missing out on some major benefits of the AWS environment (such as the scalability, the robustness, the redundancy)  
  6. Your view of the required architecture will not give you the best solution  
  7. Your approach to optimising a solution must be different from what you would do with an application on a physical server  

  

Because of the total environment that AWS offers, the end-user does not need to worry about things like duplicate servers, best use of the capacity of a physical machine, failover and so many other non-functional areas. This means that an end-user can really focus on their business,and making that the best it can be. This also means that the end-user can build on an architecture that provides the best outcome and services for the application and its users, rather than where and how the application is deployed on physical machines  

  

Viewing a solution as access to a set of required services also means that scaling up and down is very easy, and optimising the delivery can be treated like a linear programming solution to a problem with multiple variables (or dimensions). The end result is that one pays just for the resources used, and one does not have to provision physical hardware that may not be fully utilised.  

  

It is also possible to select one’s analysis tools based on the kind of output one needs as well as the rapidity and frequency of updates. Thus, if one needs a weekly view of a dataset, the tools used would be different from those used to provide a view that is always no more than 5 minutes old. Again, the optimisation process is more granular than just “how much memory, how much CPU, how much storage?”. The end result again is one pays just for what is used at any point.  

  

What I hope is becoming clearer is that our approach to solution delivery can change because of the cloud and its toolset. More importantly, our approach should change so that our clients gain the most benefit from the cloud.  

I think these are issues that we will be revisiting frequently in the near future.  

 

Author: Bruce Logan – Principal Consultant Bumblebee Consulting 

QA in a Big Data and AI World

So, what is Big Data and how does it relate to Artificial Intelligence you may ask…

Well, Big data is a term used to describe the enormous amounts of data being generated in our organizations by the latest and greatest applications that are being developed daily. The data generated by such applications, including many Artificial Intelligence programs, is growing at an exponential rate. For example, the Google Maps car generates 1GB of data per second!

Previously, it was understood that we only needed to hold onto the data for short periods of time where after it could then be sent off to the depths of the formidable archives. Since then we’ve discovered that within the vast basements of said archives lies the treasure trove of information that can be used to help us better understand our customers and what they like or don’t like. An example of this would be targeted marketing, whereby advertisers are now personalizing adverts according to customers purchase history.

And so, with all this new found treasure, began the era of Data Science involving predictability studies, algorithms, statistical modelling and data research feeding a constant need to know more about our customers. This is incredibly valuable information, but we must ensure that the data is accurate otherwise it’s useless and ineffective in its purpose.

How do we do that?

In order to ensure data accuracy, we need to understand the challenges that lie within. 3 of those issues are…storage, access and analysis. For this, we have the 4 V’s – Volume, Velocity, Variety and Veracity. The data is enormous in size (Volume) and it needs to be able to move at speed (Velocity), also it varies in its form (Variety) and sometimes there are unknowns (Veracity) for which we must be prepared.

In order to assure the quality of the data, there are different phases of testing which can be used to provide clarity and confidence in the data:

Phase 1 – Data Staging Validation

Data is gathered from various sources into Hadoop Distributed Filing System. Data is then compared to the source data and verified to be correct.

Phase 2 – MapReduce Validation

This consists of two methods. The Map method which filters and sorts the data, and the Reduce method which is a summary operation which involves counting the data. Lastly, in this phase verification of business logic takes place.

Phase 3 – Output Validation

Output data files are generated and moved to the Enterprise Data Warehouse where the data will be extracted and reported on using BI Tools.

Due to the sheer volume and sensitivity of the data other extremely important forms of testing would be Performance, Failover and Security testing. But that’s a whole different can of worms!

Artificial Intelligence

Who remembers Knight Rider? The 1982 all American TV series that took us into the world of a crime-fighting hero, Michael Knight, with a sidekick like no other – a self-driving, bulletproof, fireproof car that could speak called KITT. Perhaps, the creators of KITT had an inkling into what lay ahead in the developing world of AI.

Artificial Intelligence could be defined as:

“Intelligence demonstrated by machines, in contrast to the natural intelligence displayed by humans.”

There are many facets of AI but there are 4 that should sound familiar to most of us:

  • Robotics – the use of engineering and science for information processing
  • Machine Learning – use of algorithms relying on patterns and inference
  • Natural Language Processing – the processing of human languages by computers
  • Artificial General Intelligence – problem solving, reasoning and consciousness

Artificial General Intelligence is probably one of the most researched and funded forms of AI and illustrates the ability of machines to perform the full range of human cognitive abilities.

What testing is done to confirm this, so called, human-level AI?

  • The Turing Test – Machine & Human Vs. Human
  • The Coffee Test – Robot walks into a home and makes coffee
  • The Student Test – Register as a student and obtain a degree
  • The Flat Pack Furniture Test – Unpack and assemble furniture
  • The Mirror Test – Distinguish real vs reflection

The impact of AI on all of us today is far greater than we sometimes realize. In any given day we use, on average, close to 10 forms of sophisticated AI. Some examples are Apple’s Siri, Amazon’s Alexa, Google Translate, Netflix, Google Maps, Uber, Instagram, Pinterest etc.

It seems that the dreaded concept of Artificial Intelligence is already very much part of our daily lives. Best we get used to it!

Below is an interesting video of the world’s first Robot citizen called Sophia. Enjoy!

Sophia talks to Tech Inside:

Author: Anita Bakker – Principal Consultant Bumblebee Consulting 

Make it all about them – Developing a winning Presentation

I was fortunate to be invited to attend a Microsoft Partner conference in Washington some years ago….in fact, it was the year that Satya Nadella ascended to the Microsoft throne. These are amazing events with attendance running at around 20,000 delegates from all over the world. Apart from the sheer spectacle and experiencing really slick organisation, it also gave me an opportunity to enjoy the sights and sounds of a city that I really fell in love with!

But then on the last day of the conference, a real bonus was that they introduce a 50% off special at the onsite merchandise store….so my Scottish blood kicked in and I tested the wares. It was here that I picked up a gem of a publication “ Make it All About Them” by Nadine Keller, an easy to read book with magic on every page and all about developing winning sales presentations!

After my first read through though, I realised that the points made throughout the book can be applied to any presentation and in fact extended to day to day communication with clients. Nadine identifies and addresses the myths that have frankly become bad habits in most (sales) presentations that I have seen and delivers some invaluable truths in the process. If we can embrace just a few of these in our day to day client engagement, whether delivering presentations, writing proposals or simply communicating in meetings where we hope to get a point across, I am sure that they will ensure a clarity of thought that will make a massive difference to us help us to deliver value to our clients.

It is impossible to cover all of the information in one posting so I am going to try to condense the content (with due credit to Nadine Keller) and convey what I believe are some of the nuggets of information over the course of a few blog posts!

 

Making it All about Them

We think that clients want to hear all about us, so we tend to kick off presentations talking about ourselves. While this is important it can be the death knell to an impactful presentation. So an alternative approach is to start by revealing our understanding of the clients needs. Obviously, you will have done some homework on this so why not get right to the point. It’s an attention getter, you position exactly what you are there for and everyone is immediately on the same page.

So if you remember just three things:

  1. Begin the presentation by expressing your understanding of what the client needs, the problems and opportunities
  2. Review each with the client team, and explain that as these are the basis for your presentation, you want to ensure that your understanding is correct
  3. Note any feedback offered or corrections needed…it will happen, it’s not a problem…and refer to the feedback if necessary during the presentation.

 

Start with the End in Mind

Here is a very bad habit that we have all fallen into at some time or another. We pick up the last presentation that we did and we retrofit the content to hopefully suit our new presentation. While this might save some time it can severely compromise your presentation.

You should approach any presentation experience as a story…it needs a clear beginning, a middle and an end. The presentation must be designed to address that specific client and the specific needs that are to be addressed!

Using “standard” material, will often lead to inclusion of unnecessary on irrelevant content and too much unnecessary information dilutes the impact. The client is left confused and unable to differentiate whether our offering is in fact better than others.

A great principle to follow here is the “Power of Three”. As Nadine points out, history is riddled with “threes”…Three blind mice, Liberty Fraternity, Equality, Blood Sweat & Tears, Stop, look & Listen!, Location, Location, Location…etc etc! (etc?). People are tuned to remembering things in three’s. Often when four things are mentioned, only three are remembered!

So if you remember just three things:

  1. When preparing your presentation, determine the three most important messages you want to get across
  2. Analyse and capture how you want to impact the audience’s emotions
  3. Use “three messages” as a guide to determine what to include, and most importantly what to exclude, from your presentation.

 

Develop a Story

The secret here is to not prepare to deliver a presentation, rather prepare to tell a story. “Storytelling is at the heart of impactful sales and marketing”(Nadine Keller)

We need to eliminate complexity for the client by providing a clear picture of our services and capabilities…and also explain how they will address the clients problems, needs & opportunities. Stories are powerful because they are Memorable, Interesting and Compelling, fundamentally because they make the intangible tangible, they demonstrate success, they foster personal connections (recognition) and they tap into emotions of the audience.

The use of emotive phrasing, metaphors, analogies and similes can be extremely powerful in explaining concepts and ensuring that clients remember the points you are putting across.

So if you remember just three things:

  1. Think about your presentation as a story, create a storyboard before you even start on your slides and make sure that the story is arranged from the client’s perspective and not your own
  2. If the client presents an agenda, don’t follow it blindly. Ask permission to address the content they want in a different way perhaps.
  3. Have your Big Three messages drive your content and bring your presentation to life with references, stories and metaphors

 

I hope that the above points give you some idea of the concepts to follow. I will cover additional points in follow up articles and will be happy to unpack the detail with you if required.

Author: John Pratt – Executive Director: Business Development

Introduction to Angular

Angular is an open-source web application framework with which you can develop for the web, mobile and desktop, it is maintained by Google devs and a wide community. If you are familiar with Javascript then picking up Angular will be as easy as pie. Angular uses Typescript (a superset of Javascript) and AngularJS uses Javascript however you can still write your application in Javascript for Angular.
Wait.. 🤔 what is Angular and AngularJS?

Angular vs AngularJS

AngularJS is version 1 of Angular and well you guessed it Angular is version 2 of Angular. Angular2 is just a common name used, Angular has many version releases such as version 4, 5, 6, 7 but instead of calling the new releases Angular v5, Angular v6 etc. it was decided to rather call it Angular2 🤗 .

So what is the hype around Angular?

Angular is widely adopted in the developing world because(my opinion) it can be used on many platforms such as website, mobile apps, desktop apps. One codebase many applications. Angular also offers speed and performance via web workers, server-side rendering, component-based architecture, mobile-oriented philosophy and some other cool characteristics. Angular puts you in control over scalability. Meet huge data requirements by building data models on RxJS, Immutable.js or another push-model.

Angular applications are built with at least one component. The root component that connects a component hierarchy with the page document object model (DOM). The angular app can basically be described as a tree (again my opinion), components are a subset of directives 🌲.

 

 

You see… it’s an Angular tree.

Angular also offers code reusability, readability, unit-testing and maintainability.

I guess Angular holds that familiarity to people who were raised on natively working with the DOM as with JQuery. Angular is more easily grasped by those who worked with AngularJS, Handlebars, or earlier MVC tools like Rails, PHP, or Django. It also holds true to rapid development which makes it attractive to big corporations.

Now that we have a high-level understanding of Angular let’s get into the magical code in our next blog! 🧞‍♂️

Author: Linton Achmad – Intermediate Developer 

Release & Configuration Management

What is Release Management (and by extension, what is Configuration Management)?… and why is it important? 

This sounds very dry (and maybe scary…) but Release Management lies at the heart of delivering any kind of quality product… we’re talking specifically software systems and products here, although Release management is very widespread in various industries

 

Anytime a product (perhaps a website, or a front-end interface to an order management tool) is to be changed, a few important questions should be asked:

  • How will it be different from what is in place now?
  • Does the platform it is running on need to change, to support the new release?
  • How will the update be deployed?
  • How will we know the deployment has been successful?
  • Will anything that is not changing break?
  • If something does break, can we get back to the version that was working previously?

 

To know how something will be different, one must know what is there now; this is where Configuration Management comes in. The configuration of a system is a full description of its components, the environment it runs in and the versions of every component (hardware and software).

 

To plan a change (typically an upgrade to a product or system), the configuration of the new version must be known; this will be compared to the configuration currently in place to identify the changes being made, any upgrades needed to the environment and any additional components required to support the new version. Once the details of the change are captured, the update process is designed and all tests that are needed to ensure that everything changed works correctly, are identified.

 

Now comes the next stage of the Release process… ensuring that everyone (and everything) impacted is aware of the change, and, critically, what will be changing. These are the people who must approve the release and deployment; this approval generally comes out of a Change Management meeting where all impacted parties are represented and agree that the deployment can go ahead (or the decision could be to delay if there are outstanding questions).

 

Once deployment approval is in place, the change can be implemented. Because of the attention each step of this process receives due to a formalised process (as described above), the likelihood of success is much greater… the thinking and analysis have been done ahead of time rather than on-the-fly during a rushed roll-out.

 

What happens when something goes wrong during the deployment? Again, because the thinking has been done ahead of time, the deployment team knows precisely what to do… roll back the change or fix it in place.

 

The power of a Release process like I’ve described briefly above is that it can easily accommodate tools such as automated testing, Continuous Integration and even Continuous Deployment; these tools streamline parts of the process, but the foundation remains the same.

 

I’d like to explore some of these other aspects in more detail in future posts; please contact me with questions, or comments, and I’d love suggestions about other points for discussion… I’m sure there are many!

Author: Bruce Logan

Delving into Deep Learning – Part 2

Repurpose a model through transfer learning.

 

The code for this blog is available at https://github.com/pcfour/HiveMind

 

In the previous installment, we talked a bit about ResNET and how it can be used as an image classifier.

 

My use-case is to exploit what this Neural Network already knows for my own purposes. It can classify between 1000 different categories. I need it to classify between only three: a Car, an SUV or a Van.

 

Let’s have a look at the ResNET topology.

 

To achieve this, I will use a Keras built-in function. But I need the prerequisites first:

Now we can run this visualisation code:

Looking at the model image RESNET50_architecture.png, it looks like RESNET does a rinse-repeat of activation, split, convolute one side and add result with previous branch. Interesting. What is of particular interest is the last Dense layer:

We can get more detail from the output of model.summary():

So after a Flatten layer, we have a Dense layer spanning the 1000 ResNet pre-trained classes.

The idea is to leave what ResNET knows about image deconstruction and identification intact, and retrain the last layer to remap to my three new classes. As such, I want to leave the network and weights of all but the last Dense layer intact and swop out that Dense 1000 layer for my own Dense 3 layer.

 

We will need data. Lots of data!

 

I found a sizable set of vehicle images at http://ai.stanford.edu/~jkrause/cars/car_dataset.html

You can download the dataset from http://imagenet.stanford.edu/internal/car196/car_ims.tgz

And the meta-data from http://ai.stanford.edu/~jkrause/cars/car_devkit.tgz

And the full annotation list from http://imagenet.stanford.edu/internal/car196/cars_annos.mat

Unfortunately, cars_annos.mat is in MatLab format, so I had to use https://pypi.python.org/pypi/mat4py/0.1.0to convert it into annotations.json.

Using these annotations, I manually classified the set into Car, SUV and Van by creating my own ClassificationMap.csv.

 

I’m going to eventually feed this data to our model using a Keras function called flow_from_directory. It’s nifty in that it understands that you’re attempting a classification problem, but it requires your data to be split up into a training set that will be used to train the model and a validation set that will be used to verify the model’s correctness.

 

I also need to restrict images that are of poor quality from entering the dataset. And I also want to train using as much signal as I can get from the images, in other words, ignore the backgrounds as much as possible. Luckily the dataset includes bounding boxes in the annotation data which I can use to crop the images.

 

After putting the raw images in an ImagesUnclassified folder, I ran my sorting script ImageSort.py that achieved all the data sorting, cropping and filtering requirements in one go.

 

After a couple of minutes of running the script, my folder structure looks like this:

 

Because we will be using a ton of data, my poor CPU was not sufficient to train the model. As such, I had to execute the training bit of this exercise on a computer with a GPU. And to do that I had to install a GPU-enabled version of the Keras backend. My initial implementation used the GPU distribution of CNTK. However, the most commonly found literature seems to point to Tensorflow as the industry standard, so I eventually opted to use that instead.

 

Tensorflow does have its own dependencies a la NVidia CUDA, so please refer to this site for installation guidelines: https://www.tensorflow.org/install/

A word of caution: note the very specific versions of Python, CuDNN and CUDA drivers needed. I had quite a tough time by getting these wrong!

 

Once GPU-enable Tensoflow was up, I could finally start the model training cycle by running script ResnetTransfer.py

 

Let’s have a look at some of the code:

Here I use a pre-processing function to normalise the images to what ResNET was trained on. I also get more bang for my buck by generating extra images from the ones I supplied, but randomly rotated by 30 degrees, randomly sheered, and sometimes flipped on the horizontal axis.

Here I setup a data generator from the directories I supplied, resized to what ResNET expects and telling the model that it should treat the data as categorical.

Now we load up the ResNET model, but we exclude the “top” ie the last fully connected layer. I supply my own top layer as a Dense layer of class_count categories which in our case would be 3.

I make sure that only my own layer is trainable. I don’t want to muck with ResNET too much. Not yet anyway.

This statement will kick-off the training session.

And here we save the trained model so we can easily load it later.

 

I set the number of epochs (learning iterations) to 50 and executed the script. After a long training session, this is the final output:

What this is saying as that we achieved 70.75% accuracy on our training data and 81.38% accuracy on our validation data. The model has never seen the validation data before until we used it as a measure, so what this means is that it must be generalising ideas from our training set.

 

As a demonstration, I’m going to give it these two pictures to classify:

 

 

 

 

 

 

 

This is the output from the prediction script ResnetTransferPredict.py:

[(‘SUV’, 0.98928076), (‘Van’, 0.008739293), (‘Car’, 0.0019799978)]

[(‘SUV’, 0.64701205), (‘Van’, 0.3395496), (‘Car’, 0.0134383505)]

 

So the first image is spot-on, 98.9% sure it’s an SUV.

The second image, however, needs some more attention.

 

The final tool in our toolbox for today is a technique called Fine Tuning.

 

Now that our last fully connected layer is starting to do what we want to, we can attempt to retrain some of the deeper ResNET layers.

 

Script ResNetFineTune.py was written for this purpose. It looks similar to our previous training script, but with these important changes:

Here we want the last 50 layers to be marked as trainable.

And we use a different optimizer: one where we can specify a very tiny learning rate. If we make too big jumps, our model will not be able to converge on an answer.

 

After a very long training session we arrive at this output:

 

99.9% accuracy on training data and 85.4% on validation. I rerun out previous two samples using ResNetFineTunePredict.py and get this result:

[(‘SUV’, 0.94335765), (‘Van’, 0.04256247), (‘Car’, 0.0140798)]

[(‘Van’, 0.50210416), (‘Car’, 0.4541535), (‘SUV’, 0.043742355)]

 

Success! It was able to classify our Van example as a Van.

 

It seems as though our Fine Tuned model does what we want it to. From here on what we can do is train it up some more, or even train additional layers to give a better accuracy.

 

I hope this was a useful introduction to the application of Neural Nets.

 

Want to be part of the movement? Follow us on Slack at #data https://buzzybeesteam.slack.com/messages/C9G63APLZ

 

Author: Pieter Coetzee – Senior .Net Developer

 

Training Images from http://ai.stanford.edu/~jkrause/cars/car_dataset.html

3D Object Representations for Fine-Grained Categorization

 Jonathan Krause, Michael Stark, Jia Deng, Li Fei-Fei

4th IEEE Workshop on 3D Representation and Recognition, at ICCV 2013 (3dRR-13). Sydney, Australia. Dec. 8, 2013.

 

Agile – starting in a new team

Ever been in a team without any structure or processes? Well, the experience is something that we all might have had at some stage or the other.

If not, imagine coming in to work one day and having to start in a new team. There’s a lot of excitement because you have a chance to begin from scratch and essentially make a new start. However, it is not always as easy as it looks upon first glance.

The biggest challenge is finding common ground and building a working process/es around it to accommodate and suit the needs of the team.

For many years, the IT market was based on waterfall approach to software development projects. Then from nowhere, the agile methodology entered the scene and quickly dominated and capsized it. This happened more than 15 years ago and whilst it has been this long, it is still a new concept for many and often misunderstood.

Not to bombard you with terminology and long descriptions explaining the waterfall approach as everything in life as we know it can be “summed up”. It is a sequenced development process which usually consists of 8 phases. It is a step-by-step, continuous process, that’s why once a step is completed, it is really difficult to go back to the previous step. Also, there is not much support for changes, so the project plan must be extensive and detailed from the beginning and then followed carefully.

The phenomenon of Agile came as a solution for traditional waterfall limitations. Its incremental approach completely has changed the way of handling projects. The main characteristic is the idea of sprints – short iterations that usually last a week, two weeks or a month and consist of planning, coding and summarising, which resembles a tiny waterfall project. At the end of each sprint, the project is tested, deployed and future plans and priorities are re-evaluated. Agile approach gives a greater value for money because of the tasks prioritisation and incremental delivery.

Agile methods or processes generally promote a disciplined project management process that encourages frequent inspection and adaptation, a leadership philosophy that encourages teamwork, self-organization and accountability, a set of engineering best practices intended to allow for rapid delivery of high-quality software, and a business approach that aligns development with customer needs and company goals.

There are 4 ceremonies which are the main players in the agile world:

  1. Sprint Planning – used to flesh out intimate details of the work that needs to get done
  2. Daily Stand-up – In rugby, the team huddles before each play. The huddle is strategic: it keeps the team informed, connected, and calibrated throughout the game. For software teams, the stand-up is like the team’s huddle.
  3. Iteration review/Demo – provides a way to gather immediate, contextual feedback from the team’s stakeholders on a regular cadence.
  4. Retrospective – held at the end of a sprint to provide ongoing guidance for the team to keep things going well.

In a nutshell, it’s an organised and structured way of working designed to accommodate and facilitate change and mitigate risk at an early stage in a project life cycle. Is it the best way forward…. In my opinion YES!

Author: Sutasha Dookhi – Lead .NET Developer