CSCE 636   Neural Networks Project

Submission:

Turn in all parts of the project online in eCampus.


Basic requirements:

In this project, you will:

1. Choose an interesting application/topic in deep learning. (Note: everyone should work on a different application/topic. If two students choose the same or extremely similar application/topic, the student who submits it first will get it.)

2. Build a baseline DNN solution that works. (You can either implement an existing DNN solution, even including using a trained model from an existing paper, or design and train your own DNN. The key here is to have a DNN solution that works.)

3. Improve the baseline DNN solution you have. (There are many ways to improve it, such as designing better DNN architectures or hyper-parameters, applying new techniques, making the DNN solution more general so that it has more functions or can work on more types of datasets, etc. The key here is to make your DNN practically more useful, and sharpen your techniques in designing and optimizing DNNs.)

4. Build a good GUI to demo your DNN's performance. (The GUI should work on a Ubuntu computer. You can use tools such as Tkinter, which is a Python library to build GUI.) Also make a short demo video to show off your results. (More examples and details on this will be posted later.)

5. Write a good report to summarize your work in a clear and itemized/standard way. (More examples and details on the report will be posted later.)

6. Submit all your codes (with annotation), instruction on how to test its performance, and datasets (or links to your datasets).

7. Bonus points: if you can make your DNN work as an app on the Android phone, there will be up to 10 points of bonus points, depending on its performance. (The project itself has a full score of 100 points, so the bonus can increase the full score to 110.) Note that to make a DNN work on a mobile phone, its size needs to be small. (More examples and details on it will be posted later.)

Your project will be graded based on the practical performance of your DNN solution, how much novelty and depth your work has, and how well each of the above elements is completed.


Topics that students have chosen for projects:

To be posted.


Submission milestones:

1. Project assignment one. Due: 11:10am on Monday 2/18/2019 in eCampus.    

    Select an interesting application or topic on deep learning for your project. There are many interesting applications, which you can find in conferences and journals on deep learnings and other fields (which use deep learning as their tools), or you can come up with your new application/topic.

    Please submit the following in eCampus: (1) The title of your deep-learning application or topic. And explain it briefly. (2) If you already know what dataset you will use, list the dataset. (3) If your work will be based on some existing result (such as an existing paper, an existing DNN model posted in Github, etc.), please list that paper, Github webpage, etc.


2. Project assignment two. Due: 11:10am on Monday 2/25/2019 in eCampus.    

    Find good datasets for your project (which is usually a good choice), or create the dataset yourself (which often takes more time, but is sometimes necessary). Then start to implement your neural network. (If you are implementing an existing neural network from an existing paper or a publicly released model at GitHub, please go ahead. If you want to design your own neural network, also go ahead.)

    Please submit the following in eCampus: (1) Where your dataset is (give a link to that dataset), or describe how you plan to create your own dataset. (2) Where the existing or publicly released neural network model is, or describe what neural network model you are designing. In both cases, please specify details of your neural network model as much as possible. (Note: you are always allowed to modify or improve the network model later.)


3. Project assignment three. Due: 11:10am on Thursday 3/7/2019 in eCampus.

    By the end of the project, you will need to submit a GUI that can demo your work, a detailed report that summarizes your work, and the annotated codes. They will be used to check your design and its performance. For deep learning, which is very application-oriented, an excellent demo is very important; and GUI is the basic tool to help create a good demo.

    In this part of the project, you need to create a mock GUI for the demo. (Since you have not developed a neural network yet, this GUI cannot perform the real function. But you can use fake data to make it look real.) The GUI will help make it clear what product you are planning to create; and if there is any problem with that plan, we can identify it early on.

    Beside the mock GUI, you also need to submit a video for you to explain how to use the GUI, as well as a report that explains the same things about the GUI. The GUI needs to be able to run on a Ubuntu computer. (Ubuntu is a popular operating system for machine learning.) The recommended tool for making the GUI is TKinter (a Python library for making GUI). Please learn how to make a GUI in advance.

    Here is an example of such a video on a simple MNIST application: video demo on how to use the GUI for MNIST. (If you would like to know how the above video was recorded, check https://www.screencastify.com.) The Python code (which includes 3 files) for the GUI has been posted in eCampus.

    Here is another example of such a video on a simple CIFAR-10 image-classification application: video demo on how to use the GUI for CIFAR-10. The Python code (as a zip file) for the GUI has been posted in eCampus.

    Please submit the following in eCampus: (1) The python code for your mock GUI, along with other files (if any) that are needed to run the GUI. (2) A report (as a PDF file) that explains how to run the GUI. In the report, include a link to a Youtube video that explains how to run the GUI.


4. Project assignment four. Due: 11:59pm on Monday 4/1/2019 in eCampus.

    Please note that the final project will be due on Thursday, 4/18/2019. We will then select some projects and showcase them in the last class on Thursday 4/25/2019.

    It is time to achieve the first basic objective of the project: build a deep neural network that works. (After that, we need to study how to make it work better, or have more functions, or be applicable to more scenarios.) So please train your neural network to achieve the first objective. (It is likely that for many projects, you also need to pre-process your dataset before the neural network can be trained.)

    For the GUI of your project, we would like it to have two functions:

    1) It can show what the application is.

    2) We can use it to verify if the results are correct, and how good the results are.

    Many GUIs submitted as project part 3 has function 1) but not function 2). This time, please submit an updated GUI that has both functions. (When we grade your project part 3, we provide suggestions on how to improve your GUI. So please check out those suggestions, if any, in eCampus.) If your neural network is already working this time, then please connect it to the GUI, and show a demo video where the GUI uses the real neural network instead of fake data.

    Please submit the following in eCampus:

    (1) The python code for your updated GUI, along with other files (if any) that are needed to run the GUI. A report (as a PDF file) that explains how to run the updated GUI. In the report, include a link to a Youtube video that explains how to run the updated GUI.

    (2) If your deep neural network is already working, please submit a report (as a PDF file) that describes the application you are working on, the detailed model of the neural network (including its architecture and the shapes of tensors that each layer inputs or outputs, the hyper-parameters used for the neural network), the dataset used for training and testing, and training/validation/testing performance. (A sample report is shown here, which is for the MNIST application shown here. In your report, please also include figures showing how the training/validation accuracy/loss change with epochs.) If your neural network is not working yet, then please submit a report (as a PDF file) that describes your proposed neural network model, and the difficulties you are experiencing.



5. Project assignment five. Due: 11:59pm on Thursday 4/18/2019. (Attention: some materials should be submitted in eCampus, and some other materials should be submitted via a Github webpage.)

     It is time to optimize your neural network, summarize your results, and submit them. We will start grading shortly after the due date of 4/18/2019.

     Please note: you are encouraged to keep training your neural network for better performance, and update your submission even after the due date. Although we may grade your project any time after 4/18/2019, by the time we grade your project, we will grade your last submission. (This will not affect those projects that were graded early: if your project clearly deserves an "A", we will inform you right away; but if not, we will give you suggestions on how to improve it, and allow you more time to do that.)

     Please submit the following document in eCampus:

     (1) A clear and detailed report (as a PDF file) that summarizes your project. Your report should introduce the research topic, the detailed model of the neural network (including its architecture and the shapes of tensors that each layer inputs or outputs, the hyper-parameters used for the neural network), the dataset used for training and testing, and the training/validation/testing performance. (A sample report is shown here, which is for the MNIST application shown here. In your report, please also include figures showing how the training/validation accuracy/loss change with epochs.) Also, explain how to run your code for training and testing your neural network, and how to use your GUI.

         The above are just the basic elements that can help us understand your project. You can definitely add more to your report if you believe they help present your work better. Good examples of such extra elements include a review of related papers, a good explanation of the deep learning techniques used in your project, how your work differs from existing works, what improvements you made after getting the basic model working, etc.

         On the other side, the basic elements we listed above do not necessarily apply to every project. For example, for projects on style transfer or data generation, the performance is often evaluated based on human perception, so there may not be numerical values for "test performance". So it is acceptable not to have those elements in the report in such cases.

     (2) In the above report, please also include a link to your GitHub project webpage (as explained below).


     For those documents of large sizes, it is time-consuming to upload them to eCampus. So we have decided to use Github. (As deep learning engineers, it is useful to learn how to use Github. Note that you don't necessarily have to make your project public in Github. You can also keep your page non-public and invite people to join/access your webpage.)

     Please upload the following to your Github webpage:

     (1) The complete and annotated codes for training and testing your neural network, your trained neural network model, your GUI, and any other codes/files needed to run your programs.

     (2) The dataset for training and testing your neural network and for running your GUI. If the dataset is too large, upload some sample data so that we can still test-run your codes including the GUI.

     (3) Instructions on how to use your codes and dataset.

     (4) A good (clear and sufficiently detailed) demo video that shows how to use your GUI, and what performance your neural network achieves. A deep learning project should usually have a great demo. So make your demo exciting, interesting and impressive.





Some optional topics:

Beside the deep learning topics you are already interested in, you may also be interested in the automatic selection and optimization of neural network architectures and hyper-parameters. That is, the automatic design of deep learning, which is an important field. An excellent website for it is Auto Keras, a fast growing toolset, which you can contribute to.

If you are interested in AutoKeras, please consider the following topics:

1. Implement a searcher from the NAS paper in the framework (DARTS (https://arxiv.org/abs/1806.09055), NAO (http://papers.nips.cc/paper/8007-neural-architecture-optimization), ENAS (https://arxiv.org/abs/1802.03268)). You can refer to this tutorial on how to implement a new searcher.

2. Implement a new task: video classification, audio classification, text generation, image generation, network data. (Students can propose more tasks.) Some datasets and examples on related tasks can be found on this page.

3. Implement a pretrained model: video segmentation, OCR. You need to extend the Pretrained class. Please refer to the existing pretrained models as examples.

4. Implement a predefined network: AlexNet, ResNet18, ResNet34, etc. To implement this you need to read the code of the Predefined class and extend it. You also need to implement a new generator extending the NetworkGenerator to generate an instance of Graph.

For the above topics (which the bonus points for "Android phone implementation" do not apply), here is the chance to receive bonus points (up to 10 points): resolve any code style and structure issue on Codacy (https://app.codacy.com/project/jhfjhfj1/autokeras/dashboard).

Please follow this contributing guide to write your code.

If there is any question about the above topics, please email Prof. Anxiao (Andrew) Jiang at ajiang@cse.tamu.edu.