Before the 2018 season, the excitement surrounding the San Francisco 49ers was sky-high.

Kyle Shanahan was entering his second season as the head coach of the team, and 49ers fans were anxious to see a full season with Jimmy Garoppolo as their quarterback. Unfortunately, a torn ACL for Garoppolo in Week 3 against the Kansas City Chiefs made that impossible to happen.

The life that the 49ers had before the injury was shattered and San Francisco struggled to gain their footing afterward. As a result, Shanahan was forced to start C.J. Beathard under center to replace Garoppolo. Beathard started in five games and failed to win any of the games he played in, prompting Shanahan to make the move to turn towards Nick Mullens, an undrafted rookie out of Southern Miss.

There was some life restored in the offense with Mullens on the field, as the 49ers won three games with him as the starter. He impressed individually, too, throwing for with 2,277 yards and 13 touchdowns in his eight starts.

Now, in 2019, Mullens will battle with Beathard to be the immediate backup to Garoppolo. Besides that, there are other difficult decisions to be made for the 49ers in training camp.

Here are three potential training camp roster cuts for the 49ers in 2019.

3. Greg Mabin

One of the deeper positions on the 49ers roster is the cornerback position. Currently, Richard Sherman, Ahkello Witherspoon, and Jason Verrett figure to be the Week 1 starters.

Behind them, K'Waun Williams will also likely have a role in the secondary after being the 49ers nickel cornerback for the past two seasons.  That leaves the back-end cornerback positions up for grabs for the rest of the corners.

Besides Greg Mabin, there are guys like D.J. Reed, Marcell Harris, Emmanuel Moseley, and Tim Harris competing for a roster spot. Mabin re-signed with the 49ers this offseason on a one-year, $645,000 contract.

Over the past two seasons, Mabin has spent the majority of his time on San Francisco's practice squad. Mabin is going to have to impress during training camp if he hopes to stick around for another year.

2. Jeff Wilson

Kyle Shanahan's offense is predicated on utilizing multiple running backs. One of the running backs who sparingly saw the field in 2018 is Jeff Wilson.

Wilson was an undrafted rookie in 2018 but managed to start in two games for the 49ers due to injuries. Over the entire season, Wilson rushed for 266 yards on 66 carries and added 12 catches.

This year, Wilson has an uphill battle of making the roster. In March, the 49ers signed Tevin Coleman to deepen their group of running backs. He joins a backfield that already features Jerick McKinnon and Matt Breida. With those three leading the pack, guys like Wilson, Raheem Mostert, and rookie Austin Walter are clawing to make the roster.

At this point, Wilson will need to carve himself a role on special teams to increase his chances of remaining with the 49ers moving forward.

1. Kendrick Bourne

Another position that isn't lacking in depth right now for the 49ers is wide receiver. Last season, San Francisco had injuries that caused them to rely on unproven guys in their offense.

Among those players, Kendrick Bourne was heaved into a starting role at wide receiver in 2018. Bourne started in eight games and flashed some potential in the offense in the process, catching 42 passes for 487 yards and four touchdowns. It might be hard for him to repeat those numbers in 2019, though, as he's competing for a roster spot in training camp.

As it currently stands, San Francisco's starters at receiver will be Dante Pettis, Marquise Goodwin, and Trent Taylor. Behind them are Bourne, Jordan Matthews, and rookies Deebo Samuel and Jalen Hurd. With the 49ers using early-round picks on Samuel and Hurd, it's likely the decision comes down to either Bourne or Matthews being released.

Bourne has a few more weeks to prove himself to be the choice between the two.